Reference implementation of TurboQuant-style vector/KV quantization (rotation + scalar quant + QJL residual).
Project description
turboquant_llm
Implementação de referência em NumPy do fluxo estilo TurboQuant: rotação ortogonal → quantização escalar → estágio QJL (sinais 1-bit da projeção JL do resíduo). Serve para experimentos, testes e desenho de API; não substitui kernels CUDA/Triton em produção.
No PyPI o nome do pacote é turboquant-llm (hífen); em código use import turboquant_llm. Código-fonte: github.com/PestanaRobson/turboquant_llm.
Os nomes
turboquanteturboquant-kvjá existem no PyPI como outros projetos.
Por que TurboQuant importa (o ganho real)
Em LLMs com contexto longo, o cache KV (chaves e valores guardados por token para não recalcular atenção) domina memória e largura de banda entre HBM e compute — é um gargalo clássico de servir modelo grande com muitos tokens.
O método TurboQuant (paper, blog Google Research) foi desenhado para comprimir vetores de alta dimensão usados nesse caminho (em especial K/V e produtos internos em atenção) com quantização online e sem calibração em dataset (“data-oblivious”): não exige coletar estatísticas do seu domínio para treinar codebooks.
Resultados reportados pelo Google (ambiente e modelo nos artigos; números indicativos, não garantidos para o seu hardware ou checkpoint):
| Eixo | O que se ganha (ordem de grandeza) |
|---|---|
| Memória do KV | Redução da ordem de ~6× no footprint do cache KV em relação a representações densas não comprimidas nos experimentos citados. |
| Velocidade da atenção | Até ~8× de aceleração no cálculo de logits de atenção vs. chaves em precisão total (ex.: FP32), em GPU H100 e implementação otimizada (baseline JAX no blog). |
| Qualidade | No paper: ~3,5 bits por canal com neutralidade de qualidade forte; ~2,5 com degradação marginal. No blog: quantização do KV na ordem de ~3 bits mantendo desempenho em benchmarks longos (LongBench, needle-in-haystack, etc.). |
| Overhead de quantização | Evita o custo de armazenar constantes de quantização completas por bloco como em muitos esquemas clássicos — parte central do argumento de eficiência do TurboQuant. |
O que esta biblioteca faz: reproduz a lógica (rotação + quantização + estágio tipo QJL) para pesquisa e integração futura. Não reproduz sozinha os números de H100 nem a memória real do servidor — isso exige kernels GPU e encaixe no motor de inferência (vLLM, TensorRT-LLM, etc.). Os ganhos acima são o alvo do algoritmo publicado; o caminho até lá é integração nativa no stack de KV.
Instalação
pip install turboquant-llm
Opcional (integrações futuras com modelos):
pip install turboquant-llm[torch]
Uso rápido
import numpy as np
from turboquant_llm import TurboQuantCompressor, TurboQuantConfig
dim = 128
x = np.random.default_rng(0).standard_normal((10, dim))
comp = TurboQuantCompressor(
dim,
TurboQuantConfig(bits_main=4, qjl_projection_dim=64, seed=0),
)
batch = comp.compress(x)
x_hat = comp.reconstruct_first_stage(batch) # ignora o estágio QJL no resíduo
Publicar no PyPI
Repositório: PestanaRobson/turboquant_llm. Envie o conteúdo deste diretório para o branch principal (git push).
- Com API token do PyPI:
python -m pip install build twine
python -m build
python -m twine upload dist/*
Teste antes no TestPyPI.
Gemma 4 e Qwen 3.x: melhor caminho com este tipo de quantização
TurboQuant (no paper e no blog do Google Research) ataca sobretudo memória e custo do cache KV e produtos internos em atenção — não é só “exportar pesos em INT4”.
-
Hoje (ecossistema Hugging Face / vLLM)
Integração “de verdade” costuma exigir suporte no motor de inferência (vLLM, SGLang, TensorRT-LLM, etc.) ou um módulo de atenção customizado que, a cada passo, comprima/descomprima K/V por cabeça com a mesma rotação e parâmetros fixos por modelo/camada. -
Gemma (ex. Gemma 3 / família Gemma no Hub) e Qwen3
- Confirme
hidden_size, GQA (num_key_value_heads),head_dimnoconfig.jsondo checkpoint. - A lib aqui opera em vetores de tamanho
dim(=head_dimpor cabeça, ou blocos que vocês definirem). - Caminho pragmático: usar este pacote para benchmark offline (distorsão, memória simulada); em seguida portar o núcleo para PyTorch custom op ou Triton no caminho de escrita/leitura do KV.
- Confirme
-
Ordem sugerida
- Prototipar com esta API em uma camada ou tensor KV sintético.
- Medir qualidade (long context / needle) com
bits_main~3–4 como no material de referência. - Só então acoplar ao servidor (vLLM plugin / patch) para latência real.
Licença
Apache-2.0
Referências
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file turboquant_llm-0.1.0.tar.gz.
File metadata
- Download URL: turboquant_llm-0.1.0.tar.gz
- Upload date:
- Size: 6.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
457a31d147a359108ee1f0294fc93c1161fdf8dfbd0ce560937711f72635d73d
|
|
| MD5 |
075cf645904e03768a0204fee050005f
|
|
| BLAKE2b-256 |
826fecbb3cc07de109b08e5d53b587a1fed7af39af2a6ff9b5fc83cd87878de3
|
File details
Details for the file turboquant_llm-0.1.0-py3-none-any.whl.
File metadata
- Download URL: turboquant_llm-0.1.0-py3-none-any.whl
- Upload date:
- Size: 8.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
353bd14480bff7ee4849354c03bc7e4f6dca81e54c8349165bba9519c41b23f4
|
|
| MD5 |
3d17616075eccd3afe6109c93ed2014a
|
|
| BLAKE2b-256 |
66f93919120f2d744211e5f3816cbc118fcd06884491fa35396a6fb8267d8ea2
|