LMDeploy高效部署Llama-3-8B,1.8倍vLLM推理效率

Llama 3 近期重磅发布,发布了 8B 和 70B 参数量的模型,LMDeploy 对 Llama 3 部署进行了光速支持,同时对 LMDeploy 推理 Llama 3 进行了测试,在公平比较的条件下推理效率是 vLLM 的 1.8 倍。

书生·浦语和机智流社区同学光速投稿了 LMDeploy 高效量化部署 Llama 3,欢迎 Star。

https://github.com/internLM/LMDeploy

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

本文将分为以下几个部分来介绍,如何使用LMDeploy来部署 Llama3(以 InternStudio 的环境为例)

  • 环境、模型准备

  • LMDeploy Chat CLI 工具

  • LMDeploy 模型量化(lite)

  • LMDeploy 服务(serve)

  • LMDeploy Llama3 推理测速

  • 使用 LMDeploy 运行视觉多模态大模型 Llama-Llava-3

1.环境、模型准备

1.1 环境配置

# 如果你是 InternStudio 可以直接使用
# studio-conda -t lmdeploy -o pytorch-2.1.2
# 初始化环境
conda create -n lmdeploy python=3.10
conda activate lmdeploy
conda install pytorch==2.1.2 torchvision==0.16.2 torchaudio==2.1.2 pytorch-cuda=12.1 -c pytorch -c nvidia

安装 LMDeploy 最新版

pip install -U lmdeploy

1.2 Llama3 的下载

安装 git-lfs 依赖

conda install git
apt-get install git-lfs
git-lfs install

下载模型

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

或者软链接 InternStudio 中的模型

mkdir -p ~/model
ln -s /root/share/new_models/meta-llama/Meta-Llama-3-8B-Instruct ~/model/Meta-Llama-3-8B-Instruct

2. LMDeploy Chat CLI 工具

直接在终端运行

conda activate lmdeploy
lmdeploy chat /root/model/Meta-Llama-3-8B-Instruct

运行结果是:

3. LMDeploy 模型量化lite

本部分内容主要介绍如何对模型进行量化。主要包括 W4A16 量化和 KV INT8、INT4 量化。

3.1 设置最大 KV Cache 缓存大小

模型在运行时,占用的显存可大致分为三部分:模型参数本身占用的显存、KV Cache 占用的显存,以及中间运算结果占用的显存。LMDeploy 的 KV Cache 管理器可以通过设置 --cache-max-entry-count 参数,控制 KV 缓存占用剩余显存的最大比例。默认的比例为 0.8。

下面通过几个例子,来看一下调整 --cache-max-entry-count 参数的效果。首先保持不加该参数(默认0.8),运行 Llama3-8b 模型。

lmdeploy chat /root/model/Meta-Llama-3-8B-Instruct/

新建一个终端运行

# 如果你是InternStudio 就使用
# studio-smi
nvidia-smi 

此时模型的占用为 33236M。下面,改变`--cache-max-entry-count`参数,设为 0.5。

lmdeploy chat /root/model/Meta-Llama-3-8B-Instruct/ --cache-max-entry-count 0.5

新建一个终端运行。

# 如果你是InternStudio 就使用
# studio-smi
nvidia-smi 

看到显存占用明显降低,变为 26708 M。

下面来一波“极限”,把 --cache-max-entry-count 参数设置为 0.01,约等于禁止 KV Cache 占用显存。

lmdeploy chat /root/model/Meta-Llama-3-8B-Instruct/ --cache-max-entry-count 0.01

然后与模型对话,可以看到,此时显存占用仅为 16176M,代价是会降低模型推理速度。

3.2 使用 W4A16 量化权重

仅需执行一条命令,就可以完成模型量化工作。

lmdeploy lite auto_awq \/root/model/Meta-Llama-3-8B-Instruct \--calib-dataset 'ptb' \--calib-samples 128 \--calib-seqlen 1024 \--w-bits 4 \--w-group-size 128 \--work-dir /root/model/Meta-Llama-3-8B-Instruct_4bit

运行时间较长,请耐心等待。量化工作结束后,新的 HF 模型被保存到 Meta-Llama-3-8B-Instruct_4bit 目录。下面使用 Chat 功能运行 W4A16 量化后的模型。

lmdeploy chat /root/model/Meta-Llama-3-8B-Instruct_4bit --model-format awq

为了更加明显体会到 W4A16 的作用,我们将 KV Cache 比例再次调为 0.01,查看显存占用情况。

lmdeploy chat /root/model/Meta-Llama-3-8B-Instruct_4bit --model-format awq --cache-max-entry-count 0.01

可以看到,显存占用变为 16176MB,明显降低。

3.3 在线量化 KV

自 v0.4.0 起,LMDeploy KV 量化方式有原来的离线改为在线。并且,支持两种数值精度 int4、int8。量化方式为 per-head per-token 的非对称量化。它具备以下优势:

  1. 量化不需要校准数据集。

  2. kv int8 量化精度几乎无损,kv int4 量化精度在可接受范围之内。

  3. 推理高效,在 llama2-7b 上加入 int8/int4 kv 量化,RPS 相较于 fp16 分别提升近 30% 和 40%。

  4. 支持 volta 架构(sm70)及以上的所有显卡型号:V100、20系列、T4、30系列、40系列、A10、A100 等等。

通过 LMDeploy 应用 kv 量化非常简单,只需要设定 quant_policy 参数。LMDeploy 规定 qant_policy=4表示 kv int4 量化,quant_policy=8 表示 kv int8 量化。

4. LMDeploy服务(serve)

在前面的章节,我们都是在本地直接推理大模型,这种方式成为本地部署。在生产环境下,我们有时会将大模型封装为 API 接口服务,供客户端访问。

4.1 启动 API 服务器

通过以下命令启动 API 服务器,推理 Meta-Llama-3-8B-Instruct 模型:

lmdeploy serve api_server \/root/model/Meta-Llama-3-8B-Instruct \--model-format hf \--quant-policy 0 \--server-name 0.0.0.0 \--server-port 23333 \--tp 1

其中,model-format、quant-policy 这些参数是与第三章中量化推理模型一致的;server-name 和 server-port 表示 AP I服务器的服务 IP 与服务端口;tp 参数表示并行数量(GPU 数量)。

通过运行以上指令,我们成功启动了 API 服务器,请勿关闭该窗口,后面我们要新建客户端连接该服务。

你也可以直接打开 http://{host}:23333 查看接口的具体使用说明,如下图所示。

注意,这一步由于 Server 在远程服务器上,所以本地需要做一下 ssh 转发才能直接访问。在你本地打开一个 cmd 窗口,输入命令如下:

ssh -CNg -L 23333:127.0.0.1:23333 root@ssh.intern-ai.org.cn -p 你的ssh端口号

ssh 端口号就是下面图片里的 39864,请替换为你自己的。

然后打开浏览器,访问 http://127.0.0.1:23333

4.2 命令行客户端连接 API 服务器

在“4.1”中,我们在终端里新开了一个 API 服务器。

本节中,我们要新建一个命令行客户端去连接 API 服务器。首先通过 VS Code 新建一个终端。

激活 conda 环境:

conda activate lmdeploy

运行命令行客户端:

lmdeploy serve api_client http://localhost:23333

运行后,可以通过命令行窗口直接与模型对话。

4.3 网页客户端连接 API 服务器

关闭刚刚的 VSCode 终端,但服务器端的终端不要关闭。

运行之前确保自己的 gradio 版本低于 4.0.0。

pip install gradio==3.50.2

新建一个 VSCode 终端,激活 conda 环境。

conda activate lmdeploy

使用 Gradio 作为前端,启动网页客户端。

lmdeploy serve gradio http://localhost:23333 \--server-name 0.0.0.0 \--server-port 6006

打开浏览器,访问地址 http://127.0.0.1:6006

然后就可以与模型进行对话了!

拓展部分:

5. LMDeploy Llama3 推理测速

使用 LMDeploy 在 A100(80G)推理 Llama3,每秒请求处理数(RPS)高达 25,是vLLM 推理效率的 1.8+ 倍。

它的 benchmark 方式如下:

  • 克隆仓库

cd ~
git clone https://github.com/Shengshenlan/Llama3-XTuner-CN.git
  • 下载测试数据

cd /root/lmdeploy
wget https://hf-mirror.com/datasets/anon8231489123/ShareGPT_Vicuna_unfiltered/resolve/main/ShareGPT_V3_unfiltered_cleaned_split.json
  • 执行 benchmark 命令(如果你的显存较小,可以调低 --cache-max-entry-count)

python benchmark/profile_throughput.py \ShareGPT_V3_unfiltered_cleaned_split.json \/root/model/Meta-Llama-3-8B-Instruct \--cache-max-entry-count 0.95 \--concurrency 256 \--model-format hf \--quant-policy 0 \--num-prompts 10000

结果是:

concurrency: 256
elapsed_time: 399.739sfirst token latency(s)(min, max, ave): 0.068, 4.066, 0.285
per-token latency(s) percentile(50, 75, 95, 99): [0, 0.094, 0.169, 0.227]number of prompt tokens: 2238364
number of completion tokens: 2005448
token throughput (completion token): 5016.892 token/s
token throughput (prompt + completion token): 10616.453 token/s
RPS (request per second): 25.016 req/s
RPM (request per minute): 1500.979 req/min

6. 使用 LMDeploy 运行视觉多模态大模型 Llava-Llama-3

6.1 安装依赖
pip install git+https://github.com/haotian-liu/LLaVA.git
6.2 运行模型

运行 touch /root/pipeline_llava.py 新建一个文件夹,复制下列代码进去

from lmdeploy import pipeline, ChatTemplateConfig
from lmdeploy.vl import load_image
pipe = pipeline('xtuner/llava-llama-3-8b-v1_1-hf',chat_template_config=ChatTemplateConfig(model_name='llama3'))image = load_image('https://raw.githubusercontent.com/open-mmlab/mmdeploy/main/tests/data/tiger.jpeg')
response = pipe(('describe this image', image))
print(response.text)

运行结果为:

你可以在 https://huggingface.co/xtuner/llava-llama-3-8b-v1_1-hf 找到更多细节

教程如有误请访问获取最新内容:

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

LMDeploy仓库:https://github.com/InternLM/lmdeploy.git

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

全志ARM-修改开发板内核启动日志

修改开发板内核日志输出级别: 默认输出级别为1,需要用超级用户权限修改 sudo vi /boot/orangepiEvn.txt 把第一行内核启动输出权限改为7,第二行把输出方式该为“serial”串口输出

TCP关闭连接时的一些思考

TCP协议是TCP/IP栈中最复杂的协议,它最大的优点是传输的可靠性,这通过面向连接、按序传输、超时重传、流量控制等机制保证其传输的可靠性。但这并不是我们今天要讨论的重点! TCP通信的过程分别是三个阶段:建立连接、传输数据、关…

科蓝尔环保 | 成都2024全国水科技大会暨技术装备成果展览会

2024年5月13日一15日中华环保联合会、福州大学、上海大学在四川省成都市联合举办“2024全国水科技大会暨技术装备成果展览会”。 大会主题:加快形成新质生产力 增强水业发展新动能 大会亮点:邀请6位院士,100余位行业专家,15场专…

Spark 基础

/* Why Spark一、MapReduce编程模型的局限性1、繁杂:只有Map和Reduce两个操作,复杂的逻辑需要大量的样板代码2、处理效率低:2.1、Map中间结果写磁盘,Reduce写HDFS,多个Map通过HDFS交换数据2.2、任务调度与启动开销大3、…

2024年智能手表行业线上市场销售数据分析

智能手表市场近几年随着各大厂商的加入,逐渐朝着专业化、智能化发展。从一开始被认为是“智商税”、“鸡肋产品”到如今可以成为人体心脑血管健康监测、专业运动测速、移动定位的“多功能电子管家”,智能手表市场仍在不断发展中。 根据鲸参谋数据显示&a…

mac安装java

在 macOS 上配置 Java 环境变量是相对简单的。你需要做的是设置 JAVA_HOME 环境变量,并将 bin 目录添加到 PATH 变量中。本篇是最详细的教程,细化每个步骤过程,保姆级的教程! 1. 下载JDK安装包 到oracle官网下载适合的JDK安装包…

pytest-asyncio:协程异步测试案例

简介:pytest-asyncio是一个pytest插件。它便于测试使用异步库的代码。具体来说,pytest-asyncio提供了对作为测试函数的协同程序的支持。这允许用户在测试中等待代码。 历史攻略: asyncio并发访问websocket Python:协程 - 快速创…

04_Scala网络序列化

文章目录 **1.网络****2. 序列化** 1.网络 Scala进行网络数据交互,使用是Java的IO类 实现案例:客户端连接服务器,向服务器发送数据; 1.创建两个文件,CLIENT,Server obj类型** ** Server端 2.在Server端…

服务案例|服务器批量重启

告警产生 4月16日上午7:30分左右,福州某市医院20多台服务器批量重启,通知现场工程师。 故障分析定位 1、通过批量重启告警信息,发现内网esxi53主机硬件告警,初步判断是X86设备esxi53发生故障,导致esxi53上的虚拟服务…

Qt下使用OpenCV截取图像并在QtableWidget表格上显示

文章目录 前言一、在QLabel上显示图片并绘制矩形框二、保存矩形框数据为CSV文件三、保存截取图像四、将截取图像填充到表格五、图形视图框架显示图像六、示例完整代码总结 前言 本文主要讲述了在Qt下使用OpenCV截取绘制的矩形框图像,并将矩形框数据保存为CSV文件&a…

vue elementui el-table 表格里边展示四分位图

vue elementui el-table 表格里边展示四分位图 直接上代码&#xff08;效果图在文章末尾&#xff09;&#xff1a; 父组件&#xff1a; <template> <el-table size"small":header-cell-style"headerCellStyle()"style"width: 100%;"…

表情识别 | 卷积神经网络(CNN)人脸表情识别(Matlab)

表情识别 | 卷积神经网络(CNN)人脸表情识别&#xff08;Matlab&#xff09; 目录 表情识别 | 卷积神经网络(CNN)人脸表情识别&#xff08;Matlab&#xff09;预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Matlab使用卷积神经网络(CNN)&#xff0c;进行人脸表情情绪识别…