Featured image of post 书生·浦语大模型实战营(五):LMDeploy 大模型量化部署实践

书生·浦语大模型实战营(五):LMDeploy 大模型量化部署实践

本文为书生·浦语大模型实战营的课程笔记系列第五节:LMDeploy 大模型量化部署实践

前言

本文为书生·浦语大模型实战营的课程笔记系列第五节

大模型部署背景

模型部署

  • 定义
    • 将训练好的模型在特定软硬件环境中启动的过程,使模型能够接收输入并返回预测结果
    • 为了满足性能和效率的需求,常常需要对模型进行优化,例如模型压缩和硬件加速
  • 产品形态
    • 云端、边缘计算端、移动端
  • 计算设备
    • CPU、GPU、NPU、TPU 等

大模型特点

  • 内存开销巨大
    • 庞大的参数量。7B模型仅权重就需要 14+G 内存
    • 采用自回归生成 token,需要缓存 Attention 的 k/v,带来巨大的内存开销
  • 动态 shape
    • 请求数不固定
    • Token 逐个生成,且数量不定
  • 相对视觉模型,LLM 结构简单
    • Transformers 结构,大部分是 decoder-only

大模型部署挑战

  • 设备
    • 如何应对巨大的存储问题?低存储设备(消费级显卡、手机等)如何部署?
  • 推理
    • 如何加速 token 的生成速度
    • 如何解决动态 shape,让推理可以不间断
    • 如何有效管理和利用内存
  • 服务如何提升系统整体吞吐量?
  • 对于个体用户,如何降低响应时间?

大模型部署方案

  • 技术点
    • 模型并行
    • 低比特量化
    • Page Attention
    • transformer 计算和访存优化
    • Continuous Batch
  • 方案
    • huggingface transformers
    • 专门的推理加速框架
      • 云端
        • lmdeploy
        • vllm
        • tensorrt-llm
        • deepspeed
      • 移动端
        • llama.cpp
        • mlc-llm

LMDeploy 简介

LMDeploy 是 LLM 在英伟达设备上部署的全流程解决方案。包括模型轻量化、推理和服务。项目地址: https://github.com/InternLM/lmdeploy

LMDeploy 提供以下核心功能(细节详见官方仓库,这里不做赘述):

  • 高效推理引擎 TurboMind:开发了 Persistent Batch(即 Continuous Batch),Blocked K/V Cache,动态拆分和融合,张量并行,高效的计算 kernel等重要特性,保障了 LLMs 推理时的高吞吐和低延时。
  • 有状态推理:通过缓存多轮对话过程中 attention 的 k/v,记住对话历史,从而避免重复处理历史会话。显著提升长文本多轮对话场景中的效率。
  • 量化:LMDeploy 支持多种量化方式和高效的量化模型推理。在不同规模的模型上,验证了量化的可靠性。

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

跟着教学配套文档:InternLM/tutorial lmdeploy 一步一步跟下来即可

作业

基础作业

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

作业很简单,只需要几条命令即可,索性3种方式都来一遍,操作流程:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 离线转换
lmdeploy convert internlm-chat-7b  /root/share/temp/model_repos/internlm-chat-7b

# 1. TurboMind 推理+命令行本地对话
lmdeploy chat turbomind ./workspace

# 2. TurboMind推理+API服务
# server端
lmdeploy serve api_server ./workspace \
	--server_name 0.0.0.0 \
	--server_port 8888 \
	--instance_num 64 \
	--tp 1

# client端
lmdeploy serve api_client http://localhost:8888

# 3. 网页gradio部署
# 先把端口转发一下
ssh -CNg -L 8008:127.0.0.1:8008 root@ssh.intern-ai.org.cn -p 34664

# 启动server
lmdeploy serve gradio ./workspace --server_port 8008

# 本地访问 127.0.0.1:8008进行对话

使用的prompt:帮我生成一个300字的小故事,主角是打工人叫平方君,内容是他通过不断努力升职加薪、当上总经理、出任CEO、迎娶白富美、走上人生巅峰的励志故事

  • 本地对话结果:

local_chat

  • API服务结果:

api_chat

  • 网页Gradio结果:

gradio_chat

进阶作业(可选做)

目标:

  • 将第四节课训练自我认知小助手模型使用 LMDeploy 量化部署到 OpenXLab 平台。
  • 对internlm-chat-7b模型进行量化,并同时使用KV Cache量化,使用量化后的模型完成API服务的部署,分别对比模型量化前后和 KV Cache 量化前后的显存大小(将 bs设置为 1 和 max len 设置为512)。
  • 在自己的任务数据集上任取若干条进行Benchmark测试,测试方向包括:
    (1)TurboMind推理+Python代码集成
    (2)在(1)的基础上采用W4A16量化
    (3)在(1)的基础上开启KV Cache量化
    (4)在(2)的基础上开启KV Cache量化
    (5)使用Huggingface推理

由于时间关系,进阶作业没有计划做

Built with Hugo
主题 StackJimmy 设计