LMDeploy 的量化和部署

发布时间:2024年01月18日

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 线程

  1. 若 batch 中有空闲槽位,从队列拉取请求,尽量填满空闲槽位。若无,继续对当前 batch 中的请求进行forward
  2. Batch每forward完一次
  • 判断是否有request 推理结束。结束的request,发送结果,释放槽位
  • 转步骤 1

有状态的推理

高性能 cuda kernel

???????

Blocked k/v cache

文章来源:https://blog.csdn.net/Y2483490891/article/details/135576272
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。