将keras/tf/pytorch层分配给硬件类型



假设我们有以下架构:

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

我们现在想训练这个架构。我们的花哨的GPU在解决CNN层方面非常迅速。尽管使用较低的时钟率,但它可以并行执行许多卷积,从而速度。但是,对于(非常长的(产生的时间序列,我们的花式CPU更快,因为时间步骤无法平行,并且来自较高CPU时钟的处理利润。因此(据称(执行的聪明的想法看起来像:

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

这使我提出了两个重要问题:

有可能,标题中提到的任何框架,将某些层分配给某些硬件,以及如何?

如果可能的话,将用于其他内存操作的开销,例如gpu-/cpu-ram之间的tranfer,使整个想法毫无用处?

基本上,在Pytorch中,您可以控制变量/参数驻留的设备。afaik,您有责任确保每个操作都存在于同一设备上:即,您不能在 xconv(x, y)在gpu上,并且 y在cpu上。

这是通过Pytorch的.to()方法完成的,该方法移动模块/变量.to('cpu').to('cuda:0')

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

我认为您提到的开销会使性能最糟糕。无论如何,CUDA RNN的实施都受到了在GPU上运行极大的好处:)

最新更新