当前位置:AIGC资讯 > AIGC > 正文

基于阿里云PAI部署LLaMA Factory 完成Llama3低代码微调和部署

一、引言

阿里云人工智能平台 PAI 提供了面向开发者与企业的深度学习工程平台,其中交互 式建模 PAI-DSW 集成了 Jupyter 等多种云端开发环境,提供丰富的计算资源与镜像环 境,实现开箱即用的高效开发模式。LLaMA Factory 则是一款开源低代码大模型微调框 架,集成了业界最广泛使用的微调技术,支持通过 Web UI 界面零代码微调大模型,目前 已经成为开源社区内最受欢迎的微调框架,GitHub 星标超过 2 万。本教程将基于 Meta AI 开源的 Llama-3 8B 模型,介绍如何使用 PAI 平台及 LLaMA Factory 训练框架完成模 型的中文化与角色扮演微调和评估。

PAI 文档:https://help.aliyun.com/zh/pai/user-guide/getting-started/

LLaMA Factory 开源地址:https://github.com/hiyouga/LLaMA-Factory

二、创建 PAI 实例

2.1 开通 PAI 并创建工作空间

如果您是首次使用 PAI 平台,可以先进入的产品试用页面:阿里云免费试用 - 阿里云,选择PAI-DSW试用点击立即试用,这样就可以有3个月的免费试用期限啦,领取使用就后可以点击前往默认工作空间。

2.2 创建 DSW 实例

进入工作空间后,在左侧选择模型开发与训练-交互式建模,点击新建实例。

填写实例名称,在资源配额中选择GPU规格,这里推荐选择显存24GB的A10 GPU, 即 ecs.gn7i-c8g1.2xlarge 规格

存储配置保持默认,选择官方镜像中的 modelscope:1.14.0-pytorch2.1.2-gpupy310-cu121-ubuntu22.04 镜像,点击下一步,检查信息无误后,点击创建实例

三、安装 LLaMA Factory 微调框架

DSW 实例创建成功后,点击打开进入工作空间。

进入工作空间,点击 Notebook 中的 Python 3(ipykernel)创建笔记本。

在代码单元格内填写以下命令,点击运行拉取 LLaMA Factory 源码。

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

接着点击+ Code 新建代码单元格,填写以下三条命令安装 LLaMA Factory 框架。

%cd /mnt/workspace/LLaMA-Factory
!pip uninstall -y vllm matplotlib
!pip install -e .[bitsandbytes,metrics]

最后新建代码窗格,填写以下命令,出现相同字样则说明安装成功。

!llamafactory-cli version

四、下载数据集

输入以下两条命令将远程数据集下载到工作空间。

!git clone https://github.com/exp240509/testdata.git
!mv data rawdata && mv testdata data

本教程预先将数据处理为框架特定的格式,数据集中的样本为多轮对话形式,每轮对 话都由一条用户指令和一条模型回答组成,微调过程中模型不断学习样本中的回答风格, 从而达到中文化与角色扮演的目的。该数据集分为训练集和验证集两个文件,其中训练集 共包含 320 组多轮对话样本,验证集共包含 30 组多轮对话样本,数据样例如下所示。

[
{
 "conversations": [
 {
 "from": "human",
 "value": "模仿西游记的孙悟空的语气和我聊天。如果你把水冻住,
你会得到什么?"
 },
 {
 "from": "gpt",
 "value": "哈哈,这问题还难倒俺老孙吗?把水冻住就是变成冰啦!
不过若是在取经的路上用得着这冰来做啥,比如过火焰山时,那可就是解渴消
暑的好东西了!你觉得呢?还有没有更有趣的问题让俺老孙来解答?"
 },
 {
 "from": "human",
 "value": "那怎么做才可以把水冻住"
 },
 {
5
 "from": "gpt",
 "value": "哈哈,对俺老孙来说,这可是轻而易举的事情!只需将水
放在凉快的地方,或者使用法力,一吹仙气,水便能迅速结冰啦!当然,在你
的世界里,把水放进冰箱的冷冻室里等一阵子,水就会变成冰块了。要是嫌慢,
可以尝试用点干冰或液氮什么的,不过得小心使用哈!毕竟不像俺老孙有抗寒
法力。"
 }
 ]
}
]

五、模型训练

5.1 启动 Web UI

在代码单元格内输入以下命令启动 LLaMA Factory Web UI。

!GRADIO_ROOT_PATH=/${JUPYTER_NAME}/proxy/7860/ \
USE_MODELSCOPE_HUB=1 \
llamafactory-cli webui

接着点击链接进入 Web UI。

5.2 配置参数

Web UI 的默认语言是英文,可通过左上角 Lang 切换语言到 zh(中文)。

在模型名称中输入 llama3,选择 LLaMA3-8B-Chat 模型。微调方法则保持默认值 lora,使用 LoRA 轻量化微调方法能极大程度地节约显存。

在数据集下拉列表中选择 train(训练集)用于模型微调。

点击预览数据集可以浏览数据集内容,点击关闭返回训练界面。

设置学习率为 1e-4,更改计算类型为 bf16,梯度累积为 2,有利于模型拟合。

点击 LoRA 参数设置展开参数列表,设置 LoRA+学习率比例为 16,LoRA+被证明是 比 LoRA 学习效果更好的算法。在 LoRA 作用模块中填写 all,即将 LoRA 层挂载到模型 的所有线性层上,提高拟合效果。

5.3 启动训练

将输出目录修改为 train_llama3,训练后的 LoRA 权重将会保存在此目录中。点击 预览命令可展示所有已配置的参数,点击开始启动模型微调。

启动微调后需要等待一段时间,待模型下载完毕后可在界面观察到训练进度和损失 曲线。模型微调大约需要 20 分钟,显示“训练完毕”代表微调成功。

六、模型评估

微调完成后,点击页面顶部的刷新适配器,然后点击适配器路径,即可弹出刚刚训练 完成的 LoRA 权重,点击选择下拉列表中的 train_llama3 选项,在模型启动时即可加载 微调结果。

选择 Evaluate&Predict 栏,在数据集下拉列表中选择 eval(验证集)评估模型。 更改输出目录为 eval_llama3,模型评估结果将会保存在该目录中。最后点击开始按钮 启动模型评估。

模型评估大约需要 5 分钟左右,评估完成后会在界面上显示验证集的分数。

其中 ROUGE 分数衡量了模型输出答案(predict)和验证集中标准答案(label)的 相似度,ROUGE 分数越高代表模型学习得更好。

七、模型测试

选择 Chat 栏,确保适配器路径是 train_llama3,点击加载模型即可在 Web UI 中 和微调模型进行对话。

在页面底部的对话框输入想要和模型对话的内容,点击提交即可发送消息。

发送后模型会逐字生成回答,从回答中可以发现模型学习到了数据集中的内容,能够 恰当地模仿诸葛亮的语气对话。

点击卸载模型,点击“×”号取消适配器路径,再次点击加载模型,即可与微调前的 原始模型聊天。

重新向模型发送相同的内容,发现原始模型无法模仿诸葛亮的语气生成中文回答。

八、总结

该教程介绍了如何使用 PAI 和 LLaMA Factory 框架,基于轻量化 LoRA 方法微调 Llama-3 模型,使其能够进行中文问答和角色扮演,同时通过验证集 ROUGE 分数和人 工测试验证了微调的效果。在后续实践中,可以使用实际业务数据集,对模型进行微调, 得到能够解决实际业务场景问题的本地领域大模型

(完)

更新时间 2024-06-07