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查询mysql中文乱码问题
Nov 09 Python
给Python中的MySQLdb模块添加超时功能的教程
May 05 Python
python特性语法之遍历、公共方法、引用
Aug 08 Python
Python get获取页面cookie代码实例
Sep 12 Python
Python使用正则表达式分割字符串的实现方法
Jul 16 Python
利用python、tensorflow、opencv、pyqt5实现人脸实时签到系统
Sep 25 Python
如何分离django中的媒体、静态文件和网页
Nov 12 Python
python标识符命名规范原理解析
Jan 10 Python
Python 安装 virturalenv 虚拟环境的教程详解
Feb 21 Python
Python如何对XML 解析
Jun 28 Python
Python容器类型公共方法总结
Aug 19 Python
Python实现快速大文件比较代码解析
Sep 04 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
谈谈PHP中substr和substring的正确用法及相关参数的介绍
2015/12/16 PHP
php基于curl实现的股票信息查询类实例
2016/11/11 PHP
PHP 网站修改默认访问文件的nginx配置
2017/05/27 PHP
PHP序列化的四种实现方法与横向对比
2018/11/29 PHP
javascript 的Document属性和方法集合
2010/01/25 Javascript
JS 获取浏览器和屏幕宽高等信息的实现思路及代码
2013/07/31 Javascript
js动态创建、删除表格示例代码
2013/08/07 Javascript
jquery 自定义容器下雨效果可将下雨图标改为其他
2014/04/23 Javascript
基于jQuery插件实现环形图标菜单旋转切换特效
2015/05/15 Javascript
jQuery弹簧插件编写基础之“又见弹窗”
2015/12/11 Javascript
javascript 闭包详解及简单实例应用
2016/12/31 Javascript
NodeJS学习笔记之Module的简介
2017/03/24 NodeJs
Angularjs的$http异步删除数据详解及实例
2017/07/27 Javascript
Vue全局分页组件的实现代码
2018/08/10 Javascript
微信小程序dom操作的替代思路实例分析
2018/12/06 Javascript
jQuery实现提交表单时不提交隐藏div中input的方法
2019/10/08 jQuery
[01:25:09]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS DT第二场
2014/05/24 DOTA
[01:30]我们共输赢 完美世界城市挑战赛开启全新赛季
2019/04/19 DOTA
在Python中利用Pandas库处理大数据的简单介绍
2015/04/07 Python
Python学习小技巧之利用字典的默认行为
2017/05/20 Python
基于python socketserver框架全面解析
2017/09/21 Python
python3 判断列表是一个空列表的方法
2018/05/04 Python
对python中执行DOS命令的3种方法总结
2018/05/12 Python
python检测主机的连通性并记录到文件的实例
2018/06/21 Python
python3 自动识别usb连接状态,即对usb重连的判断方法
2019/07/03 Python
Python随机函数库random的使用方法详解
2019/08/21 Python
python关闭占用端口方式
2019/12/17 Python
Python读取yaml文件的详细教程
2020/07/21 Python
相亲活动方案
2014/08/26 职场文书
辞职信标准格式
2015/02/27 职场文书
环保建议书作文500字
2015/09/14 职场文书
班级班风口号大全
2015/12/25 职场文书
党员心得体会范文2016
2016/01/23 职场文书
《这片土地是神圣的》教学反思
2016/02/16 职场文书
聊聊golang中多个defer的执行顺序
2021/05/08 Golang
速龙x4-860k处理器相当于i几
2022/04/20 数码科技