1 大模型部署背景
模型部署
定义
- 将训练好的模型在特定软硬件环境中启动的过程,使模型能够接收输入并返回预测结果
- 为了满足性能和效率的需求,常常需要对模型进行优化,例如模型压缩和硬件加速
产品形态
• 云端、边缘计算端、移动端
计算设备
• CPU、GPU、NPU、 TPU 等
大模型特点
内存开销巨大
- 庞大的参数量。7B 模型仅权重就需要14+G內存
- 采用自回归生成 token,需要缓存 Attention 的 k/v,带来巨大的内存开销
动态shape
- 请求数不固定
- Token 逐个生成,且数量不定相对视觉模型,LLM结构简单
- Transformers 结构,大部分是 decoder-only
大模型部署挑战
设备
• 如何应对巨大的存储问题?低存储设备(消费级显卡、手机等)如何部署?
推理
- 如何加速 token 的生成速度
- 如何解决动态shape,让推理可以不间断
- 如何有效管理和利用内存
服务
- 如何提升系统整体吞吐量?
- 对于个体用户,如何降低响应时间?
大模型部署方案
技术点
- 模型并行
- 低比特量化
- Page Attention • ...
方案
- huggingface transformers
- 专门的推理加速框架
云端 - Imdeploy
- vilm
- tensorrt-llm
- deepspeed
- transformer 计算和访存优化
- Continuous Batch
移动端
- llama.cpp
- mIc-Ilm
- ….
2 LMDeploy 简介
LMDeploy 是 LLM 在英伟达设备上部署的全流程解决方案。包括模型轻量化、推理和服务。
推理性能
静态推理性能
・固定 batch 输入/输出token数量
动态推理性能
•真实对话,不定长的输入/输出
核心功能-量化
为什么做 Weight Only 的量化?
两个基本概念
- 计算密集(compute-bound):推理的绝大部分时间消耗在数值计算上;
针对计算密集场景,可以通过使用更快的硬件计算单元来提升计算速度,比如量化为 W8A8使用INT8 Tensor Core来加速计算。 - 访存密集(memory-bound):推理时,绝大部分时间消耗在数据读取上;针对访存密集型场景,一般是通过提高计算访存比来提升性能。
LLM 是典型的访存密集型任务
常见的LLM 模型是 Decoder Only 架构。推理时大部分时间消耗在逐Token 生成阶段(Decoding 阶段),是典型的访存密集型场景。
如右图,A100的 FP16 峰值算力为 312 TFLOPS,只有在 Batch Size 达到
128这个量级时,计算才成为推理的瓶颈,但由于LLM 模型本身就很大,推理时的 KV Cache 也会占用很多显存,还有一些其他的因素影响(如
Persistent Batch),实际推理时很难做到128这么大的 Batch Size。
Weight Only 量化一举多得
- 4bit Weight Only 量化,将FP16的模型权重量化为
INT4,访存量直接降为FP16 模型的1/4,大幅降低了访存成本,提高了 Decoding 的速度。 - 加速的同时还节省了显存,同样的设备能够支持更大的模型以及更长的对话长度
核心功能-推理引擎 TurboMind
持续批处理
请求队列
• 推理请求首先先加入到请求队列中
Persistent 线程
- 若 batch 中有空闲槽位,从队列拉取请求,尽量填满空闲槽位。若无,继续对当前 batch 中的请求进行forward
- Batch每forward完一次
- 判断是否有request 推理结束。结束的request,发送结果,释放槽位
- 转步骤 1
有状态的推理
高性能 cuda kernel
Blocked k/v cache