A05 · 第 6 章 · 第三编 训练工程与综合复习
调试、复现实验与工程方法综合复习
以可复算训练任务为主线,把优化器、调度、归一化、正则化与增强、混合精度、分布式、随机状态、数据版本、监控、故障恢复和独立评估组织成逐层可诊断流程。
报告页面错误本章目标
- 把数据、切分、模型、损失、优化、精度、批量、停止和评估写成冻结训练合同。
- 从小样本过拟合和 FP32 单设备基线逐层加入增强、混合精度与分布式。
- 联合监控损失、梯度范数、更新参数比、学习率、缩放器、激活和系统关键路径。
- 诊断显存、吞吐和收敛之间的权衡,不把更高样本每秒直接当成更好训练。
- 保存随机状态、数据版本和完整优化状态,在故障后区分精确续跑与暖启动。
- 以冻结检查点、多种子、分组指标和独立测试形成可复核结论。
本页目录
训练先从一份不可变合同开始
一次可复算训练要先冻结问题,不是先启动设备。合同至少包含:数据清单与内容摘要、实体和时间切分、标签与许可、输入变换、模型结构和初始化、损失及其归约分母、优化器与权重衰减、学习率调度单位、归一化、增强、微批量与全局批量、精度策略、分布式拓扑、最大样本或更新数、验证频率、早停、主指标和故障恢复政策。
配置应保存解析后的完整值,而不是只保存命令行覆盖项。默认参数、环境变量和代码分支都会改变运行;代码提交之外还要记录脏工作树补丁。数据版本包括原始对象摘要、清理与增强实现、类别映射和切分清单。测试标签保持隔离,所有调参、早停和校准只使用开发数据。
运行 ID 把合同、环境、随机状态、指标和制品绑定。失败运行也保留退出状态、最后有限损失和检查点,不能只保存成功冠军。复算目标要提前说明是逐位重放、数值容差内相近,还是多种子统计结论一致;三者需要不同证据。
示例任务含四十八万张训练图像和按来源实体隔离的验证、测试集。合同固定类别映射、训练期增强、验证期确定性变换、模型配置摘要、交叉熵按有效样本均值、优化器、调度按已处理样本数推进,以及三组预先指定种子。
每个进程微批量十六,四进程累计两步,名义全局批量为一百二十八;BatchNorm 仍只看本地微批十六,这一点单独记录。主指标是验证宏平均召回,模型大小和九十九分位推理延迟是门槛。测试只评价由验证规则选出的冻结检查点。
调试顺序要让新增变量一次只出现一层
最可靠的路径是从最小可证伪系统逐层扩展。先读取少量原始样本,核对标签、单位、掩码和变换;再关闭增强、dropout 和权重衰减,在 FP32 单设备上让固定小批量过拟合。若连几十个样本都不能把损失降到很低,应先查数据、损失、梯度和优化器,不能靠更多设备或更大模型掩盖。
小批量通过后,建立单设备完整数据 FP32 基线,保存训练与验证曲线。随后依次加入学习率调度、归一化方案、正则和增强、混合精度,最后才加入数据并行。每一步沿用相同数据与种子,记录差异;若一次同时更换优化器、批量、精度和设备数,失败时没有可定位对照。
梯度检查只在小模型和光滑点使用有限差分,深网日常则监控梯度是否存在、是否有限、范数、参数更新量和冻结层。输出形状正确不代表梯度路径相连,损失下降也不保证标签与样本配对正确。
十分类模型在固定三十二张图上关闭增强与正则,损失长期停在 。前面层梯度有限,最后分类层梯度也存在,但参数更新比为零。检查发现代码在创建优化器之后替换了分类层,新层参数从未进入优化器参数组。
重新构造优化器后,小批量损失迅速接近零,证明基本前向、标签和更新链可工作。这个测试不证明模型会泛化,却比直接调大学习率更准确地定位故障。修复需新运行 ID,不能覆盖原失败曲线。
优化器与调度共同决定实际更新
选择 SGD、动量或 Adam 不能脱离学习率、批量和正则。应记录梯度范数 、更新范数 及相对更新 。损失不降且更新比接近零,可能是学习率过小、参数被冻结、梯度下溢或重复平均;更新比突然放大则提示学习率、缩放或异常批量。
调度器按成功优化器更新、已处理样本或 token 推进,三种语义不可混用。梯度累积和溢出跳步会使微步数大于真实更新数;若调度器每个微步都衰减,学习率会过早变小。预热用于控制早期大更新,不是修复错误初始化或无穷梯度的通用补丁。
恢复时优化器矩、动量、调度位置和权重衰减语义必须一起恢复。只加载权重并沿用中途学习率,会在没有历史矩的情况下施加晚期小步长;把这种暖启动称为精确续跑会误导比较。
归一化把微批统计带入系统设计
BatchNorm 训练时使用当前批统计并更新运行均值方差,推理时使用保存状态。数据并行只同步梯度,不自动合并各进程批统计;全局批量一百二十八、每进程微批十六时,BatchNorm 仍按十六估计。梯度累积也不会把八个微批的激活合成一个批统计。
小微批导致统计噪声时,可增加本地批量、同步统计、冻结运行统计,或选择 LayerNorm、GroupNorm 等按其他轴归一化。同步归一化增加通信且实现语义需核对,并非免费修复。训练与验证差异还可能来自忘记切换推理模式、恢复遗漏运行统计或验证数据分布漂移。
单设备基线用批量六十四,BatchNorm 每步看到六十四个样本。扩展到八设备时,每设备八个样本,全局批量仍为六十四;all-reduce 后均值梯度可以与大批量接近,但每个归一化层只用八个样本估计均值方差,验证性能下降且运行方差在进程间不同。
先在同一检查点上关闭随机增强,比较单机与分布式前向,定位差异始于 BatchNorm。同步统计后性能恢复但步延迟增加;GroupNorm 也稳定但需重新验证最优学习率。正确结论是归一化轴改变了,不是“分布式梯度错误”。
正则与增强都需要可验证假设
权重衰减、dropout、随机深度和早停限制有效复杂度,但强度过大会造成欠拟合。权重衰减是否作用于偏置和归一化仿射参数应显式配置;自适应优化器中的解耦衰减与把 L2 加进损失不总等价。dropout 在推理时关闭,恢复与导出需验证模式。
增强假设变换后标签仍成立。水平翻转可适合某些自然图像,却可能颠倒文字或医学侧别;裁剪可能删掉决定标签的对象。增强只用于训练折,其随机状态可复算;验证和测试采用冻结变换,除非测试时集成已在协议中预先规定。通过消融比较无增强、单项增强和组合,避免把数据管线错误误当正则收益。
训练损失上升而验证改善可能是正常正则效应,训练与验证都恶化则可能欠拟合。比较时还要统一训练样本预算,因为更强增强可能需要更多更新才收敛。
监控应覆盖数值、优化、数据和系统四层
数值层记录原始损失、非有限激活与梯度、低精度零比例、损失缩放和跳步;优化层记录学习率、梯度裁剪前后范数、更新比、权重范数和优化器矩;数据层记录样本 ID、类别比例、无效样本、增强参数、吞吐与等待;系统层记录步延迟分位数、通信暴露、峰值显存、设备利用和检查点耗时。
训练与验证指标按真实有效样本加权,不能简单平均大小不同进程的均值。分类同时报告混淆矩阵和重要群组,概率任务检查校准。每条告警要能定位首次异常步骤和对应数据批;只存 epoch 平均会把瞬时溢出、数据坏样本和通信停顿抹平。
曲线应共享横轴语义。比较不同全局批量时,用已处理样本数和墙钟时间各画一份;只按 step 会让大批量看似收敛更慢或更快。吞吐优化最终以达到同一冻结验证目标的时间评判。
综合例题:显存、吞吐和收敛一起诊断
下面是一个教学用测量过程,数字只属于该任务和环境。模型有一亿参数,使用 Adam。仅 FP32 权重、梯度和两份矩状态约为 MB,尚未计激活和工作区。混合精度若另有 FP16 计算副本与 FP32 主权重,状态不一定更小;主要显存收益可能来自激活。
单设备 FP32、微批十六的基线峰值二十二 GB,吞吐每秒一百六十样本,并在处理一百二十万样本后达到目标验证损失。启用 FP16 后微批三十二、峰值十八 GB、吞吐二百七十,但第六百步出现 NaN。日志显示一个进程已产生无穷梯度,代码却只检查主进程,还在反缩放前按阈值一裁剪缩放梯度。修正为跨进程汇总非有限标志、失败时全员跳步并降低缩放,再对有限梯度反缩放和裁剪后,FP16 曲线在预定容差内匹配 FP32。
再扩展到四设备,每设备微批三十二,全局批量由十六变为一百二十八,吞吐升至每秒八百二十,但沿用原 step 调度后,同样两个 epoch 的验证损失更差。把调度横轴改为已处理样本,重新搜索批量对应学习率与预热,并检查每卡归一化统计后,模型在一百三十万样本达到目标。墙钟缩短但样本预算略增,最终报告同时给出峰值、吞吐、目标时间与多种子质量。
这个过程没有产生固定“混合精度加速倍数”或“四卡效率”。它用 FP32 单机作数值对照,逐层定位缩放顺序、全局批量和调度语义,才把系统收益与收敛收益分开。
常见失败按首次分歧定位
损失立即 NaN 时,依次检查输入和标签是否有限、前向首个非有限层、损失定义、反向首个非有限梯度、all-reduce 后状态和优化器矩。只降低学习率可能暂时遮住坏数据或缩放错误。损失停滞则先回到固定小批量,核对参数组、冻结标志、标签配对、梯度平均次数和更新比。
单机正常、分布式异常时,比较同一批样本的一步梯度摘要,检查 sum 与 mean、累计除数、重复样本、局部批量和 BatchNorm。吞吐低时把步时间拆成读取、前向、反向、通信和更新;设备利用低既可能是输入等待,也可能是过多小通信桶。训练继续改善而验证退化,则检查过拟合、切分泄漏、增强语义、训练推理模式和分布漂移。
每次诊断只改变一个假设,并保存失败复现最小配置。临时关闭非确定性、混合精度或分布式是定位工具,不代表最终方案必须放弃这些能力。
随机性、数据版本和多次复跑
随机源包括初始化、数据洗牌、工作器取样、增强、dropout、采样损失和并行算子。由主种子按运行、进程、工作器和用途派生子种子,避免所有进程复制同一随机流。保存随机生成器实际状态和数据游标,只有种子无法恢复到中途。
固定种子不能消除浮点归约与非确定性内核差异。调试可用确定性模式缩小问题;科研结论则用多个预先指定种子报告中心、离散和失败率。种子间波动不是数据抽样不确定度的全部,仍需独立测试单位和相称区间。
数据清单与代码同等重要。新增样本、标签修订或增强库变化都创建新版本;训练记录引用精确摘要。无法重建原数据时,只能复现代码路径,不能声称复现原实验结果。
故障恢复要区分续跑和暖启动
完整检查点保存模型与主权重、优化器矩、调度器、缩放器、归一化统计、指数滑动平均、全局更新、累计微步、每进程随机状态、采样器游标、最佳指标和清单。分布式分片全部校验后原子发布,保存点位于完整成功更新之后,简化一致性。
训练在更新三万保存,三万零五百时故障。方案甲只加载权重,把 Adam 矩清零且调度器回到初始学习率;恢复后更新比骤增,损失出现尖峰。方案乙恢复矩、晚期学习率、缩放器、随机状态和数据游标,从三万零一步继续,在确定性环境中复现原轨迹摘要。
若拓扑改变或算子无法确定,方案乙也可能只在数值容差内接近。报告应称其为统计续跑,并重新检查最终验证指标。方案甲可以作为迁移学习式暖启动,但必须新建运行并重新解释调度,不能接在原曲线上伪装无缝恢复。
评估把训练选择与最终证据分开
验证时切换推理模式,关闭训练增强和 dropout,使用正确归一化状态与冻结预处理。早停、超参数、校准和阈值都在验证数据选择;测试只评价一次冻结管线。分布式评价要去除采样器为整齐分片复制的样本,按实体合并重复预测,并使用正确分母。
最终报告包含多种子主指标与区间、分组和失败案例、训练样本与墙钟预算、峰值显存、吞吐、模型大小和推理延迟。消融一次只移除一个组件,并保持训练预算可比。若工程优化提高吞吐但降低最终质量,应报告权衡而不是只展示更高设备利用。
可复算包给出数据与代码摘要、完整配置、环境和硬件、运行清单、曲线、检查点、复现命令和已知非确定性边界。它让下一位执行者能定位第一处分歧,而不是只获得一个无法解释的最终权重文件。
练习
查看提示
查看解答
查看提示
查看解答
查看提示
查看解答
查看提示
查看解答
查看提示
查看解答
查看提示
查看解答
关系与资源
Deep Learning
Ian Goodfellow, Yoshua Bengio, Aaron Courville
适合作为反向传播和优化章节的完整参考。
打开官方来源《Deep Learning》用于核对深度网络优化、正则化和数值计算的基础口径。工程结论还依赖具体软件、数据和硬件,因而必须由版本化运行、分层监控、恢复演练和独立评估共同支撑。