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将人民币转换大写的脚本代码
Feb 10 Python
全面解读Python Web开发框架Django
Jun 30 Python
Python中让MySQL查询结果返回字典类型的方法
Aug 22 Python
python中的多重继承实例讲解
Sep 28 Python
python中sys.argv参数用法实例分析
May 20 Python
python中解析json格式文件的方法示例
May 03 Python
Laravel+Dingo/Api 自定义响应的实现
Feb 17 Python
Python OpenCV 使用滑动条来调整函数参数的方法
Jul 08 Python
Django框架HttpRequest对象用法实例分析
Nov 01 Python
Python多线程多进程实例对比解析
Mar 12 Python
Python计算信息熵实例
Jun 18 Python
python实现银行账户系统
Feb 22 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_replace将指定两位置之间的字符替换为*号
2011/01/27 PHP
微信红包随机生成算法php版
2016/07/21 PHP
PHP插件PHPMailer发送邮件功能
2017/02/28 PHP
Laravel5.5 手动分页和自定义分页样式的简单实现
2019/10/15 PHP
Javascript & DHTML 实例编程(教程)基础知识
2007/06/02 Javascript
List all the Databases on a SQL Server
2007/06/21 Javascript
初学js插入节点appendChild insertBefore使用方法
2011/07/04 Javascript
javascript学习笔记(十八) 获得页面中的元素代码
2012/06/20 Javascript
原生JS可拖动弹窗效果实例代码
2013/11/09 Javascript
js二维数组定义和初始化的三种方法总结
2014/03/03 Javascript
原生js事件的添加和删除的封装
2014/07/01 Javascript
jQuery匹配文档链接并添加class的方法
2015/06/26 Javascript
使用CoffeeScrip优美方式编写javascript代码
2015/10/28 Javascript
jQuery+CSS3实现四种应用广泛的导航条制作实例详解
2016/09/17 Javascript
AngularJS+bootstrap实现动态选择商品功能示例
2017/05/17 Javascript
JS脚本加载后执行相应回调函数的操作方法
2018/02/28 Javascript
Node.js静态服务器的实现方法
2018/02/28 Javascript
layer.open关闭父窗口 以及调用父页面的方法
2018/08/17 Javascript
Python 通配符删除文件的实例
2018/04/24 Python
django的登录注册系统的示例代码
2018/05/14 Python
Python使用matplotlib绘制三维图形示例
2018/08/25 Python
创建Django项目图文实例详解
2019/06/06 Python
Python基础之字符串操作常用函数集合
2020/02/09 Python
解决Django no such table: django_session的问题
2020/04/07 Python
Jupyter Notebook 实现正常显示中文和负号
2020/04/24 Python
Python  word实现读取及导出代码解析
2020/07/09 Python
彼得罗夫美国官网:Peter Thomas Roth美国(青瓜面膜)
2017/11/05 全球购物
韩国美国时尚服装和美容在线全球市场:KOODING
2018/11/07 全球购物
Dogeared官网:在美国手工制作的珠宝
2019/08/24 全球购物
中文系师范生自荐信
2013/10/01 职场文书
函授教育个人学习的自我评价
2013/12/31 职场文书
晚归检讨书
2014/02/19 职场文书
小班开学寄语
2014/04/04 职场文书
2014领导干部学习焦裕禄同志先进事迹思想汇报
2014/09/19 职场文书
《艾尔登法环》发布最新「战技」宣传片
2022/04/03 其他游戏
MySQL GTID复制的具体使用
2022/05/20 MySQL