课程视频:https://www.bilibili.com/video/BV1tr421x75B/
课程文档:https://github.com/InternLM/Tutorial/blob/camp2/lmdeploy/README.md
课程作业:https://github.com/InternLM/Tutorial/blob/camp2/lmdeploy/homework.md
LMDeploy:https://github.com/InternLM/LMDeploy
1、大模型部署背景
定义:
- 在软件工程中,部署通常指的是将开发完毕的软件投入使用的过程。
- 在人工智能领域,模型部署是实现深度学习算法落地应用的关键步骤。简单来说,模型部署就是将训练好的深度学习模型在特定环境中运行的过程。
场景:
- 服务器端:CPU部署,单GPU/TPU/NPU部署,多卡/集群部署.……
- 移动端/边缘端:移动机器人,手机.…
大模型部署中的挑战:
计算量巨大:
- 大模型参数量巨大,前向推理时需要进行大量计算。
- 根据InternLM2技术报告!1提供的模型参数数据,以及OpenAl团队提供的计算量估算方法[21,20B模型每生成1个token,就要进行约406亿次浮点运算;照此计算,若生成128个token,就要进行5.2万亿次运算。
- 20B算是大模型里的“小”模型了,若模型参数规模达到175B(GPT-3),Batch-Size(BS)再大一点,每次推理计算量将达到干万亿量级。
- 以NVIDIA A100为例,单张理论FP16运算性能为每秒77.97 TFLOPS[3](77万亿),性能捉紧。
访存瓶颈
- 大模型推理是“访存密集”型任务。目前硬件计算速度“远快于”显存带宽,存在严重的访存性能瓶颈。
- 以RTX 4090推理175B大模型为例,BS为1时计算量为6.83TFLOPS,远低于82.58 TFLOPs的FP16计算能力;但访存量为32.62 TB,是显存带宽每秒处理能力的30倍。
动态请求
- 请求量不确定;
- 请求时间不确定,
- Token逐个生成,生成数量不确定。
2、大模型部署方法
模型剪枝(Pruning)
剪枝指移除模型中不必要或多余的组件,比如参数,以使模型更加高效。通过对模型中贡献有限的冗余参数进行枝,在保证性能最低下降的同时,可以减小存储需求、提高计算效率。
非结构化剪枝 SparseGPT,LoRAPrune2),Wanda3)
指移除个别参数,而不考虑整体网络结构。这种方法通过将低于國值的参数置零的方式对个别权重或神经元进行处理。
结构化剪枝 LLM-Prunerl4]
根据预定义规则移除连接或分层结构,同时保持整体网络结构,这种方法一次性地针对整组权重,优势在于降低模型复杂性和内存使用,同时保持整体的LLM结构完整。
量化:
3、LMDeploy简介
LMDeploy 由 MMDeploy 和 MMRazor 团队联合开发是涵盖了 LLM 任务的全套轻量化、部署和服务解决方案。核心功能包括高效推理、可靠量化、便捷服务和有状态推理,
- 高效的推理:LMDeploy开发了Continuous Batch,Blocked K/ Cache,动态拆分和融合,张量并行,高效的计算kernel等重要特性。InternLM2推理性能是vLLM的 1.8 倍。
- 可靠的量化:LMDeploy支持权重量化和k/v量化。4bit模型推理效率是FP16下的2.4倍。量化模型的可靠性已通过OpenCompass评测得到充分验证:
- 便捷的服务:通过请求分发服务,LMDeploy 支持多模型在多机、多卡上的推理服务。
- 有状态推理:通过缓存多轮对话过程中Attention的k/,记住对话历史,从而避免重复处理历史会话。显著提升长文本多轮对话场景中的效率。