mirror of
https://github.com/hiyouga/LLaMA-Factory.git
synced 2026-09-27 01:45:42 +08:00
[v1] update docs (#10684)
This commit is contained in:
64
docs/zh/developer-guide/architecture_overview.md
Normal file
64
docs/zh/developer-guide/architecture_overview.md
Normal file
@@ -0,0 +1,64 @@
|
||||
# 整体架构
|
||||
|
||||
v1 将命令入口、运行流程和可替换实现分开组织。Core 负责连接配置、数据、模型和训练状态,Plugin 为 Core 提供数据加载、模型处理、批处理和分布式训练等具体实现。
|
||||
|
||||
这样划分后,更换数据格式不需要改训练循环,更换分布式后端也不需要重新实现 SFT 损失。任务入口负责把组件组装成一次运行,Core 决定何时执行操作,Plugin 提供被选择的具体操作。
|
||||
|
||||
下文源码路径均相对于 `src/llamafactory/v1/`。
|
||||
|
||||
## 模块分层
|
||||
|
||||
| 模块 | 目录 | 职责 |
|
||||
|------|------|------|
|
||||
| 命令入口 | `launcher.py` | 路由 `sft`、`dpo`、`rm`、`chat` 和 `merge`,并在多设备训练时通过 `torchrun` 重启 |
|
||||
| 参数配置 | `config/` | 解析数据、模型、训练和推理参数 |
|
||||
| 任务入口 | `trainers/`、`samplers/` | 组装 SFT、DPO、RM 或推理流程 |
|
||||
| Core | `core/` | 管理数据索引、模型加载、样本渲染、批处理、训练循环和推理引擎 |
|
||||
| Plugin | `plugins/` | 提供数据、模型和训练器相关的可替换实现 |
|
||||
| 设备抽象 | `accelerator/` | 管理设备、进程组和 DeviceMesh |
|
||||
|
||||
## 调用关系
|
||||
|
||||
```text
|
||||
llamafactory-cli <command> config.yaml
|
||||
→ launcher
|
||||
→ get_args
|
||||
→ 任务入口(run_sft / run_dpo / run_rm / run_chat 等)
|
||||
├── DataEngine
|
||||
│ ├── DataLoaderPlugin
|
||||
│ └── DataConverterPlugin
|
||||
├── ModelEngine
|
||||
│ ├── InitPlugin
|
||||
│ ├── QuantizationPlugin
|
||||
│ ├── PeftPlugin
|
||||
│ └── KernelPlugin
|
||||
├── BaseTrainer
|
||||
│ ├── BatchGenerator → BatchingPlugin
|
||||
│ ├── DistributedPlugin
|
||||
│ └── OptimizerPlugin
|
||||
└── BaseSampler
|
||||
```
|
||||
|
||||
上图表示组件依赖,实际初始化次序由对应任务入口决定。以 `trainers/sft_trainer.py` 中的 `run_sft` 为例:先解析参数并初始化 `DistributedInterface`,再构造 DataEngine 和 ModelEngine,将数据集、模型与 Renderer 传给 SFTTrainer,最后调用 `fit()`、`save_model()` 并销毁分布式环境。SFTTrainer 继承 BaseTrainer 的运行循环,并提供 SFT 的损失计算。
|
||||
|
||||
## 数据如何到达训练循环
|
||||
|
||||
```text
|
||||
DataEngine[index] → 标准 Sample(仍是消息结构)
|
||||
Renderer.process_samples(samples) → ModelInput 列表(已分词,尚未组 batch)
|
||||
BatchGenerator → 一个更新步所需的 micro-batch 列表
|
||||
Trainer.compute_loss(batch) → 标量 loss
|
||||
BaseTrainer.fit() → 反向传播、参数更新与生命周期事件
|
||||
```
|
||||
|
||||
ModelEngine 同时提供模型和与模型匹配的 Renderer,BatchGenerator 持有这个 Renderer。这样,数据源的读取与字段转换可以独立于模型的 tokenizer、chat template 和多模态 processor。
|
||||
|
||||
## 状态与实现分别由谁管理
|
||||
|
||||
DataEngine 保存数据集和索引,ModelEngine 保存加载结果,BatchGenerator 保存读取进度与缓冲区,BaseTrainer 保存模型、优化器和训练进度。它们都是一次运行中的对象。
|
||||
|
||||
插件注册表保存函数或类对象。调用方每次把模型、配置或缓冲区传给插件,并接收处理结果;插件路由对象本身只记录实现名称。例如,分布式插件可以返回有状态的后端 engine,由 BaseTrainer 持有,但注册表本身不保存某次训练的 engine。
|
||||
|
||||
判断改动位置时,先区分是在改变任务目标、组件流程,还是替换某个操作:新损失属于 Trainer,统一的数据索引逻辑属于 DataEngine,新的原始字段转换属于 DataConverterPlugin。具体扩展边界分别在下方页面说明。
|
||||
|
||||
Core 各组件见[Core(核心模块)](core/index.md),插件的注册方式见[插件注册机制](baseplugin_mechanism.md),内置实现见[插件实现](plugins/index.md)。
|
||||
Reference in New Issue
Block a user