大模型指令微调需要多少数据量

模型与算力

给做指令微调的算法同学讲清数据量该按什么维度估、什么量级够用、质量与规模怎么取舍,以及怎么用实验代替拍脑袋。

做指令微调时最常见的卡点不是显存也不是框架,而是数据要标多少条才够。标多了浪费预算,标少了效果上不去,网上流传的区间跨度又大得离谱。这篇不谈玄学,把数据量拆成任务类型、基座能力、评测口径三个可估维度,给出从小到大逐级扩容的判断顺序,以及什么时候该停下来补质量而不是继续加量。

做指令微调最难定的事,往往不是显存够不够、LoRA 挂在哪一层,而是要标多少条数据。标少了模型学不会,标多了预算烧完还不一定更好,网上流传的区间又大得没边,从几百条到几万条都有人说。这篇文章不给你一个万能数字,而是把数据量拆成几个能估的维度,告诉你先算什么、按什么顺序扩、什么时候该停下来做质量。

先把话说在前面:数据条数本身不是目标。你真正要的是「在留出集上稳定复现目标行为」,也就是模型换一批同类型输入还能照着你想要的样子答。围绕这个目标,数据量可以按任务面数、单格样本数、回退预算三块来估;扩容则按种子、千级、逐级翻倍的顺序推进;质量取舍有明确的剔除清单;停手信号也有可观测的判断标准。下面一节一节讲。

为什么没有一个通用条数

数据量取决于三件事:任务宽度、与基座分布的偏移程度、你对输出稳定性的要求。单一格式改写和开放式对话,需要覆盖的行为格子数差一个量级;基座本来就会的格式,几十条就能激活,基座完全不熟的领域往外偏得远,条数要更多。所以任何「XX 条就够」的说法,都要先问它是在什么任务宽度、什么基座、什么评测口径下得出的。

公开讨论里那种很小的样本区间,多半来自窄任务加强基座,而且评价标准往往只是「看起来能跑」。你把它直接套到自己的多任务场景,会严重低估。更靠谱的做法是先去站内查同能力维度的评测口径,知道别人用什么题、怎么判对错,再回来定你自己「够用」的线。

动手标注前先把三个数估出来

开工前花半天做三张表,能省掉后面一大截返工。第一张是行为清单,第二张是每个格子的最少样本数,第三张是回退预算。这三张表定下来,标注团队才知道每一批要标什么、标到什么程度算合格,而不是凭感觉凑数量。

任务面数
把要教的行为按「输入形态×输出格式×边界情况」交叉,数出需要覆盖的格子数
单格最少样本
格式类格子可以少,判断类、需要推理的格子要留冗余,按单格内可接受的方差定
回退预算
预留约三成数据用于第二轮补漏,第一轮按七成规模试跑,避免一次标到底

估完之后做一次交叉检查:格子总数乘以单格最少样本,得到的是下限而不是目标。真正的量要看第一轮跑出来的曲线,估数只是让你别从零开始拍脑袋。如果发现格子数多到根本标不过来,先砍任务宽度,把最核心的几类做扎实,而不是每类都塞几十条凑数。

从小规模起步的逐级扩容顺序

扩容不要一步到位。先做几十到一两百条的高质量种子集,这一轮的目的只有一个:验证管线通不通。格式模板对不对、loss 掩码有没有把非回答部分算进去、评测脚本能不能稳定跑出分数,这些问题在小数据上暴露最快,比在万级数据上发现要省太多时间。

  1. 种子轮只验管线一两百条人工精标数据跑一遍,检查模板、掩码、评测脚本全部无误,这一轮不评价效果好坏。
  2. 千级验证行为是否出现管线通后扩到千级并冻结评测集,看目标行为是否开始出现。不出现优先怀疑数据形态,而不是加量。
  3. 按一到两倍逐级扩行为出现后每次扩一到两倍,同口径复测,把数据量—效果的曲线自己画出来,拐点位置比外部区间可靠。
  4. 记录每次扩量的版本数据版本、训练配置、评测结果一起存档,否则后续提升无法归因,等于白跑。

这个顺序有个不适用的情况要提前说:如果任务本身要覆盖大量长尾实体或专业术语,曲线会长期平坦,加量到一定程度也不见起色。这时正确的动作是换方案,比如接检索增强或加外部知识库,而不是继续堆指令数据。判断方法很简单,看失败样本是不是集中在没见过的实体上,是的话就别再买标注量了。

阶段规模感觉这一轮要回答的问题不通过怎么办
种子轮几十到一两百条管线通不通修模板、掩码、脚本
验证轮千级目标行为出没出现查数据形态与多样性
扩量轮每次翻一到两倍曲线拐点在哪看是否过拟合或分布带偏
收敛轮按拐点定是否该停或换方案补质量或转检索增强

质量取舍:哪类数据宁缺毋滥

扩量阶段最危险的不是数据少,而是数据脏。脏数据混进去,模型学到的是模板和套路,不是你要的能力。所以剔除标准要在扩充之前定好,并且比扩充标准更严格。标注团队按清单自查,抽检时按同一清单打分,标准一致才能比较不同批次的质量。

  • 指令与回复不匹配:问东答西、回复只覆盖了指令的一部分,这类直接剔除
  • 答案可被检索直接替代:如果答案就是一段文档原文,留着只会教模型背知识
  • 同一模板批量套壳:换个主语就成新样本,多样性为零,容易过拟合到句式
  • 合成数据未抽检:合成可以用,但要模型自评加人工抽检,并与人工样本保持比例

多样性要看句式和推理深度,不是话题广度。十种问法问同一件事,不如三种问法各覆盖不同难度。合成数据尤其要注意配比,人工样本太少、合成样本太多,容易把基座模型原有的偏好一起放大,最后效果看着涨了,实际是在放大已有偏差。

评测口径决定你「够不够」的判断

很多人数据量判断失误,根源在评测集不干净。留出集必须与训练集在模板层面隔离,只换内容不换模板,模型靠句式就能认出来,分数虚高,于是你以为够了,实际远远不够。冻结评测集之后不要再随手改题,否则前后两轮没法比。

评测项至少要分两块:能力项看目标行为是否稳定触发,安全项看是否出现不该有的拒答或过度发挥。指标的具体定义和口径,可以到站内的术语对照页确认,避免团队里每个人说的「准确率」不是一回事。训练配置和数据版本要随评测结果一起记录,这是后面归因的唯一依据。

什么信号说明该停了

停手不是感觉,是信号。最常见的过拟合信号是留出集指标连续两轮扩容都没什么变化,训练集却还在往下掉。这时候继续加量只会让模型更贴训练分布,正确动作是回头做数据清洗、去重、调多样性,而不是再买一批标注。

  • 留出集两轮无变化而训练集持续下降:过拟合,回头清洗数据
  • 其他任务上出现明显退化:分布被带偏,补通用样本或降低学习强度
  • 失败样本集中在未见实体:换检索增强或外部知识,别再堆量
  • 训练成本超过换方案代价:停下来算账,对比微调与提示、检索的投入

算账的时候别只算标注费,还要算迭代轮次、评测人力和维护成本。微调之后模型要跟着基座更新、要重跑回归,这些隐性成本经常被忽略。各方案的计价口径差异很大,具体数字到站内的服务商对照页面核对当时的报价,再决定是继续微调还是转别的路径。

一份可照做的开工清单

  1. 列行为清单把要教的行为按输入形态、输出格式、边界情况交叉成格子,每格写上最少样本数和验收标准。
  2. 跑通种子轮用一两百条精标数据验证模板、掩码、评测脚本,这一轮只看管线不看效果。
  3. 冻结评测集留出集与训练集在模板层面隔离,冻结后只增不改,指标定义写进团队文档。
  4. 七成规模首扩按估算的七成规模首次扩量,同口径复测,记录数据版本、训练配置与结果。
  5. 按拐点决策看曲线拐点决定继续扩量、补质量还是换方案,并把放弃加量的理由写进实验记录。

这套流程的价值不在于算出某个精确条数,而在于每一步都有可验证的输入输出。团队换人、任务换方向,照着清单重跑一遍就能重新定标,不用再凭经验争论。真正的经验来自你自己画出的那条曲线,别人的区间只能当起点参考。

下一步想知道同等算力下不同服务商和微调方案怎么比、计价口径差在哪,去站内微调方案对照页看当时的数字和适用条件,再回来决定你的数据预算怎么花。

常见问题

几百条数据能做出可用的指令微调吗?

窄任务、强基座、输出格式固定的场景,几百条高质量样本往往能看到明显变化;但多任务、需要判断和长尾知识的场景通常不够。判断办法不是看条数,而是先固定留出集跑一遍,看目标行为是否稳定触发。

数据量不够时用合成数据补齐行不行?

可以补格式多样性,但不宜用来补判断类能力。合成数据与基座模型的偏好高度相关,占比过高会让模型只会一种腔调。建议人工样本至少占主体,合成部分做人工抽检并控制比例。

加数据还是多训几轮,先动哪个?

先怀疑数据形态而不是训练轮数。很多“数据不够”的表现其实是模板单一或回复风格不一致,加轮数只会把问题学得更牢。先把少量样本的质量拉齐,再谈扩量和调参。

怎么判断留出集分数涨了是真提升?

看涨的是不是训练时直接优化的那个格式项。如果只有格式分涨、语义判断分不动,多半是模板泄漏。留出集要同时包含同模板新内容与全新句式两组,两组都动才算真提升。

本文依据各平台公开文档与官方公告整理,只做中文归纳;具体做法、参数与限制以官方文档为准。