Files
2026-09-14 16:09:48 +08:00

92 lines
3.0 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.

# 监督微调(SFT)
`llamafactory-cli sft` 启动监督微调。下文依次说明全参训练、LoRA、Freeze 和量化 LoRA 的配置。
## 全参训练
全参训练更新全部模型参数,配置中不设置 `peft_config`。以下完整配置保存为 `config.yaml`,使用 `Qwen/Qwen3-0.6B` 和 FSDP2:
```yaml
model: Qwen/Qwen3-0.6B
model_class: llm
train_dataset: data/v1_sft_demo.yaml
output_dir: outputs/qwen3_full
micro_batch_size: 1
cutoff_len: 2048
learning_rate: 1.0e-4
max_steps: 10
dist_config:
name: fsdp2
```
```bash
llamafactory-cli sft config.yaml
```
## LoRA
LoRA 冻结基座权重并训练 adapter,通过 `peft_config.name: lora` 配置。在上述训练配置中加入以下块,并将 `output_dir` 改为 `outputs/qwen3_lora`;基座仍为 `Qwen/Qwen3-0.6B`:
```yaml
peft_config:
name: lora
r: 16
lora_alpha: 32
lora_dropout: 0.05
target_modules: all
```
训练结束后,adapter 保存到 `outputs/qwen3_lora`。[推理](inference.md#使用-lora-adapter)和[模型导出](model_export.md#导出配置)示例沿用这一基座与目录。
继续训练已有 adapter 时设置 `adapter_name_or_path`。训练只允许一个 adapter;LoRA 参数从 adapter 自身恢复。
## Freeze
Freeze 直接更新指定层或模块的权重,其余参数保持冻结。以下 `peft_config` 替换 LoRA 配置,模型、数据与训练字段沿用全参示例:
```yaml
peft_config:
name: freeze
freeze_trainable_layers: 2
freeze_trainable_modules: all
freeze_extra_modules: null
cast_trainable_params_to_fp32: true
```
正数表示最后 N 层,负数表示最前 N 层。
## QLoRA
量化 LoRA 在量化后的基座上训练 adapter,分别由 `quant_config` 和 `peft_config` 控制。当前 v1 的量化插件入口为 `bnb` 和 `auto`:`bnb` 提供 bitsandbytes 的 4-bit、8-bit 加载分支;`auto` 在指定有效位宽时转交 `bnb` 处理。
下面是使用 bitsandbytes 4-bit 的 QLoRA 示例,运行环境需安装 bitsandbytes。将以下字段加入全参示例,模型、数据与 FSDP2 配置保持一致:
```yaml
output_dir: outputs/qwen3_qlora
peft_config:
name: lora
r: 16
target_modules: all
quant_config:
name: bnb
quantization_bit: 4
quantization_type: nf4
double_quantization: true
```
`quantization_bit` 表示加载位宽,`quantization_type` 表示 4-bit 量化格式,`double_quantization` 控制 4-bit double quant。位宽分支与字段默认行为见[量化参数](../configuration/model.md#quant_config),后端限制见 [NPU 说明](../multi-backend/npu/index.md)。
## 激活值重算
`enable_activation_checkpointing` 默认为 `true`。启用后,训练在反向传播时重新计算部分前向结果,以减少激活值占用的显存或设备内存,并增加计算量。设置为 `false` 关闭重计算:
```yaml
enable_activation_checkpointing: false
```
分布式后端、批处理与算子配置分别见[分布式训练](distributed_training.md)、[批处理](batching.md)和[融合算子加速](kernel_acceleration.md)。