AQLM技术博客:持续更新的开发者学习资源
你是否还在为大语言模型(LLM)的高内存占用和缓慢推理速度而困扰?AQLM(Additive Quantization for Language Models)通过创新的加法量化技术,实现了LLM的极致压缩,在保持性能的同时显著降低资源需求。本文将带你快速掌握AQLM的核心功能、使用方法和最新进展,成为模型压缩领域的实践者。
读完本文,你将能够:
- 理解AQLM的核心原理与技术优势
- 快速部署预量化模型进行高效推理
- 掌握模型量化与PV-Tuning微调全流程
- 利用 benchmark 工具评估模型性能
- 获取持续更新的学习资源与社区支持
AQLM项目概览
AQLM是一个基于PyTorch的开源项目,专注于通过加法量化(Additive Quantization)技术实现大语言模型的极致压缩。其核心论文《Extreme Compression of Large Language Models via Additive Quantization》已被ICML 2024接收,后续提出的PV-Tuning微调算法更是被NeurIPS 2024选为口头报告。
项目主要特点:
- 超高压缩率:支持1-2bit量化,模型体积减少8-16倍
- 性能损失小:1bit量化的Llama-2-7b模型在WikiText2上PPL仅为7.85
- 多场景支持:提供GPU/CPU推理方案,支持vLLM部署与流式输出
- 持续更新:2025年4月发布v1.1.7版本,新增8维码本支持与1bit模型精度提升
项目结构清晰,主要包含以下模块:
- 核心代码:aq_engine.py、src/
- 推理库:inference_lib/
- 量化工具:main.py、convert_to_hf.py
- 微调脚本:finetune.py
- 性能基准:benchmark/
- 教程 notebooks:notebooks/
快速开始:模型推理实战
安装AQLM推理库
AQLM提供了便捷的Python包,支持GPU和CPU两种推理场景:
pip install aqlm[gpu,cpu]
如需使用最新特性,可从源码安装:
git clone https://gitcode.com/GitHub_Trending/aq/AQLM
cd AQLM
pip install -r requirements.txt
pip install .[gpu,cpu]
加载预量化模型
AQLM与Hugging Face Transformers库无缝集成,可直接使用.from_pretrained()方法加载量化模型:
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "ISTA-DASLab/Llama-2-7b-AQLM-1Bit-1x8-hf"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
model_name,
trust_remote_code=True,
torch_dtype="auto"
).cuda()
inputs = tokenizer("AQLM is an amazing model compression technique because", return_tensors="pt").to("cuda")
outputs = model.generate(**inputs, max_new_tokens=50)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
推理内核选择
AQLM针对不同硬件环境优化了多种推理内核,可根据实际场景选择:
| 内核 | 码本数量 | 每个码本位数 | 精度 | 加速比 | GPU支持 | CPU支持 |
|---|---|---|---|---|---|---|
| Triton | K | N | - | ~0.7x | ✅ | ❌ |
| CUDA | 1 | 16 | 最佳 | ~1.3x | ✅ | ❌ |
| CUDA | 2 | 8 | 良好 | ~3.0x | ✅ | ❌ |
| Numba | K | 8 | 优秀 | ~4.0x | ❌ | ✅ |
表:AQLM推理内核对比,数据来源README.md
模型量化全流程
准备工作
量化前需安装依赖并准备校准数据:
# 安装依赖
pip install -r requirements.txt
# 下载校准数据(以RedPajama为例)
python -c "from huggingface_hub import hf_hub_download; hf_hub_download(repo_id='Vahe1994/AQLM', filename='data/red_pajama_n=1024_4096_context_length.pth', repo_type='dataset', local_dir='./data')"
执行量化
使用main.py脚本进行模型量化,以下是Llama-2-7b模型1bit量化的示例命令:
export CUDA_VISIBLE_DEVICES=0
export MODEL_PATH=meta-llama/Llama-2-7b-hf
export DATASET_PATH=./data/red_pajama_n=1024_4096_context_length.pth
export SAVE_PATH=./llama-2-7b-aqlm-1bit
python main.py $MODEL_PATH $DATASET_PATH \
--nsamples=1024 \
--val_size=128 \
--num_codebooks=1 \
--nbits_per_codebook=256 \ # 1bit量化特殊设置
--in_group_size=8 \
--relative_mse_tolerance=0.01 \
--finetune_batch_size=32 \
--finetune_max_epochs=10 \
--offload_activations \
--save $SAVE_PATH
关键参数说明:
--num_codebooks:码本数量,1bit量化时设为1--nbits_per_codebook:每个码本的位数,1bit量化时设为256(2^8)--in_group_size:量化分组大小,通常设为8--relative_mse_tolerance:MSE误差容忍度,值越小精度越高但量化时间越长
转换为Hugging Face格式
量化完成后,使用convert_to_hf.py将模型转换为标准格式:
python convert_to_hf.py \
meta-llama/Llama-2-7b-hf \
./llama-2-7b-aqlm-1bit \
./llama-2-7b-aqlm-1bit-hf \
--save_safetensors
PV-Tuning微调优化
AQLM的PV-Tuning(Product of Vectors Tuning)技术能有效提升量化模型性能,其核心思想是同时优化量化码本和量化参数。
准备微调数据
首先使用finetune.py预处理微调数据:
TARGET_MODEL=meta-llama/Llama-2-7b-hf
SEQLEN=4096
DATASET=togethercomputer/RedPajama-Data-1T-Sample
OUTPUT_PATH=./redpajama_tokenized_llama2
CUDA_VISIBLE_DEVICES=0 torchrun --master-port 3456 --nproc-per-node=1 finetune.py \
--base_model $TARGET_MODEL \
--quantized_model ./doesnt_matter \
--dtype bfloat16 \
--block_type LlamaDecoderLayer \
--dataset_name=$DATASET \
--split train \
--dataset_config_name plain_text \
--model_seqlen=$SEQLEN \
--preprocessing_num_workers=64 \
--save_dataset_and_exit $OUTPUT_PATH
执行PV-Tuning微调
NUM_GPUS=4
MODEL_PATH=meta-llama/Llama-2-7b-hf
QUANTIZED_WEIGHTS_PATH=./llama-2-7b-aqlm-1bit
TOKENIZED_DATASET_PATH=./redpajama_tokenized_llama2
SAVE_PATH=./llama-2-7b-aqlm-1bit-pv-tuned
torchrun --nproc-per-node=$NUM_GPUS finetune.py \
--base_model $MODEL_PATH \
--quantized_model $QUANTIZED_WEIGHTS_PATH \
--model_seqlen=4096 \
--block_type LlamaDecoderLayer \
--load_dtype bfloat16 \
--amp_dtype bfloat16 \
--code_dtype uint16 \
--dataset_name=$TOKENIZED_DATASET_PATH \
--split none \
--update_codes \
--update_codebooks_and_scales \
--update_non_quantized_parameters \
--lamb \
--lr 3e-4 \
--batch_size=128 \
--max_epochs 1 \
--gradient_checkpointing \
--save $SAVE_PATH
PV-Tuning关键参数:
--update_codes:更新量化编码--update_codebooks_and_scales:更新码本和缩放因子--update_non_quantized_parameters:更新非量化参数--lamb:使用LAMB优化器
性能评估与基准测试
AQLM提供了完善的性能评估工具,位于benchmark/目录下,支持矩阵乘法性能测试和生成式任务基准测试。
矩阵乘法性能测试
# GPU矩阵乘法测试
python benchmark/matmul_benchmark.py
# CPU矩阵乘法测试
python benchmark/matmul_benchmark_cpu.py
生成式任务性能测试
python benchmark/generate_benchmark.py \
--model_path ISTA-DASLab/Llama-2-7b-AQLM-1Bit-1x8-hf \
--prompt "The future of AI is" \
--num_tokens 100 \
--num_runs 10
预量化模型性能指标
AQLM团队发布了多种预量化模型,性能指标如下:
| 模型 | 量化方案 | WikiText-2 PPL | 模型大小 (GB) |
|---|---|---|---|
| Llama-2-7b | 1x16g8 | 5.68 | 2.4 |
| Llama-2-7b | 1x8g8 | 7.85 | 1.34 |
| Llama-3-8b | 1x16g8 | 6.99 | 4.1 |
| Mistral-7B | 1x16g8 | 5.22 | 2.51 |
| Phi-3-mini-4k-instruct | 1x16g8 | 6.63 | 1.4 |
表:AQLM PV-Tuning模型性能,数据来源README.md
进阶应用与工具
vLLM部署加速
AQLM支持vLLM推理引擎,可大幅提升生成速度。使用notebooks/aqlm_vllm.ipynb教程,实现高性能部署:
from vllm import LLM, SamplingParams
model_name = "ISTA-DASLab/Llama-2-7b-AQLM-2Bit-1x16-hf"
sampling_params = SamplingParams(temperature=0.7, top_p=0.95, max_tokens=100)
llm = LLM(model=model_name, tensor_parallel_size=1, gpu_memory_utilization=0.9)
prompts = ["What is AQLM?", "How does model compression work?"]
outputs = llm.generate(prompts, sampling_params)
for output in outputs:
print(output.prompt, output.text)
流式输出与CUDA图优化
AQLM支持流式生成和CUDA图优化,进一步提升推理速度。相关示例可参考:
- notebooks/streaming_example.ipynb:流式输出示例
- notebooks/aqlm_cuda_graph.ipynb:CUDA图优化(3倍速提升)
学习资源与社区
官方文档与教程
- 项目文档:README.md
- 基础教程:notebooks/colab_example.ipynb
- 2bit训练教程:notebooks/aqlm_2bit_training.ipynb
常见问题解答
Q: AQLM支持哪些模型架构?
A: 当前主要支持LLaMA、Mistral、Mixtral、Gemma和Phi-3系列模型,详见模型列表。
Q: 量化需要多少计算资源?
A: 7B模型量化约需1张A100 GPU,耗时1天左右;70B模型建议使用多GPU并行量化。
Q: 如何贡献代码?
A: 请先打开issue讨论,提交PR前需运行black . && isort .格式化代码。
持续更新与版本历史
- 2025.04:v1.1.7发布,支持任意8维码本,提升1bit模型精度
- 2024.11:PV-Tuning被NeurIPS 2024接收为口头报告
- 2024.06:发布PV-Tuning技术与模型集合
- 2024.05:AQLM被ICML 2024接收
总结与展望
AQLM通过创新的加法量化技术,在模型压缩领域取得了突破性进展,使大语言模型能够在资源受限的设备上高效运行。本文介绍的推理、量化、微调流程和性能评估方法,为开发者提供了全面的实践指南。
随着硬件技术的发展和算法的优化,我们有理由相信AQLM将在以下方向持续进步:
- 更高压缩率:探索亚1bit量化技术
- 更广泛支持:适配更多模型架构和应用场景
- 更优性能:进一步降低量化损失,提升推理速度
立即行动:
- Star并收藏本项目:
git clone https://gitcode.com/GitHub_Trending/aq/AQLM - 尝试量化自己的第一个模型,使用main.py脚本
- 关注项目更新,参与社区讨论,贡献你的想法和代码
AQLM正在改变大语言模型的部署方式,期待你的加入,共同推动模型压缩技术的发展!
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



