资讯动态

大模型训练全流程解析:从数据清洗到对齐部署

发布时间:2026/10/19 11:25:04 来源:尧图企业网站定制
1. 训练大模型到底在解决什么问题我经常被问到这样一个问题一个能写代码、能写诗、能陪你深夜聊天的AI模型到底是怎么被“炼”出来的这个问题听起来很大但拆开来看核心其实就一句话——让一个神经网络学会“预测下一个词”。你可能会觉得这个说法过于简单。一个会写高考作文的模型怎么可能只是在猜下一个字但事实就是如此。大模型的底层训练目标几乎都是“自回归语言建模”给定前面所有的文本让模型预测下一个词的概率分布。当它见过几百亿个“前面是什么、后面跟什么”的样本之后一个惊人的现象出现了——为了预测下一个词模型被迫学会了语法、逻辑、事实知识、甚至某种程度的推理能力。就像一个人为了猜中一部电视剧的下一集剧情不得不去理解人物关系、剧情走向和世界观设定。这背后有一个非常反直觉的结论智能并不是被设计出来的而是被“逼”出来的。我们并没有手动教模型什么叫“因果推理”什么叫“类比”这些能力都是在海量文本的预测任务中作为副产品涌现的。这也是为什么大模型训练的工程量如此庞大——你本质上是在用数据和算力“饲养”一个极其庞大的参数系统让它自己长出能力来。搞清楚了这个底层逻辑下面所有问题都好理解了为什么需要海量数据因为预测任务需要足够多的样本覆盖语言的多样性和世界的复杂性。为什么需要几千张显卡因为模型的参数量动辄百亿千亿每算一步都要做巨量的矩阵乘法。大模型训练的难度不是在某一单独环节而是数据、算力、算法、工程四件事必须同时到位缺一个都可能整体崩盘。这篇文章会从头到尾讲一遍大模型训练的完整链路数据准备、预训练、监督微调、人类对齐、稳定性排查再到部署前的评估。我会尽量把每一个环节“为什么这么做”讲透而不是只丢一堆概念。适合刚接触大模型训练、准备上手做训练实验的工程师也适合想搞清楚“大模型是怎么炼成的”这个问题背后原理的产品经理和研究者。2. 数据工程一切模型的起点也是绝大多数项目的“隐形杀手”大模型的训练成本大头永远在数据准备上。很多人以为训练模型是“算力昂贵”实际上真正消耗团队时间的是数据清洗和整理。一个几百TB的文本数据集从采集到最终能送进训练管道中间每一步都可能出问题。2.1 数据从哪来远不止“爬网页”这么简单公开的预训练数据一般来自几个渠道网页抓取、开源语料库、电子书、学术论文、代码仓库、社交媒体文本。但直接抓下来的数据没法用原因很直接——网页里充斥着导航栏、广告、评论区、重复文本这些噪声会严重干扰模型学习。一个常用的清洗流程是去重用MinHash或者SimHash做近似去重。同一篇新闻被多个网站转载如果不去重模型会反复“背”同一段话导致记忆过拟合。语言过滤用语言识别工具筛掉低质量或非目标语言的页面。做中文模型的时候这一步尤其重要因为中文互联网的网页质量方差极大。质量打分用一个简单的分类器很多团队直接用基于规则的打分器给页面质量打分。信号包括文本长度、标点符号密度、是否包含标题结构、是否出现“404”“页面不存在”等。隐私过滤删除包含身份证、手机号、邮箱等个人信息的文本——这一步不仅是合规要求也是防止模型在生成时“背出”真实用户信息。我在实际项目中踩过一个大坑有一次训练的中文模型总是会在生成到某个话题时突然插入一段与上下文无关的“广告文案”。排查了很久发现是清洗流程里漏了广告模板过滤有些网页正文旁边抓到了大量重复的推广段落。数据集里的脏数据不会让训练直接失败但会以各种诡异的方式出现在生成结果里而且越到后期越难查。2.2 数据配比决定模型“口味”的关键配方把清洗干净的数据按“多少token”混在一起这个比例直接决定模型最终更像“什么人”。常见的配比维度包括中文vs英文、自然语言vs代码、百科vs论坛、长文本vs短文本。这里有一个原则模型需要的数据配比跟人类学习的逻辑很像。如果你想让模型逻辑推理能力强就要多放代码和数学数据你想让模型“人情味”足就需要多放小说、对话、论坛帖子。代码数据的占比通常要高到让人惊讶——很多团队在中文预训练里也会放15%-20%的代码数据因为代码的语法结构高度严谨能显著提升模型的逻辑推理能力。数据配比这件事没有标准答案完全取决于目标场景。我见过一个团队做垂直领域模型把专业书籍数据配比拉到40%结果模型在专业问答上表现很好但日常对话能力明显下降——本质上是用“通识能力”换了“专业能力”。没有免费午餐数据配比就是一场权衡。2.3 训练中期要不要“加料”很多团队会做两阶段训练先用大规模通用数据做“通识预训练”再用高质量精选数据做“增强预训练”。第二阶段的数据量通常是第一阶段的5%-10%但能明显提升模型在特定方向上的能力。这个操作类似运动员先做体能训练再做技巧专项训练——体能是基础技巧决定了上限。需要注意第二阶段的数据不能跟第一阶段“相差太远”。如果第一阶段全是通用网页文本第二阶段突然换成纯数学题模型可能会出现“灾难性遗忘”把之前学到的通识知识部分丢失。解决方法是在“加料”阶段仍然混入一部分原始通用数据以一定比例混合着喂而不是完全切换。3. 预训练大模型的“大学四年”数据准备好之后真正的训练就开始了。这个过程在概念上并不复杂把文本切成长度为几千个token的序列每次喂一个batch让模型根据前文预测下一个词计算损失反传更新参数。但工程上的挑战在于这个看似简单的循环要重复几十万步每步都要在数千张GPU上同步执行。3.1 超参数配置那些能毁掉一次训练的“小数字”预训练里最敏感的超参数是学习率。大模型训练通常用“warmup 余弦衰减”的学习率策略先在前几千步把学习率从几乎为0线性升到峰值比如3e-4然后再按余弦曲线慢慢降到接近0。为什么要warmup因为训练刚开始时模型的参数是随机初始化的梯度方向非常不稳定如果一开始就用大学习率很容易把参数“冲”到损失函数的某个坏区域后面怎么救都救不回来。批次大小batch size同样关键。大模型训练中batch size通常很大动辄上百万token。理论上batch size越大梯度估计越稳定训练收敛速度越快但太大的batch size会超出GPU显存而且需要配合更高的学习率才能充分发挥作用。这里有一个经验公式当batch size翻倍时学习率可以尝试增加到原来的1.4倍左右——实际测试时可以从这个基准出发微调。序列长度也需要设计。早期训练先用较短的序列比如2048 token训练到后半段再切换到更长序列8192甚至更长这样能大幅提升训练吞吐。原因在于短序列在相同显存下能装更多样本GPU利用率更高后期切换长序列是为了让模型学会处理长文依赖。3.2 损失函数和优化器为什么要用AdamW几乎所有主流大模型都用AdamW优化器Adam with Weight Decay。Adam的优势在于它为每个参数单独维护自适应学习率能高效处理稀疏梯度和不平滑的损失曲面。Weight Decay则是给参数加了一个“衰减项”相当于对模型复杂度施加了正则约束防止过拟合。损失函数这块大模型预训练用的就是交叉熵损失。但有一个细节很多实现会给“第一个token”的预测损失单独做权重调整。因为序列开头往往缺少上下文预测难度大如果一视同仁模型会花大量精力学习“开天窗预测”这对整体能力提升没有帮助。3.3 损失曲线怎么看哪些信号是正常的哪些是灾难预训练过程中的loss曲线新手看容易慌。我在训练早期模型时就经历过loss“稳步下降但时不时跳一下”的情况。正常的loss下降趋势是前几千步快速下降然后进入漫长的“高原期”每过几万步才有肉眼可见的下降。到了一定阶段loss曲线会基本走平——这不一定是坏事可能只是学习率已经衰减到了一个很低的水平模型在小幅精调。需要高度警惕的是两种情况Loss突然飙升且无法回落大概率是训练不稳定可能是学习率过大、数据中出现异常样本比如a突然混入了一批乱码文本或者是分布式训练中某个节点出了问题。Loss下降正常但评测指标不涨这种情况更隐蔽往往是数据配比出了问题或者模型容量不够。此时需要回看数据管道而不是继续调整训练超参数。4. 从“会预测”到“会听话”指令微调与人类对齐预训练结束的模型本质上只是一个“文本续写器”。你让它“写一首关于春天的诗”它会接着这句话继续写但大概率不会按照你的意图“创作一首诗”。让模型真正“听懂指令并执行”靠的是后续的监督微调和对齐环节。4.1 指令微调SFT告诉模型“人类想要什么”指令微调的核心做法是构造一批“指令-回答”对格式类似于用户帮我写一份关于新产品的营销方案 助手好的以下是关于新产品的营销方案 一、市场分析...模型在这批数据上继续训练学会从“用户指令”切换到“助手回答”的对话模式。这个阶段的数据量不大通常几万到几十万条就够了但质量要求极高。一条低质量的指令数据比一千条普通预训练数据带来的负面影响还大。做指令微调数据时有几个关键经验多样性优先于数量指令覆盖的主题域越广、句式越丰富模型的泛化能力越强。如果只做垂直领域的1000条指令模型会对这个领域很熟练但其他领域基本“失能”。回复格式要统一微调数据中的回答风格应该尽量统一比如是否使用列表、是否先总结再展开。模型会模仿你给的格式这是它学习“说话风格”的唯一样本。不要忽略“拒绝类”数据需要让模型学会对不合适的问题说“我无法回答”这类数据占比通常在5%-10%左右防止模型“什么都敢说”。4.2 RLHF与DPO让模型学会“讨好人类”指令微调之后模型已经有模有样了但距离“人类偏好”还有差距。人类偏好到底是什么简单说就是回答更长、更详细、更有条理、语气更友好同时不胡说八道。为了对齐这些“软性标准”业内发展出了RLHF基于人类反馈的强化学习以及后来更轻量的DPO等替代方案。RLHF的核心流程是用同一份SFT模型生成多个回答让人类标注员对这些回答从好到差排序用排序数据训练一个“奖励模型”学习预测哪个回答更符合人类偏好在强化学习阶段让大模型生成回答并交给奖励模型打分用策略梯度方法更新模型参数让模型倾向于生成高分回答。这个流程训练代价高、工程复杂、容易不稳定很多人戏称RLHF是一门“炼丹玄学”。DPO是一个替代方案核心洞察是不需要显式的奖励模型直接用偏好数据来对比“被偏好的回答”和“不被偏好的回答”的生成概率差异并据此更新模型。DPO更简单、更容易调稳效果在很多场景下和RLHF相当已经成为许多团队的首选。我在自己的项目中用DPO多一些最大的感触是DPO训练过程中需要控制学习率和训练步数否则模型会“过度对齐”出现回答越来越短、越来越敷衍的情况。这个度需要在实际验证集上反复测试不能只盯着训练loss。5. 训练稳定性那些让工程师半夜惊醒的“翻车”现场大模型训练是一个持续数周或数月的过程中间任何一步出错都可能导致前功尽弃。这一节想认真聊聊稳定性问题因为这是大多数介绍文章不会涉及但实际项目里最磨人的部分。5.1 损失尖峰最经典的“训练崩溃”损失尖峰loss spike指训练过程中loss突然暴涨几十倍然后有时能自动恢复、有时直接崩盘。引发原因很多某条训练数据里出现极端值、学习率调度器计算错误、分布式通信出现偶发延迟、甚至某个GPU卡出现瞬时过热。从工程角度看损失尖峰的最佳应对手段是提前预防——定期保存检查点checkpoint。我的习惯是每训练1000步保存一次模型状态不仅保存参数还保存优化器状态Adam的动量项。一旦出现无法恢复的尖峰可以从最近一个健康检查点恢复训练最多损失几小时的计算时间而不是从头再来。现在的主流框架也提供了“loss尖峰检测”的钩子函数当检测到loss异常升高时自动暂停训练、加载上一个检查点、跳过可能出问题的几个batch。这种自动化保护机制算得上大模型训练工程的“安全带”。5.2 梯度爆炸与梯度裁剪梯度爆炸是训练早期最常见的问题模型参数更新幅度过大loss直接变成NaN非数值。解决办法是梯度裁剪gradient clipping给梯度的全局范数设定一个上限通常设为1.0超过就等比缩放。这个操作看起来简单但上限设置多少很讲究——设太小会拖慢收敛设太大又起不到保护效果。我通常从1.0开始试如果训练稳定就逐渐放宽如果出现尖峰就收紧到0.5左右。还有一个经常被忽略的问题学习率与梯度裁剪的关系。学习率越大梯度裁剪被触发的频率越高。如果发现裁剪经常被触发且loss不下降不是裁剪的错而是学习率设高了。反过来如果你设了大batch size梯度裁剪的阈值也可以适当放宽因为大batch下的梯度本身更稳。5.3 分布式训练的“暗坑”通信瓶颈与时钟偏移大模型训练几乎不可能单卡完成动辄几十上百张卡并行。分布式训练中最常见的陷阱是“木桶效应”集群中某一张卡因为机器散热、网络抖动等原因变慢整个训练步的时间被迫等它导致整体吞吐骤降。每次训练时我都会盯着每张卡的利用率曲线如果发现某张卡长时间利用率偏低大概率是通信拓扑或数据加载不均的问题。另一个隐蔽的问题是训练步数很长时时间同步误差累积会导致loss振荡。解决思路是在训练脚本里每隔一定步数执行一次全局时钟对齐部分框架默认开启并检查各节点是否出现步数漂移。5.4 评估不能只在最后做很多新手会在训练完成后再评估模型这是一个很危险的习惯。如果训练到一半就发现方向错了等到最后才知道等于白白浪费了几周算力。我的做法是训练过程中每隔一定步数比如2000步就跑一遍评测集关注几个关键指标如困惑度、回答准确率。这样一旦发现指标异常可以及时调整数据配比、学习率甚至暂停训练。更进阶一点的做法是维护一个“小验证集”专门检测模型的某些关键能力比如代码能力、逻辑推理能力。预训练模型在不同阶段的能力涌现顺序不同通过跟踪这些能力的变化曲线你可以判断当前训练处在哪个阶段、是否需要调整数据比例。6. 算力成本估算与框架选型先算好账再动手说了这么多训练细节最后聊一个容易被忽视但极其现实的问题训练一个大模型需要花多少钱用什么框架跑最合适。6.1 算力账本一次训练的成本可以精确到小时训练成本可以用一个简化的公式估算训练所需算力FLOPs约等于 6 × 参数量 × 训练token数。比如一个130亿参数的模型在2万亿token上进行训练需要的总算力大约是 6 × 13e9 × 2e12 ≈ 1.56e23 FLOPs。在一张主流GPU能以100 TFLOPS每秒10^14次浮点运算的有效利用率计算的前提下单卡训练时长 1.56e23 / 1e14 / 3600 ≈ 43万小时。假设你用128张GPU并行理论上需要约3400小时也就是142天。但这是纯理论值实际还要算上通信开销、故障重启、数据读取等损耗通常有效利用率只有理论峰值的40%-60%。所以训练一个中等规模的大模型月级别的周期和百万级别的计算成本都是常态。6.2 框架选型别盲从“最新最火”主流的大模型训练框架主要有几类以高性能著称的分布式训练框架适合大规模集群上做预训练更偏易用性的高维抽象框架适合中小团队做微调和快速迭代还有一些专为大规模模型并行设计的调度方案。我的实践感受是做百亿级以上的预训练要选支持混合并行数据并行张量并行流水线并行的方案这类框架在分布式调度和通信优化上更成熟如果只是做千万到十亿级的微调选一个上手快、文档全、社区活跃的方案更适合。不用一味追求最先进的技术框架稳定可靠、团队能快速上手才是第一原则。6.3 训练完成之后评估、部署和持续改进模型训练出来的那一刻只是“前半场”。真正决定项目成败的是后续的评估和部署。评估环节需要准备一个覆盖多维度能力的评测集通用知识、代码能力、数学推理、指令遵循、安全性、多轮对话等。不要只在单一榜单上评测因为榜单数据很可能被“刷”过模型的真实能力要看它在更多样化的真实任务上的表现。部署环节要考虑推理成本和延迟。大模型推理有一些常用优化技术量化把权重从16位降到8位甚至4位显著减少显存占用、KV Cache优化、批处理策略等。这些手段可以让你在有限算力下服务更多用户。持续改进是一个“收集反馈 → 修正数据 → 增量训练 → 重新部署”的循环。我见过不少团队在模型发布后就不管了结果用户反馈的问题越来越多根源在于没有建立起线上数据的回流机制。好的模型是“炼”出来的更是“养”出来的。最后分享两个我自己觉得最受用的经验一是训练过程中要勤做检查点这是应对一切意外的基础二是每次训练启动前先在小规模数据集上跑通全流程确认每个环节的输入输出格式正确再放大规模。这样可以避免浪费巨额算力在一个低级错误上。大模型训练是一门严格依赖工程纪律的“手艺”每一步细节都值得认真对待。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑