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 相关文章推荐
Flask框架学习笔记(一)安装篇(windows安装与centos安装)
Jun 25 Python
python字典排序实例详解
May 20 Python
简单谈谈Python中的几种常见的数据类型
Feb 10 Python
Python实现解析Bit Torrent种子文件内容的方法
Aug 29 Python
python字典操作实例详解
Nov 16 Python
python 每天如何定时启动爬虫任务(实现方法分享)
May 21 Python
对web.py设置favicon.ico的方法详解
Dec 04 Python
python实现五子棋人机对战游戏
Mar 25 Python
python时间与Unix时间戳相互转换方法详解
Feb 13 Python
python输入一个水仙花数(三位数) 输出百位十位个位实例
May 03 Python
python3通过udp实现组播数据的发送和接收操作
May 05 Python
Django 如何实现文件上传下载
Apr 08 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
yii实现创建验证码实例解析
2014/07/31 PHP
Jquery uploadify图片上传插件无法上传的解决方法
2013/12/16 Javascript
jQuery设置与获取HTML,文本和值的简单实例
2014/02/26 Javascript
JavaScript实现多种排序算法
2016/02/24 Javascript
AngularJS 过滤器(自带和自建)详解
2016/09/19 Javascript
JavaScript实现格式化字符串函数String.format
2016/12/16 Javascript
JavaScript优化以及前段开发小技巧
2017/02/02 Javascript
JavaScript实现简单的树形菜单效果
2017/06/23 Javascript
js提取中文拼音首字母的封装工具类
2018/03/12 Javascript
Vue单页应用引用单独的样式文件的两种方式
2018/03/30 Javascript
vue 使用element-ui中的Notification自定义按钮并实现关闭功能及如何处理多个通知
2019/08/17 Javascript
小程序实现锚点滑动效果
2019/09/23 Javascript
vue.js实现三级菜单效果
2019/10/19 Javascript
原生js实现滑块区间组件
2021/01/20 Javascript
Nest.js环境变量配置与序列化详解
2021/02/21 Javascript
[01:03:03]VP vs Mineski 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
[46:55]完美世界DOTA2联赛决赛 FTD vs Phoenix 第三场 11.08
2020/11/11 DOTA
python类和函数中使用静态变量的方法
2015/05/09 Python
django之常用命令详解
2016/06/30 Python
Python+微信接口实现运维报警
2016/08/27 Python
python针对excel的操作技巧
2018/03/13 Python
Numpy掩码式数组详解
2018/04/17 Python
django项目搭建与Session使用详解
2018/10/10 Python
python图像处理入门(一)
2019/04/04 Python
CSS3的一个简单导航栏实现
2015/08/03 HTML / CSS
俄罗斯和世界各地的酒店预订:Hotels.com俄罗斯
2016/08/19 全球购物
美国男装连锁零售商:Men’s Wearhouse
2016/10/14 全球购物
韩国乐天网上商城:Lotte iMall
2021/02/03 全球购物
八年级数学教学反思
2014/01/31 职场文书
建材投资建议书
2014/05/16 职场文书
2014年巴西世界杯口号
2014/06/05 职场文书
会计个人实习计划书
2014/08/15 职场文书
在宿舍喝酒的检讨书
2014/09/28 职场文书
有关骆驼祥子的读书笔记
2015/06/26 职场文书
医学生自荐信范文(2016精选篇)
2016/01/28 职场文书
Python装饰器的练习题
2021/11/23 Python