核对示例以及损失所代表的含义
先展示几个经过变换的输入及其目标。检查实际传给损失函数的分词、填充、掩码和标签。在生成任务中,输入中的某条指令可以存在,而不必与回答共同服务于同一个目标。对于分类任务,编号与类别之间对应错误可能让损失仍可计算,却在执行错误的训练任务。
隔离出一个极小的子集来验证机制,而不是用来宣称泛化能力。一个训练循环能否学会这些样本、产生有限值并还原正确的标识符?如果它失败了,租用更长时间并不能解决诊断问题。之后,用能避免泄漏的单元将训练集、验证集和测试集分开:根据你的项目,可以是对话、患者、源文档或时间段。
每个阶段都要通过一道检查关口
试运行必须贯穿训练活动的所有操作。第一步分配优化器状态时可能与其他步骤不同。对更长序列进行评估可能会产生最大的内存峰值。一次保存或导出也可能需要内存和时间。因此,不要仅凭加载权重就下结论。
为每个阶段保留一行记录,包含输入参数、内存计数、实测时长和结论。在 PyTorch 下,分配器分配的张量计数和预留内存计数是分开的;它们不能相加。用相同的测量限制记录每块 GPU。内存专题提供了基线、同步和绝对峰值的详细内容。
| 阶段 | 检查 | 如果检查失败 |
|---|---|---|
| 数据 | 标识符、目标、长度和掩码 | 修正数据集或变换 |
| 前向传播与损失 | 预期维度、有限的损失值 | 检查缩减后的批次和数值 |
| 反向传播 | 预期梯度、有限值 | 检查计算图、精度和归一化 |
| 更新 | 目标参数已修改、步骤已计数 | 检查优化器和梯度累积 |
| 验证集 | 评估模式、完整输出 | 将其设置与训练设置分开 |
| 恢复 | 进度和状态已恢复 | 在批量运行前修正 checkpoint |
技术来源: PyTorch — 计数与内存管理
按每次更新统计样本数
微批次在一次前向传播中处理。梯度累积会在一次更新前合并多次前向传播。在单 GPU 的示例中,每个微批次两个样本、累积八次,则每次完整更新对应十六个样本。在遍历 3 200 个样本一次且没有不完整批次的情况下,这相当于 200 次更新。这些计算并不能预测时长或质量。
固定更新次数并改变批次大小,可能会改变样本的遍历数量。固定轮数可能会改变更新次数。选择你的对比需要保持不变的那个量,并记录另一个量。在使用多份数据副本时,计数会包含其数量;模型并行不会自动增加有效批次大小。最终批次和长度不同的序列需要一致的归一化。
技术来源: PyTorch — 梯度累积与混合精度
在不丢失实验问题的前提下调整内存
如果试运行超出内存,找出问题所在的阶段和输入。减小微批次可以减少激活值;减小最大长度可能会删掉任务中不可或缺的一部分。梯度累积本身并不会释放权重或优化器状态。如果预期输出已经改变,就不要把截断后能跑通的案例说成是同一个实验。
激活值 checkpointing 保留较少的中间结果,并在反向传播期间重新计算它们。在你的训练循环中对比内存和时长。混合精度会为某些运算选择格式;梯度缩放设置及其更新时机必须与有效批次大小相匹配。将这些改动记录为变体,并验证它们是否保持了质量目标。
示例:比较三个学习率
准备一个 0.0001 的对照组,以及两个用于说明的变体:0.00005 和 0.0002。这些数值不是对您模型的推荐,而是用来撰写方案。在这个简化案例中,保持架构、数据、有效 batch 和 200 次更新预算不变。在试验前就要确定验证频率和停止条件。
保留损失曲线、验证点以及分析所需的预测结果。如果某个变体发散,它的曲线仍保留在总结中。用其他 batch 重新发起的运行会获得新的标识符,不会静默地取代失败那次。如果质量差距很小,多种子方法会说明如何比较多次试验,而不是只保留最好的一次。
恢复训练,然后复查输出
权重检查点可以支持某些推理用途;恢复训练还必须找回相关状态和进度。PyTorch 指南特别区分了模型和优化器。在新的进程中尽早测试恢复,带上循环所需的各项要素,然后检查步数、学习率和数据的连续性。
收尾时,重新加载用于评估的产物,并重放一些对照输入。归档模型或适配器、配置、修订版本、原始指标和操作说明。不要仅仅为了查看内容就加载来源不明的文件:请使用您清楚其出处、并符合您环境反序列化规则的产物。
技术来源: PyTorch — 权重与恢复检查点
从试运行过渡到合适的租用方案
您的选型表汇总了每块 GPU 的显存、最大维度、精度、microbatch、累积、分片策略和预期结果。显存足够的配置只有在核对软件栈之后才会被采纳。下单时选择 PyTorch 偏好描述的是期望的准备环境;它并不保证您的模型或其全部扩展都能运行。
接着把优先变体安排进 3 天、7 天或 30 天的套餐中,同时留出评估和导出的时间。任何时长都不限定某种训练类型。记录本可以保存您录入的决策和观察,而您的备份保存文件。一次成功的实验活动应产出一个可复读的结论,即使最终对照组仍是最佳选择。
实际问题
我能只用前向传播来估算资源吗?
不能:一次训练活动还必须覆盖反向传播、更新、验证和保存。峰值可能出现在另一个阶段,或出现在更长的输入上。
相同的有效 batch 能保证相同的结果吗?
不能。计数相同并不能保证相同的数值运算、批次统计或训练轨迹。请用所选方案检查实现、归一化和质量。
为什么要保留一次发散的训练?
它标示出该配置的极限,并且已经消耗了资源。它的标识符、停止原因和参数可以避免重复同样的试验,也避免只展示有利的结果。