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编写android截屏脚本双击运行即可
Jul 21 Python
python读取json文件并将数据插入到mongodb的方法
Mar 23 Python
python利用lxml读写xml格式的文件
Aug 10 Python
Python读取Json字典写入Excel表格的方法
Jan 03 Python
Python使用matplotlib填充图形指定区域代码示例
Jan 16 Python
Python使用pip安装pySerial串口通讯模块
Apr 20 Python
Python3使用PySynth制作音乐的方法
Sep 09 Python
Python3 A*寻路算法实现方式
Dec 24 Python
python opencv圆、椭圆与任意多边形的绘制实例详解
Feb 06 Python
Pycharm 设置默认解释器路径和编码格式的操作
Feb 05 Python
简述python四种分词工具,盘点哪个更好用?
Apr 13 Python
python数据处理之Pandas类型转换
Apr 28 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来处理多个提交任务
2006/10/09 PHP
php中的时间处理
2006/10/09 PHP
PHP+MySQL插入操作实例
2015/01/21 PHP
firefox浏览器下javascript 拖动层效果与原理分析代码
2007/12/04 Javascript
jquery 经典动画菜单效果代码
2010/01/26 Javascript
javascript 循环读取JSON数据的代码
2010/07/17 Javascript
js切换光标示例代码
2013/10/10 Javascript
用JavaScript实现类似于ListBox功能示例代码
2014/03/09 Javascript
javascript中解析四则运算表达式的算法和示例
2014/08/11 Javascript
jQuery支持动态参数将函数绑定到事件上的方法
2015/03/17 Javascript
浅析JavaScript动画
2015/06/10 Javascript
jQuery简单实现提交数据出现loading进度条的方法
2016/03/29 Javascript
必备的JS调试技巧汇总
2016/07/20 Javascript
AngularJS表格样式简单设置方法示例
2017/03/03 Javascript
BACKBONE.JS 简单入门范例
2017/10/17 Javascript
微信小程序实现验证码获取倒计时效果
2018/02/08 Javascript
小程序卡片切换效果组件wxCardSwiper的实现
2020/02/13 Javascript
Python中解析JSON并同时进行自定义编码处理实例
2015/02/08 Python
python实现根据窗口标题调用窗口的方法
2015/03/13 Python
Python中实现switch功能实例解析
2018/01/11 Python
Django1.9 加载通过ImageField上传的图片方法
2018/05/25 Python
PyCharm专业最新版2019.1安装步骤(含激活码)
2019/10/09 Python
安装PyInstaller失败问题解决
2019/12/14 Python
Django choices下拉列表绑定实例
2020/03/13 Python
Python实现爬取并分析电商评论
2020/06/19 Python
Python 多线程C段扫描、检测 Ping扫描脚本的实现
2020/09/03 Python
关于 HTML5 的七个传说小结
2012/04/12 HTML / CSS
英国健身仓库:Bodybuilding Warehouse
2019/03/06 全球购物
Clarks鞋澳大利亚官方网站:Clarks Australia
2019/12/25 全球购物
幼儿园教师的考核评语
2014/04/18 职场文书
省级青年文明号申报材料
2014/05/23 职场文书
应届毕业生求职信范文
2014/07/07 职场文书
发展党员工作情况汇报
2014/10/28 职场文书
忠诚与背叛观后感
2015/06/04 职场文书
Python实现信息轰炸工具(再也不怕说不过别人了)
2021/06/11 Python
oracle重置序列从0开始递增1
2022/02/28 Oracle