Tensorflow - Keras,在 GPU 上的训练比在 CPU 上慢得多

时间:2021-04-11 12:42:10

标签: performance tensorflow keras gpu training-data

我试图找出在使用 GPU 运行时训练时性能缓慢的原因。

数据:11 个特征的参差不齐的张量。形状:(49724, None, 11).(Download dataset from Dropbox)
目标:每个样本结果有 3 个目标,范围在 0-1 之间。形状:(49724, 3).(Download targets from Dropbox)

该模型是一个 LSTM 网络,其输入层使用 ragged=True 属性。代码:

config = {
    'learning_rate': 0.001,
    'lstm_neurons':32,
    'lstm_activation':'tanh',
    'dropout_rate': 0.08,
    'batch_size': 128,
    'dense_layers':[
      {'neurons': 32, 'activation': 'relu'},
      {'neurons': 32, 'activation': 'relu'},
    ]
}

def get_model(num_features, output_size):
    opt = Adam(learning_rate=0.001)
    model = Sequential()
    model.add(Input(shape=[None,num_features], dtype=tf.float32, ragged=True))
    model.add(LSTM(config['lstm_neurons'], activation=config['lstm_activation']))
    model.add(BatchNormalization()) 
    if 'dropout_rate' in config:
      model.add(Dropout(config['dropout_rate']))

    for layer in config['dense_layers']:
      model.add(Dense(layer['neurons'], activation=layer['activation']))
      model.add(BatchNormalization()) 
      if 'dropout_rate' in layer:
        model.add(Dropout(layer['dropout_rate']))

    model.add(Dense(output_size, activation='sigmoid'))
    model.compile(loss='mse', optimizer=opt, metrics=['mse'])
    print(model.summary())
    return model

model = get_model(11 ,3)

我创建了 2 个 Google Colab 笔记本来演示该问题。一个是 GPU 运行时,另一个是 CPU 运行时。

GPU Colab
CPU Colab

GPU 运行时,1 个 epoch 需要 869s,而在 CPU 运行时需要 252s
我的问题是为什么,我能做些什么吗?

0 个答案:

没有答案