用于 ML 研究的 GPU · 无需 KYC 的加密货币支付
IteraGPU
用途 / 训练

先跑通一个完整步骤,再谈上千次试验。

在开始训练之前,先让一个完整的循环跑起来:读取数据、前向传播、损失、反向传播、更新、验证和恢复。根据有效阶段的峰值选择 GPU,再根据实验计划确定时长。成功加载或损失下降,既不能证明完整负载的容量够用,也不能证明模型在新样本上的质量。

01 /

核对示例以及损失所代表的含义

先展示几个经过变换的输入及其目标。检查实际传给损失函数的分词、填充、掩码和标签。在生成任务中,输入中的某条指令可以存在,而不必与回答共同服务于同一个目标。对于分类任务,编号与类别之间对应错误可能让损失仍可计算,却在执行错误的训练任务。

隔离出一个极小的子集来验证机制,而不是用来宣称泛化能力。一个训练循环能否学会这些样本、产生有限值并还原正确的标识符?如果它失败了,租用更长时间并不能解决诊断问题。之后,用能避免泄漏的单元将训练集、验证集和测试集分开:根据你的项目,可以是对话、患者、源文档或时间段。

02 /

每个阶段都要通过一道检查关口

试运行必须贯穿训练活动的所有操作。第一步分配优化器状态时可能与其他步骤不同。对更长序列进行评估可能会产生最大的内存峰值。一次保存或导出也可能需要内存和时间。因此,不要仅凭加载权重就下结论。

为每个阶段保留一行记录,包含输入参数、内存计数、实测时长和结论。在 PyTorch 下,分配器分配的张量计数和预留内存计数是分开的;它们不能相加。用相同的测量限制记录每块 GPU。内存专题提供了基线、同步和绝对峰值的详细内容。

训练试运行 — 需要执行的检查,不含预填测量值
阶段检查如果检查失败
数据标识符、目标、长度和掩码修正数据集或变换
前向传播与损失预期维度、有限的损失值检查缩减后的批次和数值
反向传播预期梯度、有限值检查计算图、精度和归一化
更新目标参数已修改、步骤已计数检查优化器和梯度累积
验证集评估模式、完整输出将其设置与训练设置分开
恢复进度和状态已恢复在批量运行前修正 checkpoint

技术来源: PyTorch — 计数与内存管理

03 /

按每次更新统计样本数

微批次在一次前向传播中处理。梯度累积会在一次更新前合并多次前向传播。在单 GPU 的示例中,每个微批次两个样本、累积八次,则每次完整更新对应十六个样本。在遍历 3 200 个样本一次且没有不完整批次的情况下,这相当于 200 次更新。这些计算并不能预测时长或质量。

固定更新次数并改变批次大小,可能会改变样本的遍历数量。固定轮数可能会改变更新次数。选择你的对比需要保持不变的那个量,并记录另一个量。在使用多份数据副本时,计数会包含其数量;模型并行不会自动增加有效批次大小。最终批次和长度不同的序列需要一致的归一化。

技术来源: PyTorch — 梯度累积与混合精度

04 /

在不丢失实验问题的前提下调整内存

如果试运行超出内存,找出问题所在的阶段和输入。减小微批次可以减少激活值;减小最大长度可能会删掉任务中不可或缺的一部分。梯度累积本身并不会释放权重或优化器状态。如果预期输出已经改变,就不要把截断后能跑通的案例说成是同一个实验。

激活值 checkpointing 保留较少的中间结果,并在反向传播期间重新计算它们。在你的训练循环中对比内存和时长。混合精度会为某些运算选择格式;梯度缩放设置及其更新时机必须与有效批次大小相匹配。将这些改动记录为变体,并验证它们是否保持了质量目标。

技术来源: PyTorch — 激活值 checkpointing · PyTorch — AMP 规则

05 /

示例:比较三个学习率

准备一个 0.0001 的对照组,以及两个用于说明的变体:0.00005 和 0.0002。这些数值不是对您模型的推荐,而是用来撰写方案。在这个简化案例中,保持架构、数据、有效 batch 和 200 次更新预算不变。在试验前就要确定验证频率和停止条件。

保留损失曲线、验证点以及分析所需的预测结果。如果某个变体发散,它的曲线仍保留在总结中。用其他 batch 重新发起的运行会获得新的标识符,不会静默地取代失败那次。如果质量差距很小,多种子方法会说明如何比较多次试验,而不是只保留最好的一次。

06 /

恢复训练,然后复查输出

权重检查点可以支持某些推理用途;恢复训练还必须找回相关状态和进度。PyTorch 指南特别区分了模型和优化器。在新的进程中尽早测试恢复,带上循环所需的各项要素,然后检查步数、学习率和数据的连续性。

收尾时,重新加载用于评估的产物,并重放一些对照输入。归档模型或适配器、配置、修订版本、原始指标和操作说明。不要仅仅为了查看内容就加载来源不明的文件:请使用您清楚其出处、并符合您环境反序列化规则的产物。

技术来源: PyTorch — 权重与恢复检查点

07 /

从试运行过渡到合适的租用方案

您的选型表汇总了每块 GPU 的显存、最大维度、精度、microbatch、累积、分片策略和预期结果。显存足够的配置只有在核对软件栈之后才会被采纳。下单时选择 PyTorch 偏好描述的是期望的准备环境;它并不保证您的模型或其全部扩展都能运行。

接着把优先变体安排进 3 天、7 天或 30 天的套餐中,同时留出评估和导出的时间。任何时长都不限定某种训练类型。记录本可以保存您录入的决策和观察,而您的备份保存文件。一次成功的实验活动应产出一个可复读的结论,即使最终对照组仍是最佳选择。

实际问题

我能只用前向传播来估算资源吗?

不能:一次训练活动还必须覆盖反向传播、更新、验证和保存。峰值可能出现在另一个阶段,或出现在更长的输入上。

相同的有效 batch 能保证相同的结果吗?

不能。计数相同并不能保证相同的数值运算、批次统计或训练轨迹。请用所选方案检查实现、归一化和质量。

为什么要保留一次发散的训练?

它标示出该配置的极限,并且已经消耗了资源。它的标识符、停止原因和参数可以避免重复同样的试验,也避免只展示有利的结果。