我在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))
谢谢,
亚历。
答案 0 :(得分:2)
我遇到类似的小网络问题 - 并发现挂钟时间主要是由于CPU和GPU之间的CPU计算和数据传输,特别是数据传输时间大于所见的增益从GPU计算而不是CPU。
如果没有要测试的数据,我的假设是,类似地,您的网络太小,无法推动GPU的真正功能,而且您看到GPU使用更长的培训时间的原因是您的网络需要更多时间在GPU和CPU之间传输数据,而不是通过在GPU上进行计算而获得的性能提升。
您是否尝试过一个明显更大的网络?