news 2026/9/13 3:56:10

大模型行业落地关键:CPT继续预训练原理与工程实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
大模型行业落地关键:CPT继续预训练原理与工程实战

1. 不是所有行业场景都需要CPT,先想清楚这四件事

在行业里聊大模型落地,绕不开一个坎:通用大模型很强,但用到自己行业里总觉得差口气。问它医药流通的合规细节,它答得模棱两可;让它写铁路调度报表的说明,它开始编造专业名词;给它一堆自家产品的私有文档做问答,它连基本术语都能说岔。问题出在哪?很简单——通用大模型的训练语料里,你这个行业的真实业务文本占比太低,低到模型对这个领域的“语感”根本没建立起来。

这时候很多人会想:那我做微调不就行了?先别急着下单买卡,有几个问题需要你冷静评估。

第一个问题:你的行业知识,是“问出来的”还是“长在模型脑子里的”?

微调(SFT)解决的是“让模型学会按照你的格式回答问题”,它本质上是行为对齐。行业模型需要的是“这个领域的知识和表达习惯内化到模型参数里”,这是另一码事。举个例子:你给模型一万条法律问答对,它能学会用律师的口吻回答常见问题,但你要是问一个冷门的、不在微调数据里的法律条款,它照样瞎编。因为那些法条、术语、案例之间的内在关联,压根不在它的权重里。Continued Pre-Training(继续预训练,下称CPT)干的事,就是往模型脑子里灌这个行业的真实文本,让它真正理解你的业务语言体系。

第二个问题:你的数据量,够支撑一次预训练吗?

CPT本质上还是预训练,它的胃口和预训练一脉相承。行业数据如果只有几万条文档,说实话连塞牙缝都不够。以我的经验,一个中等规模行业模型的CPT,语料量级起步应该在5000万到2亿个token左右,低于这个量级不如直接走长上下文+RAG的路线性价比更高。当然,这个数字不是死的,后面我会讲怎么用数据配比来对冲数据量不足的问题。

第三个问题:你的场景,是“知识密集”还是“流程密集”?

法律、医疗、金融风控、工业制造这种行业,拼的是专业知识的广度和准确度,适合CPT。客服对话、工单分类、公文写作这种场景,核心是流程和格式的规范,SFT加一套好模板通常就够了。判断标准很简单:如果模型经常因为不懂术语而答错,CPT值得做;如果模型只是格式不对、语气不对,SFT更划算。

第四个问题:你的团队,扛得住预训练级别的工程复杂度吗?

CPT不是跑一两条命令就完事的。数据清洗、去重、配比、采样策略、loss观察、checkpoint管理、灾备恢复,任何一环出问题都在烧钱。如果团队连分布式训练都还没跑过,建议先从一个10亿参数级别的小模型练手,跑通流程再上真家伙。

把这四个问题想明白,再决定要不要往下看。如果答案是“确实需要”,那接下来的内容就是给你准备的。

2. Continued Pre-Training到底做了什么:一次讲清楚它的边界和本质

很多文章喜欢把CPT、SFT、RLHF、RAG放在一起对比,但讲得云里雾里。我用大白话拆一遍。

2.1 为什么要继续训练:通用模型的“行业盲区”在哪

通用大模型的训练语料主要来自互联网公开数据,以通用知识、百科、代码、论文、新闻为主。问题在于,行业内部真正有价值的语料——比如法院判决书、医院病历、机床运维日志、保险理赔记录、电网调度规程——它们的文本风格、术语体系、逻辑表达和公开互联网数据完全不一样。

模型在这些领域表现差,不是因为“笨”,而是因为训练时压根没见过足够多的这类文本。你让它续写一段病历,它可能写出“患者主诉头痛,既往史无特殊”这种像模像样但经不起推敲的句子,因为它只学到了皮毛,没有学到病历结构的深层逻辑。CPT要做的,就是把这部分行业语料以预训练的方式继续喂给模型,让模型在自己的参数空间里为这个行业单独划出一块“语言领地”。

2.2 CPT与全参微调、LoRA微调、RAG的核心差异

先上一张对比表,免得大家概念打架:

方法调整范围目标数据需求成本适用场景
CPT全部或大部分参数让模型学习领域语言与知识分布大规模纯文本,千万级以上token行业知识密集、术语复杂
全参微调(SFT)全部参数让模型学会特定任务的输入输出格式十万级指令对中高任务格式规范、行为对齐
LoRA/QLoRA微调少量可训练参数低成本适配特定任务万级指令对快速迭代、单任务适配
RAG不修改参数从外部检索库中获取知识辅助生成无训练数据需求知识持续更新、答案可溯源

说句大实话:RAG适合“查得到”的知识,CPT适合“长在脑子里”的知识。前者像你查字典,后者像你背单词。你真要让模型具备行业语感,字典翻得再勤也没用。

2.3 CPT的典型训练阶段划分

完整的CPT工程通常拆成三个阶段,每个阶段的目标和做法都不一样:

  • 领域适配阶段:用大规模无标注行业语料做通用领域预训练,让模型熟悉行业词汇、句式、文本结构。这一阶段占整体训练量的70%~80%,学习率可以相对高一些。
  • 知识增强阶段:以行业知识密集型语料为主(术语表、概念解释、技术手册),适当提高精华语料的采样权重,帮助模型巩固领域逻辑。
  • 指令对齐阶段:少量高质量指令数据收尾,把模型在领域语料里学到的东西对齐到“问-答”的交互模式上,避免模型“学了一肚子话但不会用”。

这个流程不是拍脑袋定的,我最早做CPT项目时跳过了第二阶段,结果模型虽然学会了行业词汇,但回答问题时总是东拉西扯,后来补了一批结构化知识文档做二次CPT,效果才明显改观。

3. 数据工程才是CPT的主战场:配比、清洗与质量过滤

做CPT,最花时间的绝不是训练本身,而是数据。业内有个不成文的说法:数据准备占整个项目的80%时间,训练只占20%。这话一点不夸张。我在下面把数据这块拆细了讲。

3.1 语料来源怎么选:公开数据、行业数据、生成数据的取舍

行业语料来源通常有三类:

  • 公开行业数据:行业公开的论文、专利、标准规范、政府公报、行业报告。这类数据获取成本低,但噪音大,且很多通用模型在预训练时已经见过。用它们做CPT的边际收益有限,需要配合清洗和去重才能用。
  • 企业内部数据:这才是CPT的核心资产。产品手册、运维日志、风险报告、客户工单、历史方案文档——每一类都沉淀了企业在这个行业的真实做法。企业数据通常有格式杂乱、敏感信息多、质量参差不齐的问题,清洗工作量巨大,但价值也最高。
  • 模型生成数据:用已有通用大模型生成行业风格文本做扩充。这个方法有争议,但实践中有它独特的价值——当你在语料里注入一批结构规范的“仿行业文本”,模型更容易学到行业文本的格式特征。切记比例不能高,通常不超过总语料的10%,否则引入幻觉和重复的风险会急剧上升。

3.2 数据配比:别让你的模型变成“复读机”

配比是CPT数据处理里最容易被忽视、但影响最大的一环。如果语料里全是某一类文本,模型就会产生严重偏向。

举一个实际场景:做工业质检领域的CPT,语料构成里有70%是设备故障日志,20%是维修工单,10%是操作手册。模型训练完,你问它“开机自检流程”,它能答得很好;你问它“质量管理体系怎么设计”,它直接开始胡扯。原因很简单,故障日志的文本逻辑和操作手册完全不是一个路子,模型被带偏了。

根据我自己的实操经验,一个比较稳妥的初始配比策略是:

  • 基础行业语料(行业百科、报告、标准):40%~50%
  • 场景业务数据(工单、报告、案例、日志):30%~40%
  • 通用语料(通用中文语料回放):10%~20%
  • 结构化知识文本(术语表、FAQ、规则说明):5%~10%

注意,通用语料回放一定不能省。只灌行业数据,模型会灾难性遗忘通用能力,聊几句行业话题还行,一聊到日常问题就智商掉线。

3.3 清洗流水线的五个关键步骤:从原始文本到训练语料

原始文本不可能直接丢进训练脚本,我这里整理了一套亲测有效的清洗流水线:

  1. 格式标准化:把PDF、Word、HTML全部转成纯文本,统一换行符,处理编码混乱。这个环节最容易出问题,中文语料里经常出现繁体字、异体字、乱码符号,全部要用规则脚本清洗掉。
  2. 质量过滤:按长度过滤——太短的文本(小于50字)信息量低,太长的文本(超过2048/4096 token)需要截断;按重复率过滤——用MinHash或SimHash做去重,行业数据里大量文档是同一模板改改就发,重复率极高。
  3. 敏感信息过滤:企业数据里经常带个人信息、身份证号、手机号等,必须做脱敏处理。这一步不只是合规要求,也直接影响模型质量和企业安全。
  4. 语言一致性检测:检查语料中是否混入了其他语言的大段文本。行业数据里英文文献、中英混排很常见,要根据任务目标决定保留还是滤除。
  5. 启发式规则过滤:处理特殊字符、异常符号、表格错乱留下的残留符。实测下来,最有效的三种过滤规则是:URL占比过滤(超过5%则剔除)、非中文字符占比过滤、连续重复标点过滤。

3.4 数据去重的度怎么拿捏

去重不是越狠越好。行业数据的核心价值恰恰在于一些相似但细节不同的文本。比如同一型号设备的运维日志,每次都大同小异,但故障细节千差万别,这些差异就是模型学习故障判断逻辑的关键。我建议做法是:文档级做SimHash去重,句子级只做完全匹配去重,把“两篇文章完全相同”和“两篇文章高度相似但细节有差异”区分开。

4. 从零开始跑一次CPT:框架选型、超参配置与实操流程

数据整干净了,接下来是重头戏——真正跑训练。这一节我尽量把步骤和参数都写具体,让没跑过CPT的团队能照着走一遍。

4.1 基座模型选型:从哪个底子开始练很重要

CPT的第一步是选基座模型。很多人一上来就选最大号的模型,这是误区。基座模型的选择取决于你的业务场景和算力预算。

  • 如果需要较强的逻辑推理和复杂问答能力,优先选通用能力靠前的大参数模型(如70B级别),在它基础上做CPT,行业能力提升的同时能保住通用能力底线。
  • 如果任务聚焦在垂直领域的特定场景(如命名实体识别、文本分类、摘要生成),7B~14B级别的模型完全够用,训练成本低一个数量级,迭代速度也快得多。
  • 如果行业语料里中英文混杂严重(如涉外法律、生物医药文献),选基座时要关注模型原始语料的中英文比例,别选一个中文语料极度稀缺的模型来当底座。

我个人的建议是:如果条件允许,跟着“从大到小”的路线走——先用14B模型在小规模语料上做一次CPT验证效果,确认数据质量没问题,再上70B的大规模训练。这套路看起来慢,实际省钱省心。

4.2 计算资源估算:一张H800大概能跑多大量

很多读者关心算力成本,我直接给一个粗略估算的方法。以7B参数、序列长度4096、batch size为32为例,单次训练步的token消耗是 32×4096=131072 token。假设你有8张H800,单卡显存80G,用ZeRO-3加激活重计算,实测吞吐大约在每秒3000~5000 token(受数据长度和模型结构影响)。那么一天可以处理的token量大约是:

24×3600×4000≈3.5亿token

也就是说,8卡H800跑一天,大概能吃下3~4亿token。一个5000万token的数据集,训练5个epoch,大概需要跑0.7~1天。所以如果你的语料在1亿token以内,8卡H800的成本完全可以接受。70B模型的话,数据量不变时,算力需求大约要放大5~8倍,这个账要提前算清楚。

4.3 关键超参怎么设:学习率、batch size、序列长度、训练轮数

从我实测的经验出发,给一套CPT的初始超参配置,大家照这个底盘起步,再根据loss表现做调整:

参数推荐值说明
优化器AdamW预训练和CPT的标配,别换
学习率2e-5 ~ 5e-5比预训练低、比SFT高,取中值最稳
学习率调度cosine衰减前10%步数做warmup
Batch size32~128(按数据量定)小batch更容易过拟合,大batch更稳但吃显存
序列长度2048 ~ 4096短文本多就2048,长文档多就4096
训练轮数1~3轮严格控制在3轮以内,多轮容易破坏通用能力
权重衰减0.1标准预训练配置
梯度裁剪1.0防loss尖峰

训练轮数这点我特别强调一下:CPT不是练得越多越好。我曾经在项目上把数据从2个epoch加到5个epoch,结果行业能力没提升多少,通用能力反而掉得厉害,最后只能回滚checkpoint。后来我严格控制在1~3轮,效果反而更稳。宁可数据量不够,也别在同一份数据上反复碾压。

4.4 训练过程中的loss观察与checkpoint策略

训练跑起来之后,盯loss是每天最重要的事。几个关键观察点:

  • 训练loss应保持平稳下降。如果出现断崖式下跌然后迅速回弹,大概率是数据里有异常batch(某个batch里混入了大量重复文本或乱码)。
  • 验证集loss(如果有的话)如果和训练loss拉开差距,说明开始过拟合,赶紧调低学习率或提前停止。
  • 每个epoch结束保留一个checkpoint,磁盘空间够的话保留全部,不够至少要保留最后一个epoch的中间ckpt和最后一个ckpt。

我自己的习惯是:第一个epoch结束时损失下降明显才算正常;如果第一个epoch结束时loss没有任何变化趋势,不要犹豫,立刻检查数据质量和学习率。

4.5 训练框架与工程配置

目前主流选择是Megatron-LM、DeepSpeed、以及Hugging Face的transformers+accelerate组合。大参数模型建议直接上Megatron-LM或DeepSpeed ZeRO-3,小参数(7B以下)用transformers+accelerate也能跑。

工程配置上有几个要点:

  • 开启bf16混合精度,省显存同时保证稳定性
  • 开启激活重计算(activation checkpointing),用少量计算换显存
  • 启用到点续训(checkpoint resume),训练中断能接着跑,不用从头来
  • 数据加载用dataloader的多进程预取,避免GPU等数据

5. 五个高频翻车现场与排查实录

CPT跑起来之后,会出现各种奇奇怪怪的问题。我把最常遇到的五类问题和排查思路整理出来,希望能帮大家少踩坑。

5.1 训练loss不下降,或者下降极慢

这是最让人头大的问题。排查路径如下:

  • 先看学习率,CPT的学习率不能照搬SFT的1e-5这个习惯,太低了模型学不进去。改成3e-5左右再试。
  • 再看数据,随机抽200条训练样本,人工看一遍有没有大段重复、全英文、乱码等异常。行业数据里很容易混入大量扫描版OCR的识别错误,这类文本不仅没用,还会把loss拉高。
  • 最后看world size和数据sampler。多卡训练时如果数据shuffle没做对,相当于每个卡都在看同一批数据,loss自然降不下去。

5.2 训练中后期loss突然飙升到一个很高的值

loss尖峰往往和单条异常数据有关。比如某条语料里包含一段超长数字串,或者某个batch里几乎所有样本都被截断到只剩开头几个token。

排查方法:开启gradient accumulation时,把出现尖峰的那个step的loss单独打出来,用“按batch定位”的方式找到问题数据。实在定位不到,就降低学习率和梯度裁剪阈值(从1.0降到0.5),先把训练稳住再说。

5.3 训练完成后,模型行业能力提升了,但通用对话能力明显退步

这就是我前面讲的灾难性遗忘。排查思路是训练时是否做了通用语料回放。如果没做,现在临时往数据里加回放语料再训一遍是唯一的修复手段。

另一个容易被忽略的原因是学习率太高。CPT的学习率越低,对原有参数结构的破坏越小。行业数据量充足的情况下,把学习率从5e-5降到2e-5,通用能力保留效果会好不少。

5.4 模型反复输出重复文本或行业黑话

训练数据太单一、重复度过高是主因。行业数据里同模板文档数量庞大,模型很容易学到“复读”模式。

解决办法有两个:一是数据预处理阶段做更严格的去重;二是降低训练轮数,1个epoch可能就够了。

5.5 行业能力提升很有限,砸了一堆算力感觉没效果

这个问题最常见的原因不是训练,而是数据分布和业务目标错位。训练数据是运维日志,但你期望提升的是问答能力;训练数据是合同文本,但你期望提升的是风险识别。文本类型和目标任务之间隔着一道坎,模型在文本上学会了语感,但不代表能用这个语感做你想要的任务。

破解方法是加一层“定向增强”数据——和目标任务强相关的文本(比如问答对、规则说明、操作流程),即使数量不多,效果也往往比海量泛行业文本更好。

6. 评估体系与上线前验证:行业模型不能用通用标准打分

CPT做完,最怕的事是什么?就是训练完后,团队用“感觉变好了”来验收。这不行。行业模型的评估体系必须专门设计。

内部评估我推荐双轨制:

量化指标轨:针对你核心任务构建一个行业评测集。比如法律领域可以做条款检索/引用准确率,医疗领域可以做诊断建议命中率,制造领域可以做设备故障分类准确率。评测集不用大,200~500条精心标注的题目就够用。关键是评测集必须独立于训练数据,否则分数虚高没有意义。

人工体验轨:让业务专家使用模型,针对真实场景进行盲测。重点看三类错误:术语错误、逻辑漏洞、格式混乱。业务专家的反馈比任何自动化指标都重要。

注意,困惑度(perplexity)这类指标在CPT评估中参考价值有限。一个模型可能在行业文本上ppl很低,但回答问题时依然漏洞百出。行业模型的评估,最终要看“业务任务上的效果”,不是“语言建模的loss”。

上线后还要持续监控两个风险:一是模型在新知识面前逐渐“过时”,需要定期增量CPT;二是行业语料里的偏见和错误被模型放大,需要业务审核环节把关。模型上线只是开始,不是终点。

7. 成本评估与路线决策:算一笔切实可行的账

最后聊钱的事。很多企业卡在这一步:CPT到底要花多少钱?投入产出比能不能算清楚?我这里给一个简化的估算框架。

以7B模型、1亿token行业语料、2轮训练为例:

  • 单轮训练的token消耗约2亿token(1亿token数据跑2轮)
  • 8卡H800单卡算力成本按每小时20~30元估算(按主流云厂商价格浮动)
  • 单日可处理约3~4亿token,2轮训练大致需要1~1.5天
  • 算力总成本约5000~8000元

这个量级的成本,对多数有真实业务需求的企业是完全可以接受的。70B模型同等数据量的成本大约是上面数字的5~8倍,即3万~6万元区间。数据清洗和人工标注的成本另算,通常比训练成本高,在人力密集型的行业里尤其如此。

如果预算确实紧张,还有一条过渡路线:先用开源的中文行业模型做基座(有些社区模型已经跑过一部分行业语料),再在其基础上做CPT,能省下第一阶段的训练开销。

路线决策上我的建议总结成一句话:数据量超过5000万token,业务场景要求模型真正理解行业语言,那CPT值得做;如果只是要一个会按格式回答的助手,SFT加RAG更务实。

我在实际项目中最大的感触是:CPT不是一次性的炫技工程,而是一条需要持续迭代的长期路线。数据会积累,业务会变化,模型需要随行业语料的增长不断“继续训练”。真正跑通一次CPT之后,团队对数据的理解、对模型边界的认知、对评测体系的搭建,都会上一个台阶。这套能力沉淀下来,比单次训练的效果更值钱。

最后再分享一个很多资料里不会写的小技巧:如果你第一次跑CPT心里没底,先别用全部数据,取整个语料的1%做一次小规模验证跑通全流程,确认数据没坑、loss能降、评估有提升,再放大到全量数据。这个做法帮你避开的坑,可能省下六位数以上的成本。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/13 3:56:09

创意灵感背后的科学:信息重组与认知升级

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/13 3:55:28

AWB自动白平衡原理与差帧问题解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/13 3:54:10

最长有效括号全解:栈、动态规划与双计数器实现

“最长有效括号”这道题,在力扣 Hot 100 题单里排在第 90 位,题号是 32。只要刷过动态规划或者栈相关题目的朋友,大概率都在这道题上卡过。它不像“判断括号是否有效”那么直白,难点两个字:最长。一旦要求的是“最长连…

作者头像 李华