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 相关文章推荐
在GitHub Pages上使用Pelican搭建博客的教程
Apr 25 Python
在Python中操作列表之List.pop()方法的使用
May 21 Python
Python黑魔法Descriptor描述符的实例解析
Jun 02 Python
pandas 转换成行列表进行读取与Nan处理的方法
Oct 30 Python
python读取xlsx的方法
Dec 25 Python
对Python实现累加函数的方法详解
Jan 23 Python
python生成随机红包的实例写法
Sep 02 Python
python使用python-pptx删除ppt某页实例
Feb 14 Python
TensorBoard 计算图的查看方式
Feb 15 Python
如何使用python切换hosts文件
Apr 29 Python
Python列表如何更新值
May 27 Python
Python绘画好看的星空图
Mar 17 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
dede3.1分页文字采集过滤规则详说(图文教程)
2007/04/03 PHP
可以保证单词完整性的PHP英文字符串截取代码分享
2014/07/15 PHP
php文件包含目录配置open_basedir的使用与性能详解
2017/04/03 PHP
搜索附近的人PHP实现代码
2018/02/11 PHP
JavaScript Accessor实现说明
2010/12/06 Javascript
ASP中Sub和Function的区别说明
2020/08/30 Javascript
ajax的hide隐藏问题解决方法
2012/12/11 Javascript
js二级地域选择的实现方法
2013/06/17 Javascript
js实现身份证号码验证的简单实例
2014/02/19 Javascript
加随机数引入脚本不让浏览器读取缓存
2014/09/04 Javascript
关于数据与后端进行交流匹配(点亮星星)
2016/08/03 Javascript
JavaScript 限制文本框不可输入英文单双引号的方法
2016/12/20 Javascript
JavaScript 动态三角函数实例详解
2017/01/08 Javascript
详解angular中的作用域及继承
2017/05/31 Javascript
vue中如何实现pdf文件预览的方法
2018/07/12 Javascript
微信小程序入门之广告条实现方法示例
2018/12/05 Javascript
使用vue-router在Vue页面之间传递数据的方法
2019/07/15 Javascript
vue祖孙组件之间的数据传递案例
2020/12/07 Vue.js
Python中的jquery PyQuery库使用小结
2014/05/13 Python
python 安装virtualenv和virtualenvwrapper的方法
2017/01/13 Python
python区分不同数据类型的方法
2019/10/14 Python
Python浮点数四舍五入问题的分析与解决方法
2019/11/19 Python
Python3如何在Windows和Linux上打包
2020/02/25 Python
Keras中的多分类损失函数用法categorical_crossentropy
2020/06/11 Python
python 识别登录验证码图片功能的实现代码(完整代码)
2020/07/03 Python
Burberry英国官网:英国标志性奢侈品牌
2017/03/29 全球购物
枚举和一组预处理的#define有什么不同
2016/09/21 面试题
大学系主任推荐信范文
2013/12/24 职场文书
2014年司法所工作总结
2014/11/22 职场文书
大二学年个人总结
2015/03/03 职场文书
会计出纳岗位职责
2015/03/31 职场文书
小兵张嘎电影观后感
2015/06/03 职场文书
小学数学教师研修日志
2015/11/13 职场文书
初中班主任培训心得体会
2016/01/07 职场文书
《观察物体》教学反思
2016/02/17 职场文书
解析CSS 提取图片主题色功能(小技巧)
2021/05/12 HTML / CSS