AWQ: 用于LLM压缩和加速的激活感知权重量化
高效且精确的LLM低位权重量化(INT3/4),支持指令微调模型和多模态语言模型。
当前版本支持:
- 用于精确量化的AWQ搜索。
- LLM预计算AWQ模型库(Llama-1/2/3, OPT, CodeLlama, StarCoder, Vicuna, VILA, LLaVA; 加载生成量化权重)。
- PyTorch中内存高效的4位线性层。
- 高效CUDA内核实现,用于快速推理(支持上下文和解码阶段)。
- 指令微调模型(Vicuna)和多模态LM(VILA)的4位推理示例。
借助AWQ,TinyChat能通过4位推理为LLM/VLM聊天机器人提供更高效的响应。
- RTX 4090上的TinyChat(比FP16快3.4倍):
- Jetson Orin上的TinyChat(比FP16快3.2倍):
TinyChat还支持视觉语言模型(如VILA, LLaVA)的推理。在以下示例中,使用TinyChat启动了VILA系列的W4A16量化模型。
- RTX 4090上使用VILA-13B的TinyChat(支持多图像输入):
- Jetson Orin上使用VILA-7B/13B的TinyChat:
查看TinyChat,它为在资源受限的边缘平台上设备本地推理LLM和VLM提供了一站式解决方案。使用TinyChat,现在可以在小型和低功耗设备上高效运行大型模型,甚至无需互联网连接!
新闻
- [2024/05] 🏆 AWQ获得MLSys 2024最佳论文奖。🎉
- [2024/05] 🔥 具有视频理解功能的VILA-1.5模型系列现已在AWQ和TinyChat中得到支持。查看由TinyChat提供支持的在线演示。示例在这里。
- [2024/05] 🔥 AMD采用AWQ来提高LLM服务效率。
- [2024/04] 🔥 我们发布了对Llama-3模型系列的AWQ和TinyChat支持!查看我们的示例在这里。
- [2024/02] 🔥 AWQ已被接受参加MLSys 2024!
- [2024/02] 🔥 我们在AWQ和TinyChat中支持了VILA视觉语言模型!查看我们最新的多图像输入演示!
- [2024/02] 🔥 我们在TinyChat中发布了新版本的量化GEMM/GEMV内核,在NVIDIA Jetson Orin上实现了每秒38个token的推理速度!
- [2024/01] 🔥 AWQ已被Google Vertex AI集成!
- [2023/11] 🔥 AWQ已被Amazon Sagemaker Containers集成!
- [2023/11] 🔥 我们为CodeLlama、StarCoder、StableCode模型添加了AWQ支持和预计算搜索结果。查看我们的模型库在这里!
- [2023/11] 🔥 AWQ现在通过
from_pretrained
在Hugging Face transformers中原生集成。您可以从Hub加载量化模型或自己的HF量化模型。 - [2023/10] AWQ已集成到NVIDIA TensorRT-LLM中
- [2023/09] AWQ已集成到Intel Neural Compressor、FastChat、vLLM、HuggingFace TGI和LMDeploy中。
- [2023/09] ⚡ 查看我们最新的TinyChat,在Orin上比首次发布快约2倍!
- [2023/09] ⚡ 查看AutoAWQ,这是一个第三方实现,使AWQ更容易扩展到新模型、提高推理速度并集成到Huggingface中。
- [2023/07] 🔥 我们发布了TinyChat,一个基于AWQ的高效轻量级聊天机器人界面。TinyChat能在云端和边缘GPU上进行高效的LLM推理。支持Llama-2-chat模型!查看我们的实现在这里。
- [2023/07] 🔥 我们为Llama-2模型(7B和13B)添加了AWQ支持和预计算搜索结果。查看我们的模型库在这里!
- [2023/07] 我们扩展了对更多LLM模型的支持,包括MPT、Falcon和BLOOM。
目录
有用的链接
- VILA在线演示: AWQ和TinyChat高效支持的视觉语言模型。
- 边缘设备上的LLM: AWQ和TinyChat支持NVIDIA Jetson Orin等边缘GPU。
- 笔记本电脑上的VLM: 按照说明使用TinyChat在NVIDIA笔记本电脑上部署VLM。
- Gradio服务器: 尝试使用AWQ和TinyChat构建自己的VLM在线演示!
- QServe: 🔥 [新] 用于大规模LLM推理的高效准确服务系统。
安装
- 克隆此仓库并进入AWQ文件夹
git clone https://github.com/mit-han-lab/llm-awq
cd llm-awq
- 安装包
conda create -n awq python=3.10 -y
conda activate awq
pip install --upgrade pip # 启用 PEP 660 支持
pip install -e .
-
对于 边缘设备 如 Orin,在运行上述命令之前,请:
- 修改 pyproject.toml,注释掉这一行。
- 将这一行设置为 transformers==4.32.0。
- 从 NVIDIA 手动安装预编译的 PyTorch 二进制文件(>=2.0.0)。
- 为 conda 环境设置适当的 Python 版本(例如,对于 JetPack 5,使用
conda create -n awq python=3.8 -y
)。
- 安装高效的 W4A16(4 位权重,16 位激活)CUDA 内核和优化的 FP16 内核(如 layernorm、位置编码)。
cd awq/kernels
python setup.py install
- 为了使用 VILA-1.5 模型系列运行 AWQ 和 TinyChat,请安装 VILA:
git clone git@github.com:Efficient-Large-Model/VILA.git
cd VILA
pip install -e .
AWQ 模型库
我们为多个模型系列提供了预计算的 AWQ 搜索结果,包括 LLaMA、OPT、Vicuna 和 LLaVA。要获取预计算的 AWQ 搜索结果,请运行:
# git lfs install # 如果尚未安装,请安装 git lfs
git clone https://huggingface.co/datasets/mit-han-lab/awq-model-zoo awq_cache
详细支持列表:
模型 | 大小 | INT4-g128 | INT3-g128 |
---|---|---|---|
VILA-1.5 | 3B/8B/13B/40B | ✅ | ✅ |
Llama3 | 8B/70B | ✅ | ✅ |
VILA | 7B/13B | ✅ | |
Llama2 | 7B/13B/70B | ✅ | ✅ |
LLaMA | 7B/13B/30B/65B | ✅ | ✅ |
OPT | 125m/1.3B/2.7B/6.7B/13B/30B | ✅ | ✅ |
CodeLlama | 7B/13B/34B | ✅ | ✅ |
StarCoder | 15.5B | ✅ | ✅ |
Vicuna-v1.1 | 7B/13B | ✅ | |
LLaVA-v0 | 13B | ✅ |
注意:我们在上表中只列出了我们已准备好 AWQ 搜索结果 的模型。AWQ 还支持如 LLaVA-v1.5 7B 等模型,您可能需要自行运行 AWQ 搜索 来量化这些模型。
示例
由于 AWQ 具有良好的泛化能力,它可以轻松应用于各种语言模型,包括指令调优模型和多模态语言模型。它为减少大型语言模型的服务成本提供了一种易用的工具。
这里我们在 ./examples
目录下提供了两个 AWQ 应用示例:Vicuna-7B(聊天机器人)和 LLaVA-13B(视觉推理)。AWQ 可以轻松减少模型服务的 GPU 内存使用并加快 token 生成速度。它提供准确的量化,产生推理输出。在使用 4 位权重运行模型时,您应该能够观察到 内存节省。
请注意,尽管我们在多模态输入上运行,但我们只使用文本校准数据进行 AWQ。详情请参阅 ./examples
。
使用方法
我们提供了几个示例脚本来运行 AWQ(请参阅 ./scripts
)。这里我们以 Llama3-8B 为例。
- 执行 AWQ 搜索并保存搜索结果(我们已经为您完成了这一步):
python -m awq.entry --model_path /PATH/TO/LLAMA3/llama3-8b \
--w_bit 4 --q_group_size 128 \
--run_awq --dump_awq awq_cache/llama3-8b-w4-g128.pt
- 在 WikiText-2 上评估 AWQ 量化模型(模拟伪量化)
python -m awq.entry --model_path /PATH/TO/LLAMA3/llama3-8b \
--tasks wikitext \
--w_bit 4 --q_group_size 128 \
--load_awq awq_cache/llama3-8b-w4-g128.pt \
--q_backend fake
- 生成实际量化权重(INT4)
mkdir quant_cache
python -m awq.entry --model_path /PATH/TO/LLAMA3/llama3-8b \
--w_bit 4 --q_group_size 128 \
--load_awq awq_cache/llama3-8b-w4-g128.pt \
--q_backend real --dump_quant quant_cache/llama3-8b-w4-g128-awq.pt
- 加载并评估实际量化模型(现在您可以看到更小的 GPU 内存使用)
python -m awq.entry --model_path /PATH/TO/LLAMA3/llama3-8b \
--tasks wikitext \
--w_bit 4 --q_group_size 128 \
--load_quant quant_cache/llama3-8b-w4-g128-awq.pt
视觉语言模型(VILA-1.5)的结果
AWQ 也无缝支持大型多模态模型(LMMs)。我们展示了最近的 VILA-1.5 模型系列的结果。
VILA-1.5-3B | VQA-v2 | GQA | VizWiz | ScienceQA | TextVQA | POPE | MME | MMBench | MMBench-CN | SEED |
---|---|---|---|---|---|---|---|---|---|---|
FP16 | 80.4 | 61.5 | 53.5 | 69.0 | 60.4 | 85.9 | 1442.4 | 63.4 | 52.7 | 60.9 |
AWQ-INT4 | 80.0 | 61.1 | 53.8 | 67.8 | 60.4 | 85.9 | 1437.3 | 63.3 | 51.4 | 59.8 |
VILA-1.5-8B | VQA-v2 | GQA | VizWiz | ScienceQA | TextVQA | POPE | MME | MMBench | MMBench-CN | SEED |
---|---|---|---|---|---|---|---|---|---|---|
FP16 | 80.9 | 61.9 | 58.7 | 79.9 | 66.3 | 84.4 | 1577.01 | 72.3 | 66.2 | 64.2 |
AWQ-INT4 | 80.3 | 61.7 | 59.3 | 79.0 | 65.4 | 82.9 | 1593.65 | 71.0 | 64.9 | 64.0 |
VILA-1.5-13B | VQA-v2 | GQA | VizWiz | ScienceQA | TextVQA | POPE | MME | MMBench | MMBench-CN | SEED |
----------- | :-----------------: | :-----------------: | :-------: | :-----------------: | :-----------------: | :-------: | :-------: | :-----------------: | :-------------: | :-------: |
FP16 | 82.8 | 64.3 | 62.6 | 80.1 | 65.0 | 86.3 | 1569.55 | 74.9 | 66.3 | 65.1 |
AWQ-INT4 | 82.7 | 64.5 | 63.3 | 79.7 | 64.7 | 86.7 | 1531.35 | 74.7 | 66.7 | 65.1 |
VILA-1.5-40B | VQA-v2 | GQA | VizWiz | ScienceQA | TextVQA | POPE | MME | MMBench | MMBench-CN | SEED |
---|---|---|---|---|---|---|---|---|---|---|
FP16 | 84.3 | 64.6 | 62.2 | 87.2 | 73.6 | 87.3 | 1726.82 | 82.4 | 80.2 | 69.1 |
AWQ-INT4 | 84.1 | 64.4 | 61.3 | 86.7 | 73.2 | 88.2 | 1714.79 | 83.2 | 79.6 | 68.9 |
推理速度(令牌/秒)
$~~~~~~$ | 精度 | A100 | 4090 | Orin |
---|---|---|---|---|
VILA1.5-3B | fp16 | 104.6 | 137.6 | 25.4 |
VILA1.5-3B-AWQ | int4 | 182.8 | 215.5 | 42.5 |
VILA1.5-3B-S2 | fp16 | 104.3 | 137.2 | 24.6 |
VILA1.5-3B-S2-AWQ | int4 | 180.2 | 219.3 | 40.1 |
Llama-3-VILA1.5-8B | fp16 | 74.9 | 57.4 | 10.2 |
Llama-3-VILA1.5-8B-AWQ | int4 | 168.9 | 150.2 | 28.7 |
VILA1.5-13B | fp16 | 50.9 | OOM | 6.1 |
VILA1.5-13B-AWQ | int4 | 115.9 | 105.7 | 20.6 |
VILA1.5-40B | fp16 | OOM | OOM | -- |
VILA1.5-40B-AWQ | int4 | 57.0 | OOM | -- |
参考文献
如果您发现AWQ对您的研究有用或相关,请引用我们的论文:
@inproceedings{lin2023awq,
title={AWQ: Activation-aware Weight Quantization for LLM Compression and Acceleration},
author={Lin, Ji and Tang, Jiaming and Tang, Haotian and Yang, Shang and Chen, Wei-Ming and Wang, Wei-Chen and Xiao, Guangxuan and Dang, Xingyu and Gan, Chuang and Han, Song},
booktitle={MLSys},
year={2024}
}