LLaMA-Factory微调_lamafactory
20250602 LLaMA-Factory微调
Windows环境安装
1.首先安装 Python 环境,首先安装 Anaconda3-2024.10-1-Windows-x86_64.exe,创建合适的 Python 环境
2.安装 CUDA 环境,使用的是 RTX5070 显卡,安装的 CUDA 版本是 cuda_12.4.1_551.78_windows.exe,完成后输入nvcc -V
检查是否出现对应的版本号,若出现则安装完成。
# 输入nvcc -V,输出如下Copyright (c) 2005-2025 NVIDIA CorporationBuilt on Tue_May_27_02:24:01_Pacific_Daylight_Time_2025Cuda compilation tools, release 12.9, V12.9.86Build cuda_12.9.r12.9/compiler.36037853_0
输入nvidia-smi
,得到以下输出
NVIDIA-SMI 576.57 Driver Version: 576.57 CUDA Version: 12.9 ||-----------------------------------------+------------------------+----------------------+| GPU Name Driver-Model | 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 5070 WDDM | 00000000:01:00.0 On | N/A || 30% 46C P0 27W / 250W | 754MiB / 12227MiB | 3% Default || | | N/A |+-----------------------------------------+------------------------+----------------------++-----------------------------------------------------------------------------------------+| Processes: || GPU GI CI PID Type Process name GPU Memory || ID ID Usage ||=========================================================================================|| 0 N/A N/A 1448 C+G C:\\Windows\\System32\\dwm.exe N/A || 0 N/A N/A 2572 C+G C:\\Windows\\explorer.exe N/A || 0 N/A N/A 2884 C+G ...yb3d8bbwe\\WindowsTerminal.exe N/A || 0 N/A N/A 3500 C+G C:\\Windows\\explorer.exe N/A || 0 N/A N/A 5544 C+G ...s\\Mozilla Firefox\\firefox.exe N/A || 0 N/A N/A 5664 C+G C:\\Windows\\explorer.exe N/A || 0 N/A N/A 9776 C+G ...em_tray\\lghub_system_tray.exe N/A || 0 N/A N/A 11688 C+G ...5n1h2txyewy\\TextInputHost.exe N/A || 0 N/A N/A 16156 C+G ...al\\Programs\\SiYuan\\SiYuan.exe N/A || 0 N/A N/A 18152 C+G ...s\\Mozilla Firefox\\firefox.exe N/A |+-----------------------------------------------------------------------------------------+
上面的两个输出的CUDA版本必须相同,上述中Cuda compilation tools, release 12.9, V12.9.86
和CUDA Version: 12.9
,不然的话,后续运行会报错,目前20250607,最新的CUDA12.9安装的是12.8版本的torch
同步安装 Git,版本为 git2.47.0.2.exe,同步修改国内镜像源,不然下载速度非常慢
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/
3.安装步骤按照 LLaMA-Factory 中文手册进行,链接 https://llamafactory.readthedocs.io/zh-cn/latest/getting_started/installation.html#
4.先下载用于微调的大模型,请先通过如下命令安装 ModelScope
pip install modelscope
5.下载完整模型库,以 DeepSeek-R1-Distill-Qwen-1.5B 为例,这命令默认是下载到当前文件夹下的“modelscope\\hub\\models”目录,全路径则是“C:\\Users\\Administrator.cache\\modelscope\\hub\\models\\deepseek-ai\\DeepSeek-R1-Distill-Qwen-1.5B”
modelscope download --model deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B
6.按照以下代码安装 LLaMA-Factory,需要注意安装时,容易报错,如果是依赖错误,需要使用 pip install --no-deps -e
解决依赖问题。
建议使用创建虚拟环境安装,个人一般选择复制一份基础环境
# 创建虚拟环境conda create -n LlamaFactory --clone base# 激活环境conda activate LlamaFactory# 下载源代码git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git# 或者在gitee上下载# git clone https://gitee.com/hiyouga/LLaMA-Factory.gitcd LLaMA-Factorypip install -e \".[torch,metrics]\"
需要十分注意的是,这个地方有个大坑:
这里面安装的torch torchvision torchaudio
很有可能是对应的CUP版本的包,具体查看方法就是安装包版本后缀是CP结尾,而要利用CUDA进行微调训练,必须使用安装后缀是CU的支持GPU安装包,不然在正式训练的时候,LLaMA-Factory会提示未检测到CUDA环境,原因就是CP结尾的torch只支持CUP微调训练,不支持GPU。
因此在安装的时候特别需要关注下载进度条,看安装的whl究竟是什么版本,比如安装的是如下的CPU版本:
因此可以卸载pip uninstall torch torchvision torchaudio
后,去https://pytorch.org/get-started/previous-versions/网站查找安装的CUDA版本对应的安装包版本号,比如上面安装的是cuda_12.4.1_551.78_windows.exe,CUDA版本是12.4,那就要使用以下安装命令,也就是在专门的cu12.4版本支持的网站文件夹里面寻找2.6.0版本的torch等安装包
# CUDA 12.4pip install torch==2.6.0 torchvision==0.21.0 torchaudio==2.6.0 --index-url https://download.pytorch.org/whl/cu124# CUDA 12.4pip install torch==2.6.0 torchvision==0.21.0 torchaudio==2.6.0 --index-url https://download.pytorch.org/whl/cu124# CUDA 12.6pip install torch==2.6.0 torchvision==0.21.0 torchaudio==2.6.0 --index-url https://download.pytorch.org/whl/cu126
下载进度条例如下面,版本上有cu128后缀,说明是支持GPU的版本:
7.如果在windows电脑上需要使用QLora量化微调的话,安装pip install bitsandbytes==0.46.0
(电脑是50系显卡,可以成功安装),如果报错,一般是bitsandbytes
版本问题,请调整不同版本安装,也可以参考这篇文章中的解决方案https://blog.csdn.net/m0_52080514/article/details/144468879
8.安装完成后,可输入以下命令,检测torch是否可以检测到GPU。
# 导入torchimport torch# 检测GPU是否存在,输出True,否则未安装成功 torch.cuda.is_available()# 输出显卡版本torch.cuda.get_device_name(0)# 输出torch版本torch.__version__
9.启动 LLaMA-Factory 的 Web UI 界面,输入脚手架命令 llamafactory-cli webui
,输出监听端口 http://0.0.0.0:7860
,直接使用浏览器打开
C:\\Users\\Administrator\\anaconda3>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()`.
10.最关键的一步,在模型名称中选择已经下载的模型,这里选择的是DeepSeek-R1-1.5B-Distill
,修改 Web UI 界面本地大模型的存放位置,修改为“C:\\Users\\Administrator.cache\\modelscope\\hub\\models\\deepseek-ai\\DeepSeek-R1-Distill-Qwen-1.5B”
11.点击页面上的chat选项卡,点击加载模型按钮,测试模型是否加载成功,加载成功后与本地大模型对话,成功输出内容后,说明可以进行后续微调
至此,环境安装结束。
数据集准备
LLaMA-Factory的训练流程分为3个阶段:预训练、监督微调、偏好对齐。
预训练数据集
此类数据集都比较大,一般时间和资源都不允许具备这样的条件,通常所说的几百GB,TB的就是这种,一般预训练数据集格式[ {\"text\": \"document\"}, {\"text\": \"document\"} ]
,这里不做讨论
微调数据集
LLaMA-Factory支持Alpaca和ShareGPT两种主流格式的微调数据集。其中Alpaca数据集适合指令任务(如金融报告生成),ShareGPT数据集适合多轮对话(如医疗问诊),两者格式分别如下:
// Alpaca数据集[ { \"instruction\": \"解释量子隧穿效应\", // 必填(任务指令) \"input\": \"电子能量1eV,势垒高度2eV\", // 选填(上下文参数) \"output\": \"电子以概率波形式穿越势垒...\", // 必填(目标输出) \"system\": \"你是一名物理学家\", // 选填(角色设定) \"history\": [ // 选填(多轮对话记忆) [\"什么是量子隧穿?\", \"量子现象之一...\"], [\"与经典物理有何不同?\", \"经典粒子无法穿越...\"] ] }]
// ShareGPT数据集[ { \"conversations\": [ {\"from\": \"human\", \"value\": \"推荐肺癌筛查方案\"}, // 用户输入 {\"from\": \"gpt\", \"value\": \"建议低剂量螺旋CT...\"}, // AI回复 {\"from\": \"observation\", \"value\": \"患者吸烟史20年\"}, // 环境反馈 {\"from\": \"function\", \"value\": \"调用\\_影像分析模型\"} // 工具调用 ] }]
偏好对齐数据集
按照chosen和rejected不同字段,对齐大模型的回答偏好
// 偏好训练格式(Preference Data)[ { \"instruction\": \"评估企业信贷风险\", \"input\": \"负债率70%,现金流负向\", \"chosen\": \"高风险:建议拒绝贷款\", // 优质回答 \"rejected\": \"中风险:可部分授信\" // 劣质回答 }]
自定义数据集
在LLaMA-Factory可以添加自定义的数据集,首先下载自己想要微调的数据集,此次使用知名的甄嬛数据集进行训练。
前往https://modelscope.cn/datasets/longgeai3x3/huanhuan-chat/files,下载训练数据集huanhuan.json,该数据集通过预览可以发现是Alpaca格式,下载完毕后找到LLaMA-Factory/data/dataset_info.json
这个数据集注册文件
# 数据目录结构LLaMA-Factory/└── data/ ├── medical_qa.json # 自定义数据集 └── dataset_info.json # 注册文件
将huanhuan.json添加至dataset_info.json文件
{ // 添加huanhuan数据集 \"huanhuan\": { \"file_name\": \"huanhuan.json\" }, \"identity\": { \"file_name\": \"identity.json\" },}
如果是ShareGPT数据集,可以按照dataset_info.json中对应的格式进行添加注册。
然后在LLaMA-Factory WebUI界面,修改数据集所在位置后,可以选择对应的huanhuan数据集
开始训练
选择之后,点击开始选项就是可以开始训练,训练完成的模型会保存在输出目录里面。训练的时候LOSS会一直降低,一般来说降低到1以下是个比较好的结果。
微调方法对比
FFT(Full Fine-Tuning)、LoRA(Low-Rank Adaptation)和QLoRA(Quantized Low-Rank Adaptation)三种微调方法,一般来说对比如下:
批处理大小
batch_size
表示单次迭代中用于计算梯度并更新权重的样本数量,设总样本数为N ,则迭代步数Steps = N / batch_size,这个参数的数值大小主要影响如下:
一般在选择的时候,经验是Batch size * Gradient accumulation 的数值在16到64之间,也就是界面上的批处理大小
和梯度累积
两个参数。
batchsize太大或者太小都不好。 batch size 的值越大梯度也就越稳定,batch size越小梯度具有越高随机性,泛化能力越强,但如果 batch size 太大,对于内存的需求就更高,同时也不利于网络跳出局部极小点。所以,我们需要设置一个合适的batchsize值,在训练速度和内存容量之间寻找到最佳的平衡点。一般在Batchsize增加的同时,我们需要对所有样本的训练次数(也界面中的epoch)以增加训练次数达到更好的效果,因此需要寻找一个合适的batchsize值,在模型总体效率和内存容量之间做到最好的平衡。也有些研究表明,当 batch size 增加时,学习率可以成比例增大,以稳定训练效果。例如,如果 batch size 增加 2 倍,学习率可以相应增加 2 倍。具体在操作的时候,采取动态调整的策略,在训练的早期使用较小的 batch size,随着训练的进行,逐渐增大 batch size。这种策略有时能帮助模型更快地收敛,而对于非常大的数据集,较大的 batch size 可能更合适,因为它能加快训练速度,则对于其他任务(如语音识别、文本生成),可能需要较小的 batch size 以获得更好的泛化效果。总之,选择合适的 batch size 是一个需要平衡训练速度、资源使用和模型性能的问题。可以通过实验和验证来找到适合你具体任务的最佳 batch size,通常从一个较小的值开始,然后逐步调整。
模型评测
点击chat
选项卡,选择刚才训练完成的检查点后,上面是train_2025-06-08-14-05-37
,再加载模型,就可以调用刚才训练完毕的模型,输入你是谁,这时候大模型已经会回答甄嬛,说明大模型已经得到有效训练。利用LLaMA-Factory可以进行评测。
点击第二个选项卡Evaluate&Predict
,同时在选择https://modelscope.cn/datasets/modera/huanhuan/files,下载嬛嬛测试集,按照之前的方式注册添加好数据集,命名为huanhuantest.json
,然后点击检查点train_2025-06-08-14-05-37
,点击预览命令
按钮,就可以进行测评了。
开始评测预测,耗时比较长。
最后结束提示llamafactory.train.sft.trainer:143 >> Saving prediction results to saves\\DeepSeek-R1-1.5B-Distill\\lora\\eval_2025-06-08-15-34-15\\generated_predictions.jsonl
对应的会输出路径下看到如下文件内容:
all_results.json #就是上面的评估结果内容generated_predictions.json #保存每一条输入,标签,预测结果,prompt是输入,原始label是给出的结果,predict是预测的结果llamaboard_config.yaml #评估的参数配置predict_results.json #保存的预测结果分数内容trainer_log.json #lora的训练参数training_args.yaml
比如all_results.json
文件如下:
{ \"predict_bleu-4\": 40.39663740949316, \"predict_model_preparation_time\": 0.005, \"predict_rouge-1\": 44.60006497720569, \"predict_rouge-2\": 35.41781083400375, \"predict_rouge-l\": 49.80961316706892, \"predict_runtime\": 3239.9401, \"predict_samples_per_second\": 1.151, \"predict_steps_per_second\": 0.576}
把结果交给Deepseek,让它打个分,给出的评价结果如下:
质量综合评价:ROUGE-L达49.81表明生成文本的连贯性和流畅性极佳,BLEU-4超40证明术语准确性优秀,整体生成质量达到工业级应用标准。
当前它也给出了一些优化建议,最要紧的就是:
# 修改推理配置llamafactory-cli infer \\ --per_device_eval_batch_size 16 \\ # 提升批处理量(原值可能为1) --max_target_length 512 \\ # 限制生成长度 --quantization_method gptq \\ # 启用4-bit量化 --use_flash_attention_2 # 启用FlashAttention
也给出了预期结果:
除了自带工具外,也有其他的一些工具进行大模型的性能评测,比如EvalSocpe,下步再说明。
模型导出部署
训练好的大模型,如果评测结果是达到预期效果的就是可以导出后部署运行了,一般也都是本地部署使用,依靠Ollama、vllm等工具,以ollama部署为例。
1.首先就是导出训练好的大模型
第一次导出
- 点击
Export
选项。点击检查点路径
,选择对应的训练好的模型,需要注意的第一次导出需要将训练好的模型和原来的底座模型合并导出,不可以直接选择量化后导出,填写导出目录
后,就可以直接点击开始导出
第二次量化导出
- 导出合并好的模型后,就可以导出量化模型了,重新选择
模型路径
选项,填写刚才导出的合并模型的路径,这时候就可以取消检查点路径
选项,点击下面的导出量化等级
选项,选择对应导出的量化版本,再单击开始导出
,既可以导出量化版本模型。
2.转换格式,导出模型是一个文件夹,模型格式是safetensors
格式,同时还有一些分词器的json文件,需要转换为ollama支持的gguf格式。
具体方式就是从源码安装llama.cpp,安装完毕后,使用官方提供的convert-hf-to-gguf.py将量化模型转换为gguf格式。
后续按照ollama的官方操作手册,自定义注册模型,首先就是新建一个Makefile文件
FROM \'d:/ollama/HuanHuan.gguf\'# 不是必须,设置温度为 1 [值越高越有创造性,值越低越连贯]PARAMETER temperature 1# 不是必须,设置系统消息SYSTEM \"\"\"You are HuanHuan, the assistant, only.\"\"\"
然后运行ollama create mario -f ./Modelfile
,就可以将训练好的HuanHuan模型自定义注册到Ollama。
运行ollama run HuanHuan
,完成训练好的大模型的本地部署。
3.如果不光是本地使用的话,还可以使用LLaMA-Factory的API服务或者Ollama的API服务进行远程访问调用。
以上就是LLaMA-Factory微调的基本流程,后续再细化完善其中的参数指标。