目录

模型微调-基于LLaMA-Factory进行微调的一个简单案例

模型微调-基于LLaMA-Factory进行微调的一个简单案例

1. 租用云计算资源

以下示例基于 云计算资源。

在云计算平台选择可用的云计算资源实例,如果有4090实例可用,推荐选择4090实例。同时注意镜像的选择,所以镜像会包含特定的环境,省去一些基础环境的安装步骤,不过这里镜像在实例启动之后也可以进行切换。

https://i-blog.csdnimg.cn/direct/21562705453241be922e2de19215b54b.png

创建实例之后,通过SSH连接远程服务器

https://i-blog.csdnimg.cn/direct/60475923357646e2865d5ee239b54a22.png

这里我使用 VS Code的 Remote-SSH 插件进行连接,连接进去之后可以看到实例中有两个盘,其中/root/autodl-tmp是数据盘,推荐运行环境、模型文件都放在数据盘,避免后续因为实例关机回收导致数据文件丢失。

https://i-blog.csdnimg.cn/direct/c5d6f4e8faad43fbb69e5a3842d6eb88.png

2. 拉取 LLaMa-Factory

LLaMa-Factory 的 git 地址如下,通过 git 命令拉取

git clone https://github.com/hiyouga/LLaMA-Factory.git

https://i-blog.csdnimg.cn/direct/7571ded26c4c413e9ccb4efcef5ae4e9.png

3. 安装依赖环境

LLaMa-Factory 依赖 Python 特定版本,这里使用 Conda 来进行 Python 虚拟环境管理,大语言模型相关的框架对运行环境的依赖比较严重,推荐通过虚拟环境进行隔离。

https://i-blog.csdnimg.cn/direct/2d39c4b4a25747ab8be6a08c83e6bede.png

而在创建虚拟环境之前,推荐设置一下 Conda 虚拟环境和 Python 包的保存路径,还是那个原因,避免因为云计算资源回收导致数据丢失。

mkdir -p /root/autodl-tmp/conda/pkgs
conda config --add pkgs_dirs /root/autodl-tmp/conda/pkgs
mkdir -p /root/autodl-tmp/conda/envs
conda config --add envs_dirs /root/autodl-tmp/conda/envs/

之后创建虚拟环境:

conda create -n llama-factory python=3.10

虚拟环境创建完成之后,通过以下命令初始化以下Conda,并刷新一下命令行环境变量,再激活环境:

conda init
source ~/.bashrc
conda activate llama-factory

https://i-blog.csdnimg.cn/direct/1d43dcb69b1c46208b9873bd8d7032ea.png

之后进入 LLaMa-Factory 文件夹,通过以下命令进行 LLaMa-Factory 相关依赖包的安装

pip install -e ".[torch,metrics]"

https://i-blog.csdnimg.cn/direct/fc66d59bf4cb4fe88f54146aade0ac23.png

安装完成之后,通过以下命令测试一下 LLaMa-Factory 是否正常安装:

llamafactory-cli version

https://i-blog.csdnimg.cn/direct/9f8ef2d2f40949fb84cdbb6e6fe54f67.png

4. 启动 LLaMa-Factory 界面

通过以下命令启动 LLaMa-Factory 可视化微调界面:

llamafactory-cli webui

https://i-blog.csdnimg.cn/direct/f9bab1bffcc14345b880411933eb8706.png

通过 VS Code 中的 Remote-SSH 插件连接云服务器的情况,启动可视化界面之后,Remote-SSH 会自动进行端口转发,从而自动在本地浏览器打开相应的页面。如果是其他工具的话,可能需要在云平台配置一下相应的端口,之后通过云平台暴漏出来的域名打开。

https://i-blog.csdnimg.cn/direct/9763d22f416b4e34827599120692e009.png

5. 从 Huggingface 下载模型

首先创建一个文件夹用于存放模型文件:

mkdir hugging-face

增加环境变量,修改 HuggingFace 镜像源为国内镜像网站:

export HF_ENDPOINT=https://hf-mirror.com

修改模型默认存储路径:

export HF_HOME=/root/autodl-tmp/hugging-face

https://i-blog.csdnimg.cn/direct/2662bbddd133426da0f54b8fe4b1a691.png

之后还是切换到 llama-factory 虚拟环境,安装 HuggingFace官方下载工具:

pip install -U huggingface_hub

https://i-blog.csdnimg.cn/direct/7dfa13604e2f49cbbc58b53bd5d0a848.png

安装完成之后,通过以下命令下载模型:

huggingface-cli download --resume-download Qwen/Qwen2.5-0.5B-Instruct

https://i-blog.csdnimg.cn/direct/d19f10d59f19429a8bf95a9c68e82460.png

这里为了下载和后面的微调演示快点就下载0.5B的模型了,具体的模型大家可以根据实际情况去选择自己需要的模型,在huggingface上搜索模型名称,之后进入模型主页,复制名称即可:

https://i-blog.csdnimg.cn/direct/7cc8a4e2ef504158b9fcdb98a6e02139.png

模型文件都比较大,在线下载的话需要等待一段时间,下载完成之后,可以看到模型文件就在 hugging-face 文件夹下了。

https://i-blog.csdnimg.cn/direct/50737ebaea20419c823f2f29bb478163.png

在线下载比较占用时间,而云服务器开机每一分钟都需要花钱,你可以在本地下载模型文件之后传到云服务器上。这时候可以通过 AutoDL 提供的 Jupyter 工具进行文件上传,或者通过其他带有SFTP功能的工具连接云服务器上传。

https://i-blog.csdnimg.cn/direct/f70c10d8eeb44da5b8ec0bf4dd5c20fb.png

https://i-blog.csdnimg.cn/direct/d99abfcd19954890afb211d270c59089.png

6. 模型验证

下载完成模型之后,我们需要验证模型文件是否可以正常加载、运行,可以通过 LLaMa-Factory 的可视乎界面加载运行模型:

https://i-blog.csdnimg.cn/direct/1ed2b46fb3634e3ab1bda8a8568f4762.png

需要注意的是,加载本地模型的时候,需要修改填写模型本地路径,这里的路径是模型快照的唯一哈希值,而不是模型文件夹的路径。

https://i-blog.csdnimg.cn/direct/4447eb49d19d414a8d4f42b445472a7f.png

之后就可通过和模型进行对话,测试下载下来的模型是否正常了,也可以看下对话中模型输出的风格,和我们微调之后的做下对比。

https://i-blog.csdnimg.cn/direct/a3e04f17a83743c4a433d2011d8ae135.png

7. 模型微调

接下来就可以通过 LLaMa-Factory 进行微调了,这里先做一个简单的演示,为了不让这篇文章篇幅过长,先不具体讲解各种微调参数的含义和作用,数据集也只使用 LLaMa-Factory 自带的示例数据集,演示一下对模型认知设定的微调。

修改一下默认的 identity.json 数据集,将其中的{ {name}}、{ {author}}替换为我们自己的设定,并保存文件。

https://i-blog.csdnimg.cn/direct/7e053b6f28d04c2d95162112962ea5a7.png

之后在 LLaMa-Factory Web界面中加载预览数据集,并且稍微调整一下超参,主要是学习率先保存不变,主要是训练轮次,以及验证集比例。

https://i-blog.csdnimg.cn/direct/fc413d9dd3834850871549144de87c01.png

https://i-blog.csdnimg.cn/direct/12a722edab7d41e99e0adb4dd99fea47.png

后续如果需要使用我们自定义的数据集的话,也只要将数据集文件放到 LLaMa-Factory 的 data 文件夹,再在 dataset_info.json 中进行配置,就可以在 Web 界面进行加载使用。这里就先不细说了。

https://i-blog.csdnimg.cn/direct/9361c70394b34d409ea686e05df50a90.png

之后点击开始,可以看到微调任务的执行进度,以及损失函数的变化情况。

https://i-blog.csdnimg.cn/direct/193a800336c1473e8305a87bb04682c9.png

0.5B 的模型,再加上数据集数据量不多,只有不到100条,所以微调过程还是很快的,可以看到最终的损失函数降到了 0.5 左右。不过这是因为训练数据太少,而且一些超参设置比较不合理,才有这样的较低损失函数,实际微调用于生产环境的模型时,要注意防止过拟合的情况。

https://i-blog.csdnimg.cn/direct/d40b4528b26147b2901075f5231695b9.png

之后,还是用 LLaMa-Factory 加载微调之后的模型文件进行测试,这里通过检查点路径添加刚刚训练完成的模型文件:

https://i-blog.csdnimg.cn/direct/70a776a871524fb7ba804a3851b28110.png

之后就可以和我们微调之后的模型进行对话了

https://i-blog.csdnimg.cn/direct/16b5b5427bc64d2e9d4cd02b03f8ac3d.png

可以看到,微调之后的模型已经学习了数据集中的信息,可以按照我们预设的人设回答问题。

参考文档: