Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用多个GPU(Tensorflow后端)运行keras LSTM模型_Keras_Gpu_Lstm - Fatal编程技术网

使用多个GPU(Tensorflow后端)运行keras LSTM模型

使用多个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-因此我尝试了许多配置,包括:

我有一个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副本

在所有情况下,数据并行性(使用多gpu模型)都会导致执行速度降低。我没有改变代码和输入数据管道或批处理大小中的任何其他内容。我怎么了


3-一般来说,当我在高水平的keras API上编程时,我是否应该只使用CuDNN类型的层来获得GPU的高速计算?

这是一个非常好且实用的问题。我尝试了上面的选项2。简而言之,如果使用2个GPU,您不应该期望获得2倍的速度。在GPU之间移动数据,然后在每个历元聚合结果,会有一些开销。因此,当训练时间更依赖于反向计算时,多GPU可能是有意义的。我最终使用单GPU,因为我没有得到额外成本的速度提高。