深度学习进阶文档深度页
自动混合精度 AMP
AMP 为适合操作选择低精度,并用 GradScaler 缓解 float16 梯度下溢。
学习目标
- 解释核心机制
- 手算一个主要形状或公式
- 运行完整示例并排查错误
为什么需要这个概念
自动混合精度 AMP是该文档中连接数据表示、训练目标和工程实现的核心主题。
- 掌握自动混合精度 AMP的输入输出与训练边界
- 能够用 PyTorch 代码验证公式和形状
学习前需要掌握
PyTorch Tensor内容待补充神经网络训练循环
背景与问题
自动混合精度 AMP是该文档中连接数据表示、训练目标和工程实现的核心主题。
概念定义
AMP 为适合操作选择低精度,并用 GradScaler 缓解 float16 梯度下溢。
直观理解
把自动混合精度 AMP理解为数据在模型中的一套明确变换,而不是只记一个类名。
核心原理
它可能省显存和提速,但效果依赖硬件,异常时应关闭定位。
实现时必须同时检查 shape、dtype、mask 或模式切换,并用验证集而不是测试集选择配置。
数学表达
核心公式
自动混合精度 AMP的核心数学表达。
变量含义
Nbatch sizeD/H特征或隐藏维度
计算步骤
- 1按公式或模块逐步计算
- 2核对输出 shape
代码对应位置
示例 1自动混合精度 AMP · PyTorch 示例:验证自动混合精度 AMP的输入、计算和输出。
变量解释
| 变量 | 含义 |
|---|---|
N | batch size |
D/H | 特征或隐藏维度 |
完整数值示例
自动混合精度 AMP数值/形状检查
已知条件
- N=8
- D=64
- 1
按公式或模块逐步计算
- 2
核对输出 shape
输出保持 batch 维并符合任务头约定
处理前后对比
计算与实现步骤
- 1
确认输入与目标
- 2
建立最小模块
- 3
随机张量前向
- 4
计算损失
- 5
反向与更新
- 6
验证与错误分析
代码实现
示例 1
自动混合精度 AMP · PyTorch 示例
自动混合精度 AMP · PyTorch 示例
PyTorch
example_01.py用途:验证自动混合精度 AMP的输入、计算和输出。
use_amp=device.type=='cuda'
scaler=torch.amp.GradScaler('cuda',enabled=use_amp)
with torch.amp.autocast('cuda',enabled=use_amp):loss=criterion(model(x),y)
scaler.scale(loss).backward();scaler.step(optimizer);scaler.update()代码解析
解析始终位于完整代码下方,并按实际代码段逐项对应。
输入数据与任务
验证自动混合精度 AMP的输入、计算和输出。
y- 目标标签或连续目标值。
model- 组合预处理和估计器的模型对象。
scaler- 保存训练集缩放参数的转换器。
loss- 当前预测与目标之间的损失值。
Step 1 · 1–4 行
计算损失对参数的梯度,对应数学表达中的 ∇J;梯度只给出局部变化方向。
use_amp=device.type=='cuda'
scaler=torch.amp.GradScaler('cuda',enabled=use_amp)
with torch.amp.autocast('cuda',enabled=use_amp):loss=criterion(model(x),y)
scaler.scale(loss).backward();scaler.step(optimizer);scaler.update()代码与数学原理
平方误差代码对应均方损失。
预期输出或运行结果
打印与页面说明一致的张量形状或损失。
常见错误 · 3 条
- 整个模型强制 float16
- 裁剪前不 unscale
- NaN 不关闭 AMP 定位
实际应用
- 自动混合精度 AMP
- 教学与项目基线
常见错误
整个模型强制 float16
裁剪前不 unscale
NaN 不关闭 AMP 定位
文档来源
25_训练工程实践_GPU混合精度复现与检查点原始文档
学习资料/deeplearning/25_训练工程实践_GPU混合精度复现与检查点.md- §7 AMP
- §8 裁剪
常见问题
自动混合精度 AMP最先检查什么?
先检查输入输出 shape、dtype 和数据边界。
何时使用测试集?
全部设计锁定后最终评估。
推荐学习资料
暂未收录相关资料
参考库不会生成虚假资源或无效外部链接。