資料集策劃
此技能假定 finetuning-method-selection
已將任務路由至此 — 下一步是準備資料,
而非選擇方法。以下內容包括:根據目標方法選擇格式,
導致常見無聲訓練失敗的模板/打包機制,
在不導致模型崩潰的前提下混合合成資料的規則,
以及在開始訓練之前、結束第二階段的資料集卡。
輸入: 原始範例(示範、偏好判斷
或任務提示)加上來自 finetuning-method-selection
的路由決策。
輸出格式: 一個格式化、打包、驗證過的
JSONL 資料集,加上一份完整的資料集卡 —
/finetune 在啟動訓練前檢查的第二階段產出。
格式選擇
| 方法 | 形狀 | 行數 |
|---|---|---|
| SFT,單輪 | 指令(instruction/response 或 prompt/completion) | 約 1,000+ 起 |
| SFT,多輪 | 對話 / ChatML messages 列表 | 約 1,000+ 起 |
| DPO / ORPO | 偏好配對(prompt、chosen、rejected) | 取決於方法,請參閱 preference-optimization |
| KTO | 未配對(prompt、completion、label) | 取決於方法,請參閱 preference-optimization |
| GRPO / RLVR | 僅提示(prompt + 驗證器元數據) | 取決於方法,請參閱 grpo-rlvr-training |
-
約 1,000+ 行是 SFT 的建議下限, 而非目標。低於此數值時,少數低品質 或重複的範例可能會主導梯度;高於此數值時, 品質重於數量 — 一個較小、經驗證、 去重複的集合勝過一個較大的雜訊集合。
-
ChatML 形狀僅供參考;其他四種格式 以及 ShareGPT 轉換註記位於
references/formats-and-templates.md:{"messages": [ {"role": "user", "content": "..."}, {"role": "assistant", "content": "..."} ]}
對話模板與損失遮罩
在任何串接或打包之前應用目標模型的對話模板, 切勿之後才做 — 對原始文字進行打包然後 對打包後的區塊套用模板會破壞對話輪次邊界, 導致角色標記相對於每個範例的位置錯誤。
-
僅訓練助理回應。 對系統/使用者輪次 以及模板本身的角色標記遮罩損失(在標籤張量中設為
-100)— 僅有助理輪次的內容 token 貢獻損失。 -
模板/分詞器不匹配是主要的無聲失敗模式。 使用一個對話模板訓練,但以另一個模板提供服務或評估的模型 會在不出錯的情況下退化。請驗證訓練時使用的模板字串 與推論和評估時使用的相同。
-
將資料集保持為
messages形狀, 讓訓練器處理模板化和遮罩 (在當前 TRL 中設assistant_only_loss=True)— 預先渲染為純文字欄位會破壞遮罩所需的輪次邊界。 完整程式碼草稿:references/formats-and-templates.md。 訓練前進行合理性檢查 — 僅解碼未遮罩的位置; 預期僅看到助理文字:keep = batch["labels"][0] != -100 print(tokenizer.decode(batch["input_ids"][0][keep]))
打包
若不打包,40–70% 的計算資源會浪費在填充上 — 可變長度的範例在固定的序列長度下批次處理時, 每個範例長度與批次最大長度之間的間隙會被浪費。 打包將多個範例串接成一個序列,達到最大長度, 從而消除大部分浪費。
-
打包會改變批次語義。 一個打包後的序列可能包含多個原始範例,因此 "每 epoch 步數"以及任何基於範例計數的學習率調度 在啟用打包後會改變 — 請根據打包後的序列計數 重新計算排程里程碑。
-
強制:在擴展到完整訓練前,解碼並手動檢查 5–10 個 打包序列。 確認範例邊界符合預期,每個子範例的模板標記完整, 且每個打包序列內的損失遮罩仍僅針對助理。 非選擇性 — 打包錯誤是無聲的(損失曲線看起來正常), 且只在數小時後的評估品質中才會浮現:
for seq in packed_dataset.select(range(10)): print(tokenizer.decode(seq["input_ids"]))
合成資料規則
- 保留 ≥25% 的真實資料作為崩潰防護。
在沒有真實資料下限的情況下,訓練於越來越多
模型生成資料會導致跨世代的品質崩潰 —
25% 的真實資料是維持底線的最低要求。
通用領域回放資料行
計入此下限 —
"真實"意味著"非為此任務從此
學生模型生成的",而非"人類撰寫的。"
一個從頭開始全合成的
資料集可以僅透過回放
來滿足 ≥25% 的下限(請參閱
references/synthetic-data.md的 回放混合構建配方); 請在資料集卡中說明哪些行計為"真實", 而不是讓下限結構上無法滿足。 - Magpie 和拒絕採樣是主力方法。 Magpie 從模型自身的模板先驗中提取提示; 拒絕採樣為每個提示生成多個候選項, 並僅保留那些通過過濾器的。兩者都優於單純的一次性生成。
- 有針對性、考慮學生模型的生成比靜態生成 樣本效率高 1.3–2 倍 — 針對學生模型實際的失敗模式,可以用更少的過濾範例 達到品質標準。
- 過濾後的典型接受率為 10–30%。 請相應規劃資料量 — 一個 10,000 行的目標, 在 15% 的接受率下,需要約 65,000+ 個原始生成。
- 生成方法排名、過濾漏斗、回放混合構建和蒸餾模式:
請參閱
references/synthetic-data.md。
資料集卡
每個進入訓練的資料集都必須有一張卡片 —
/finetune 在啟動前檢查所需的第二階段產出。
該卡片並非自由形式的文件;
它必須包含以下欄位:
- 來源 — 每一行的來源(真實來源、
合成方法,或兩者皆有),
可追溯至
trace-to-training-data的輸出。 - 數量 — 總行數,以及每個分割(訓練/評估/保留) 的行數(如有分割)。
- 合成/真實比例 — 測量出來的比例, 並與上述 ≥25% 真實資料的下限進行比對。
- 去重方法 — 精確匹配、語義
(嵌入閾值),或兩者皆有;請參閱
references/synthetic-data.md中的過濾漏斗。 - 使用的模板 — 確切的對話模板
字串/識別碼,並在推論和評估中保持一致 —
這是將
eval-harness-first執行結果 連接到檢查點的關鍵。 - 打包配置 — 是否使用了打包、 最大序列長度,以及已執行上述 5–10 個序列 手動檢查的確認。
一個缺少這六個欄位中任何一個的資料集
都不算準備好交給 /finetune —
該卡片是一個閘門,而非事後撰寫的摘要。
第二階段退場檢查清單
在移交給 /finetune 之前,請確認:
- 格式與方法匹配(上表)。
- 模板在串接之前已應用。
- 損失已遮罩,僅針對助理輪次。
- 5–10 個打包序列已被解碼並閱讀。
- 最終混合中 ≥25% 是真實資料。
- 資料集卡完成 — 所有六個欄位。
參考資料
references/formats-and-templates.md— 每種格式的 JSONL 範例、當前 TRL 遮罩程式碼, 以及 ShareGPT 轉換註記。references/synthetic-data.md— 生成方法排名、過濾漏斗、回放混合構建 以及教師→學生蒸餾模式。
相關技能:finetuning-method-selection 路由至此;
lora-qlora-recipes、vision-sft 和
preference-optimization 會使用此技能產出的資料集;
trace-to-training-data 是評分軌跡資料集的來源;
eval-harness-first 則對結果檢查點進行評分。