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 相关文章推荐
pyqt4教程之messagebox使用示例分享
Mar 07 Python
关于你不想知道的所有Python3 unicode特性
Nov 28 Python
Python实现批量转换文件编码的方法
Jul 28 Python
Python使用itertools模块实现排列组合功能示例
Jul 02 Python
Python线性拟合实现函数与用法示例
Dec 13 Python
Python 硬币兑换问题
Jul 29 Python
Python基本语法之运算符功能与用法详解
Oct 22 Python
Python imread、newaxis用法详解
Nov 04 Python
基于TensorBoard中graph模块图结构分析
Feb 15 Python
python将字典内容写入json文件的实例代码
Aug 12 Python
Pytest测试框架基本使用方法详解
Nov 25 Python
python - timeit 时间模块
Apr 06 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 UTF-8、Unicode和BOM问题
2010/05/18 PHP
php中的字符编码转换函数用法示例
2014/10/20 PHP
Laravel 4.2 中队列服务(queue)使用感受
2014/10/30 PHP
php采用curl实现伪造IP来源的方法
2014/11/21 PHP
thinkphp 框架数据库切换实现方法分析
2020/05/18 PHP
浅谈JS闭包中的循环绑定处理程序
2014/11/09 Javascript
JS实现超简单的汉字转拼音功能示例
2016/12/22 Javascript
vue2 中如何实现动态表单增删改查实例
2017/06/09 Javascript
angular4中关于表单的校验示例
2017/10/16 Javascript
除Console.log()外更多的Javascript调试命令
2018/01/24 Javascript
jQuery实现列表的增加和删除功能
2018/06/14 jQuery
在vue中使用echars实现上浮与下钻效果
2019/11/08 Javascript
小程序中设置缓存过期的实现方法
2020/01/14 Javascript
微信小程序实现打卡签到页面
2020/09/21 Javascript
[47:03]完美世界DOTA2联赛PWL S3 Galaxy Racer vs Phoenix 第二场 12.10
2020/12/13 DOTA
Python2.x和3.x下maketrans与translate函数使用上的不同
2015/04/13 Python
python的staticmethod与classmethod实现实例代码
2018/02/11 Python
Flask入门之上传文件到服务器的方法示例
2018/07/18 Python
python生成大写32位uuid代码
2020/03/03 Python
Python猴子补丁Monkey Patch用法实例解析
2020/03/23 Python
python安装后的目录在哪里
2020/06/21 Python
Python中读取文件名中的数字的实例详解
2020/12/25 Python
详解CSS的border边框属性及其在CSS3中的新特性
2016/05/10 HTML / CSS
New Era英国官网:美国棒球帽品牌
2018/03/21 全球购物
GoDaddy英国:全球排名第一的域名注册商
2018/06/08 全球购物
汽车运用工程毕业生自荐信
2013/10/29 职场文书
硕士生工作推荐信
2014/03/07 职场文书
大四优秀党员个人民主评议
2014/09/19 职场文书
湖南省党的群众路线教育实践活动总结会议新闻稿
2014/10/21 职场文书
初三学生语文考试作弊检讨书
2014/12/14 职场文书
小班教师个人总结
2015/02/05 职场文书
党小组意见范文
2015/06/08 职场文书
2016大学生社会实践单位评语
2015/12/01 职场文书
如何才能写好调研报告?
2019/07/03 职场文书
详解nginx.conf 中 root 目录设置问题
2021/04/01 Servers
一条慢SQL语句引发的改造之路
2022/03/16 MySQL