使用多个GPU(Tensorflow后端)运行keras LSTM模型
我有一个keras LSTM模型,希望在多个GPU下运行,以提高速度。但我有一些模棱两可的地方: 1-我发现要在GPU上真正获得高速,我应该使用CuDNNLSTM层而不是普通的LSTM层来定义我的网络。为了使用多个gpu,我研究并希望使用multi_gpu_model()函数来创建分布式模型。然而,在示例脚本中,他们建议在CPU上定义模型以便于权重共享,但我的CuDNNLSTM模型不可部署在CPU上,并且LSTM模型不会从GPU提供的增强中受益。正确的方法是什么 2-因此我尝试了许多配置,包括:使用多个GPU(Tensorflow后端)运行keras LSTM模型,keras,gpu,lstm,Keras,Gpu,Lstm,我有一个keras LSTM模型,希望在多个GPU下运行,以提高速度。但我有一些模棱两可的地方: 1-我发现要在GPU上真正获得高速,我应该使用CuDNNLSTM层而不是普通的LSTM层来定义我的网络。为了使用多个gpu,我研究并希望使用multi_gpu_model()函数来创建分布式模型。然而,在示例脚本中,他们建议在CPU上定义模型以便于权重共享,但我的CuDNNLSTM模型不可部署在CPU上,并且LSTM模型不会从GPU提供的增强中受益。正确的方法是什么 2-因此我尝试了许多配置,包括:
- 第1组(使用普通(非快速)LSTM层):将模型放置在CPU上,不复制到GPU;将模型放置在CPU上,然后使用多个gpu模型创建gpu副本;将模型放置在默认GPU上,不复制到其他GPU;将模型放置在默认GPU上,然后使用多GPU模型创建两个GPU副本
- 组2(使用CuDNNLSTM层,因此不可能在CPU上放置模型):定义单个模型(Tensorflow将其放置在默认GPU上);使用多gpu模型创建两个gpu副本
3-一般来说,当我在高水平的keras API上编程时,我是否应该只使用CuDNN类型的层来获得GPU的高速计算?这是一个非常好且实用的问题。我尝试了上面的选项2。简而言之,如果使用2个GPU,您不应该期望获得2倍的速度。在GPU之间移动数据,然后在每个历元聚合结果,会有一些开销。因此,当训练时间更依赖于反向计算时,多GPU可能是有意义的。我最终使用单GPU,因为我没有得到额外成本的速度提高。