假设我们具有以下架构:
我们现在想训练这种架构。我们精美的GPU在解决CNN层方面非常快。尽管使用较低的时钟速率,但它可以并行执行许多卷积运算,因此可以提高速度。但是,我们花哨的CPU在(很长的)结果时间序列中速度更快,因为时间步不能并行化,并且更高的CPU时钟速率可带来处理优势。因此(应该是)执行的聪明主意看起来像这样:
这使我想到两个重要的问题:
使用标题中提到的任何框架,是否可以将某些层分布到某些硬件上?如何?
如果可能的话,其他内存操作的开销,例如在GPU- / CPU-RAM之间转移,使整个构想变得无用?
答案 0 :(得分:1)
基本上,在Pytorch中,您可以控制变量/参数所在的设备。 AFAIK,您有责任确保每个操作的所有参数都位于同一设备上:即,您不能conv(x, y)
,其中x
在GPU上,y
在CPU上。
这是通过pytorch的{{1}}方法完成的,该方法移动模块/变量.to()
或.to('cpu')
答案 1 :(得分:0)
正如Shai所述,您可以在pytorch中自己控制它,因此从理论上讲,您可以将模型的一部分放在不同的设备上。然后,您必须在前进通道中在设备之间移动数据。
我认为您提到的开销会使性能最差。反正cuda RNN实现得益于在gpu上运行:)