将Keras / TF / PyTorch层分配给硬件类型

时间:2019-08-02 09:18:43

标签: tensorflow keras deep-learning pytorch

假设我们具有以下架构:

  1. 多个CNN层
  2. RNN层
  3. (按时间分布)密集分类层

我们现在想训练这种架构。我们精美的GPU在解决CNN层方面非常快。尽管使用较低的时钟速率,但它可以并行执行许多卷积运算,因此可以提高速度。但是,我们花哨的CPU在(很长的)结果时间序列中速度更快,因为时间步不能并行化,并且更高的CPU时钟速率可带来处理优势。因此(应该是)执行的聪明主意看起来像这样:

  1. 多个CNN层(在GPU上运行)
  2. RNN层(在CPU上运行)
  3. (按时间分布)密集分类层(在GPU / CPU上运行)

这使我想到两个重要的问题:

使用标题中提到的任何框架,是否可以将某些层分布到某些硬件上?如何?

如果可能的话,其他内存操作的开销,例如在GPU- / CPU-RAM之间转移,使整个构想变得无用?

2 个答案:

答案 0 :(得分:1)

基本上,在Pytorch中,您可以控制变量/参数所在的设备。 AFAIK,您有责任确保每个操作的所有参数都位于同一设备上:即,您不能conv(x, y),其中x在GPU上,y在CPU上。

这是通过pytorch的{​​{1}}方法完成的,该方法移动模块/变量.to().to('cpu')

答案 1 :(得分:0)

正如Shai所述,您可以在pytorch中自己控制它,因此从理论上讲,您可以将模型的一部分放在不同的设备上。然后,您必须在前进通道中在设备之间移动数据。

我认为您提到的开销会使性能最差。反正cuda RNN实现得益于在gpu上运行:)