前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用 LMDeploy 轻松部署 Llama-2 系列模型!

使用 LMDeploy 轻松部署 Llama-2 系列模型!

作者头像
OpenMMLab 官方账号
发布于 2023-08-23 05:57:52
发布于 2023-08-23 05:57:52
1.5K00
代码可运行
举报
文章被收录于专栏:OpenMMLabOpenMMLab
运行总次数:0
代码可运行
3 月份,Me

模型部署团队 LMDeploy 自然也要紧跟潮流,本文将带大家一起使用 LMDeploy 快速部署 Llama-2 系列模型。

https://github.com/InternLM/lmdeploy

(欢迎大家使用,觉得好用欢迎点亮小星星)

Llama-2 目前已经开源的模型有 3 种规格:7B、13B 和 70B。其中 7B、13B 结构保持不变,而 70B 做了结构调整,把 Multi-Head Attention 换成了 Grouped-Query Attention。总体看来,实现难度不算大,开整!

LMDeploy 的 Llama-2 进阶之路

起步:7B/13B

Meta 提供了 Llama-2 7B、13B 的对话模型,支持 4K 长度的 context windows。因和 Llama 结构相同,所以只要在 LMDeploy 中增加 Llama-2 的对话模板即可。

小贴士:只要是和 Llama,Llama-2 结构相同的语言模型,LMDeploy 都可以部署。欢迎大家提交这些模型的对话模板到 LMDeploy :)

为避免环境配置步骤,我们直接使用 LMDeploy 镜像来介绍 7B 模型的部署过程。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker run --gpus all \
    -v /the/path/of/Llama-2-7b-chat-hf:/llama-2-chat-7b-hf \
    -p 33337:33337 -it openmmlab/lmdeploy:latest /bin/bash

按如下步骤,即可在命令行中与它对话了:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python3 -m lmdeploy.serve.turbomind.deploy llama2 /llama-2-chat-7b-hf
python3 -m lmdeploy.turbomind.chat ./workspace

启动 triton inference server,就搭建好了推理服务:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tritonserver --model-repository=./workspace/model_repository/ --allow-grpc=1 --grpc-port=33337

如要使用 webui 的聊天窗口,可如下操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python3 -m lmdeploy.app {tritonserver_ip_addr}:33337

在浏览器中打开网页 https://localhost:6006,就可以与 AI 在线对话了

LMDeploy 拥有出色的推理性能,在 output token throughput 和 request throughput 指标上,均超过同类开源项目。其中,output token throughput 测试的是在固定输入、输出 token 下的 token 生成速度。request throughput 测试的是在真实对话数据下,每分钟处理的请求数。

在上图中,当输入、输出 token 是(2048,2048)时,LMDeploy 的 output token throughput 整体比 deepspeed 提升约 5% - 15%,比 facebook/llama 提升 5 倍。

在 request throughput 指标上,LMDeploy 比 vLLM 高约30%。

进阶:70B

70B 模型使用了 GQA(Grouped-Query Attention)。它把多个 query head 分组,每组对应一个 k/v head 对,如下图所示。当 group 数量等于 query head 数量,即为 MHA(Multi-Head Attention)。而当 group 为 1 时,则是MQA(Multi-Query Attention)。

据文献所述,GQA 在模型能力方面,接近 MHA。同时,在推理速度方面,媲美 MQA。

使用 MHA 结构的自回归模型,在推理过程中,会维护一个巨大的 k/v cache。它的内存开销公式为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
batch * max_seq_len * n_heads * head_dim * sizeof(half) * 2

而对于 GQA 来说,k/v cache 的内存开销公式变成:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
batch * max_seq_len * n_kv_heads * head_dim * sizeof(half) * 2

n_heads / n_kv_heads 就是 group 的大小。可见,使用 GQA 可以把 k/v cache 降低到 MHA的1/group 的水平。非常利好 Attention 这种访存密集型的计算。

LMDeploy 实现了 GQA,且支持张量并行。部署方式与 7B 的部署方式类似,只要在转模型结构时,把张量并行的参数设置为 8 即可。

具体方式可参考 serving:https://github.com/InternLM/lmdeploy/blob/main/docs/zh_cn/serving.md

LMDeploy 特色功能

交互式推理:不再为对话历史买单

在多轮对话场景中,大部分推理引擎要求用户在每轮对话中,把既往对话历史和本轮对话的 prompt 一起发到服务端。意味着每轮对话,用户都要为历史对话买单。而 LMDeploy 可以把对话的 attention k/v 全部缓存起来,以此避免重复处理历史对话,我们把这种方式称之为交互式推理(interactive mode)。在历史记录较长时,这种方式可以极大地降低首个 token 生成的时间。

Persistent batch:batch 永动机

在多用户服务场景中,对话的请求和响应长度不等。如何在这种场景下,对请求批处理,提高系统吞吐量,是推理面临的难题之一。LMDeploy 提出的 persistent batch 方案,完美解决这一难题。

简单来说,它的工作原理是:

  • 维护具有 N 个可配置的批处理槽(batch slot)
  • 当有空闲槽位时,请求会加入批处理。一旦请求的 token 生成完成,该槽位会被释放,供下个请求使用
  • 批处理会自动增长或者缩小,以最小化不必要的计算

最后

LMDeploy 的其他硬核 feature 还在紧锣密鼓的开发中,欢迎大家来关注我们的项目,动态资讯第一时间掌握!

https://github.com/InternLM/lmdeploy

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-07-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 OpenMMLab 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验