模型部署团队 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-hf
python3 -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 方案,完美解决这一难题。
简单来说,它的工作原理是:
最后
LMDeploy 的其他硬核 feature 还在紧锣密鼓的开发中,欢迎大家来关注我们的项目,动态资讯第一时间掌握!
https://github.com/InternLM/lmdeploy
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有