Tensorflow全局设置可见GPU编号操作


Posted in Python onJune 30, 2020

笔者需要tensorflow仅运行在一个GPU上(机器本身有多GPU),而且需要依据系统参数动态调节,故无法简单使用CUDA_VISIBLE_DEVICES。

一种方式是全局使用tf.device函数生成的域,但设备号需要在绘制Graph前指定,仍然不够灵活。

查阅文档发现config的GPUOptions中的visible_device_list可以定义GPU编号从visible到virtual的映射,即可以设置tensorflow可见的GPU device,从而全局设置了tensorflow可见的GPU编号。代码如下:

config = tf.ConfigProto()
config.gpu_options.visible_device_list = str(device_num)
sess = tf.Session(config=config)

参考 多卡服务器下隐藏部分 GPU 和 TensorFlow 的显存使用设置,还可以通过os包设置全局变量CUDA_VISIBLE_DEVICES,代码如下:

os.environ["CUDA_VISIBLE_DEVICES"] = "2"

补充知识:TensorFlow 设置程序可见GPU与逻辑分区

TensorFlow 设置程序可见GPU(多GPU情况)

import matplotlib as mpl
import matplotlib.pyplot as plt
%matplotlib inline
import numpy as np
import sklearn
import pandas as pd
import os
import sys
import time
import tensorflow as tf

from tensorflow_core.python.keras.api._v2 import keras

print(tf.__version__)
print(sys.version_info)
for module in mpl, np, pd, sklearn, tf, keras:
 print(module.__name__, module.__version__)

# 打印变量所在位置
tf.debugging.set_log_device_placement(True) 

# 获取物理GPU的个数
gpus = tf.config.experimental.list_physical_devices("GPU") 

if len(gpus) >= 1:
 # 设置第几个GPU 当前程序可见
 tf.config.experimental.set_visible_devices(gpus[0], "GPU")
 
print("物理GPU个数:", len(gpus))

# 获取逻辑GPU的个数
logical_gpus = tf.config.experimental.list_logical_devices("GPU") 
print("逻辑GPU个数:", len(logical_gpus))

TensorFlow 设置GPU的 逻辑分区

import matplotlib as mpl
import matplotlib.pyplot as plt
%matplotlib inline
import numpy as np
import sklearn
import pandas as pd
import os
import sys
import time
import tensorflow as tf

from tensorflow_core.python.keras.api._v2 import keras

print(tf.__version__)
print(sys.version_info)
for module in mpl, np, pd, sklearn, tf, keras:
 print(module.__name__, module.__version__)

# 打印变量所在位置
tf.debugging.set_log_device_placement(True) 

# 获取物理GPU的个数
gpus = tf.config.experimental.list_physical_devices("GPU") 

if len(gpus) >= 1:
 # 设置第几个GPU 当前程序可见
 tf.config.experimental.set_visible_devices(gpus[0], "GPU")
 
 # 设置GPU的 逻辑分区
 tf.config.experimental.set_virtual_device_configuration(
  gpus[0], 
  [tf.config.experimental.VirtualDeviceConfiguration(memory_limit=3072),
   tf.config.experimental.VirtualDeviceConfiguration(memory_limit=3072)])

print("物理GPU个数:", len(gpus))

# 获取逻辑GPU的个数
logical_gpus = tf.config.experimental.list_logical_devices("GPU") 
print("逻辑GPU个数:", len(logical_gpus))

TensorFlow 手动设置处理GPU

import matplotlib as mpl
import matplotlib.pyplot as plt
%matplotlib inline
import numpy as np
import sklearn
import pandas as pd
import os
import sys
import time
import tensorflow as tf

from tensorflow_core.python.keras.api._v2 import keras

print(tf.__version__)
print(sys.version_info)
for module in mpl, np, pd, sklearn, tf, keras:
 print(module.__name__, module.__version__)

# 打印变量所在位置
tf.debugging.set_log_device_placement(True) 

# 自动指定处理设备
tf.config.set_soft_device_placement(True)

# 获取物理GPU的个数
gpus = tf.config.experimental.list_physical_devices("GPU") 
for gpu in gpus:
 # 设置内存自增长方式
 tf.config.experimental.set_memory_growth(gpu, True) 
print("物理GPU个数:", len(gpus))

# 获取逻辑GPU的个数
logical_gpus = tf.config.experimental.list_logical_devices("GPU") 
print("逻辑GPU个数:", len(logical_gpus))

c = []

# 循环遍历当前逻辑GPU
for gpu in logical_gpus:
 print(gpu.name)

 # 手动设置处理GPU
 with tf.device(gpu.name):
  a = tf.constant([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])
  b = tf.constant([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]])
  
  # 矩阵相乘 并且添加至列表
  c.append(tf.matmul(a, b))

# 手动设置处理GPU
with tf.device("/GPU:0"):
 matmul_sum = tf.add_n(c)

print(matmul_sum)

以上这篇Tensorflow全局设置可见GPU编号操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python爬虫爬取美剧网站的实现代码
Sep 03 Python
浅谈编码,解码,乱码的问题
Dec 30 Python
PyQt5利用QPainter绘制各种图形的实例
Oct 19 Python
详解如何利用Cython为Python代码加速
Jan 27 Python
使用python实现快速搭建简易的FTP服务器
Sep 12 Python
Python编写合并字典并实现敏感目录的小脚本
Feb 26 Python
Python分支语句与循环语句应用实例分析
May 07 Python
numpy.linspace函数具体使用详解
May 27 Python
python global和nonlocal用法解析
Feb 03 Python
Python内置异常类型全面汇总
May 28 Python
利用PyTorch实现VGG16教程
Jun 24 Python
Python虚拟环境的创建和使用详解
Sep 07 Python
Python logging模块异步线程写日志实现过程解析
Jun 30 #Python
浅谈多卡服务器下隐藏部分 GPU 和 TensorFlow 的显存使用设置
Jun 30 #Python
Tensorflow中批量读取数据的案列分析及TFRecord文件的打包与读取
Jun 30 #Python
使用Tensorflow-GPU禁用GPU设置(CPU与GPU速度对比)
Jun 30 #Python
keras的backend 设置 tensorflow,theano操作
Jun 30 #Python
浅谈TensorFlow中读取图像数据的三种方式
Jun 30 #Python
python中 _、__、__xx__()区别及使用场景
Jun 30 #Python
You might like
搜索和替换文件或目录的一个好类--很实用
2006/10/09 PHP
GBK的页面输出JSON格式的php函数
2010/02/16 PHP
在WAMP环境下搭建ZendDebugger php调试工具的方法
2011/07/18 PHP
PHP中的随机性 你觉得自己幸运吗?
2016/01/22 PHP
php 实现一个字符串加密解密的函数实例代码
2016/11/01 PHP
拉动滚动条加载数据的jquery代码
2012/05/03 Javascript
jQuery当鼠标悬停时放大图片的效果实例
2013/07/03 Javascript
js 验证身份证信息有效性
2014/03/28 Javascript
js的参数有长度限制吗?发现不能超过2083个字符
2014/04/20 Javascript
javascript工厂方式定义对象
2014/12/26 Javascript
js实现右下角提示框的方法
2015/02/03 Javascript
JS实现CheckBox复选框全选全不选功能
2015/05/06 Javascript
jQuery右下角旋转环状菜单特效代码
2015/08/10 Javascript
全面解析Bootstrap表单使用方法(表单样式)
2015/11/24 Javascript
关于function类中定义变量this的简单说明
2016/05/28 Javascript
Javascript闭包与函数柯里化浅析
2016/06/22 Javascript
基于jQuery的ajax方法封装
2016/07/14 Javascript
微信小程序实现点击按钮修改文字大小功能【附demo源码下载】
2017/12/06 Javascript
Vue 页面跳转不用router-link的实现代码
2018/04/12 Javascript
Webpack4 使用Babel处理ES6语法的方法示例
2019/03/07 Javascript
[19:59]2014DOTA2国际邀请赛 IG战队纪录片
2014/08/07 DOTA
Python脚本实现虾米网签到功能
2016/04/12 Python
python3 爬取图片的实例代码
2018/11/06 Python
Python print不能立即打印的解决方式
2020/02/19 Python
HTML5的结构和语义(5):内嵌媒体
2008/10/17 HTML / CSS
HTML5中实现拖放效果无须借助javascript
2012/12/26 HTML / CSS
乌克兰在线电子产品商店:MTA
2019/11/14 全球购物
Sahajan美国:阿育吠陀护肤品牌
2021/01/09 全球购物
英国最大的天然和有机产品在线零售商之一:Big Green Smile
2020/05/06 全球购物
中秋节礼品促销方案
2014/02/02 职场文书
荆州古城导游词
2015/02/06 职场文书
庆七一晚会主持词
2015/06/30 职场文书
python使用glob检索文件的操作
2021/05/20 Python
MySQL的Query Cache图文详解
2021/07/01 MySQL
一文了解MYSQL三大范式和表约束
2022/04/03 MySQL
Oracle锁表解决方法的详细记录
2022/06/05 Oracle