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,使用正确归一化状态与冻结预处理。早停、超参数、校准和阈值都在验证数据选择;测试只评价一次冻结管线。分布式评价要去除采样器为整齐分片复制的样本,按实体合并重复预测,并使用正确分母。
最终报告包含多种子主指标与区间、分组和失败案例、训练样本与墙钟预算、峰值显存、吞吐、模型大小和推理延迟。消融一次只移除一个组件,并保持训练预算可比。若工程优化提高吞吐但降低最终质量,应报告权衡而不是只展示更高设备利用。
可复算包给出数据与代码摘要、完整配置、环境和硬件、运行清单、曲线、检查点、复现命令和已知非确定性边界。它让下一位执行者能定位第一处分歧,而不是只获得一个无法解释的最终权重文件。
练习
为什么一条启动命令不足以复算训练?
查看提示
查看解答
最后层有梯度但权重不变应先查什么?
查看提示
查看解答
全局批不变为何验证结果仍可能变化?
查看提示
查看解答
为何混合精度不保证模型状态减半?
查看提示
查看解答
训练出现 NaN 时怎样形成证据链?
查看提示
查看解答
只加载权重后为何不能沿用原曲线?
查看提示
查看解答
关系与资源
Deep Learning
Ian Goodfellow, Yoshua Bengio, Aaron Courville
适合作为反向传播和优化章节的完整参考。
打开官方来源《Deep Learning》用于核对深度网络优化、正则化和数值计算的基础口径。工程结论还依赖具体软件、数据和硬件,因而必须由版本化运行、分层监控、恢复演练和独立评估共同支撑。
Stanford CS229 Course Materials
Andrew Ng
用于核对经典机器学习模型的目标函数、推导和适用前提。
年份未在已核验来源中明确提供,登记为“暂无可核实信息”;未作推测性补写。打开官方来源Stanford CS229 材料在本章提供训练工程必须守住的数学基线:目标函数、梯度更新、正则化和独立验证集的定义决定一次运行应记录哪些量。工程监控中的损失、梯度范数和验证误差因此可以对应具体学习问题;若恢复训练后这些量偏离同一基线,就能定位为状态、数据或实现差异,而非笼统归因于“随机波动”。