InternLM/lmdeploy项目中的W4A16量化技术详解

InternLM/lmdeploy项目中的W4A16量化技术详解

【免费下载链接】lmdeploy LMDeploy is a toolkit for compressing, deploying, and serving LLMs. 【免费下载链接】lmdeploy 项目地址: https://gitcode.com/gh_mirrors/lm/lmdeploy

引言

在现代大型语言模型(LLM)应用中,模型量化技术已成为降低计算资源需求、提升推理效率的关键手段。本文将深入解析InternLM/lmdeploy项目中支持的W4A16(4-bit权重,16-bit激活)量化技术,帮助开发者理解并应用这一高效推理方案。

量化技术基础

什么是W4A16量化

W4A16量化是一种将模型权重(weights)压缩至4位(bit)同时保持激活(activations)为16位的混合精度量化技术。这种量化方式能够在保持模型性能的同时显著减少显存占用和计算开销。

支持的量化算法

InternLM/lmdeploy目前主要支持两种主流量化算法:

  1. AWQ(Activation-aware Weight Quantization):一种感知激活的权重量化方法,通过分析激活分布来优化量化策略
  2. GPTQ:基于梯度信息的后训练量化方法

虽然推理引擎支持这两种算法的量化模型,但lmdeploy的量化模块目前仅实现了AWQ算法。

硬件支持

W4A16量化推理支持以下NVIDIA GPU架构:

  • V100(sm70)
  • Turing架构(sm75):包括20系列显卡和T4
  • Ampere架构(sm80,sm86):包括30系列、A10、A16、A30、A100
  • Ada Lovelace架构(sm89):40系列显卡

量化实践指南

准备工作

在开始量化前,请确保已正确安装lmdeploy及其依赖环境。

模型量化步骤

量化过程可通过单条命令完成,结果将保存在指定目录:

export HF_MODEL=internlm/internlm2_5-7b-chat
export WORK_DIR=internlm/internlm2_5-7b-chat-4bit

lmdeploy lite auto_awq \
   $HF_MODEL \
  --calib-dataset 'ptb' \
  --calib-samples 128 \
  --calib-seqlen 2048 \
  --w-bits 4 \
  --w-group-size 128 \
  --batch-size 1 \
  --work-dir $WORK_DIR

对于常见模型如internlm2_5-7b-chat,命令可简化为:

lmdeploy lite auto_awq internlm/internlm2_5-7b-chat --work-dir internlm2_5-7b-chat-4bit

重要提示:

  1. 建议在--work-dir参数中包含模型名称,便于lmdeploy自动匹配内置的对话模板
  2. 如量化后精度下降,可尝试启用--search-scale并增大--batch-size(如设为8)进行重新量化

量化参数解析

  • --calib-dataset:校准数据集,默认使用PTB
  • --calib-samples:校准样本数,默认128
  • --calib-seqlen:校准序列长度,默认2048
  • --w-bits:权重量化位数,设为4表示W4A16
  • --w-group-size:权重量化分组大小,默认128
  • --batch-size:量化时的批处理大小,影响内存使用

量化模型应用

交互式对话

量化完成后,可通过命令行与模型交互:

lmdeploy chat ./internlm2_5-7b-chat-4bit --model-format awq

Web界面交互

启动Gradio服务,通过网页与模型交互:

lmdeploy serve gradio ./internlm2_5-7b-chat-4bit --server_name {ip_addr} --server_port {port} --model-format awq

批量推理

使用Python API进行批量推理:

from lmdeploy import pipeline, TurbomindEngineConfig

engine_config = TurbomindEngineConfig(model_format='awq')
pipe = pipeline("./internlm2_5-7b-chat-4bit", backend_config=engine_config)
response = pipe(["Hi, pls intro yourself", "Shanghai is"])
print(response)

云端模型推理

lmdeploy支持直接推理HuggingFace Hub上的4bit量化模型:

# 推理lmdeploy空间的模型
pipe = pipeline("lmdeploy/llama2-chat-70b-4bit",
                backend_config=TurbomindEngineConfig(model_format='awq', tp=4))

# 推理TheBloke空间的模型
pipe = pipeline("TheBloke/LLaMA2-13B-Tiefighter-AWQ",
                backend_config=TurbomindEngineConfig(model_format='awq'),
                chat_template_config=ChatTemplateConfig(model_name='llama2'))

模型服务化

lmdeploy的api_server可轻松将量化模型部署为服务:

lmdeploy serve api_server ./internlm2_5-7b-chat-4bit --backend turbomind --model-format awq

服务默认端口为23333,可通过api_client与之交互:

lmdeploy serve api_client http://0.0.0.0:23333

性能对比

在NVIDIA RTX 4090上对Llama-2系列模型进行基准测试(单prompt token生成512 tokens):

模型llm-awqmlc-llmturbomind
Llama-2-7B-chat112.9159.4206.4
Llama-2-13B-chatN/A90.7115.8

单位:tokens/s

常见问题解答

Q1: 量化过程中出现显存不足错误怎么办?

A1: 可以尝试以下调整:

  1. 减小--calib-seqlen参数值
  2. 增加--calib-samples参数值
  3. 设置--batch-size为1

结语

W4A16量化技术为大型语言模型的高效推理提供了有力支持。通过InternLM/lmdeploy项目提供的工具链,开发者可以轻松实现从模型量化到服务部署的全流程。合理使用量化技术,可以在保持模型性能的同时显著降低资源消耗,使大型语言模型的应用更加普惠。

【免费下载链接】lmdeploy LMDeploy is a toolkit for compressing, deploying, and serving LLMs. 【免费下载链接】lmdeploy 项目地址: https://gitcode.com/gh_mirrors/lm/lmdeploy

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值