66 lines
1.9 KiB
Markdown
66 lines
1.9 KiB
Markdown
# 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.py`
|
||
- `model/tokenizer.json`
|
||
- `model/tokenizer_config.json`
|
||
- `README.md` 的数据章节
|
||
|
||
重点类:
|
||
|
||
- `PretrainDataset`
|
||
- `SFTDataset`
|
||
- `RLAIFDataset`
|
||
- `AgentRLDataset`
|
||
|
||
## 今日动手任务
|
||
|
||
1. 下载或确认数据:
|
||
|
||
```text
|
||
dataset/pretrain_t2t_mini.jsonl
|
||
dataset/sft_t2t_mini.jsonl
|
||
```
|
||
|
||
2. 打印一条 pretrain 样本和一条 SFT 样本。
|
||
|
||
3. 用 tokenizer 对一条 SFT 样本做 `apply_chat_template`,观察模板输出。
|
||
|
||
4. 手动判断哪些 token 应该参与 loss。
|
||
|
||
## 训练注意事项
|
||
|
||
- 今天仍然不需要完整训练。
|
||
- 如果数据文件不存在,先只用 README 样例做理解。
|
||
- 任何 SFT 训练异常,优先怀疑 label mask 和 chat template。
|