[英]Mixture usage of CPU and GPU in Keras
我正在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)
您可能会在这里 tf.device
是一个上下文管理器,它将默认设备切换为其在其创建的上下文(块)中作为其参数传递的设备。 因此,此代码应在CPU
上运行所有'/cpu:0'
设备,并在GPU
。
能否提高训练速度的问题真的很难回答,因为这取决于您使用的机器-但是我不希望计算速度会更快,因为每次设备更改都会在GPU RAM
和机器RAM
之间复制数据。 这甚至可能减慢您的计算速度。
我使用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))
TojoHere的答案之一需要被投票! 这个技巧使我的LSTM培训速度提高了近10倍。 非常感谢!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.