以下是用于训练 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 版本)来更新模型参数。