LLaMA Factory模型微调
使用的系统
~ lsb_release-aNo LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu26.04LTS Release:26.04Codename: resolute~ nvidia-smi Sat Aug112:13:512026+-----------------------------------------------------------------------------------------+|NVIDIA-SMI580.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.||=========================================+========================+======================||0NVIDIA GeForce RTX2070Off|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-nllamafactorypython=3.12-yLoRA微调基本原理
LLaMA Factory 是一个专为大型语言模型(LLMs)微调设计的低代码/无代码框架,其核心微调原理主要基于参数高效微调(PEFT,Parameter-Efficient Fine-Tuning)技术。与传统需要更新模型全部参数的全量微调(Full Fine-tuning)不同,LLaMA Factory 通过冻结预训练模型的主干参数,仅对少量新增的可训练参数进行更新,从而大幅降低显存需求和计算成本。
下载LLaMA Factory
mkdirllama_factory_testcdllama_factory_test# 克隆LLaMA-Factorygitclone--depth1https://github.com/hiyouga/LLaMA-Factory.gitcdLLaMA-Factory# 安装依赖conda activate llamafactory pipinstall-e.pipinstall-rrequirements/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:portforWeb UI, e.g., http://127.0.0.1:7860 * Running onlocalURL: 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目录多了数据
参考文档
- https://llamafactory.readthedocs.io/en/latest/getting_started/installation.html
