我正在Keras上构建一个神经网络,包括多层LSTM,Permute和Dense。
似乎LSTM对GPU不友好。所以我做了研究和使用
With tf.device('/cpu:0'):
out = LSTM(cells)(inp)
但根据我对with
的理解,with
为try...finally
阻止以确保执行清理代码。我不知道以下CPU / GPU混合使用代码是否有效?他们会加快培训速度吗?
With tf.device('/cpu:0'):
out = LSTM(cells)(inp)
With tf.device('/gpu:0'):
out = Permute(some_shape)(out)
With tf.device('/cpu:0'):
out = LSTM(cells)(out)
With tf.device('/gpu:0'):
out = Dense(output_size)(out)
答案 0 :(得分:1)
正如您可能阅读here - tf.device
是一个上下文管理器,它将默认设备切换为在其创建的上下文(块)中作为其参数传递的内容。因此,此代码应运行'/cpu:0'
处的所有CPU
设备并停留在GPU
上。
问题是加速你的训练真的很难回答,因为它取决于你使用的机器 - 但我不希望计算更快,因为设备的每次更改都会使数据在{之间复制{1}}和机器GPU RAM
。这甚至会减慢你的计算速度。
答案 1 :(得分:0)
我使用2个LSTM和1个密集层创建了一个模型,并在我的GPU(NVidia GTX 10150Ti)中进行了训练。这是我的观察结果。
这是一些示例代码段
model = keras.Sequential()
model.add(keras.layers.cudnn_recurrent.CuDNNLSTM(neurons
, batch_input_shape=(nbatch_size, reshapedX.shape[1], reshapedX.shape[2])
, return_sequences=True
, stateful=True))