原文地址:
https://blog.csdn.net/qq_21368481/article/details/81907244
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_21368481/article/details/81907244
————————————————
转载 注明:
突然想给自己的电脑上tensorflow环境下安装多独立显卡,网上搜索发现这篇文章,该篇文章主要是在windows环境下为tensorflow安装多个独立显卡。
本文逻辑:
windows环境下安装多个独立显卡,如果不使用sli技术,则Windows不识别多个独立显卡,但是使用sli技术,则不能指定单独显卡为tensorflow进行计算,因为指定单独显卡后slave显卡的显存占用会和master显卡的显存占用进行同步,也就是即使指定了一个显卡参与运算但是另一个显卡的显存会随之同步变化,本文作者提出一个方法解决这个问题:Windows环境下两显卡进行物理桥接后在软件上关闭桥接功能,便可实现Windows环境下双显卡识别及单显卡指定运算。
原文如下:
最近学习TensorFlow,被一些不是bug的问题折腾的头晕脑胀,借此写一下解决方法。本人是在win10下使用TensorFlow的,所以ubuntu下的绕行吧,不会出现这些问题。(此文有些地方我重新整理了一遍,放在了相约机器人公众号上,大家可以参见链接)
众所周知,TensorFlow在运行时,会抢占所有检测到的GPU的显存,这种做法褒贬不一吧,只能说,但怎么单独设置使用哪几块显卡呢,唯一的方法就是利用CUDA本身隐藏掉某些显卡(除此之外就是拔掉多余显卡了,大家应该不会傻到这么去做),有些教辅书或网上教程中写的以下方法都是治标不治本的:
(1)使用with.....device语句
例如
with tf.device("/gpu:1"):
这只是指定下面的程序在哪块GPU上执行,程序本身还是会占用所有GPU的资源(信不信由你)
(2)使用allow_growth=True或per_process_gpu_memory_fraction
例如
import tensorflow as tf
g = tf.placeholder(tf.int16)
h = tf.placeholder(tf.int16)
mul = tf.multiply(g,h)
gpu_options = tf.GPUOptions(allow_growth = True)
gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction = 0.7)
config = tf.ConfigProto(log_device_placement = True,allow_soft_placement = True,gpu_options = gpu_options)
with tf.Session(config=config) as sess:
print("相乘:%d" % sess.run(mul, feed_dict = {g:3,h:4}))
前者能够实现随着程序本身慢慢增加所占用的GPU的显存,但仍旧会占用所有GPU,如下: