来源:(5)LMDeploy 大模型量化部署实践_哔哩哔哩_bilibili
课程文档:https://github.com/InternLM/tutorial/blob/main/lmdeploy/lmdeploy.md
1.大模型部署背景
(1)模型部署
定义
- 将训练好的模型在特定软硬件环境中启动的过程,使模型能够接收输入并返回预测结果
- 为了满足性能和效率的要求,常常对需要对模型进行优化,例如模型压缩和硬件加速
产品形态
- 云端、边缘计算端、移动端
计算设备
- CPU、GPU、NPU、TPU等
(2)大模型特点
内存开销巨大
- 庞大的参数量。7B模型仅权重就需要14+G内存
- 采用自回归生成token,需要缓存Attention的k/v,带来巨大的内存开销
动态shape
- 请求数不固定
- Token逐个生成,且数量不定
相对视觉模型,LLM结构简单
- Transformers结构,大部分使decoder-only
(3)大模型部署挑战
设备
- 如何应对巨大的存储问题?低存储设备(消费级显卡、手机等)如何部署?
推理
- 如何加速token的生成速度
- 如何解决动态shape,让推理可以不间断
- 如何有效管理和利用内存
服务
- 如何提升系统整体吞吐量?
- 对于个体用户,如何降低响应时间?
(4)大模型部署方案
技术点
- 模型并行
- 低比特量化
- Page Attention
- transformer计算和访存优化
- Continuous Batch
- ...
方案
- huggingface transformers
- 专门的推理加速框架
云端
- Imdeploy
- vllm
- tensorrt-llm
- deepspeed
- ...
移动端
- llama.cpp
- mlc-llm
- ...
2.LMDeploy简介
使LLM在英伟达设备上部署的全流程解决方案。包括轻量化、推理和服务。
推理性能
(1)静态推理性能
固定batch,输入/输出token数量
(2)动态推理性能
真实对话,不定长的输入/输出
核心功能-量化
(1)为什么要做量化?
(2)为什么要做Weight Only的量化?
两个基本概念
- 计算密集:推理的绝大部分时间消耗在数值计算上;针对计算密集场景,可以通过使用更快的硬件计算单元来提升计算速度。
- 访存密集:推理时,绝大部分时间小号在数据读取上;针对访存密集型场景,一般通过提高计算访存比来提升性能。
Weight Only量化一举多得
- 4bit Weight Only量化,将FP16的模型权重量化为INT4,访存量直接将为FP16模型的1/4,大幅降低了访存成本,提高了Decoding的速度。
- 加速的同时还节省了显存,同样的设备能够支持更大的模型及更长的对话长度。
LLM是典型的访存密集型任务
(3)如何做Weight Only的量化?
- LMDeploy使用MIT HAN LAB开源的AWQ算法,量化为4bit模型
- 推理时,先把4bit权重,反量化回FP16(在Kernel内部进行,从G咯罢了Memory读取时仍是4bit),依旧使用的时FP16计算
- 相较于社区使用比较多的GPTQ算法,AWQ的推理速度更快,量化的时间更短
核心功能-推理引擎TurboMind
持续批处理
请求队列
- 推理请求首先先加入到请求队列中
Persistent线程
- 若batch中有空闲槽位,从队列拉取请求,尽量填满空闲槽位。若无,继续对当前batch中的请求进行forward。
- Batch每forward完一次。
- 转步骤1。
有状态的推理
Blocked k/v cache
支持Paged Attention、支撑有状态推理。
block状态
- Free未被任何序列占用
- Activate被正在推理的序列占用
- Cache被缓存中的序列占用