TensorFlow中使用GPU
2024-10-19 14:30:06
TensorFlow默认会占用设备上所有的GPU以及每个GPU的所有显存;如果指定了某块GPU,也会默认一次性占用该GPU的所有显存。可以通过以下方式解决:
1 Python代码中设置环境变量,指定GPU
本文所有代码在tensorflow 1.12.0中测试通过。
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "2" # 指定只是用第三块GPU
2 系统环境变量中指定GPU
# 只使用第2块GPU,在demo_code.py,机器上的第二块GPU变成”/gpu:0“,不过在运行时所有的/gpu:0的运算将被放到第二块GPU上
CUDA_VISIBLE_DEVICES=1 python demo_code.py #只使用第一块GPU和第二块GPU
CUDA_VISIBLE_DEVICES=0,1 python demo_code.py
3 动态分配GPU显存
# allow_soft_placement=True 没有GPU的话在CPU上运行
config = tf.ConfigProto(allow_soft_placement=True, log_device_placement=True) config.gpu_options.allow_growth = True # 按需分配显存 with tf.Session(config=config) as sess:
sess.run(...)
4 按固定比例分配显存
# 按照固定的比例分配。
config = tf.ConfigProto(allow_soft_placement=True, log_device_placement=True)
# 以下代码会占用所有可使用的GPU的40%显存
config.gpu_options.per_process_gpu_memory_fraction = 0.4 with tf.Session(config=config) as sess:
sess.run(...)
在我的设备中设置后GPU占用情况如下:
gz_6237_gpu Sat Feb 15 23:01:56 2020 418.87.00
[0] GeForce RTX 2080 Ti | 43'C, 0 % | 4691 / 10989 MB | dc:python/1641(4681M)
5 通过tf.device将运算指定到特定设备上
with tf.device("/gpu:0"):
b = tf.Variable(tf.zeros([1]))
W = tf.Variable(tf.random_uniform([1, 2], -1.0, 1.0))
y = tf.matmul(W, x_data) + b
这种方式不推荐。TF的kernel中国定义了哪些操作可以跑在GPU上,哪些不可以,因此强制指定GPU会降低程序的可移植性。
推荐的做法是:在创建会话时,指定参数allow_soft_placement=True;这样如果运算无法在GPU上执行,TF会自动将它放在CPU上执行。
config = tf.ConfigProto(allow_soft_placement=True) with tf.Session(config=config) as sess:
sess.run(...)
最新文章
- SSRF篇-本着就了解安全本质的想法,尽可能的用通俗易懂的语言去解释安全漏洞问题
- 用 ROS 做内网DNS服务器
- 各种设备的CSS3 MediaQuery整理及爽歪歪写法
- C++之: CDib类
- C++ 与设计模式学习(其一)
- HDU 1076 An Easy Task
- Oracle中如何删除某个用户下的所有数据的方法
- 【C#】Get the html code of a webpage
- 个人理解---在开发中何时加入日志记录功能[java]
- 最详细的浏览器css hack
- element-ui中upload组件如何传递文件及其他参数
- Java 8新特性探究(五)Base64详解
- c/c++ 编译器提供的默认6个函数
- Centos 6\7下yum安装R
- SQL Server 2016新特性:列存储索引新特性
- jquery接触初级-----juqery DOM操作实例,动态图片显示
- 小知识:匿名类和lambda有什么区别?
- centos7下创建mysql5.6多实例
- jquery源码学习笔记(一)jQuery的无new构建
- python并发编程之多进程理论知识
热门文章
- Notepad++中安装json格式化插件
- schedule of 2016-10-24~2016-10-30(Monday~Sunday)——1st semester of 2nd Grade
- AcWing 213. 古代猪文 数学知识
- vue根据选择的月份动态展示当前月份的每一天并展示每一天所对应的星期几
- eclipse中使用postgreSQL报错( Cannot load JDBC driver class )
- VMware显示错误:“未能锁定文件 无法打开磁盘 ..\*.vmdk 或者某一个快照所依赖的磁盘。”解决办法
- ArcEngine语法笔记(VB)
- 从操作系统层面理解Linux下的网络IO模型
- GoCenter助力Golang全速前进
- C#实现EXCEL表格转DataTable