我使用一台装有2个Titan Black GPU的机器来训练我的深度学习模型,该模型有3层(3×3、3×3和5×5)。
训练运行得相当好,但当我使用nvidia-smi监控时(每秒监控一次),我发现我的程序只使用了一个GPU进行计算,第二个GPU的使用率始终为0%,即使第一个GPU已达到100%。
我尝试使用tf.device
为每个GPU分配特定的任务,但它们是依次运行的,而不是并行运行,总时间反而增加了,而不是减少了(我猜是因为两个GPU需要互相交换值)。
以下是我的程序。程序有些杂乱,可能你只需要关注我在使用tf.device的地方就足够了…
非常感谢!
(代码部分保持不变)
更新: 我发现cifar10_multi_gpu_train.py似乎是使用多GPU训练的一个好例子,但老实说我不知道如何应用到我的情况中。
回答:
我认为你需要将
def model(data): with tf.device('/gpu:1'):
改为:
def model(data): for d in ['/gpu:0', '/gpu:1']: with tf.device(d):
并删除with tf.device('/gpu:0'):
这行
因为在第一个with tf.device...
中,你只是在初始化变量,然后你用下一个with tf.device
重新设置了设备。
如果这样有效,请告诉我,因为我无法测试它。