深度学习中的融合内核(或融合层)是什么?

时间:2019-06-14 15:18:51

标签: tensorflow neural-network deep-learning pytorch

我正在阅读Apex AMP documentation

  

仅使用Python的版本忽略了

     
      
  • 使用apex.optimizers.FusedAdam所需的已融合内核。
  •   
  • 融合内核   需要使用apex.normalization.FusedLayerNorm。
  •   
  • 融合内核   提高性能和数值稳定性   apex.parallel.SyncBatchNorm。
  •   
  • 融合内核,可改善   apex.parallel.DistributedDataParallel和apex.amp的性能。   DistributedDataParallel,amp和SyncBatchNorm仍将可用,   但它们可能会更慢。
  •   

似乎还有一个"FusedAdam" optimizer

  

Pytorch中的Adam优化器(与所有Pytorch优化器一样)带有   通过遍历参数并启动一个   每个参数的一系列内核。这可能需要数百个   小型发布通常受CPU端Python循环和   内核启动开销,导致设备利用率低下。   目前,Apex中的FusedAdam实施使   优化步骤的参数,然后执行   通过融合所有Adam的融合内核进行优化步骤本身   操作。通过这种方式,循环遍历参数以及   内部系列的每个参数的Adam操作被融合,例如   该optimizer.step()只需要启动几个内核即可。

     

当前的实现(在Apex主版本中)比较脆弱,只能正常工作   使用Amp opt_level O2。我有一个WIP分支使它适用于任何   opt_level(https://github.com/NVIDIA/apex/pull/351)。我建议   等到合并后再尝试。

部分解释。我还有其他问题:

内核是什么意思?层还是优化器?

融合层的想法与融合优化器相同吗?

1 个答案:

答案 0 :(得分:2)

  • “内核”用于计算内核:https://en.wikipedia.org/wiki/Compute_kernel 诸如卷积之类的操作通常使用计算内核来实现,以提高效率。可以使用C,CUDA,OpenCL甚至汇编语言编写计算内核,以实现最高效率。因此,“仅Python的构建”不支持...

  • “融合”是指计算步骤的通用化。基本上,这是一种实现技巧,可以通过在单个硬件(GPU,CPU或TPU)操作中组合类似的操作来更有效地运行代码。因此,“ fusedLayer”是使操作受益于“融合”实现的一层。