Saltar a contenido

Benchmark TurboQuant en Apple Silicon

TurboQuant (Google Research, ICLR 2026) comprime el KV cache de los LLM en 5x sin pérdida de calidad, permitiendo ejecutar modelos 70B en un Mac Mini con 64 GB de RAM. Estos son benchmarks reales medidos con asiai en hardware real.

Resultados

Llama-3.1-70B-Instruct Q4_K_M en Mac Mini M4 Pro 64 GB

Métrica Valor
Rendimiento 6,3 tok/s (estable, IC 95 %: 6,3-6,3)
TTFT 196 ms (mediana)
Potencia GPU 23,8 W
VRAM del modelo 44,1 GB (40 GB pesos + 4 GB KV turbo3)
Contexto 32.768 tokens
GPU Offload 81/81 capas en Metal
Temperatura Nominal (sin throttling)
Estabilidad Estable (desviación estándar 0,04 tok/s en 3 ejecuciones)

Configuración del KV cache: claves en q8_0 (alta precisión), valores en turbo3 (3 bits, compresión 5x).

Antes vs Después de TurboQuant

Sin TurboQuant Con TurboQuant (turbo3)
KV cache (ctx 32K) ~20 GB (q8_0) ~4 GB (turbo3)
RAM total necesaria 60+ GB (OOM en 64 GB) 44 GB (cabe en 64 GB)
¿Se puede ejecutar 70B en 64 GB? No
Calidad Referencia -1 % PPL (despreciable)
Recuperación NIAH 100 % 100 %

¿Qué es TurboQuant?

TurboQuant es un algoritmo de compresión del KV cache de Google Research, presentado en ICLR 2026. Durante la inferencia de los LLM, el KV cache almacena estados de atención intermedios y crece linealmente con la longitud del contexto. Para un modelo 70B con contexto de 128K en FP16, este cache puede consumir por sí solo entre 20 y 40 GB de RAM.

TurboQuant comprime este cache a 3 bits por valor usando:

  • Rotación aleatoria (transformada de Walsh-Hadamard) para gaussianizar los datos
  • Cuantización escalar óptima (PolarQuant) cerca del límite de Shannon
  • QJL (Quantized Johnson-Lindenstrauss) para preservar los productos escalares

El resultado: 5x de reducción de memoria, sin necesidad de fine-tuning y prácticamente sin pérdida de calidad.

Guía de instalación

Hardware

  • Mac Mini M4 Pro, 64 GB de memoria unificada (2.700 $)
  • Cualquier Mac Apple Silicon con 32+ GB debería funcionar (ajustar el tamaño del modelo según corresponda)

Instalar TurboQuant llama.cpp

# Install build tools
brew install cmake

# Clone the TurboQuant fork
git clone https://github.com/TheTom/llama-cpp-turboquant.git
cd llama-cpp-turboquant
git checkout feature/turboquant-kv-cache

# Build with Metal (Apple Silicon GPU)
cmake -B build -DGGML_METAL=ON -DGGML_METAL_EMBED_LIBRARY=ON -DCMAKE_BUILD_TYPE=Release
cmake --build build -j$(sysctl -n hw.ncpu)

Descargar un modelo

# Llama 3.1 70B Q4_K_M (~40 GB)
curl -L -o llama-3.1-70b-q4_k_m.gguf \
  "https://huggingface.co/bartowski/Meta-Llama-3.1-70B-Instruct-GGUF/resolve/main/Meta-Llama-3.1-70B-Instruct-Q4_K_M.gguf"

Aumentar el límite de memoria GPU de macOS

sudo sysctl iogpu.wired_limit_mb=61440

Iniciar el servidor

./build/bin/llama-server \
  -m llama-3.1-70b-q4_k_m.gguf \
  --cache-type-k q8_0 --cache-type-v turbo3 \
  -c 32768 \
  --port 8081 \
  --host 0.0.0.0 \
  -fa 1 \
  -ngl 99 \
  -t 10 \
  --no-mmap \
  --chat-template chatml

Explicación de la configuración

Parámetro Valor Por qué
--cache-type-k q8_0 Claves a 8 bits Las claves son sensibles a la compresión
--cache-type-v turbo3 Valores a 3 bits Los valores toleran compresión extrema (5x)
-fa 1 Flash Attention Requerido para TurboQuant
-ngl 99 GPU offload completo Las 81 capas en Metal
-t 10 10 threads M4 Pro tiene 10 núcleos de rendimiento
--no-mmap Sin memory mapping Carga todo al inicio, evita fallos de página
--chat-template chatml Formato ChatML Mejor compatibilidad con este fork

Benchmark con asiai

pip install asiai
asiai detect --url http://localhost:8081
asiai bench --engines llamacpp --prompts code --runs 3 --kv-cache turbo3 --card

Modelos que caben en 64 GB con TurboQuant

Modelo Pesos (Q4_K_M) KV Cache (32K, turbo3) Total Estado
Llama 3.1 70B 40 GB ~4 GB 44 GB Probado: 6,3 tok/s
Qwen2.5 72B 40 GB ~4 GB 44 GB Debería funcionar
Llama 70B ctx 128K 40 GB ~16 GB (turbo3) 56 GB Justo pero posible
Command-R+ 104B 58 GB ~4 GB 62 GB Muy justo

FAQ

¿Puedo ejecutar un modelo 70B en un Mac con 64 GB de RAM?

Sí, con TurboQuant. El KV cache se comprime 5x, por lo que Llama 70B Q4_K_M (40 GB de pesos) cabe cómodamente en 64 GB con un contexto de 32K. Medimos 6,3 tok/s en un Mac Mini M4 Pro.

¿TurboQuant reduce la calidad?

Sin pérdida de calidad medible. El aumento de perplejidad es inferior al 1 % frente a q8_0, y la recuperación Needle-in-a-Haystack alcanza el 100 % en un contexto de 32K.

¿Qué formato TurboQuant debería usar?

Asimétrico: q8_0 para claves + turbo3 para valores. Las claves son sensibles a la compresión (toda la degradación de calidad proviene de la compresión de K). Los valores pueden comprimirse a 2-3 bits sin ningún efecto en la calidad de la atención.

¿TurboQuant funciona con MLX?

Existen implementaciones de la comunidad (turboquant-mlx) pero son menos maduras que el fork de llama.cpp. Para uso en producción, recomendamos TheTom/llama-cpp-turboquant.

¿Cómo se compara con el llama.cpp estándar?

La velocidad de decodificación es de aproximadamente 0,9x de q8_0 (ligeramente más lento por token), pero la ganancia real es poder usar modelos y contextos que simplemente no cabían antes. El prefill puede ser más rápido en contextos largos gracias a la reducción de la presión sobre el ancho de banda de memoria.

Referencias