1.9 KiB
1.9 KiB
Day 2 Prereading: Tokenizer、数据格式、Label Mask
今日目标
你要理解数据怎样进入训练。MiniMind 里 pretrain 和 SFT 的训练循环很像,真正关键差异在 dataset 和 label mask。
必须掌握的基础概念
- JSONL 数据:一行一个样本。
- Pretrain 样本:
{"text": "..."} - SFT 样本:
{"conversations": [{"role": "...", "content": "..."}]} - Chat template:把多轮消息序列变成模型输入文本。
- Label mask:哪些 token 参与 loss,哪些 token 不参与。
-100:PyTorch cross entropy 中忽略 label 的约定。
面试考点
- SFT 为什么通常只对 assistant answer 计算 loss?
- 如果 user prompt 也计算 loss,会有什么副作用?
max_seq_len截断会造成什么训练问题?- 为什么 tool call 要通过 chat template 统一成特殊标签?
- padding side 在训练和生成中有什么影响?
工业要求
- 数据质量比模型小改动更重要。
- 训练前必须抽样查看 tokenized 后的样本。
- SFT 必须检查 assistant span mask 是否正确。
- 长样本截断不能只看字符数,要看 token 数。
- Tool call / reasoning / normal chat 混合数据要保持模板一致。
项目中要看的文件
dataset/lm_dataset.pymodel/tokenizer.jsonmodel/tokenizer_config.jsonREADME.md的数据章节
重点类:
PretrainDatasetSFTDatasetRLAIFDatasetAgentRLDataset
今日动手任务
- 下载或确认数据:
dataset/pretrain_t2t_mini.jsonl
dataset/sft_t2t_mini.jsonl
-
打印一条 pretrain 样本和一条 SFT 样本。
-
用 tokenizer 对一条 SFT 样本做
apply_chat_template,观察模板输出。 -
手动判断哪些 token 应该参与 loss。
训练注意事项
- 今天仍然不需要完整训练。
- 如果数据文件不存在,先只用 README 样例做理解。
- 任何 SFT 训练异常,优先怀疑 label mask 和 chat template。