我有2台GPU机器可与ID 2和3一起使用,并希望全部使用它们来适应模型。这是我的代码,
os.environ['CUDA_VISIBLE_DEVICES'] = '2, 3'
使用tf,device('/ gpu:2'):
critic_model.fit(x,y,epochs =10)
使用tf.device('/ gpu:3'):
history = model.fit(x,y,epochs=19)
但是,当我检查nvidia-smi时,发现仅使用了机器2,我想知道为什么吗?
任何想法都可能有帮助!
答案 0 :(得分:1)
这里有多个问题:
例如,Tensorflow具有“自己的” GPU编号,独立于您计算机上的ID。因此,当您传递CUDA_VISIBLE_DEVICES=2,3
时,Tensorflow将看到这两个GPU,但在程序中它们分别是'/gpu:0'
和'/gpu:1'
。由于'/gpu:2'
和'/gpu:3'
都不存在,我怀疑所有操作都只是放在'/gpu:0'
或CPU上。
但是,主要问题在于,这根本不是您使用with tf.device
的方式。您需要将模型创建包装到上下文管理器中。即所有的op调用(例如tf.nn.conv2d
,tf.matmul
等)都需要包装。在您致电model.fit
时,操作已经创建(默认情况下放到'/gpu:0'
上),并且您的with tf.device
语句不执行任何操作。