模型训练
模型训练把数据、模型结构和优化算法组合成可复现的参数更新过程。学习训练时不要只记住某个框架的命令,而应先理解一次更新如何发生,再逐步处理数据规模、并行方式、训练阶段和评测安全问题。
快速开始¶
建议在单卡和小数据集上先跑通以下闭环:加载 模型架构 -> 准备固定版本的数据 -> 前向计算 -> 计算 loss -> 反向传播 -> 更新参数 -> 保存检查点 -> 在独立验证集上评测。确认 loss、梯度、学习率和检查点都符合预期后,再进入多卡训练。
深度学习 解释 loss、反向传播、优化器、学习率、batch 和梯度累积,是后续所有训练阶段的前置知识。数据来源、清洗、去重、切分、Tokenizer 和分片见 数据管线。
训练阶段¶
| 阶段 | 目标 | 关键检查 |
|---|---|---|
| 预训练 | 从大规模语料学习通用语言和知识 | 数据配比、token 数、训练稳定性、验证损失 |
| 有监督微调 | 学习指令、格式和目标行为 | 模板、loss mask、示例质量、灾难性遗忘 |
| 强化学习 | 用偏好或可验证奖励优化回答与 Agent 轨迹 | 奖励可靠性、策略漂移、评测泄漏 |
| 蒸馏 | 迁移教师分布、序列或多领域专家能力 | 前缀来源、KL 方向、教师路由与部署收益 |
参数高效微调 中的 LoRA 与 QLoRA 改变可训练参数范围,可以用于 SFT、偏好优化或蒸馏;它们不是独立的数据阶段。选择训练方法时要说明它改变的是参数集合、数据来源、教师信号、奖励还是优化目标。
训练规模化¶
单卡无法容纳模型或无法满足训练吞吐时,再选择 分布式训练。DDP 复制模型并同步梯度;ZeRO 和 FSDP 切分参数、梯度或优化器状态;Tensor Parallel、Pipeline Parallel 和 Expert Parallel 则分别切分层内计算、层间计算和专家计算。实际作业往往组合多种并行方式,选择依据是显存、通信、负载均衡和故障恢复,而不是并行类型越多越好。
训练框架提供工程实现和性能优化。可以从 训练框架 了解 PyTorch、DeepSpeed、Megatron-LM、LLaMA-Factory、TRL、verl 和 slime 的定位;框架不能替代数据版本、配置版本和实验记录。
检查点与实验记录¶
可恢复检查点至少包含模型参数、优化器状态、学习率调度器、随机数状态、数据位置、Tokenizer 或模型配置和训练步数。保存时先写入临时路径,所有分片校验成功后再发布清单,避免故障产生“目录存在但无法恢复”的假检查点。
每次实验应记录代码版本、数据 manifest、模型配置、硬件、并行策略、随机种子、超参数、训练日志和评测结果。只记录最终 loss 不足以复现训练,也无法解释一次改动究竟改善了能力还是改变了数据分布。
评测与安全¶
训练中要保留训练前基线,并分别评测通用知识、STEM、数学、代码、推理、长上下文、多模态和 Agent 能力。安全评测不能由训练奖励替代;数据进入训练管线前还要检查隐私、版权、投毒和后门风险。完整评测见 模型评估,安全问题见 安全问题。
案例:从单卡扩展到多卡¶
先用小数据集确认单卡 loss 能下降,并固定一组验证样本。扩展到 DDP 后检查每个 rank 是否读取了不重复的数据、梯度同步是否生效、有效 batch 是否按预期变化;再逐步增加数据和序列长度。若吞吐没有随 GPU 数量提升,优先检查数据加载、通信和同步等待,而不是立即更换优化器。