人工智能培训之单卡3小时训练专属大模型Agent-基于LLaMA Factory实战

编辑:NLP工作站

今天给大家带来一篇Agent微调实战文章-《单卡 3 小时训练专属大模型 Agent:基于 LLaMA Factory 实战》,来自知乎@hiyouga(已授权)。

Agent(智能体)是当今 LLM(大模型)应用的热门话题 [1],通过任务分解(task planning)、工具调用(tool using)和多智能体协作(multi-agent cooperation)等途径,LLM Agent 有望突破传统语言模型能力界限,体现出更强的智能水平。在这之中,调用外部工具解决问题成为 LLM Agent 必不可缺的一项技能,模型根据用户问题从工具列表中选择恰当的工具,同时生成工具调用参数,综合工具返回结果和上下文信息总结出答案。通过调用外部工具,LLM 能够获取到实时、准确的知识,大大降低了生成中的幻觉(hallucination)现象,使 LLM 的任务解决能力得到长足的提升。工具调用能力的获得离不开模型微调,尽管使用 ReAct 提示 [2] 或其他预训练模型也能实现类似效果,但对于定制化或更加广泛的工具,对模型做进一步微调能有效地提升工具使用能力。本文将会带领大家使用 LLaMA Factory 的 Agent Tuning 功能,使用单张 GPU 在 3 小时内训练出自己专属的 LLM Agent。

LLaMA Factory 是一个涵盖预训练、指令微调到 RLHF 阶段的开源全栈大模型微调框架,具备高效、易用、可扩展的优点,配备有零代码可视化的一站式网页微调界面 LLaMA Board。经过半年多的升级迭代,LLaMA Board 网页微调界面在原先的基础上,丰富了多种新的功能,包括:

读者可以在 HF Spaces 或 魔搭社区 预览 LLaMA Board 网页微调界面。

本次我们选用零一万物 [3] 发布的 Yi-6B 开源双语基座模型,该模型于 2023 年 11 月发布,拥有约 60 亿参数,通过在 3T 多语言语料上的预训练,取得了同等规模下优异的中英文 Benchmark 效果,且允许免费商用。由于 Yi-6B 是一个预训练基座模型,并不具备对话能力,因此我们选用多个开源数据集对模型做指令监督微调(SFT)。在这些数据集中最关键的是工具调用数据集,该数据集包含约十万条由 Glaive AI [4] 生成的关于工具调用的对话样本,我们将数据集处理为多角色的多轮对话样本,包含用户(human)、模型(gpt)、工具调用(function_call)和工具返回结果(observation)四种不同角色,同时还有一个工具列表(tools)字段,以 OpenAI 的格式 [5] 定义了可选工具。下面是数据集中的一个样本示例:

如果读者想要加入自定义工具,只需要按照上述格式组织数据集即可。除此之外,我们也在本次训练中加入 Alpaca-GPT-4 数据集 [6] 和 Open-Assistant 数据集 [7] 以提升模型的通用对话能力。

文章默认读者有至少不弱于 RTX 3090 24GB 的显卡和足够的系统内存,且安装了 CUDA 11.1-12.3 任一版本,关于 CUDA 环境的配置此处不予赘述。

我们已经将所有的程序打包,您可以选择自己的 Anaconda 环境,运行以下命令安装 LLaMA Factory。

接着从 GitHub 下载数据集文件,这里以 Linux 命令行方法为示例,您也可以选择从 GitHub 网页下载,下载后切换到新的文件目录,运行 ls 命令应当显示同一级目录中存在 data 文件夹。

由于 LLaMA Board 网页微调界面仅支持单卡训练,需要设置环境变量指定使用的显卡序号。此外可以选择模型下载源,这里推荐国内用户使用魔搭社区下载渠道。

如果您使用的是 Windows 系统,同样需要配置相关环境变量。

然后使用下述命令启动 LLaMA Board 网页微调界面。

① 打开浏览器,在地址栏输入 localhost:7860 进入 LLaMA Board,可以看到以下界面,点击左上角的 lang 选项中将界面语言切换为中文。

② 点击模型名称,选择 Yi-6B 模型,此时模型路径默认会显示远程模型地址,如果您已经将模型文件全部下载至本地,可以手动将其修改为本地文件夹路径。

③ 如果您已经安装过 Flash Attention-2 或 Unsloth,可以点击高级设置-加速方式提升训练速度,其中 Flash Attention-2 [8] 可提升至 120% 左右的速度,Unsloth [9]可提升至 170% 左右的速度。此处我们略过安装过程,请各位读者自行查阅参考文献中的 GitHub 仓库安装,如果两者均未安装,请保持加速方式为 None。

④ 点击数据集,选择我们此次要使用的四个数据集 glaive_toolcall、alpaca_gpt4_en、alpaca_gpt4_zh 和 oaast_sft_zh,如果数据集下拉框为空白,请检查数据路径是否正确。选择后点击预览数据集按钮可预览数据集。

⑤ 训练参数中与显存占用有紧密关联的是截断长度和批处理大小选项,我们暂时保持默认。这里仅将训练轮数设置为 2.0,最大样本数设置为 8000,LoRA 参数设置-LoRA 作用模块设置为 all。

⑥ 将页面翻到底部,将输出目录设置为 yi-agent-6b,训练后的模型文件会保存在 saves/Yi-6B/lora/yi-agent-6b 中。点击预览命令按钮可以看到当前配置对应的命令行脚本,如果您想使用多卡训练,可以参考下述命令来编写多卡训练脚本。

⑦ 点击开始按钮启动模型训练,训练日志和损失变化图会实时展现在页面中,此时可以自由关闭或刷新网页,在本文的测试环境(A100 40GB * 1)下,约 3 小时即可完成模型训练。

⑧ 训练结束后,我们切换到 Chat 栏,点击刷新适配器按钮,将适配器路径切换至 yi-agent-6b,点击加载模型按钮载入刚刚训练好的模型。

如果模型可以正常加载,那么恭喜你!仅花费一部电影的时间,就成功训练出了自己专属的 LLM Agent。

① 基本对话

② 工具调用 - 查询天气

③ 工具调用 - 计算 GPA

从上述几个例子中可以看出,经过微调后的 Yi-6B 模型成功具备了选择工具-调用工具-总结答案的出色能力,在 Agent 方面的性能显著超越原始 Yi-6B-Chat 模型。由于网页界面功能有限,我们这里手动输入了工具调用结果,在下面的章节,我们将会展示如何使用 LLaMA Factory 将 LLM Agent 部署到实际生产环境中。

① 切换到 Export 栏,选择最大分块大小为 2GB,填写导出目录为 models/yi-agent-6b,点击开始导出按钮,将 LoRA 权重合并到模型中,同时保存完整模型文件,保存后的模型可以通过 transformers 等直接加载。

② 在终端输入以下命令启动 API 服务。

该命令会在本地启动一个和 OpenAI 格式相同的 RESTFul API,这时我们可以直接用本地模型来替代 GPT-3.5 的函数调用功能!下面是一个使用 openai-python 库来调用本地模型,实现 LLM Agent 功能的示例代码。

LLaMA Factory 在今后还将不断升级,欢迎大家关注我们的 GitHub 项目。同时,我们也将本文的模型上传到了 Hugging Face,如果您有资源,一定要亲自动手训练一个大模型 Agent!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值