Google Colab TPU使用时间比GPU更长

4
以下是我使用的代码。我注释掉了将模型转换为TPU模型的那一行代码。对于相同数量的数据,使用GPU进行训练一个epoch需要7秒,而使用TPU则需要90秒。
    Inp = tf.keras.Input(name='input', shape=(input_dim,), dtype=tf.float32)
    x = tf.keras.layers.Dense(900, kernel_initializer='uniform',  activation='relu', input_dim=input_dim, name = 'Dense_01')(Inp)
    x = tf.keras.layers.Dropout(0.3, name = 'Dropout_02')(x)
    output = tf.keras.layers.Dense(stop_criteria, activation='softmax',name = 'Dense_02')(x)

    model = tf.keras.Model(inputs=[Inp], outputs=[output])
    opt = tf.train.AdamOptimizer(.001)
    model.compile(optimizer=opt, loss='categorical_crossentropy', metrics=['acc'])

    '''tpu_model = tf.contrib.tpu.keras_to_tpu_model(model,
                                                  strategy=tf.contrib.tpu.TPUDistributionStrategy(
                                                      tf.contrib.cluster_resolver.TPUClusterResolver(TPU_ADDRESS)))'''
    model.fit(X_tra, y_tra, epochs=5, batch_size=batch_size, shuffle=False,
              validation_split=0.1, verbose=2)

这是指向笔记本的链接。


你能分享一个可以重现减速的笔记本吗? - Bob Smith
@BobSmith 我更新了问题并提供了 Colab 笔记本的链接。 - mihirjoshi
1
你是否根据 https://cloud.google.com/tpu/docs/tpus#when_to_use_tpus 检查过你的脚本是否适用于 TPU 使用情况? - Jaroslav
@Jaroslav 我最终使用了GPU,因为我的数据集并不是很大。 - mihirjoshi
@mjosh 你是指 TPU 还是 GPU? - Jaroslav
1个回答

0
你尝试过像下面的例子中使用 tpu_model.fit_generator 方法吗? 另一部分看起来没问题。 还有一个问题可能是使用了Adam优化器。我记得有关于它的东西,但我忘了链接在哪里。尝试另一个优化器和下面的代码,如果不同的优化器有效,那么你就知道问题肯定与Adam优化器有关。
tf.keras.backend.clear_session()

training_model = lstm_model(seq_len=100, batch_size=128, stateful=False)

tpu_model = tf.contrib.tpu.keras_to_tpu_model(
    training_model,
    strategy=tf.contrib.tpu.TPUDistributionStrategy(
        tf.contrib.cluster_resolver.TPUClusterResolver(TPU_WORKER)))

tpu_model.fit_generator(
    training_generator(seq_len=100, batch_size=1024),
    steps_per_epoch=100,
    epochs=10,
)
tpu_model.save_weights('/tmp/bard.h5', overwrite=True)

我尝试了RMSPropOptimizer,但结果仍然相同。 - mihirjoshi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接