Keras中的5层DNN使用GPU

时间:2018-03-06 19:12:42

标签: tensorflow deep-learning keras

我在Keras 1.2中使用tensorflow-gpu作为后端编写了一个5层密集网络,并在我的MacBookPro(CPU)和AWS中的P2.xlarge实例(K80-cuda enabled)中训练它。令人惊讶的是,我的MacBookPro比P2实例更快地训练模型。我已经检查过使用P2中的GPU训练模型,所以我想知道......为什么它运行得慢?

这是网络:

model = Sequential()
model.add(Dense(250, input_dim=input_dim, init='normal', activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(130, init='normal', activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(50, init='normal', activation='relu'))
model.add(Dropout(0.1))
model.add(Dense(10, init='normal', activation='relu'))
model.add(Dropout(0.1))
model.add(Dense(1, init='normal'))
model.compile(loss='mean_squared_error', optimizer='adam', metrics=[metrics.mae])
model.fit(x=X, y=Y, batch_size=batch, nb_epoch=epochs, shuffle=True, validation_data=(X_test, Y_test), verbose=2))

谢谢,

亚历。

1 个答案:

答案 0 :(得分:2)

我遇到类似的小网络问题 - 并发现挂钟时间主要是由于CPU和GPU之间的CPU计算和数据传输,特别是数据传输时间大于所见的增益从GPU计算而不是CPU。

如果没有要测试的数据,我的假设是,类似地,您的网络太小,无法推动GPU的真正功能,而且您看到GPU使用更长的培训时间的原因是您的网络需要更多时间在GPU和CPU之间传输数据,而不是通过在GPU上进行计算而获得的性能提升。

您是否尝试过一个明显更大的网络?