LLaMA Factory模型微调

38 阅读5分钟

使用的系统

 ~ 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目录多了数据

测试效果

之前的训练数据集我们修改了如下内容

image.png

我们使用web版本加载微调的数据

image.png

image.png

参考文档