如何在训练深度网络时有效使用多GPU?

我使用一台装有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重新设置了设备。

如果这样有效,请告诉我,因为我无法测试它。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注