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 相关文章推荐
50行代码实现贪吃蛇(具体思路及代码)
Apr 27 Python
Python异常学习笔记
Feb 03 Python
python随机生成指定长度密码的方法
Apr 04 Python
详解Python使用Plotly绘图工具,绘制甘特图
Apr 02 Python
如何用Python来理一理红楼梦里的那些关系
Aug 14 Python
Python Django 添加首页尾页上一页下一页代码实例
Aug 21 Python
GDAL 矢量属性数据修改方式(python)
Mar 10 Python
tensorflow模型转ncnn的操作方式
May 25 Python
Scrapy框架介绍之Puppeteer渲染的使用
Jun 19 Python
Django rest framework分页接口实现原理解析
Aug 21 Python
Keras保存模型并载入模型继续训练的实现
Feb 20 Python
python 下划线的多种应用场景总结
May 12 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实现二叉树深度优先遍历(前序、中序、后序)和广度优先遍历(层次)实例详解
2018/04/20 PHP
PHP论坛实现积分系统的思路代码详解
2020/06/01 PHP
Jquery+JSon 无刷新分页实现代码
2010/04/01 Javascript
jQuery 源码分析笔记(6) jQuery.data
2011/06/08 Javascript
如何获取select下拉框的值(option没有及有value属性)
2013/11/08 Javascript
js触发onchange事件的方法说明
2014/03/08 Javascript
javascript继承机制实例详解
2014/11/20 Javascript
jQuery制作简洁的图片轮播效果
2015/04/03 Javascript
实例讲解避免javascript冲突的方法
2016/01/03 Javascript
Angular2 Service实现简单音乐播放器服务
2017/02/24 Javascript
jQuery动态添加li标签并添加属性和绑定事件方法
2018/02/24 jQuery
Vuex的actions属性的具体使用
2019/04/14 Javascript
如何使用JavaScript实现栈与队列
2019/06/24 Javascript
使用zrender.js绘制体温单效果
2019/10/31 Javascript
微信小程序实现单个或多个倒计时功能
2020/11/01 Javascript
js实现简单的轮播图效果
2020/12/13 Javascript
jquery实现点击左右按钮切换图片
2021/01/27 jQuery
[01:10]3.19DOTA2发布会 三代刀塔人第一代
2014/03/25 DOTA
Python 在字符串中加入变量的实例讲解
2018/05/02 Python
Django后台获取前端post上传的文件方法
2018/05/28 Python
Python从文件中读取数据的方法讲解
2019/02/14 Python
Django使用rest_framework写出API
2020/05/21 Python
HTML5高仿微信聊天、微信聊天表情|对话框|编辑器功能
2018/04/23 HTML / CSS
Johnston & Murphy官网: 约翰斯顿·墨菲牛津总统鞋
2018/01/09 全球购物
荷兰天然和有机产品网上商城:BigGreenSmile.nl
2020/07/26 全球购物
OnePlus加拿大官网:中国国际化手机品牌
2020/10/13 全球购物
恒华伟业笔试面试题
2015/02/26 面试题
公务员培训心得体会
2013/12/28 职场文书
竞选宣传委员演讲稿
2014/05/24 职场文书
社区精神文明建设汇报材料
2014/08/17 职场文书
幼儿园教师培训心得体会
2016/01/21 职场文书
利用Python+OpenCV三步去除水印
2021/05/28 Python
MySQL 如何设计统计数据表
2021/06/15 MySQL
elementui的el-popover修改样式不生效的解决
2021/06/30 Javascript
我去timi了,一起去timi是什么意思?
2022/04/13 杂记
Android移动应用开发指南之六种布局详解
2022/09/23 Java/Android