使用 LLaMA-Factory 微调 Qwen2.5

实验环境

Windows11、Git

基座模型

  1. 去到 魔搭社区下载一个基座模型

image-20241031145119565

  1. 这里选择Qwen/Qwen2.5-0.5B-Instruct,点进去,中间模型文件点击右边的下载模型下载到本地(下载方法自己选择)

LLaMA-Factory框架

安装

LLaMA-Factory的仓库下载LLaMA-Factory,中文手册README_zh.md

1
2
3
git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install -e .

注意:如果是有GPU的需要自己去pytorch官网下载带CUDA的torch,否则怎么安装都是CPU版本的

准备训练数据

  1. 建立自己的数据集JSON格式文件,训练需要有固定的JSON格式

  2. 我使用的是Alpaca格式,类似于下面的JSON格式,但是还可以添加其他属性,我这里只是有简单的instructioninputoutput

image-20241031153551195

具体数据格式细节可看LLaMA-Factory/data/README_zh.md

  1. 将训练数据train.json放在data文件夹中
  2. 修改数据集描述文件:data文件夹中的dataset_info.json文件,最上面加上你的数据集让他可以识别出来

image-20241031153656923

启动Web UI

找到src文件夹下的webui.py,运行即可自动打开浏览器,看到LLaMA-Factory的WebUI

如果还缺少依赖自行安装

微调模型

  1. 先选择语言为zh,然后在模型名称处选择自己第一步下载的基座模型名称,再指定你模型下载的路径

image-20241031154502304

推荐使用绝对路径,因为相对路径是相对于LLaMA-Factory文件夹的

  1. 为了测试模型路径是否选择正确,可以先到Chat处进行对话,证明模型加载成功

image-20241031154642278

  1. 从Chat回到Train处,参数先不管(不懂),选择数据集,预览一下,可以看到数据出来证明成功

image-20241031154821509

  1. 到下方,预览命令->保存训练参数->载入训练参数->开始,直接按顺序点过去

image-20241031155121137

  1. 可以看到控制台中代码开始跑了,说明开始训练

image-20241031155240922

  1. 训练完毕,会出现提示和训练损失曲线

image-20241031155402155

测试训练的模型

  1. 来到Chat处,选择检查点路径,这个检查点就相当于是我们的一个训练存档,选择刚刚训练的检查点

  2. 对话发现没有达到效果,他还叫通义千问,可能是由于我们训练的太少的问题

image-20241031160735063

  1. 重新训练,降低学习率为4e-4(学慢点),然后加大训练轮数为10.0,重新加载新的检查点,这次效果达到了预期

image-20241031163909363

实测降低学习率和加大轮数可以达到好一点的效果,第一次损失曲线知道了2.9以下,修正后可以到0.5以下,不懂原理,可能是这个原因

导出训练后的模型

  1. 训练好后我们可以导出模型,选择我们想要的检查点,检查点+基座模型=我们的模型

image-20241031161738158

  1. 点击导出,导出后你可以发现他和我们的基座模型文件内容是一样的,因为导出本质上还是一个模型

image-20241031162143000

  1. 可以到Chat中测试导出的新模型,只需改变模型地址即可,无需再选择检查点,也可到达同样的效果

image-20241031162620186

导入Ollama运行

我们的模型不进行模型转换的话,无法在Ollama中使用,因为Ollama不支持我们这种safetensors 格式的模型,需要将其转为GGUF格式,详见ollama

推荐使用llama.cpp: LLM inference in C/C++转换为GGUF文件,即可导入Ollama,交给大家自己摸索,他不仅仅可用转换,更大的作用是量化模型,这个具体我也没了解……