LMDeploy 大模型量化部署实践
大模型部署背景
模型部署
定义
- 将训练好的模型在特定软硬件环境中启动的过程,使模型能够接收输入并返回预测结果
- 为了满足性能和效率的需求,常常需要对模型进行优化,例如模型压缩和硬件加速
产品形态 - 云端、边缘计算端、移动端
计算设备 - CPU、GPU、NPU、TPU等
大模型特点
内存开销巨大
- 庞大的参数量。7B模型仅权重就需要14+G内存
- 采用自回归生成token,需要缓存Attention的k/v,带来巨大的内存开销
动态shape - 请求数不固定
- Token逐个生成,且数量不定
相对视觉模型,LLM结构简单 - Transformers结构,大部分是decoder-only
大模型挑战
设备
- 如何应对巨大的存储问题?低存储设备(消费级显卡、手机等)T如何部署?
推理 - 如何加速token的生成速度如何解决动态shape,让推理可以不间断如何有效管理和利用内存
服务 - 如何提升系统整体吞吐量?对于个体用户,如何降低响应时间?
大模型部署方案
技术点
- 模型并行
- transformer计算和访存优化
- 低比特量化
- Continuous Batch
- Page Attention
方案
huggingface transformers;专门的推理加速框架
- 云端
- Imdeploy
- vllm
- tensorrt-llm
- deepspeed
- 移动端
- llama.cpp
- mlc-llm
LMDeploy简介
LMDeploy 是LLM在英伟达设备上部署的全流程解决方案。包括模型轻量化、推理和服务。项目地址传送门
推理性能
静态推理性能
- 固定 batch,输入/输出 token 数量
动态推理性能 - 真实对话,不定长的输入/输出
核心功能
量化
为什么要做量化
为什么做 weight only 的量化
两个基本
- 概念计算密集(compute-bound):推理的绝大部分时间消耗在数值计算上;针对计算密集场景,可以通过使用更快的硬件计算单元来提升计算速度比如量化为W8A8使用INT8TensorCore来加速计算。
- 访存密集(memory-bound):推理时,绝大部分时间消耗在数据读取上;针对访存密集型场景,一般是通过提高计算访存比来提升性能。
WeightOnly量化一举多得
- 4bitWeightOnly量化,将FP16的模型权重量化为INT4,访存量直接降为FP16模型的1/4,大幅降低了访存成本,提高了Decoding的速度。
- 加速的同时还节省了显存,同样的设备能够支持更大的模型以及更长的对话长度。
如何做WeightOnly 的量化?
- LMDeploy使用MITHANLAB开源的AWQ算法,量化为4bit模型
- 推理时,先把4bit权重,反量化回FP16(在Kernel内部进行,从GlobalMemory读取时仍是4bit),依l旧使用的是FP16计算
- 相较于社区使用比较多的GPTQ算法,AWQ的推理速度更快,量化的时间更短
推理引擎TurboMind
持续批处理
有状态的推理
api-server
可以很方便的从openai切换过来