En vivo 18.11 · Cohorte 318 nov, 19:00 MSK — taller práctico gratuito de agentes IA · Cohorte 3 en vivo inicia 23.11Taller 18 nov →Cohorte 3 (23.11)
LanzamientoAnálisis · En radarHabr AI→ original

Cinco trucos para acelerar un MoE en una GTX 1070: el autoprefijo redujo la latencia de 13,3 a 6,1 s

El desarrollador del motor Strata ejecuta un modelo MoE grande en una GTX 1070 con 8 GB de VRAM y ha reunido cinco formas de acelerarlo. Cuatro ya existen en el motor, aunque a menudo están desactivadas: decodificación especulativa, KV-cache en RAM, batching y caché adaptativa de expertos. La quinta es un parche propio con detección automática del prefijo común, que redujo el tiempo hasta el primer token de 13,3 a 6,1 segundos.

Procesado por IA desde Habr AI; editado por Hamidun News
Cinco trucos para acelerar un MoE en una GTX 1070: el autoprefijo redujo la latencia de 13,3 a 6,1 s
Fuente: Habr AI. Collage: Hamidun News.
Escuchar artículo
Ficha técnica y cifras clave
ParámetroDatos
Fuente originalHabr AI ↗
Editor jefe
Dato clave #1--spec/--mtp aporta entre 1,3x y 1,6x en la generación, sobre todo con código
Dato clave #2--kv-resident cede la VRAM liberada a la caché de expertos
Dato clave #3La caché adaptativa de expertos es entre 1,5 y 2 veces más rápida que la estática

Si intentas ejecutar un MoE grande en una tarjeta gráfica doméstica, el cuello de botella no es el cómputo, sino la memoria. Los pesos de los expertos no caben en la VRAM, una parte pasa a la RAM y al SSD, y cada acceso a un experto «frío» cuesta unos preciados milisegundos. El autor del motor Strata, que ejecuta Qwen3.8-Flash-Next en una GTX 1070 de 8 GB, ha reunido cinco trucos que ayudan a combatirlo. Cuatro ya están integrados en el motor; el quinto lo escribió él mismo y ha publicado las mediciones.

Cuatro trucos que ya están en el motor

El primero es la decodificación especulativa (--spec N --mtp <ruta>). Una pequeña capa borrador predice varios tokens por adelantado y el modelo grande los verifica en una sola pasada. Si el borrador acierta, obtienes varios tokens al precio de uno. La ganancia suele ser de 1,3–1,6x. El borrador acierta bien con código y patrones repetitivos, y peor con prosa libre. El coste es algo de VRAM para la capa borrador y los búferes.

El segundo es --kv-resident N. En la VRAM solo queda una ventana deslizante de atención de N tokens, y toda la KV-cache pasa a RAM pinned. La atención en sí no se acelera por ello. La ganancia está en otro lado: la memoria liberada va a parar a la caché de expertos. En un MoE, un gigabyte extra para expertos residentes suele ser más útil que el ahorro en KV. Es fácil de comprobar: compara la tasa de aciertos de la expert cache en el log antes y después.

El tercero es el batching (--batch, --parallel). Es continuous batching: varias conversaciones se decodifican en ventanas compartidas y los pesos comunes se leen una sola vez para todas. En una sola tarjeta, el throughput por usuario incluso baja un poco. A cambio, nadie espera en la cola mientras se atiende al vecino. Si tienes varias GPU con layer-split o agentes en paralelo, consulta docs/BATCHING.md.

El cuarto es la residencia adaptativa de expertos (--adapt-every, --adapt-swaps). La caché reubica los pesos entre VRAM, RAM y SSD según la frecuencia de acceso, en plena generación. Según las mediciones del autor, la diferencia entre una caché estática y una «viva» fue de entre 1,5x y 2x, según la homogeneidad del flujo de prompts.

Quinto truco: prefijo común automático

Strata tiene un mecanismo, strata_prefix: el cliente indica explícitamente dónde termina la parte común del prompt, y el motor guarda un checkpoint en ese límite. Las siguientes peticiones con el mismo comienzo no lo releen. El problema es que casi ningún cliente lo hace, ni chatbots ni frameworks de agentes.

El autor añadió una capa de servidor (STRATA_AUTO_PREFIX=1, desactivada por defecto). Mantiene un radix-trie sobre los id de token de los prompts recientes y lleva un presupuesto del número de «pines» simultáneos. Cada pin quita VRAM a la caché de expertos: no existen pines gratuitos. Si llega una petición sin prefijo explícito, el servidor encuentra la coincidencia por sí mismo y fija el límite. El motor no nota la diferencia.

Medición: Strata 0.2.12, una GTX 1070 de 8 GB, Qwen3.8-Flash-Next UD-IQ4_XS, dos clientes con un mismo documento largo.

  • Mediana de tokens releídos: 886 → 468.
  • Mediana de tokens servidos desde la caché: 0 → 413.
  • Mediana del tiempo hasta el primer token: 13,3 s → 6,1 s.

Son dos ejecuciones del mismo benchmark en la misma máquina, en las que solo cambia una variable de entorno.

Limitaciones y qué hacer

Primero, las salvedades. Todas las cifras proceden de una única configuración y de un único escenario con dos clientes, y la mejora del autoprefijo depende de cuánto comienzo común tengan tus peticiones. El parche está en una rama del fork y no ha sido aceptado en upstream. El autor abrió un issue, y no un PR, porque CONTRIBUTING.md exige acordar primero el scope. Los pines compiten con la caché de expertos por la VRAM, así que habrá que ajustar el presupuesto.

El orden práctico es este. Si tienes un MoE en una tarjeta modesta, empieza por --kv-resident y --spec/--mtp: es la ganancia más rápida sin escribir una sola línea de código. Después, comprueba que la adaptación de expertos esté activada. Si usas RAG o agentes con un prompt de sistema largo y común, merece la pena probar el autoprefijo con tu propio tráfico. La lección principal va más allá de un solo motor: con VRAM limitada, casi cualquier optimización se reduce a decidir en qué gastar cada gigabyte. Y eso hay que comprobarlo con mediciones, no con intuición.

Historia

Preguntas frecuentes sobre la noticia

¿Qué se sabe sobre Cuatro trucos que ya están en el motor?

El primero es la decodificación especulativa (--spec N --mtp <ruta>). Una pequeña capa borrador predice varios tokens por adelantado y el modelo grande los verifica en una sola pasada. Si el borrador acierta, obtienes varios tokens al precio de uno. La ganancia suele ser de 1,3–1,6x. El borrador acierta bien con código y patrones repetitivos, y peor con prosa libre. El coste es algo de VRAM para la capa borrador y los búferes. El segundo es --kv-resident N.

¿Qué se sabe sobre Quinto truco: prefijo común automático?

Strata tiene un mecanismo, strata_prefix: el cliente indica explícitamente dónde termina la parte común del prompt, y el motor guarda un checkpoint en ese límite. Las siguientes peticiones con el mismo comienzo no lo releen. El problema es que casi ningún cliente lo hace, ni chatbots ni frameworks de agentes. El autor añadió una capa de servidor (STRATA_AUTO_PREFIX=1, desactivada por defecto).

¿Qué se sabe sobre Limitaciones y qué hacer?

Primero, las salvedades. Todas las cifras proceden de una única configuración y de un único escenario con dos clientes, y la mejora del autoprefijo depende de cuánto comienzo común tengan tus peticiones. El parche está en una rama del fork y no ha sido aceptado en upstream. El autor abrió un issue, y no un PR, porque CONTRIBUTING.md exige acordar primero el scope. Los pines compiten con la caché de expertos por la VRAM, así que habrá que ajustar el presupuesto. El orden práctico es este.

ZK
Zhemal Khamidun — CPO de Alpina Digital, product manager de AlpinaGPT. Crea productos de IA desde 2019. Hamidun News es un proyecto personal que creció hasta ser un agregador en producción con más de 6.000 lectores.
✦ Unified AI Workspace · Nomad

Test Frontier LLMs & Autonomous Agents in One Workspace

Run Claude Opus 5.5, GPT-6, Gemini 3.1, and DeepSeek side-by-side in Nomad AI (nomadnet.ai) — unified model routing, deep research, and multimodal workflows under one subscription.

Try Nomad AI →Launch Nomad Agent
¿Qué te parece?
Cargando comentarios…