LMDeploy高效摆设Llama-3-8B,1.8倍vLLM推理效率

打印 上一主题 下一主题

主题 576|帖子 576|积分 1728

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 环境设置

  1. # 如果你是 InternStudio 可以直接使用
  2. # studio-conda -t lmdeploy -o pytorch-2.1.2
  3. # 初始化环境
  4. conda create -n lmdeploy python=3.10
  5. conda activate lmdeploy
  6. conda install pytorch==2.1.2 torchvision==0.16.2 torchaudio==2.1.2 pytorch-cuda=12.1 -c pytorch -c nvidia
复制代码
安装 LMDeploy 最新版
  1. pip install -U lmdeploy
复制代码
1.2 Llama3 的下载

安装 git-lfs 依赖
  1. conda install git
  2. apt-get install git-lfs
  3. git-lfs install
复制代码
下载模型
  1. mkdir -p ~/model
  2. cd ~/model
  3. git clone https://code.openxlab.org.cn/MrCat/Llama-3-8B-Instruct.git Meta-Llama-3-8B-Instruct
复制代码
大概软链接 InternStudio 中的模型
  1. mkdir -p ~/model
  2. ln -s /root/share/new_models/meta-llama/Meta-Llama-3-8B-Instruct ~/model/Meta-Llama-3-8B-Instruct
复制代码
2. LMDeploy Chat CLI 工具

直接在终端运行
  1. conda activate lmdeploy
  2. 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 模型。
  1. lmdeploy chat /root/model/Meta-Llama-3-8B-Instruct/
复制代码
新建一个终端运行
  1. # 如果你是InternStudio 就使用
  2. # studio-smi
  3. nvidia-smi
复制代码

此时模型的占用为 33236M。下面,改变`--cache-max-entry-count`参数,设为 0.5。
  1. lmdeploy chat /root/model/Meta-Llama-3-8B-Instruct/ --cache-max-entry-count 0.5
复制代码
新建一个终端运行。
  1. # 如果你是InternStudio 就使用
  2. # studio-smi
  3. nvidia-smi
复制代码

看到显存占用明显低落,变为 26708 M。
下面来一波“极限”,把 --cache-max-entry-count 参数设置为 0.01,约等于禁止 KV Cache 占用显存。
  1. lmdeploy chat /root/model/Meta-Llama-3-8B-Instruct/ --cache-max-entry-count 0.01
复制代码

然后与模型对话,可以看到,此时显存占用仅为 16176M,代价是会低落模型推理速率。
3.2 使用 W4A16 量化权重

仅需实行一条命令,就可以完成模型量化工作。
  1. lmdeploy lite auto_awq \
  2.    /root/model/Meta-Llama-3-8B-Instruct \
  3.   --calib-dataset 'ptb' \
  4.   --calib-samples 128 \
  5.   --calib-seqlen 1024 \
  6.   --w-bits 4 \
  7.   --w-group-size 128 \
  8.   --work-dir /root/model/Meta-Llama-3-8B-Instruct_4bit
复制代码
运行时间较长,请耐心等待。量化工作结束后,新的 HF 模型被保存到 Meta-Llama-3-8B-Instruct_4bit 目录。下面使用 Chat 功能运行 W4A16 量化后的模型。
  1. lmdeploy chat /root/model/Meta-Llama-3-8B-Instruct_4bit --model-format awq
复制代码
为了更加明显领会到 W4A16 的作用,我们将 KV Cache 比例再次调为 0.01,查看显存占用情况。
  1. 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 的非对称量化。它具备以下优势:

  • 量化不必要校准数据集。
  • kv int8 量化精度几乎无损,kv int4 量化精度在可继承范围之内。
  • 推理高效,在 llama2-7b 上到场 int8/int4 kv 量化,RPS 相较于 fp16 分别提拔近 30% 和 40%。
  • 支持 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 模型:
  1. lmdeploy serve api_server \
  2.     /root/model/Meta-Llama-3-8B-Instruct \
  3.     --model-format hf \
  4.     --quant-policy 0 \
  5.     --server-name 0.0.0.0 \
  6.     --server-port 23333 \
  7.     --tp 1
复制代码
此中,model-format、quant-policy 这些参数是与第三章中量化推理模型同等的;server-name 和 server-port 表示 AP I服务器的服务 IP 与服务端口;tp 参数表示并行数目(GPU 数目)。
通过运行以上指令,我们乐成启动了 API 服务器,请勿关闭该窗口,后面我们要新建客户端连接该服务。
你也可以直接打开 http://{host}:23333 查看接口的具体使用说明,如下图所示。

注意,这一步由于 Server 在远程服务器上,所以本地必要做一下 ssh 转发才气直接访问。在你本地打开一个cmd窗口,输入命令如下:
  1. 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 环境:
  1. conda activate lmdeploy
复制代码
运行命令行客户端:
  1. lmdeploy serve api_client http://localhost:23333
复制代码
运行后,可以通过命令行窗口直接与模型对话。
4.3 网页客户端连接 API 服务器

关闭刚刚的 VSCode 终端,但服务器端的终端不要关闭。
运行之前确保自己的 gradio 版本低于 4.0.0。
  1. pip install gradio==3.50.2
复制代码

新建一个 VSCode 终端,激活 conda 环境。
  1. conda activate lmdeploy
复制代码
使用 Gradio 作为前端,启动网页客户端。
  1. lmdeploy serve gradio http://localhost:23333 \
  2.     --server-name 0.0.0.0 \
  3.     --server-port 6006
复制代码
打开浏览器,访问地址 http://127.0.0.1:6006
然后就可以与模型举行对话了!
拓展部分:

5. LMDeploy Llama3 推理测速

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


  • 克隆仓库
  1. cd ~
  2. git clone https://github.com/Shengshenlan/Llama3-XTuner-CN.git
复制代码


  • 下载测试数据
  1. cd /root/lmdeploy
  2. wget https://hf-mirror.com/datasets/anon8231489123/ShareGPT_Vicuna_unfiltered/resolve/main/ShareGPT_V3_unfiltered_cleaned_split.json
复制代码


  • 实行 benchmark 命令(如果你的显存较小,可以调低 --cache-max-entry-count)
  1. python benchmark/profile_throughput.py \
  2.     ShareGPT_V3_unfiltered_cleaned_split.json \
  3.     /root/model/Meta-Llama-3-8B-Instruct \
  4.     --cache-max-entry-count 0.95 \
  5.     --concurrency 256 \
  6.     --model-format hf \
  7.     --quant-policy 0 \
  8.     --num-prompts 10000
复制代码
结果是:
  1. concurrency: 256
  2. elapsed_time: 399.739s
  3. first token latency(s)(min, max, ave): 0.068, 4.066, 0.285
  4. per-token latency(s) percentile(50, 75, 95, 99): [0, 0.094, 0.169, 0.227]
  5. number of prompt tokens: 2238364
  6. number of completion tokens: 2005448
  7. token throughput (completion token): 5016.892 token/s
  8. token throughput (prompt + completion token): 10616.453 token/s
  9. RPS (request per second): 25.016 req/s
  10. RPM (request per minute): 1500.979 req/min
复制代码
6. 使用LMDeploy运行视觉多模态大模型Llava-Llama-3

6.1 安装依赖

  1. pip install git+https://github.com/haotian-liu/LLaVA.git
复制代码
6.2 运行模型

运行 touch /root/pipeline_llava.py 新建一个文件夹,复制下列代码进去
  1. from lmdeploy import pipeline, ChatTemplateConfig
  2. from lmdeploy.vl import load_image
  3. pipe = pipeline('xtuner/llava-llama-3-8b-v1_1-hf',
  4.                 chat_template_config=ChatTemplateConfig(model_name='llama3'))
  5. image = load_image('https://raw.githubusercontent.com/open-mmlab/mmdeploy/main/tests/data/tiger.jpeg')
  6. response = pipe(('describe this image', image))
  7. 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



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

西河刘卡车医

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表