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

Ben*_*ier 8 neural-network deep-learning tensorflow pytorch

我正在阅读Apex AMP 文档

仅 Python 构建省略:

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

似乎还有一个“FusedAdam”优化器

Pytorch 中的 Adam 优化器(与所有 Pytorch 优化器一样)通过循环参数来执行 optimizer.step(),并为每个参数启动一系列内核。这可能需要数百次小型启动,这些启动主要受 CPU 端 Python 循环和内核启动开销的限制,从而导致设备利用率低下。目前,Apex 中的 FusedAdam 实现将优化步骤的参数展平,然后通过结合所有 Adam 操作的融合内核执行优化步骤本身。通过这种方式,参数的循环以及每个参数的内部 Adam 操作系列都融合在一起,因此 optimizer.step() 只需要几次内核启动。

当前的实现(在 Apex master 中)很脆弱,只能与 Amp opt_level O2 一起使用。我有一个 WIP 分支,使其适用于任何 opt_level ( https://github.com/NVIDIA/apex/pull/351 )。我建议等到合并后再尝试。

这部分地解释了它。我还有更多问题:

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

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

ma3*_*oun 6

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

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