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出现_warn_unsafe_extraction问题的方法
Mar 24 Python
Python中矩阵库Numpy基本操作详解
Nov 21 Python
django使用html模板减少代码代码解析
Dec 12 Python
Python退火算法在高次方程的应用
Jul 26 Python
Python多项式回归的实现方法
Mar 11 Python
Python 使用list和tuple+条件判断详解
Jul 30 Python
pytorch 模型可视化的例子
Aug 17 Python
使用Django搭建web服务器的例子(最最正确的方式)
Aug 29 Python
python模拟实现斗地主发牌
Jan 07 Python
python从内存地址上加载python对象过程详解
Jan 08 Python
Python自动化操作实现图例绘制
Jul 09 Python
全网非常详细的pytest配置文件
Jul 15 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
虹吸壶煮咖啡26个注意事项
2021/03/03 冲泡冲煮
Session的工作方式
2006/10/09 PHP
PHP入门经历和学习过程分享
2014/04/11 PHP
php实现微信发红包功能
2018/07/13 PHP
jquery插件制作 提示框插件实现代码
2012/08/17 Javascript
关于textarea提交的内容无法换行的解决办法
2013/04/09 Javascript
jQuery中$.each使用详解
2015/01/29 Javascript
你有必要知道的25个JavaScript面试题
2015/12/29 Javascript
JavaScript中的对象和原型(一)
2016/08/12 Javascript
详解如何构建Angular项目目录结构
2017/07/13 Javascript
详解如何优雅地在React项目中使用Redux
2017/12/28 Javascript
详解使用VUE搭建后台管理系统(vue-cli更新至3.0)
2018/08/22 Javascript
js实现上下左右键盘控制div移动
2020/01/16 Javascript
ReactRouter的实现方法
2021/01/25 Javascript
vue 项目@change多个参数传值多个事件的操作
2021/01/29 Vue.js
Python3.x和Python2.x的区别介绍
2013/02/12 Python
python模拟登录百度代码分享(获取百度贴吧等级)
2013/12/27 Python
Python Requests安装与简单运用
2016/04/07 Python
对Python 3.5拼接列表的新语法详解
2018/11/08 Python
Python+OpenCv制作证件图片生成器的操作方法
2019/08/21 Python
Django框架安装方法图文详解
2019/11/04 Python
python实现堆排序的实例讲解
2020/02/21 Python
使用Matplotlib绘制不同颜色的带箭头的线实例
2020/04/17 Python
Python 连接 MySQL 的几种方法
2020/09/09 Python
在IE6系列等老式浏览器中使用HTML5的新标签实现方案
2012/12/25 HTML / CSS
西班牙英格列斯百货英国官网:El Corte Inglés英国
2017/10/30 全球购物
COS美国官网:知名服装品牌
2019/04/08 全球购物
联强国际笔试题面试题
2013/07/10 面试题
物业公司采购员岗位职责
2013/12/31 职场文书
汽修专业自荐信
2014/07/07 职场文书
党委书记个人对照检查材料
2014/09/15 职场文书
群众路线教育实践活动自我剖析思想汇报
2014/10/04 职场文书
教师作风整改措施思想汇报
2014/10/12 职场文书
陕西导游词
2015/02/04 职场文书
股东大会通知
2015/04/24 职场文书
vue中this.$http.post()跨域和请求参数丢失的解决
2022/04/08 Vue.js