Files
LLaMA-Factory/docs/zh/configuration/training.md
2026-09-14 16:09:48 +08:00

126 lines
5.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 训练参数
## TrainingArguments
### 训练过程与精度
| 字段 | 类型 | 默认值 | 说明 |
|------|------|--------|------|
| `output_dir` | `str` | `outputs/<uuid>` | 输出目录 |
| `micro_batch_size` | `int` | `1` | 基础 micro-batch 大小 |
| `global_batch_size` | `int \| None` | `None` | 默认 `dp_size × micro_batch_size` |
| `cutoff_len` | `int` | `2048` | 最大序列长度 |
| `learning_rate` | `float` | `1e-4` | 训练及优化器插件使用的学习率 |
| `num_train_epochs` | `int` | `3` | 训练轮数 |
| `max_steps` | `int \| None` | `None` | 设置后使用 step 作为终止条件 |
| `max_grad_norm` | `float` | `1.0` | 梯度裁剪阈值 |
| `bf16` | `bool` | `true` | 是否使用 bf16 |
| `seed` | `int` | `42` | 随机种子 |
| `full_determinism` | `bool` | `false` | 是否启用完整确定性模式 |
`global_batch_size` 与 `micro_batch_size` 共同决定每次参数更新需要累积多少个 micro-batch。省略 `global_batch_size` 时,每个 DP 进程每次更新处理一个 micro-batch;显式设置时,它必须能被 `dp_size × micro_batch_size` 整除,每个进程的累积次数为 `global_batch_size / (dp_size × micro_batch_size)`。
例如,`dp_size: 4`、`micro_batch_size: 2`、`global_batch_size: 32` 对应每个 DP 进程累积 4 个 micro-batch。固定样本数策略下,一次更新共使用 32 条样本;动态策略中的实际样本数随长度变化,`global_batch_size` 仍决定累积次数,token 预算见[批处理策略](../feature-guide/batching.md)。
### 批处理配置
| 字段 | 类型 | 默认值 | 说明 |
|------|------|--------|------|
| `batching_strategy` | `str` | `normal` | `normal`、`padding_free`、`dynamic_batching` 或 `dynamic_padding_free` |
| `batching_workers` | `int` | `16` | 数据加载 worker 数 |
| `enable_activation_checkpointing` | `bool` | `true` | 是否启用激活值重算 |
各策略的 token 预算和使用约束见[批处理策略](../feature-guide/batching.md)。
### 分布式与优化器
| 字段 | 类型 | 默认值 | 说明 |
|------|------|--------|------|
| `dist_config` | `dict \| None` | `None` | FSDP2、FSDPTurbo 或 DeepSpeed 配置 |
| `dp_size` | `int \| None` | `None` | 默认由 world size 和 `cp_size` 推导 |
| `cp_size` | `int` | `1` | Context Parallel 大小 |
| `cp_mode` | `str` | `ulysses` | Context Parallel 实现 |
| `mp_replicate_size` | `int` | `1` | FSDP 二维 Mesh 的参数复制维度大小 |
| `mp_shard_size` | `int \| None` | `None` | FSDP 二维 Mesh 的参数分片维度大小;默认由 world size 推导 |
| `dist_timeout` | `int` | `18000` | 进程组初始化超时,秒 |
| `optim_config` | `dict \| None` | `None` | 优化器插件 |
| `lr_scheduler_config` | `dict \| None` | `None` | 学习率调度插件;当前没有内置实现 |
### Checkpoint 与日志配置
| 字段 | 类型 | 默认值 | 说明 |
|------|------|--------|------|
| `resume_from_checkpoint` | `str \| None` | `None` | checkpoint 路径或 `auto` |
| `save_steps` | `int \| None` | `None` | 每 N 个全局 step 保存 |
| `save_epochs` | `float \| None` | `None` | 每 N 个 epoch 保存 |
| `save_ckpt_as_hf` | `bool` | `false` | 是否在中间 checkpoint 中额外保存 HF 格式模型 |
| `save_total_limit` | `int \| None` | `None` | 最多保留数量 |
| `logging_steps` | `int` | `1` | 日志间隔 |
### 偏好优化参数
| 字段 | 类型 | 默认值 | 说明 |
|------|------|--------|------|
| `pref_loss` | `str` | `sigmoid` | `sigmoid`、`orpo` 或 `simpo` |
| `pref_beta` | `float` | `0.1` | DPO beta |
| `pref_ftx` | `float` | `0.0` | SFT 损失系数 |
| `simpo_gamma` | `float` | `0.5` | SimPO reward margin |
| `dpo_label_smoothing` | `float` | `0.0` | cDPO label smoothing |
| `ld_alpha` | `float \| None` | `None` | LD-DPO 长度差异权重 |
## dist_config
### FSDP2
设置 `name: fsdp2`:
| 字段 | 类型 | 默认值 | 说明 |
|------|------|--------|------|
| `reshard_after_forward` | `bool` | `true` | forward 后是否重新分片 |
| `offload_params` | `bool` | `false` | 是否 offload 参数 |
| `pin_memory` | `bool` | `true` | 是否使用 pinned memory |
| `dcp_path` | `str \| None` | `None` | 初始化 DCP 权重路径 |
### DeepSpeed
设置 `name: deepspeed`:
| 字段 | 类型 | 默认值 | 说明 |
|------|------|--------|------|
| `config_file` | `str` | 必填 | DeepSpeed JSON 配置 |
### FSDPTurbo
设置 `name: fsdpturbo`:
| 字段 | 类型 | 默认值 | 说明 |
|------|------|--------|------|
| `reshard_after_forward` | `bool` | `true` | forward 后是否重新分片 |
| `offload_params` | `bool` | `false` | 是否 offload 参数 |
| `pin_memory` | `bool` | `true` | 是否使用 pinned memory |
| `dcp_path` | `str \| None` | `None` | 初始化 DCP 权重路径 |
| `ep_size` | `int` | `1` | 专家并行组大小 |
| `ep_dispatcher` | `str` | `eager` | 专家 token dispatcher |
| `fsdp_ignored_modules` | `list[str]` | `[]` | 外层 FSDP2 忽略的额外模块 |
| `hook_modules` | `list[str]` | `[]` | EFSDP hook 的模块模式 |
| `fsdp_implementation` | `str` | `native` | `native` 或 `custom` |
`dp_size`、`cp_size`、`mp_replicate_size` 和 `mp_shard_size` 是 `TrainingArguments` 字段,不放在 `dist_config` 中。
## optim_config
设置 `name: muon`:
| 字段 | 类型 | 默认值 | 说明 |
|------|------|--------|------|
| `wd` | `float` | `0.1` | weight decay |
| `momentum` | `float` | `0.95` | Muon momentum |
| `nesterov` | `bool` | `true` | 是否启用 Nesterov |
| `ns_steps` | `int` | `5` | Newton-Schulz 步数 |
| `adamw_betas` | `list[float]` | `[0.9, 0.95]` | 内部 AdamW betas |
| `adamw_eps` | `float` | `1e-8` | 内部 AdamW epsilon |
学习率统一使用顶层 `learning_rate`。
Muon 的完整配置示例见[优化器](../feature-guide/optimizer.md)。