Mixed Precision Training
Mixed Precision Training - 中文验证版
英文原文卡片:mixed_precision_2017.md
状态:已翻译。
元数据
- Slug:
mixed_precision_2017 - 年份: 2017
- 会议: ICLR
- 作者: Paulius Micikevicius et al.
- 阅读状态: read complete
- 计算范式: 多 GPU 密集训练
- 主要来源: PDF、抽取文本
计算设置
论文明确陈述了所使用的 GPU 代际。基线 FP32 实验在 NVIDIA Maxwell 或 Pascal GPU 上进行。混合精度实验在 Volta V100 上进行,使用 Tensor Core 操作以 FP16 输入相乘、FP32 累加,用于卷积、全连接层和循环矩阵乘。部分语音识别实验在 Maxwell GPU 上仅使用 FP16 存储,以在非 Volta 硬件上模拟 Tensor Core 行为。
该方法在 CNN、检测模型、语音识别、翻译、语言建模和 GAN 上评估。若干运行在当时规模较大:英文 DeepSpeech 2 模型约有 115M 参数,在 6,000 小时语音上训练;中文模型约有 215M 参数,在 2,600 小时上训练;bigLSTM 语言模型使用两层 8192 单元 LSTM,带 1024 投影、793K 词表、8K 负样本的采样 softmax,以及跨 4 块 GPU 聚合的 batch size 1024。
瓶颈
瓶颈是密集训练中内存和算术的组合成本。论文将程序速度表述为受算术带宽、内存带宽或延迟限制。FP32 训练以 32 位值存储权重、激活和梯度;对大型网络,保存的激活主导训练内存,因为它们必须在反向传播中重用。传输两倍字节数也增加了内存带宽压力。
FP16 解决存储和 Tensor Core 吞吐一侧,但制造了数值瓶颈。FP16 的动态范围比 FP32 窄。梯度可能下溢为零,权重更新在加到远大于自身的权重时可能消失,规约可能丢失重要的小值。因此计算问题不是简单的"用半精度训练",而是将每种精度放置到硬件和优化器可以容忍的位置。
方法适配
该配方有三个主要面向设备的适配。第一,权重、激活和梯度在前向和后向传播中以 FP16 存储,将这些张量的存储和带宽大致减半。第二,优化器维护权重的 FP32 主副本,将更新应用于该副本,然后舍入回 FP16 用于前向/后向计算。这防止小更新在它们太小而无法影响 FP16 权重时丢失。
第三,损失缩放将梯度移入 FP16 可表示范围。论文展示了具有许多小值的 SSD 激活梯度,并解释在反向传播前缩放损失按相同因子缩放所有梯度;梯度在裁剪或更新前按比例缩回,因此超参数保持不变。对 SSD,缩放因子 8 足够;对 bigLSTM 语言模型,因子 128 恢复基线行为。
算术也被选择性放置。向量点积使用 FP16 乘和 FP32 累加,匹配 Volta Tensor Core 能力。大型规约,尤其是批归一化统计量和 softmax,在 FP32 中执行,同时仍读写 FP16 张量。论文指出这些层受内存带宽限制且对算术速度不非常敏感,因此此处 FP32 算术不会消除主要收益。
证据
内存声明是直接的:FP16 前向/后向存储大致将训练内存减半,即使添加了 FP32 主权重,因为激活占主导。论文还陈述近期 GPU 中 FP16 数学吞吐比 FP32 高 2x 到 8x,Volta 上的 DeepBench 操作在受内存或算术带宽限制时显示 2x-6x 加速。受延迟限制的操作收益较小。
ImageNet 分类显示精度保留,使用相同超参数。报告的 ILSVRC12 top-1 准确率为:AlexNet 56.77% FP32 对 56.93% 混合精度;VGG-D 65.40 对 65.43;GoogLeNet 68.33 对 68.43;Inception v2 70.03 对 70.02;Inception v3 73.85 对 74.13;ResNet-50 75.92 对 76.04。这些 CNN 分类运行不需要损失缩放。
检测展示了为何损失缩放重要。Faster R-CNN 基线 69.1% mAP,无缩放的混合精度为 68.6%,有缩放 69.7%。Multibox SSD 基线 76.9%,无损失缩放发散,有缩放达到 77.1%。这是最清晰的证据,表明仅 FP16 存储不够鲁棒:保留小梯度对某些工作负载是必要的。
语音和语言进一步对方法施压。英文语音模型从 CER 2.20 改善至 1.99,中文在伪 FP16 中从 15.82 改善至 15.01。使用 3 层和 5 层 1024 单元 LSTM 的机器翻译在有损失缩放时匹配 FP32,无缩放时轻微退化。bigLSTM 语言模型无损失缩放在 300K 迭代后发散,但在 scale 128 下匹配 FP32。
历史影响
本文确立了自动混合精度背后的实用配方:FP16 张量用于吞吐和内存、FP32 主权重和规约用于优化稳定性,以及损失缩放用于下溢。其历史重要性在于它将 Volta Tensor Cores 从硬件特性转化为跨越视觉、语音和语言工作负载的通用训练方法。
局限
加速取决于 kernel 和瓶颈类型。受延迟限制的操作受益不大,全网络收益取决于框架/库支持。部分模型需要损失缩放,静态缩放因子可能需要监控溢出。混合精度减少内存和数学成本,但本身不解决分布式通信、输入管线限制或极大模型的优化器状态内存。
链接
- 所属计算范式:compute spine
- 方法索引:mixed_precision
- Ledger 更新:compute bottlenecks