当前位置:   article > 正文

书生·浦语大语言模型——LMDeploy大模型量化部署实践_lmdeploy 框架解析

lmdeploy 框架解析

一、 大模型部署背景

  1. 模型部署
    1. 定义:将训练好的模型在特定软硬件环境中启动的过程,使模型能够接收输入并返回预测结果。为了满足性能和效率的需求,常常需要对模型进行优化,例如模型压缩和硬件加速
  2. 产品形态:云端、边缘计算端、移动端
  3. 计算设备:CPU、GPU、NPU、TPU等
  4. 大模型特点
    1. 内存开销大:庞大的参数量;采用自回归生成token,需要缓存Attention的kv,带来巨大开销
    2. 动态shape:请求数不固定;token逐个生成,数量不定
    3. 相对视觉模型,LLM结构简单:Transformers结构,大部分是decoder-only
  5. 大模型部署挑战
    1. 设备:存储
    2. 推理:如何加速token的生成?如何解决动态shape,让推理不间断?如何有效管理和利用内存?
    3. 服务:如何提升整个系统整理吞吐量?如何降低响应时间?
  6. 大模型部署方案
    1. 技术点:模型并行、低比特量化、Page Attention、transformer计算和访存优化、Continuous Batch
    2. 方案:huggingface transformers,专门的推理加速框架
      1. 云端:Imdeplpy, vllm, tensorrt-llm, deepspeed...
      2. 移动端:llama.cpp, mlc-llm

二、 LMDeploy简介

1、LMDeploy是LLM在英伟达设备上部署的全流程解决方案。包括模型轻量化、推理和服务。

2、 核心功能——量化:降低显存占用,提升推理速度

3、 核心功能——推理引擎TurboMind:持续批处理,有状态的推理,高性能cuda kernel,Blocked k/v cache

4、 核心功能——推理服务api server

三、 动手实践环节——安装、部署、量化

1、 环境配置

2、 服务部署

(1)简介

a. 模型推理/服务:主要提供模型本身的推理,一般来说可以和具体业务解耦,专注模型推理本身性能的优化,可以以模块、API等多种方式提供

b. API Server:一般作为前端的后端,提供与产品和服务相关的数据和功能支持

c. Client:负责与用户交互

(2)模型转换

在线转换可以直接加载Huggingface模型,离线转换需需要先保存模型再加载。

(3)TurboMind推理 + 命令行本地对话

(4)TurboMind推理 + API服务

(5)演示Demo

(6)TurboMind推理 + Python代码集成

(7)模型配置实践

  1. KV int8开关
    1. 对应参数为 quant_policy,默认值为 0,表示不使用 KV Cache,如果需要开启,则将该参数设置为 4。
    2. KV Cache 是对序列生成过程中的 K 和 V 进行量化,用以节省显存。
    3. 当显存不足,或序列比较长时,建议打开此开关。
  2. 外推能力开关
    1. 对应参数为 rope_scaling_factor,默认值为 0.0,表示不具备外推能力,设置为 1.0,可以开启 RoPE 的 Dynamic NTK 功能,支持长文本推理。另外,use_logn_attn 参数表示 Attention 缩放,默认值为 0,如果要开启,可以将其改为 1。
    2. 外推能力是指推理时上下文的长度超过训练时的最大长度时模型生成的能力。如果没有外推能力,当推理时上下文长度超过训练时的最大长度,效果会急剧下降。相反,则下降不那么明显,当然如果超出太多,效果也会下降的厉害。
    3. 当推理文本非常长(明显超过了训练时的最大长度)时,建议开启外推能力。
  3. 批处理大小:
    1. 对应参数为 max_batch_size,默认为 64,也就是我们在 API Server 启动时的 instance_num 参数。
    2. 该参数值越大,吞度量越大(同时接受的请求数),但也会占用更多显存。
    3. 建议根据请求量和最大的上下文长度,按实际情况调整。

3、模型量化

  1. 量化是一种以参数或计算中间结果精度下降换空间节省(以及同时带来的性能提升)的策略。
  2. 常见的 LLM 模型由于Decoder Only架构的特性,实际推理时大多数的时间都消耗在了逐token生成阶段(Decoding阶段),是典型的访存密集型场景。
  3. 在一次训练迭代中,模型参数(梯度)、优化器状态占用的显存大小只与模型参数量和数据类型有关,与输入数据的大小无关。而中间激活值与输入数据的大小(批次大小b和序列长度s)是呈正相关的。
  4. KV Cache 量化:将逐Token(Decoding)生成过程中的上下文K/V中间结果进行INT8量化(计算时再反量化),以降低生成过程中的显存占用。
  5. 模型参数量化:W4A16中的A是指Activation,保持FP16,只对参数进行4bit量化。4bit Weight 量化:将 FP16 的模型权重量化为INT4,Kernel计算时,访存量直接降为FP16模型的1/4,大幅降低了访存成本。Weight Only是指仅量化权重,数值计算依然采用 FP16(需要将 INT4 权重反量化)。

作业

一、 基础作业

使用 LMDeploy 以本地对话、网页Gradio、API服务中的一种方式部署 InternLM-Chat-7B 模型,生成 300 字的小故事(需截图)

1、 本地对话

2、 API

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/450302
推荐阅读
相关标签
  

闽ICP备14008679号