MCPcopy Index your code
hub / github.com/Vahe1994/AQLM

github.com/Vahe1994/AQLM @main

Chat with this repo
repository ↗ · DeepWiki ↗ · + Follow
239 symbols 912 edges 34 files 94 documented · 39%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

AQLM

Official PyTorch implementation for Extreme Compression of Large Language Models via Additive Quantization

[2025.04] Released aqlm v1.1.7. Added support for arbitrary 8-dimensional codebooks on GPU, improved accuracy for 1-bit models, e.g. ISTA-DASLab/Llama-2-7b-AQLM-1Bit-1x8-hf at ~1 bit achieves WikiText 2 PPL 7.85. To quantize your own models this way, use num_codebooks=1, nbits_per_codebook=256 as per the tutorial below.

[2024.11] PV-tuning was accepted to NeurIPS'2024 for oral presentation!

[2024.05] AQLM was accepted to ICML'2024! If you're attending, meet us around this poster.

[2024.06] We released a new paper that extends AQLM with new finetuning algorithm called PV-tuning. We're also releasing PV-tuned AQLM models in this collection

[2024.08] We have merged the PV-Tuning branch into the main branch. To reproduce results with old finetuning (before Aug 21), use commit 559a366.

Inference

Demo

Learn how to run the prequantized models using this Google Colab examples:

| Basic AQLM

generation | Streaming with

GPU/CPU | Inference with CUDA

graphs (3x speedup) | Fine-tuning

with PEFT | Serving with

vLLM | |:-----------:|:-------:|:---------------:|:----------:|:--------:| | AQLM In Colab | AQLM In Colab | Open In Colab | Open In Colab | Open In Colab |

Browser demo (Rust/WASM)

If you want to try AQLM+PV inference on CPU directly in your browser, check out aqlm-rs:

Models

This repository is currently designed to work with models of LLaMA, Mistral and Mixtral families. The models reported below use full model fine-tuning as described in appendix A, with cross-entropy objective with teacher logits.

We provide a number of prequantized AQLM models without PV-Tuning (scroll down for PV-Tuned models):

Model AQLM scheme WikiText-2 PPL MMLU (5-shot) FP16→AQLM Model size, Gb Hub link
Llama-3-8b 1x16 - 0.65→0.56 4.1 Link
Llama-3-8b-Instruct 1x16 - 0.66→0.59 4.1 Link
Llama-3-70b 1x16 - 0.79→0.75 21.9 Link
Llama-3-70b-Instruct 1x16 - 0.80→0.76 21.9 Link
Command-R 1x16 - 0.68→0.57 12.7 Link
Command-R+ 1x16 - 0.74→0.68 31.9 Link
Mistral-7b 1x16 5.40 - 2.5 Link
Mistral-7B-Instruct-v0.2 2x8 - 0.59→0.44 2.5 Link
Mixtral-8x7b 1x16 3.35 - 12.6 Link
Mixtral-8x7b-Instruct 1x16 - - 12.6 Link
Llama-2-7b 1x16 5.92 0.46→0.39 2.4 Link
Llama-2-7b 2x8 6.69 - 2.2 Link
Llama-2-7b 8x8 6.61 - 2.2 Link
Llama-2-13b 1x16 5.22 0.55→0.49 4.1 Link
Llama-2-13b 2x8 5.63 - 3.8 Link
Llama-2-70b 1x16 3.83 0.69→0.65 18.8 Link
Llama-2-70b 2x8 4.21 - 18.2 Link
gemma-2b 1x16 - - 1.7 Link
gemma-2b 2x8 - - 1.6 Link

You can also download AQLM models tuned via PV-tuning:

Model AQLM scheme WikiText-2 PPL Model size, Gb Hub link
Llama-2-7b 1x16g8 5.68 2.4 Link
Llama-2-7b 2x8g8 5.90 2.2 Link
Llama-2-7b 1x16g16 9.21 1.7 Link
Llama-2-7b 1x8g8 (New!) 7.85 1.34 Link
Llama-2-13b 1x16g8 5.05 4.1 Link
Llama-2-70b 1x16g8 3.78 18.8 Link
Meta-Llama-3.2-1B 2x8g8 - 0.8 Link
Meta-Llama-3.2-1B-Instruct 2x8g8 - 0.8 Link
Meta-Llama-3.2-3B 2x8g8 - 1.5 Link
Meta-Llama-3.2-3B-Instruct 2x8g8 - 1.5 Link
Meta-Llama-3-8B 1x16g8 6.99 4.1 Link
Meta-Llama-3-8B 1x16g16 9.43 3.9 Link
Meta-Llama-3.1-8B 1x16g16 - - Link
Meta-Llama-3.1-8B 1x16g8 - - Link
Meta-Llama-3.1-8B-Instruct 1x16g16 - - Link
Meta-Llama-3.1-8B-Instruct 1x16g8 - - Link
Meta-Llama-3.1-8B-Instruct 2x8g8 - - Link
Meta-Llama-3-70B 1x16g8 4.57 21.9 Link
Meta-Llama-3-70B 1x16g16 8.67 13 Link
Meta-Llama-3.1-70B-Instruct 1x16g8 - 18.8 Link
Mistral-7B-v0.1 1x16g8 5.22 2.51 Link
Phi-3-mini-4k-instruct 1x16g8 6.63 1.4 Link
Phi-3-medium-4k-instruct 1x16g8 5.18 4.2 Link
Phi-3-medium-4k-instruct 1x16g16 7.42 2.7 Link
Qwen2-72B 1x16g8 - - Link
Qwen2-72B 1x16g16 - - Link
Qwen2-72B-Instruct 1x16g8 - - Link
Qwen2-72B-Instruct 1x16g16 - - Link

Note that models with "g16" in their scheme require aqlm inference library v1.1.6 or newer:

pip install aqlm[gpu,cpu]>=1.1.6

Above perplexity is evaluated on 4k context length for Llama 2 models and 8k for Mistral/Mixtral and Llama 3. Please also note that token-level perplexity can only be compared within the same model family, but should not be compared between models that use different vocabularies. While Mistral has a lower perplexity than Llama 3 8B but this does not mean that Mistral is better: Llama's perplexity is computed on a much larger dictionary and has higher per-token perplexity because of that.

For more evaluation results and detailed explanations, please see our papers: Egiazarian et al. (2024) for pure AQLM and Malinovskii et al. (2024) for PV-Tuned models.

Inference kernels

AQLM quantization setpus vary mainly on the number of codebooks used as well as the codebook sizes in bits. The most popular setups, as well as inference kernels they support are:

Kernel Number of codebooks Codebook size, bits Scheme Notation Accuracy Speedup Fast GPU inference Fast CPU inference
Triton K N KxN - Up to ~0.7x
CUDA 1 16 1x16 Best Up to ~1.3x
CUDA 2 8 2x8 OK Up to ~3.0x
Numba K 8 Kx8 Good Up to ~4.0x

Installation

To run the models, one would have to install an inference library:

pip install aqlm[gpu,cpu]

, specifying either gpu, cpu or both based on one's inference setting.

Then, one can use the familiar .from_pretrained method provided by the transformers library:

from transformers import AutoModelForCausalLM

quantized_model = AutoModelForCausalLM.from_pretrained(
    "ISTA-DASLab/Llama-2-7b-AQLM-2Bit-1x16-hf",
    trust_remote_code=True, torch_dtype="auto"
).cuda()

Notice that torch_dtype should be set to either torch.float16 or "auto" on GPU and torch.float32 on CPU. After that, the model can be used exactly the same as one would use and unquantized model.

Quantization

Dependencies

Install packages from requirements.txt:

pip install -r requirements.txt

Loading / caching datasets and tokenizer

The script

Core symbols most depended-on inside this repo

check_use_bfloat16
called by 12
inference_lib/src/aqlm/inference_kernels/cuda_kernel.cpp
_dequantize_weight
called by 7
src/utils.py
get_model
called by 7
src/modelutils.py
get_layers
called by 7
src/modelutils.py
load_state_dict
called by 7
src/pv_optimizer.py
backward
called by 6
inference_lib/src/aqlm/inference.py
scale_bias_unflatten_output
called by 6
inference_lib/src/aqlm/inference_kernels/cuda_kernel.cpp
state_dict
called by 6
src/pv_optimizer.py

Shape

Function 175
Method 50
Class 13
Route 1

Languages

Python92%
C++8%

Modules by API surface

finetune.py20 symbols
inference_lib/src/aqlm/inference_kernels/cuda_kernel.cpp19 symbols
src/aq.py18 symbols
src/modelutils.py17 symbols
src/pv_optimizer.py16 symbols
main.py16 symbols
src/utils.py13 symbols
src/datautils.py11 symbols
aq_engine.py10 symbols
src/configurable_adam.py9 symbols
inference_lib/src/aqlm/inference_kernels/cuda_kernel.py9 symbols
src/pv_utils.py8 symbols

For agents

$ claude mcp add AQLM \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact