查看原文
其他

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

LMDeploy OpenMMLab 2024-04-23

3 月份,Meta 推出 Llama,引发了一场声势浩大的百模大战,差点让"羊驼"的名字不够用。如今,战事尚未落幕,Meta 再次携升级版 Llama-2王者降临。一时间,江湖再次被搅起,解读、评测层出不穷。


模型部署团队 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 模型的部署过程。


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


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


python3 -m lmdeploy.serve.turbomind.deploy llama2 /llama-2-chat-7b-hfpython3 -m lmdeploy.turbomind.chat ./workspace


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


tritonserver --model-repository=./workspace/model_repository/ --allow-grpc=1 --grpc-port=33337


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


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。它的内存开销公式为:


batch * max_seq_len * n_heads * head_dim * sizeof(half) * 2


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


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

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


(欢迎扫码加入群聊)


Llama-2 首个全方位评测,国内外开源模型大比拼

2023-07-24

不到 200 行代码就能微调 Llama-2!

2023-07-24

大模型社区再掀波澜,Meta重磅开源LLAMA-2,性能升级可商用

2023-07-19



点击下方“阅读原文”直达 LMDeploy

继续滑动看下一个
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存