Skip to main content

TurboQuant: Extreme compression for AI models with near-optimal distortion rates

Project description

TurboQuant Clone

A production-quality implementation of Google's TurboQuant algorithm for extreme compression of AI models.

Overview

TurboQuant is a novel quantization algorithm from Google Research (ICLR 2026) that achieves:

  • 3-bit compression with near-zero accuracy loss
  • 6x memory reduction for KV caches in LLMs
  • 8x speedup on GPU with optimized kernels
  • Zero memory overhead - no per-block quantization constants needed

This implementation includes:

  • PolarQuant: Random rotation + polar transformation + Lloyd-Max quantization
  • QJL: 1-bit Johnson-Lindenstrauss transform with asymmetric estimator
  • TurboQuant: Combined two-stage compression with error correction
  • Full KV cache integration for transformer models
  • Comprehensive benchmarking suite

Key Features

Core Algorithms

  1. PolarQuant - Converts pairs of coordinates to polar coordinates and quantizes angles

    • Eliminates normalization overhead
    • Achieves 4.2x+ compression ratio
    • Near-optimal distortion rates
  2. QJL (Quantized JL) - 1-bit quantization with zero memory overhead

    • Unbiased inner product estimation
    • Perfect for attention mechanisms
    • Error correction for residuals
  3. TurboQuant - Two-stage compression combining both methods

    • Stage 1: PolarQuant for main compression
    • Stage 2: QJL on residual for error correction
    • 3-bit compression with quality neutrality

Performance

Bit-width    Compression    MSE          Cosine Similarity
3-bit        4.9x           0.715        0.64
4-bit        3.8x           0.193        0.90

Memory Savings (70B model, 72GB VRAM)

Configuration Memory Max Context
FP16 3.05 GB 1,037,597 tokens
TurboQuant 3-bit 0.62 GB 5,108,173 tokens
Savings 4.9x 4.9x

Installation

From PyPI (Recommended)

pip install fastvq

From Source

git clone https://github.com/turboquant/turboquant
cd turboquant
pip install -e .

Note: The package is published as fastvq on PyPI, but imports as turboquant:

# Install: pip install fastvq
import turboquant
print(turboquant.__version__)

Quick Start

Basic Compression

import numpy as np
from turboquant import TurboQuant, TurboQuantConfig

# Create sample data
x = np.random.randn(1, 8, 1024, 128).astype(np.float32)

# Configure TurboQuant
config = TurboQuantConfig(
    bit_width=3,           # 3-bit compression
    block_size=128,        # Block size
    use_qjl=True,          # Enable QJL error correction
    use_polar=True,        # Enable PolarQuant
)

# Create quantizer
tq = TurboQuant(config)

# Quantize
quantized = tq.quantize(x)

# Dequantize
reconstructed = tq.dequantize(quantized)

# Check quality
mse = np.mean((x - reconstructed) ** 2)
print(f"MSE: {mse:.6f}")

KV Cache Compression

from turboquant.kv_cache import KVCacheCompressor

# Create compressor
compressor = KVCacheCompressor(bit_width=3, block_size=128)

# During inference, compress KV cache
key_states = np.random.randn(1, 32, 1000, 128).astype(np.float32)
value_states = np.random.randn(1, 32, 1000, 128).astype(np.float32)

k_comp, v_comp = compressor.compress_kv(key_states, value_states)

# Later, decompress for attention
k_full = compressor.decompress_k(k_comp)
v_full = compressor.decompress_v(v_comp)

# Check memory savings
stats = compressor.compute_memory_stats(
    seq_len=100000,
    batch_size=1,
    n_heads=32,
    head_dim=128,
)
print(f"Compression ratio: {stats['compression_ratio']:.2f}x")
print(f"Memory saved: {stats['memory_saved_gb']:.2f} GB")

Demo

Run the demonstration script:

python demo.py

This will show:

  1. Basic compression with different bit-widths
  2. KV cache memory analysis
  3. Performance benchmarks

Algorithm Details

PolarQuant Algorithm

  1. Random Rotation: Apply random orthogonal transformation to spread information evenly
  2. Pairwise Polar Transform: Convert (x, y) pairs to (radius, angle)
  3. Angle Quantization: Quantize angles using Lloyd-Max optimal codebook
  4. Efficient Storage: Store norms + quantized indices (no per-block scales)

QJL Algorithm

  1. JL Projection: Project to lower dimension using random Gaussian matrix
  2. Sign Quantization: Keep only sign bit (+1/-1) of each projected value
  3. Asymmetric Estimator: Use different reconstruction for queries vs keys
  4. Unbiased IP: Inner products remain unbiased for attention computation

TurboQuant Combination

Original Vector:     x
↓ Normalize:         x̂ = x / ||x||
↓ PolarQuant:        q_polar = quantize_polar(x̂)
↓ Residual:          r = x̂ - dequantize_polar(q_polar)
↓ QJL:               q_qjl = sign(JL(r))

Compressed:          (||x||, q_polar, q_qjl)

Project Structure

turboquant-clone/
├── turboquant/
│   ├── __init__.py          # Main exports
│   ├── turboquant.py        # TurboQuant implementation
│   ├── polarquant.py        # PolarQuant implementation
│   ├── qjl.py               # QJL implementation
│   ├── transforms.py        # Walsh-Hadamard & polar transforms
│   ├── codebooks.py         # Lloyd-Max codebook generation
│   ├── utils.py             # Bit-packing & utilities
│   └── kv_cache.py          # KV cache integration
├── demo.py                  # Demonstration script
└── README.md               # This file

Implementation Notes

Improvements Over Paper

This implementation includes several enhancements:

  1. Simplified Polar Transform: Uses pairwise transformation instead of full recursive
  2. Optimized Codebooks: Pre-computed Lloyd-Max centroids for common dimensions
  3. Flexible Block Sizes: Supports 32, 64, and 128-dimensional blocks
  4. KV Cache Utilities: Full streaming and batch compression support

Limitations

  • Byte compression (compress/decompress) is not fully implemented - use quantize/dequantize
  • SIMD optimizations (AVX2, AVX-512, NEON) not yet implemented
  • CUDA kernels not yet implemented
  • PyTorch integration not yet implemented

References

Papers

  1. TurboQuant (Zandieh et al., ICLR 2026)

  2. QJL (Zandieh et al., 2024)

  3. PolarQuant (Han et al., AISTATS 2026)

Related Work

  • GPTQ: Post-training quantization with Hessian-based error compensation
  • AWQ: Activation-aware weight quantization
  • SmoothQuant: Migrating quantization difficulty from activations to weights
  • QLoRA: 4-bit NormalFloat quantization for fine-tuning

License

This is a research implementation for educational purposes. Please cite the original TurboQuant paper if you use this in your research.

Citation

@inproceedings{zandieh2025turboquant,
  title={TurboQuant: Online Vector Quantization with Near-optimal Distortion Rate},
  author={Zandieh, Amir and Daliri, Majid and Hadian, Majid and Mirrokni, Vahab},
  booktitle={ICLR},
  year={2025}
}

Future Work

  • SIMD optimizations (AVX2, AVX-512, NEON)
  • CUDA kernels for GPU acceleration
  • PyTorch integration with autograd support
  • Integration with transformers library
  • Support for model weight quantization (not just KV cache)
  • Streaming compression for long sequences
  • Adaptive bit-width selection per layer

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fastvq-0.1.2.tar.gz (47.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

fastvq-0.1.2-py3-none-any.whl (52.6 kB view details)

Uploaded Python 3

File details

Details for the file fastvq-0.1.2.tar.gz.

File metadata

  • Download URL: fastvq-0.1.2.tar.gz
  • Upload date:
  • Size: 47.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for fastvq-0.1.2.tar.gz
Algorithm Hash digest
SHA256 6caed7bc8509e2f3405cfb4a314b7fab59bb39bc19f6636f743a47690ae09463
MD5 ec2aced746b2aec2dcd118444401391f
BLAKE2b-256 e6095eccdc3307e0c9b290a696bdf8b29e80f88ee884c4d70a65d5938cb4075c

See more details on using hashes here.

File details

Details for the file fastvq-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: fastvq-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 52.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for fastvq-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 efb01653d424e66a3ae1ae1ac69578ec42e367fce1c4065bf97950ef2d7f7794
MD5 c293e56ac2e495856939ca1605517485
BLAKE2b-256 2032dcc0144653bfc1384b6cd36d2daac8eafc3fe116528908126bbd87d35cfa

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page