在GPU上训练RNN-我应该使用哪个tf.keras层?

时间:2019-08-05 14:27:12

标签: python tensorflow keras tf.keras

我正在训练使用tf.keras.layers.GRU层构建的RNN。他们需要很长时间来训练(> 2个小时),所以我将把它们部署到GPU上进行训练。我想知道关于GPU训练的一些事情:

  1. tf.keras.layers.CuDNNGRUtf.keras.layers.GRU(还有tf.keras.layers.LSTMtf.keras.layers.CuDNNLSTM之间有什么区别?我从this post了解到,CuDNNGRU层的训练速度比GRU层快,但是
    • 在相同的种子下,两层会收敛到不同的结果吗?
    • 两层在推理过程中是否表现相同?
    • 推理过程中CuDNN层是否需要GPU?
    • GRU层可以在GPU上运行推理吗?
    • CuDNN层是否易于部署?我目前正在使用coremlconverter将我的keras模型转换为CoreML进行部署。
  2. tf.keras.layers.SimpleRNN(即tf.keras.layers.CuDNNSimpleRNN)是否有等效的CuDNN层?我尚未致力于特定的体系结构,因此,我认为如果我决定使用SimpleRNN,并且CuDNN层具有我需要的某些功能,那么我将需要tf.keras.layers.CuDNNSimpleRNN层。
  3. CuDNN层上,我是否需要安装tensorflow-gpu?还是只要我安装了相关的驱动程序,它们是否仍会部署到GPU?

1 个答案:

答案 0 :(得分:0)

如果您使用的是与cuda兼容的GPU,则使用CuDNN图层绝对有意义。它们具有不同的实现,试图克服RNN体系结构中固有的计算并行化问题。尽管它们通常表现较差,但速度要快3到6倍https://twitter.com/fchollet/status/918170264608817152?lang=en

  

在相同的种子下,两层会收敛到不同的结果吗?

  

两层在推理过程中是否表现相同?

您应该具有可比的性能,但不一定完全相同

  

CuDNN层在推理期间是否需要GPU?

是的,但是您可以转换为CuDNN兼容的GRU / LSTM

  

GRU层可以在GPU上运行推理吗?

  

对于CuDNN层,我是否需要安装tensorflow-gpu?还是只要我安装了相关的驱动程序,它们是否仍会部署到GPU?

是的,您需要兼容cuda的GPU