返回到文章

采纳

编辑于 3月前

LLaMA Factory训练命令参数讲解

LLaMA-Factory
LLaMA-Factory
笔记

以下是用于训练 Qwen3-1.7B 模型(微调)的命令

llamafactory-cli train \
    --stage sft \
    --do_train True \
    --model_name_or_path /root/.cache/modelscope/hub/models/Qwen/Qwen3-1___7B \
    --preprocessing_num_workers 16 \
    --finetuning_type lora \
    --template qwen3 \
    --flash_attn auto \
    --dataset_dir data \
    --dataset my_custom \
    --cutoff_len 2048 \
    --learning_rate 5e-05 \
    --num_train_epochs 100.0 \
    --max_samples 100000 \
    --per_device_train_batch_size 2 \
    --gradient_accumulation_steps 8 \
    --lr_scheduler_type cosine \
    --max_grad_norm 1.0 \
    --logging_steps 5 \
    --save_steps 100 \
    --warmup_steps 0 \
    --packing False \
    --report_to none \
    --output_dir saves/Qwen3-1.7B-Instruct/lora/train_2025-05-22-16-15-13 \
    --bf16 True \
    --plot_loss True \
    --trust_remote_code True \
    --ddp_timeout 180000000 \
    --include_num_input_tokens_seen True \
    --optim adamw_torch \
    --adapter_name_or_path saves/Qwen3-1.7B-Instruct/lora/train_2025-05-22-16-15-13 \
    --lora_rank 8 \
    --lora_alpha 16 \
    --lora_dropout 0 \
    --lora_target all

本文将解释里每一个参数的含义:

基本配置相关

--stage sft

表示你现在是要做 监督微调(SFT,Supervised Fine Tuning)

--do_train True

开启训练模式。

--model_name_or_path /root/.cache/modelscope/hub/models/Qwen/Qwen3-1___7B

指定你要微调的基础模型位置,这里用的是 Qwen3-1.7B 模型。

--output_dir saves/.../train_2025-05-22-16-15-13

把训练好的结果保存到这个目录里。

数据处理相关

--dataset_dir data

你的数据文件夹叫 data

--dataset my_custom

你的数据集名称是 my_custom,这个应该是你提前准备好的。

--cutoff_len 2048

每一条输入的最大长度是 2048 个 token(token 是模型处理文本的最小单位)。

--preprocessing_num_workers 16

用 16 个线程来预处理数据,加快速度。

微调方式设置

--finetuning_type lora

采用的是 LoRA 微调方式,它是一种轻量级的方法,不需要改动整个模型,只微调一小部分参数。

--template qwen3

指明使用 Qwen3 模型的专用格式模板,比如如何把问答对格式化为模型能理解的输入。

--flash_attn auto

自动开启 Flash Attention,加速训练过程(如果支持的话)。

--packing False

不打包多个样本进同一个输入(适合训练质量优先的情况)。


LoRA 参数

--lora_rank 8
--lora_alpha 16
--lora_dropout 0

这些是 LoRA 的具体参数:

  • rank 8:表示新增的低秩矩阵的秩,影响精度和效率;
  • alpha 16:缩放系数;
  • dropout 0:不使用 dropout,训练更稳定。
--lora_target all

对模型中所有的层都使用 LoRA,不只是某几层。

--adapter_name_or_path saves/.../train_...`

训练时用的适配器(LoRA 结构)保存的路径,训练好之后也会保存到这里。

训练细节设置

--learning_rate 5e-05

学习率,表示模型每次更新参数的“步子大小”,越小越稳定,但训练越慢。

--num_train_epochs 100.0

训练整个数据集的次数,这里设置的是 100 次。

--max_samples 100000

最多用 10 万条样本参与训练(可以用来限制训练规模)。

--per_device_train_batch_size 2

每张显卡上每次训练处理 2 个样本。

--gradient_accumulation_steps 8

每处理 8 个小批量样本之后才更新一次模型,相当于总 batch size 是 2 × 8 = 16。

--lr_scheduler_type cosine

学习率调整方式是 余弦衰减,一开始大、后面慢慢变小。

--max_grad_norm 1.0

梯度裁剪,防止梯度爆炸(太大),提高稳定性。

--warmup_steps 0

训练一开始不预热,直接上手训练(warmup 可用于训练前期逐渐增大学习率)。

--bf16 True

启用 bfloat16 精度训练,节省显存,性能更好(需要硬件支持)。

日志与保存

--logging_steps 5

每训练 5 步输出一次日志。

--save_steps 100

每训练 100 步保存一次模型。

--plot_loss True

训练完之后自动生成 loss 曲线图,便于你查看训练过程是否收敛。

--report_to none

不把日志汇报到外部平台(如 WandB)。

训练稳定性和兼容

--trust_remote_code True

允许使用模型自带的一些自定义代码(部分模型需要)。

--ddp_timeout 180000000

分布式训练超时时间(这里设得非常大,避免多卡训练死锁)。

--include_num_input_tokens_seen True

在训练日志中显示模型处理过的总 token 数,方便监控。

--optim adamw_torch

使用 AdamW 优化器(torch 版本)来更新模型参数。