Llama3-Tutorial之Llama3 Agent能力体验+微调(Lagent版)

news2024/11/26 8:56:25

Llama3-Tutorial之Llama3 Agent能力体验+微调(Lagent版)

参考: https://github.com/SmartFlowAI/Llama3-Tutorial

1. 微调过程

使用XTuner在Agent-FLAN数据集上微调Llama3-8B-Instruct,以让 Llama3-8B-Instruct 模型获得智能体能力。

Agent-FLAN 数据集是上海人工智能实验室 InternLM 团队所推出的一个智能体微调数据集,其通过将原始的智能体微调数据以多轮对话的方式进行分解,对数据进行能力分解并平衡,以及加入负样本等方式构建了高效的智能体微调数据集,从而可以大幅提升模型的智能体能力。

1.1 环境配置

我们先来配置相关环境。使用如下指令便可以安装好一个 python=3.10 pytorch=2.1.2+cu121 的基础环境了。

conda create -n llama3 python=3.10
conda activate llama3
conda install pytorch==2.1.2 torchvision==0.16.2 torchaudio==2.1.2 pytorch-cuda=12.1 -c pytorch -c nvidia

接下来我们安装 XTuner。

cd ~
git clone -b v0.1.18 https://github.com/InternLM/XTuner
cd XTuner
pip install -e .[all]

如果在前面的课程中已经配置好了环境,在这里也可以选择直接执行 conda activate llama3 以进入环境。

最后,我们 clone 本教程仓库。

cd ~
git clone https://github.com/SmartFlowAI/Llama3-Tutorial

1.2 模型准备

在微调开始前,我们首先来准备 Llama3-8B-Instruct 模型权重。

  • InternStudio
mkdir -p ~/model
cd ~/model
ln -s /root/share/new_models/meta-llama/Meta-Llama-3-8B-Instruct .
  • 非 InternStudio

我们选择从 OpenXLab 上下载 Meta-Llama-3-8B-Instruct 的权重。

mkdir -p ~/model
cd ~/model
git lfs install
git clone https://code.openxlab.org.cn/MrCat/Llama-3-8B-Instruct.git Meta-Llama-3-8B-Instruct

1.3 数据集准备

由于 HuggingFace 上的 Agent-FLAN 数据集暂时无法被 XTuner 直接加载,因此我们首先要下载到本地,然后转换成 XTuner 直接可用的格式。

  • InternStudio

如果是在 InternStudio 上,我们已经准备好了一份转换好的数据,可以直接通过如下脚本准备好:

cd ~
cp -r /root/share/new_models/internlm/Agent-FLAN .
chmod -R 755 Agent-FLAN
  • 非 InternStudio

首先先来下载数据:

cd ~
git lfs install
git clone https://huggingface.co/datasets/internlm/Agent-FLAN

我们已经在 SmartFlowAI/Llama3-Tutorial 仓库中已经准备好了相关转换脚本。

python ~/Llama3-Tutorial/tools/convert_agentflan.py ~/Agent-FLAN/data

在显示下面的内容后,就表示已经转换好了。转换好的数据位于 ~/Agent-FLAN/data_converted

Saving the dataset (1/1 shards): 100%|████████████| 34442/34442

1.4 微调启动

我们已经为大家准备好了可以一键启动的配置文件,主要是修改好了模型路径、对话模板以及数据路径。

我们使用如下指令以启动训练:

# 启动训练
export MKL_SERVICE_FORCE_INTEL=1
xtuner train ~/Llama3-Tutorial/configs/llama3-agentflan/llama3_8b_instruct_qlora_agentflan_3e.py --work-dir ~/llama3_agent_pth --deepspeed deepspeed_zero2

在训练完成后,我们将权重转换为 HuggingFace 格式,并合并到原权重中。

# 转换权重
xtuner convert pth_to_hf ~/Llama3-Tutorial/configs/llama3-agentflan/llama3_8b_instruct_qlora_agentflan_3e.py \
    ~/llama3_agent_pth/iter_18516.pth \
    ~/llama3_agent_pth/iter_18516_hf

由于训练时间太长,我们也为大家准备好了已经训练好且转换为 HuggingFace 格式的权重,可以直接使用。路径位于 /share/new_models/agent-flan/iter_2316_hf

如果要使用自己训练的权重,可以使用如下指令合并权重:

# 合并权重
export MKL_SERVICE_FORCE_INTEL=1
xtuner convert merge /root/model/Meta-Llama-3-8B-Instruct \
    ~/llama3_agent_pth/iter_18516_hf \
    ~/llama3_agent_pth/merged

如果要使用已经训练好的权重,可以使用如下指令合并权重:

export MKL_SERVICE_FORCE_INTEL=1
xtuner convert merge /root/model/Meta-Llama-3-8B-Instruct \
    /share/new_models/agent-flan/iter_2316_hf \
    ~/llama3_agent_pth/merged

本文试验时,使用已经训练好的权重。

合并后的权重如下:
(llama3) root@intern-studio-50014188:~# ls -alh /root/llama3_agent_pth/merged/
total 15G
drwxr-xr-x 2 root root  4.0K May  6 14:11 .
drwxr-xr-x 4 root root  4.0K May  6 14:11 ..
-rw-r--r-- 1 root root   707 May  6 14:11 config.json
-rw-r--r-- 1 root root   121 May  6 14:11 generation_config.json
-rw-r--r-- 1 root root  1.9G May  6 14:11 pytorch_model-00001-of-00009.bin
-rw-r--r-- 1 root root  1.8G May  6 14:11 pytorch_model-00002-of-00009.bin
-rw-r--r-- 1 root root  1.9G May  6 14:11 pytorch_model-00003-of-00009.bin
-rw-r--r-- 1 root root  1.9G May  6 14:11 pytorch_model-00004-of-00009.bin
-rw-r--r-- 1 root root  1.9G May  6 14:11 pytorch_model-00005-of-00009.bin
-rw-r--r-- 1 root root  1.9G May  6 14:11 pytorch_model-00006-of-00009.bin
-rw-r--r-- 1 root root  1.9G May  6 14:11 pytorch_model-00007-of-00009.bin
-rw-r--r-- 1 root root  1.3G May  6 14:11 pytorch_model-00008-of-00009.bin
-rw-r--r-- 1 root root 1003M May  6 14:11 pytorch_model-00009-of-00009.bin
-rw-r--r-- 1 root root   24K May  6 14:11 pytorch_model.bin.index.json
-rw-r--r-- 1 root root   301 May  6 14:11 special_tokens_map.json
-rw-r--r-- 1 root root  8.7M May  6 14:11 tokenizer.json
-rw-r--r-- 1 root root   50K May  6 14:11 tokenizer_config.json

2. Lagent Web Demo

因为我们在微调前后都需要启动 Web Demo以观察效果,因此我们将 Web Demo部分单独拆分出来。

首先我们先来安装 lagent。

pip install lagent

然后我们使用如下指令启动 Web Demo:

streamlit run ~/Llama3-Tutorial/tools/agent_web_demo.py 微调前/后LLaMA3 模型路径

# ssh端口转发。除了使用vscode配置端口转发之外,也可以使用ssh命令行直接配置,在本地(最新win10及以上操作系统默认带有ssh命令)运行如下命令并输入密码。
# 将开发机的8501端口转发到本机的8501端口。开发机连接的域名和端口可以在web界面进行查看。
ssh -CNg -L 8501:127.0.0.1:8501 -o StrictHostKeyChecking=no -p 46672 root@ssh.intern-ai.org.cn
  • 微调前 LLaMA3 路径: /root/model/Meta-Llama-3-8B-Instruct
  • 微调后 LLaMA3 路径: /root/llama3_agent_pth/merged

测试问题:

Please help me search for the InternLM2 Technical Report!

3. Llama3 ReAct Demo

首先我们先来使用基于 Lagent 的 Web Demo 来直观体验一下 Llama3 模型在 ReAct范式下的智能体能力。我们让它使用 ArxivSearch 工具来搜索 InternLM2 的技术报告。

从图中可以看到,Llama3-8B-Instruct 模型并没有成功调用工具。原因在于它输出了 query=InternLM2 Technical Report 而非 {'query': 'InternLM2 Technical Report'},这也就导致了 ReAct 在解析工具输入参数时发生错误,进而导致调用工具失败。

alt

4. Llama3+Agent-FLAN ReAct Demo

在合并权重后,我们再次使用 Web Demo 体验一下它的智能体能力吧~

可以看到,经过 Agent-FLAN 数据集的微调后,Llama3-8B-Instruct 模型已经可以成功地调用工具了,其智能体能力有了很大的提升。

alt

遗留问题:

  1. A100 30%的资源(24G显存)做本实验,借助vscode,运行web demo后,命令行界面模型会加载两次,web测试问答,提示内存不足:
alt

主要原因还是显存不足,针对该问题有如下几条经验(操作角度):

  • 运行web demo之前关闭其他占用显存资源的实例,是否显存资源;
  • 运行web demo之后,等到命令行界面 loading checkpoint shards: 100%之后,然后在web界面选择'ArxivSearch'插件;

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1652242.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WinForm中防页面假死的loading提示

如果在WinForm中执行一个长时间操作时,窗体就会被锁死,直到操作完成,对于操作者的体验就是死锁状态,那在.NET(.net 5以后)中,怎么实现一个并发,等待,且同步操作信息窗口呢…

PLM系统推荐:产品全生命周期管理最佳解决方案

PLM系统推荐:产品全生命周期管理最佳解决方案 在当今日益竞争激烈的市场环境中,企业如何高效管理其产品设计、开发和生命周期变得尤为重要。产品生命周期管理(PLM)系统正是为解决这一难题而诞生的。本文将为您详细介绍几款值得推荐…

unreal engine5.3.2 Quixel bridge无法登陆

UE5系列文章目录 文章目录 UE5系列文章目录前言一、问题定位二、解决方法 前言 这几天unreal engine5.3.2 Quixel bridge无法登陆,输入epic 账号和密码,然后在输入epic发送的验证码,总是提示登录失败。就算是使用科学上网依然无法登录。而且…

【Linux进程间通信(五)】System V 信号量

(一)什么是信号量 互斥相关概念 1、并发: 2、互斥 3、临界资源&临界区 4、原子性 (二)信号量的理解 (三)信号量的两种基本操作 P / V (四)信号量的内核数据结…

列表、字典推导式介绍和用法|lambda的介绍和用法

列表、字典推导式介绍和用法|lambda的介绍和用法 列表推导式示例应用与传统写法代码行数直观比较 字典推导式示例应用 lambda示例应用 列表推导式、字典推导式、lambda使用简洁语法进行代码的编写 列表推导式 用于快速创建新的列表,通过对现有列表进行迭代和筛选。…

pytest(二):关于pytest自动化脚本编写中,初始化方式setup_class与fixture的对比

一、自动化脚本实例对比 下面是一条用例,使用pytest框架,放在一个类中,两种实现方式: 1.1 setup_class初始化方式 1. 优点: 代码结构清晰,setup_class 和 teardown_class 看起来像传统的类级别的 setup 和 teardown 方法。2. 缺点: 使用 autouse=True 的 fixture 作为…

文件夹名称大小写转换:名称首字母转大写,一种高效的文件管理方法

在日常生活和工作中,电脑文件夹的管理对于提高工作效率和文件检索的便捷性至关重要。文件夹名称的命名规则直接影响到文件组织的有序性和查找的速度。其中,将文件夹名称的首字母转换为大写是一种简单而高效的管理方法,下面我们就来详细探讨实…

Spring Security 入门1

1. 概述 基本上,在所有的开发的系统中,都必须做认证(authentication)和授权(authorization),以保证系统的安全性。 authentication [ɔ,θɛntɪ’keʃən] 认证 authorization [,ɔθərɪ’zeʃən] 授权 以论坛举例子: 【认证…

Context capture/Pix4Dmapper/AutoCAD/CASS/EPS软件的安装流程与使用方法;土方量计算;无人机摄影测量数据处理

目录 专题一 无人机摄影测量技术应用现状及其发展 专题二 基本原理和关键技术讲解 专题三 无人机影像外业数据获取 专题四 数据处理环境建立与软件熟悉 专题五 GNSS数据土方量计算 专题六 基于无人机影像数据的正射影像制作 专题七 基于无人机影像数据的三维模型制作 专…

号称能打败MLP的KAN到底行不行?数学核心原理全面解析

前几天火爆的Kolmogorov-Arnold Networks是具有开创性,目前整个人工智能社区都只关注一件事LLM。我们很少看到有挑战人工智能基本原理的论文了,但这篇论文给了我们新的方向。 mlp或多层感知位于AI架构的最底部,几乎是每个深度学习架构的一部…

为什么 ChatGPT 不火了?

不火了是有原因的,下面我来从大部分人拿到 ChatGPT 之后的两大痛点开始讲起: 很多朋友拿到 ChatGPT 后的第一个痛点就是:用的不好 你经常会感觉到 ChatGPT 回答的好空,没有太多参考价值。 而第二个痛点则是:无处去用…

【Gateway】网关集成Knife4j—swagger接口文档

文章目录 前言一、相关配置1.网关gateway配置①.网关增加配置 pom文件②.网关增加配置 SwaggerHandler③.网关增加配置 SwaggerResourceConfig④.网关增加配置 SwaggerConfig 2.网关过滤器 二、接口文档使用1.访问文档2.查看文档 总结 前言 在日常开发中是需要前后端联调的&am…

加密杂谈:Base 向上,BSC 向下

Aerdrome 价格走过一轮,Base 一己之力扶持起巅峰 1B Mcap, 2B FDV 的百倍币,秀出了肌肉,其所带来的正外部性也进一步盘活了 Base 生态 反观 BSC 本轮哪怕靴子落地依然没个响,差距在哪里?本 Thread 将以此为切入点探讨…

Vue3:menu导航栏出现多个同一跳转路径的菜单处理

文章目录 需求整理实现思路实现过程 需求整理,实现思路 最近公司想将之前老的项目整理出来,因为这个老项目内容太杂什么页面都往里面塞,导致菜单特别多,公司就像将这个老的项目迁出来,这个旧的项目本来是后端PHP写的。…

【保姆级详细步骤教学用DOSBoxV0.74写出一个汇编语言程序输出Hello World!】

使用任何文本编辑器创建一个名为 HELLO.ASM 的文件,并将以下代码粘贴到文件中: .MODEL SMALL .STACK 100H.DATAMSG DB Hello, World!, $PROMPT DB 13, 10, Press any key to exit..., $.CODEMAIN PROCMOV AX, DATAMOV DS, AXMOV AH, 09HLEA DX, MSGINT …

用户页面触发点击事件和 js 执行点击事件的区别

文章目录 情景展示情况一:用户点击页面触发情况二:通过 js 触发点击 结果分析情况一情况二 其实这个谜底揭开之后,第一反应都是,哦~,非常简单,但是细节决定成败,我被这个细节毁掉了,…

docker资源限额

多数的应⽤场景要对Docker容器的运⾏内存进⾏限制,防⽌其使⽤过多的内存。 格式:-m或--memory 正常的内存大小 [rootadmin ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS …

硬件设计——滤波器设计_MIC用有源带通滤波器

“在已有的成熟稳定的滤波器基础上,根据业务需要对原设计进行优化调整以得到新的滤波器” 是滤波器设计的一种常用方法。 MIC用有源带通滤波器 介绍一种简单直观的带通滤波器以及计算过程,以作未来可参考的基线设计。该滤波器可用于音频信号&#xff0…

【算法】基础算法004之前缀和

👀樊梓慕:个人主页 🎥个人专栏:《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》《算法》 🌝每一个不曾起舞的日子,都是对生命的辜负 前言 本篇文章为大家带来前缀和…

【EI会议|投稿优惠】2024年物理化学与应用数学国际会议(IACPCAM 2024)

2024 International Conference on Physical Chemistry and Applied Mathematics 一、大会信息 会议名称:2024年物理化学与应用数学国际会议会议简称:IACPCAM 2024收录检索:提交Ei Compendex,CPCI,CNKI,Google Scholar等会议官网:…