返回顶部
热门问答 更多热门问答
技术文章 更多技术文章

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

[复制链接]
链载Ai 显示全部楼层 发表于 2025-12-2 09:34:51 |阅读模式 打印 上一主题 下一主题

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

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


LMDeploy:(文末点击阅读原文可直达)

https://github.com/internLM/LMDeploy

Llama 3 全系列中文课程:

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


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


  • 环境、模型准备

  • LMDeploy Chat CLI 工具

  • LMDeploy 模型量化(lite)

  • LMDeploy 服务(serve)

  • LMDeploy Llama 3 推理测速

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




1. 环境,模型准备



1.1 环境配置


#如果你是InternStudio可以直接使用#studio-conda-tlmdeploy-opytorch-2.1.2#初始化环境condacreate-nlmdeploypython=3.10condaactivatelmdeploycondainstallpytorch==2.1.2torchvision==0.16.2torchaudio==2.1.2pytorch-cuda=12.1-cpytorch-cnvidia


安装 LMDeploy 最新版


pipinstall-Ulmdeploy


1.2 Llama3 的下载


安装 git-lfs 依赖


condainstallgitapt-getinstallgit-lfsgit-lfsinstall


下载模型


mkdir-p~/modelcd~/modelgitclonehttps://code.openxlab.org.cn/MrCat/Llama-3-8B-Instruct.gitMeta-Llama-3-8B-Instruct


或者软链接 InternStudio 中的模型


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




2. LMDeploy Chat CLI 工具


直接在终端运行:


condaactivatelmdeploylmdeploychat/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 模型。


lmdeploychat/root/model/Meta-Llama-3-8B-Instruct/


新建一个终端运行。


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



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


lmdeploychat/root/model/Meta-Llama-3-8B-Instruct/--cache-max-entry-count0.5


新建一个终端运行。


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



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


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


lmdeploychat/root/model/Meta-Llama-3-8B-Instruct/--cache-max-entry-count0.01



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



3.2 使用 W4A16 量化权重


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


lmdeployliteauto_awq\/root/model/Meta-Llama-3-8B-Instruct\--calib-dataset'ptb'\--calib-samples128\--calib-seqlen1024\--w-bits4\--w-group-size128\--work-dir/root/model/Meta-Llama-3-8B-Instruct_4bit


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


lmdeploychat/root/model/Meta-Llama-3-8B-Instruct_4bit--model-formatawq


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


lmdeploychat/root/model/Meta-Llama-3-8B-Instruct_4bit--model-formatawq--cache-max-entry-count0.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 模型:


lmdeployserveapi_server\/root/model/Meta-Llama-3-8B-Instruct\--model-formathf\--quant-policy0\--server-name0.0.0.0\--server-port23333\--tp1


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


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


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



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


ssh-CNg-L23333:127.0.0.1:23333root@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 环境:


condaactivatelmdeploy


运行命令行客户端:


lmdeployserveapi_clienthttp://localhost:23333


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


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


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


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


pipinstallgradio==3.50.2


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


condaactivatelmdeploy


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


lmdeployservegradiohttp://localhost:23333\--server-name0.0.0.0\--server-port6006


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


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


拓展部分



5.LMDeploy Llama3 推理测速



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


它的 benchmark 方式如下:


克隆仓库


cd~gitclonehttps://github.com/Shengshenlan/Llama3-XTuner-CN.git


下载测试数据

cd/root/lmdeploywgethttps://hf-mirror.com/datasets/anon8231489123/ShareGPT_Vicuna_unfiltered/resolve/main/ShareGPT_V3_unfiltered_cleaned_split.json


执行 benchmark 命令(如果你的显存较小,可以调低 --cache-max-entry-count)


pythonbenchmark/profile_throughput.py\ShareGPT_V3_unfiltered_cleaned_split.json\/root/model/Meta-Llama-3-8B-Instruct\--cache-max-entry-count0.95\--concurrency256\--model-formathf\--quant-policy0\--num-prompts10000


结果是:


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




6. 使用 LMDeploy

行视觉多模态大模型

Llava-Llama-3



6.1 安装依赖


pipinstallgit+https://github.com/haotian-liu/LLaVA.git


6.2 运行模型


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


from lmdeploy import pipeline, ChatTemplateConfigfrom lmdeploy.vl import load_imagepipe = 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)


运行结果为:






回复

使用道具 举报

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

本版积分规则

链载AI是专业的生成式人工智能教程平台。提供Stable Diffusion、Midjourney AI绘画教程,Suno AI音乐生成指南,以及Runway、Pika等AI视频制作与动画生成实战案例。从提示词编写到参数调整,手把手助您从入门到精通。
  • 官方手机版

  • 微信公众号

  • 商务合作

  • Powered by Discuz! X3.5 | Copyright © 2025-2025. | 链载Ai
  • 桂ICP备2024021734号 | 营业执照 | |广西笔趣文化传媒有限公司|| QQ