使用的系统
~ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 26.04 LTS
Release: 26.04
Codename: resolute
~ nvidia-smi
Sat Aug 1 12:13:51 2026
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 580.173.02 Driver Version: 580.173.02 CUDA Version: 13.0 |
+-----------------------------------------+------------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 NVIDIA GeForce RTX 2070 Off | 00000000:03:00.0 Off | N/A |
| 47% 40C P8 12W / 175W | 1MiB / 8192MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
+-----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
| No running processes found |
+-----------------------------------------------------------------------------------------+
创建虚拟环境
conda create -n llamafactory python=3.12 -y
LoRA微调基本原理
LLaMA Factory 是一个专为大型语言模型(LLMs)微调设计的低代码/无代码框架,其核心微调原理主要基于参数高效微调(PEFT,Parameter-Efficient Fine-Tuning)技术。与传统需要更新模型全部参数的全量微调(Full Fine-tuning)不同,LLaMA Factory 通过冻结预训练模型的主干参数,仅对少量新增的可训练参数进行更新,从而大幅降低显存需求和计算成本。
下载LLaMA Factory
mkdir llama_factory_test
cd llama_factory_test
# 克隆LLaMA-Factory
git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
# 安装依赖
conda activate llamafactory
pip install -e .
pip install -r requirements/metrics.txt
准备训练用的数据集
LLaMA Factory 有个data目录,该目录是默认的一些测试数据集
dataset_info.json文件记录了
LLaMA Factory可以识别到的数据集。
启动LLaMA Factory
执行llamafactory-cli webui启动webui
(llamafactory) ➜ LLaMA-Factory git:(main) llamafactory-cli webui
Visit http://ip:port for Web UI, e.g., http://127.0.0.1:7860
* Running on local URL: http://0.0.0.0:7860
* To create a public link, set `share=True` in `launch()`.
访问页面打开如下所示
微调
使用webui微调
微调完成后在目录下生成了对应的文件
使用命令微调
qwen3_lora_sft.yaml修改后的内容如下
### 模型配置 (Model)
model_name_or_path: /home/gillbert/Downloads/code/hugging_face_test/modelscope_test/llm/models/Qwen--Qwen3.5-2B/snapshots/master # 预训练模型的名称或本地路径,这里使用的是 Qwen3.5-2B 模型,这里我使用提前从ModelScope下载好的
trust_remote_code: true # 是否信任并允许执行从 Hugging Face Hub 下载的远程代码(部分新模型需要开启)
### 微调方法 (Method)
stage: sft # 训练阶段:sft (Supervised Fine-Tuning, 有监督微调)
do_train: true # 是否执行训练操作
finetuning_type: lora # 微调类型:lora (参数高效微调,冻结主干网络)
lora_rank: 8 # LoRA 的低秩维度,值越大模型容量越高但显存占用也越大(常见 8, 16, 32, 64)
lora_target: all # 应用 LoRA 的目标模块,'all' 表示对模型中所有线性层应用 LoRA
### 数据集配置 (Dataset)
dataset: identity # 训练数据集名称(需在 LLaMA Factory 的 dataset_info.json 中定义)
template: qwen3_5 # 对话模板格式,指定 Qwen3 专用的无思考过程模板
cutoff_len: 2048 # 序列截断长度,超过此长度的 token 将被截断(需根据显存大小调整)
max_samples: 1000 # 最大训练样本数,这里限制为 1000 条(常用于快速测试或资源受限场景)
preprocessing_num_workers: 16 # 数据预处理时的并行工作线程数,加快数据加载和 tokenize 速度
dataloader_num_workers: 4 # DataLoader 加载数据时的并行进程数,避免数据加载成为训练瓶颈
### 输出与日志 (Output)
output_dir: saves/qwen3.5-2b/lora/sft # 模型权重和日志的保存路径
logging_steps: 10 # 每训练 10 步打印一次训练日志(如 loss, learning_rate)
save_steps: 500 # 每训练 500 步保存一次模型检查点 (checkpoint)
plot_loss: true # 训练结束后是否自动绘制 Loss 曲线图
overwrite_output_dir: true # 如果输出目录已存在,是否直接覆盖(防止误删历史权重可设为 false)
save_only_model: false # 保存时是否只保存模型权重(设为 false 会同时保存优化器状态,方便断点续训)
report_to: none # 实验追踪工具,可选 none, wandb, tensorboard, swanlab, mlflow
### 训练超参数 (Train)
per_device_train_batch_size: 1 # 每张 GPU 上的训练批次大小(显存不足时调小,显存充足时调大)
gradient_accumulation_steps: 8 # 梯度累积步数,等效全局 Batch Size = per_device_batch_size * 累积步数 * GPU数量
learning_rate: 1.0e-4 # 初始学习率(LoRA 微调常用范围通常在 1e-4 到 5e-5 之间)
num_train_epochs: 3.0 # 完整的训练轮数,整个数据集被遍历的次数
lr_scheduler_type: cosine # 学习率调度器类型,cosine 表示学习率随训练过程呈余弦曲线平滑下降
warmup_ratio: 0.1 # 学习率预热比例,训练前 10% 的步数内学习率从 0 线性增加到设定值,防止初期梯度爆炸
bf16: true # 是否使用 BFloat16 混合精度训练(相比 FP16 数值更稳定,不易溢出,推荐 A100/4090 等显卡使用)
ddp_timeout: 180000000 # 分布式训练 (DDP) 的超时时间(秒),防止在大数据集初始化或保存权重时意外中断
resume_from_checkpoint: null # 断点续训的 checkpoint 路径,设为 null 表示从头开始训练
### 评估配置 (Eval)
# eval_dataset: alpaca_en_demo # 验证集数据集名称(取消注释即可开启验证)
# val_size: 0.1 # 如果没有指定 eval_dataset,可从训练集中自动划分 10% 作为验证集
# per_device_eval_batch_size: 1 # 每张 GPU 上的评估批次大小
# eval_strategy: steps # 评估策略:steps (按步数), epoch (按轮数), no (不评估)
# eval_steps: 500 # 每训练 500 步执行一次验证集评估
启动微调
llamafactory-cli train command-fine-tuning/qwen3_lora_sft.yaml
微调完成后可以看到saves目录多了数据
测试效果
之前的训练数据集我们修改了如下内容
我们使用web版本加载微调的数据