| # training/ · 训练 |
|
|
| 训练相关的数据集、训练脚本、配置工具。 |
|
|
| ## 数据集(Dataset) |
|
|
| `dataset/` 下**每类数据集一个文件**(已去掉 `_dataset` 后缀),公共辅助函数在 `common.py`。 |
|
|
| | 文件 | 数据集 | 用途 | |
| | --- | --- | --- | |
| | `pretrain.py` | `PretrainDataset` | 预训练(纯文本) | |
| | `sft.py` | `SFTDataset` | 全量 SFT(chat 模板 + loss mask) | |
| | `dpo.py` | `DPODataset` | DPO 偏好数据 | |
| | `rlaif.py` | `RLAIFDataset` | RLHF/RLAIF prompt 采样 | |
| | `agent_rl.py` | `AgentRLDataset` | Agent 强化学习轨迹 | |
| | `vlm.py` | `VLMDataset` | 图文对(parquet) | |
| | `vam.py` | `VAMDataset` | 全模态(图文 + 音频,parquet) | |
|
|
| ### 共同模式 |
|
|
| - 都继承 `torch.utils.data.Dataset`,实现 `__len__` / `__getitem__`。 |
| - 文本类通过 `tokenizer.apply_chat_template` 渲染对话;用 `bos_id/eos_id` 在 `generate_labels` 里**只对 assistant 回复计算损失**(prompt 部分 label=-100)。 |
| - 多模态(`vlm`/`vam`)额外加载图像/音频,并产出 `(input_ids, labels, 视觉/音频特征)` 元组。 |
|
|
| ## 训练脚本(Trainers) |
|
|
| 按模态组织的训练入口,每个脚本暴露 `main(default_config=None)`(通过 `python -m trainers.<mod>` 调用)。 |
|
|
| - `trainers/lm/`:pretrain / full_sft / lora / dpo / distillation / ppo / grpo / agent / rollout_engine / train_tokenizer |
| - `trainers/vlm/`:pretrain / full_sft |
| - `trainers/vam/`:full_sft |
| |
| 详见:[trainers.md](trainers.md) — 各 trainer 模块概览与通用训练循环 |
| |
| ## 工具(Utils) |
| |
| ### 配置与命令行 |
| |
| YAML 配置驱动训练、`apply_config` 机制、tokenizer 训练、启动示例。 |
|
|
| 详见:[config-and-cli.md](config-and-cli.md) |
|
|
| ## 面试要点 |
|
|
| - **loss mask 为什么只标 assistant?** 让模型只学习生成回复,不拟合用户输入/系统提示,避免「学用户说话」。 |
| - 多模态数据常用 parquet + `HFDataset.from_parquet`,便于大批量流式读取。 |
| - `pre_processing_chat` 随机插入 system prompt,`post_processing_chat` 随机去掉空 think 段,做数据增广。 |
| - **配置系统优先级**:`CLI 参数 > YAML 默认值 > 代码默认`;`apply_config` 把 YAML 扁平化注入 argparse 默认值。 |
| - **续训怎么保证精确**:`SkipBatchSampler` 在分布式下跳过已训 step;`from_resume` 从 `checkpoint/` 恢复 optimizer/scheduler 状态。 |
|
|