第五节课 LMDeploy 大模型量化部署实践(笔记)

来源:(5)LMDeploy 大模型量化部署实践_哔哩哔哩_bilibili

课程文档:https://github.com/InternLM/tutorial/blob/main/lmdeploy/lmdeploy.md

第五节课 LMDeploy 大模型量化部署实践(笔记)_第1张图片

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在英伟达设备上部署的全流程解决方案。包括轻量化、推理和服务。

第五节课 LMDeploy 大模型量化部署实践(笔记)_第2张图片

推理性能

(1)静态推理性能

固定batch,输入/输出token数量

第五节课 LMDeploy 大模型量化部署实践(笔记)_第3张图片

(2)动态推理性能

真实对话,不定长的输入/输出

第五节课 LMDeploy 大模型量化部署实践(笔记)_第4张图片

核心功能-量化

(1)为什么要做量化?

第五节课 LMDeploy 大模型量化部署实践(笔记)_第5张图片

(2)为什么要做Weight Only的量化?

两个基本概念
  • 计算密集:推理的绝大部分时间消耗在数值计算上;针对计算密集场景,可以通过使用更快的硬件计算单元来提升计算速度。
  • 访存密集:推理时,绝大部分时间小号在数据读取上;针对访存密集型场景,一般通过提高计算访存比来提升性能。
Weight Only量化一举多得
  • 4bit Weight Only量化,将FP16的模型权重量化为INT4,访存量直接将为FP16模型的1/4,大幅降低了访存成本,提高了Decoding的速度。
  • 加速的同时还节省了显存,同样的设备能够支持更大的模型及更长的对话长度。
LLM是典型的访存密集型任务

第五节课 LMDeploy 大模型量化部署实践(笔记)_第6张图片

(3)如何做Weight Only的量化?

  • LMDeploy使用MIT HAN LAB开源的AWQ算法,量化为4bit模型
  • 推理时,先把4bit权重,反量化回FP16(在Kernel内部进行,从G咯罢了Memory读取时仍是4bit),依旧使用的时FP16计算
  • 相较于社区使用比较多的GPTQ算法,AWQ的推理速度更快,量化的时间更短

第五节课 LMDeploy 大模型量化部署实践(笔记)_第7张图片

第五节课 LMDeploy 大模型量化部署实践(笔记)_第8张图片

核心功能-推理引擎TurboMind

第五节课 LMDeploy 大模型量化部署实践(笔记)_第9张图片

持续批处理

请求队列
  • 推理请求首先先加入到请求队列中

 Persistent线程

  1. 若batch中有空闲槽位,从队列拉取请求,尽量填满空闲槽位。若无,继续对当前batch中的请求进行forward。
  2. Batch每forward完一次。
  3. 转步骤1。

第五节课 LMDeploy 大模型量化部署实践(笔记)_第10张图片

有状态的推理

第五节课 LMDeploy 大模型量化部署实践(笔记)_第11张图片

Blocked k/v cache

支持Paged Attention、支撑有状态推理。

第五节课 LMDeploy 大模型量化部署实践(笔记)_第12张图片

block状态

  • Free未被任何序列占用
  • Activate被正在推理的序列占用
  • Cache被缓存中的序列占用

block状态迁移

第五节课 LMDeploy 大模型量化部署实践(笔记)_第13张图片

高性能的cuda kernel

第五节课 LMDeploy 大模型量化部署实践(笔记)_第14张图片

核心功能-推理服务 api server

第五节课 LMDeploy 大模型量化部署实践(笔记)_第15张图片

你可能感兴趣的:(书生·浦语大模型实战营(笔记,笔记,python)