如何使用SmoothQuant:让大语言模型实现高效INT8量化的完整指南

【免费下载链接】smoothquant [ICML 2023] SmoothQuant: Accurate and Efficient Post-Training Quantization for Large Language Models 【免费下载链接】smoothquant 项目地址: https://gitcode.com/gh_mirrors/smo/smoothquant

SmoothQuant是一项由MIT韩松实验室开发的高效后训练量化技术,专为大型语言模型(LLM)设计。这项ICML 2023收录的技术通过创新的"量化难度迁移"方法,实现了权重和激活同时INT8量化(W8A8),在保持模型精度的同时显著降低内存占用并提升推理速度,为大模型部署提供了革命性的解决方案。

🚀 SmoothQuant核心优势解析

突破传统量化瓶颈

传统量化方法在处理大语言模型时面临两难困境:要么牺牲精度追求性能,要么保留精度但无法有效加速。SmoothQuant通过数学等价变换,将激活中的量化难点迁移到权重,使两者都能高效量化。

SmoothQuant量化原理示意图 SmoothQuant通过平滑激活异常值,使激活和权重都变得易于量化

显著的性能提升

SmoothQuant实现了:

  • 内存占用减少50%(从FP16到INT8)
  • 推理速度提升1.56倍
  • 精度损失可忽略不计
  • 支持超大规模模型(如OPT-175B、BLOOM-176B)的INT8量化

🧠 技术原理解析

量化难度迁移机制

SmoothQuant的核心创新在于发现了LLM中权重易于量化而激活难以量化的特性。通过离线计算激活通道尺度,将量化难度从激活迁移到权重,实现数学上等价的转换。

量化难度迁移可视化 左图显示原始激活难以量化,右图显示SmoothQuant处理后激活变得平滑,权重虽难度增加但仍可有效量化

量化流程设计

SmoothQuant在Transformer架构中对关键组件进行INT8量化,同时保持LayerNorm和Softmax等操作在FP16精度,确保最佳性能-精度平衡。

SmoothQuant量化流程图 绿色模块表示INT8量化,黄色模块保持FP16精度

📊 性能对比与实验结果

精度保持能力

在多项基准测试中,SmoothQuant量化后的模型精度接近FP16水平,远超其他量化方法:

SmoothQuant精度对比 OPT-175B模型在各数据集上的精度对比,SmoothQuant显著优于其他量化方法

速度与内存优势

在PyTorch环境下,SmoothQuant相比FP16和其他量化方法展现出明显优势:

PyTorch环境下的性能对比 不同模型大小下的延迟(ms)和内存占用(GB)对比,SmoothQuant在保持精度的同时实现最佳性能

当集成到FasterTransformer服务框架时,SmoothQuant表现更出色:

FasterTransformer性能对比 使用SmoothQuant可减少50% GPU数量,同时保持更快推理速度

🛠️ 快速开始:安装与使用

环境准备

conda create -n smoothquant python=3.8
conda activate smoothquant
pip install torch==1.12.1+cu113 torchvision==0.13.1+cu113 torchaudio==0.12.1 --extra-index-url https://download.pytorch.org/whl/cu113
pip install transformers==4.36.0 accelerate datasets zstandard
python setup.py install

加载预量化模型

SmoothQuant提供已量化的OPT模型,可直接加载使用:

from smoothquant.opt import Int8OPTForCausalLM
model = Int8OPTForCausalLM.from_pretrained("mit-han-lab/opt-30b-smoothquant")

量化自己的模型

  1. 生成激活尺度:
python examples/generate_act_scales.py \
    --model-name <模型名称或路径> \
    --output-path <激活尺度文件路径> \
    --num-samples 512 \
    --seq-len 512
  1. 导出INT8模型:
python examples/export_int8_model.py --model-path <模型路径> --act-scales <激活尺度文件> --output-path <输出路径>

🔍 支持的模型与应用场景

SmoothQuant已支持多种主流LLM模型,包括:

  • Llama系列 (1/2/3)
  • Falcon系列
  • Mistral和Mixtral
  • OPT和BLOOM

在实际应用中,SmoothQuant已被集成到多个工业级框架:

  • NVIDIA TensorRT-LLM
  • Microsoft ONNX Runtime
  • Amazon SageMaker
  • Intel Neural-Compressor
  • AMD Instinct MI300X

📈 量化效果评估

使用提供的困惑度(Perplexity)评估脚本测试量化效果:

python smoothquant/ppl_eval.py \
    --model_path <模型路径> \
    --act_scales_path <激活尺度文件> \
    --smooth \
    --alpha 0.85 \
    --quantize

部分模型量化效果示例:

模型 方法 困惑度(PPL)
Llama-2-7B FP16 5.474
SQ W8A8 5.515
Llama-2-13B FP16 4.950
SQ W8A8 4.929
Mistral-7B FP16 5.253
SQ W8A8 5.277

📚 学习资源与示例

项目提供多个Jupyter Notebook示例帮助快速上手:

激活尺度文件可在act_scales/目录找到,包含多种预计算模型的激活统计信息。

📝 总结

SmoothQuant作为一项突破性的后训练量化技术,为大语言模型的高效部署提供了强大解决方案。它通过创新的量化难度迁移机制,实现了精度与性能的完美平衡,已被多家科技公司采用并集成到主流AI框架中。无论是学术研究还是工业应用,SmoothQuant都为LLM的量化部署开辟了新途径,显著降低了大模型应用的硬件门槛。

要开始使用SmoothQuant,请克隆项目仓库:

git clone https://gitcode.com/gh_mirrors/smo/smoothquant

【免费下载链接】smoothquant [ICML 2023] SmoothQuant: Accurate and Efficient Post-Training Quantization for Large Language Models 【免费下载链接】smoothquant 项目地址: https://gitcode.com/gh_mirrors/smo/smoothquant

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐