← Todos los postsBlog · 15 de octubre de 2025

DeepSeek V4 Flash en el cluster: la línea base que lo cambió todo

43,91 tok/s, TTFT 131ms y 1M de contexto: la primera configuración dual-spark que nos convenció. Cómo la medimos, qué flags importaban de verdad y cuál fue nuestra línea base del cluster.

El primer modelo que demostró que las dos sparks juntas valían la pena. Fue nuestra línea base de cluster durante semanas y el contraejemplo que descartó a un MoE de 295B. Ficha completa con el banco de pruebas.

La ficha

Modelo DeepSeek V4 Flash
Cuantización UD-IQ3_XXS (97,1 GB)
Runtime vLLM (receta dual DGX Spark) · antes llama.cpp
Cluster 2× Spark, TP=2
Contexto 1M
Estado probado en producción, rollback documentado

Los números de la era cluster

prueba resultado
decode 43,91 tok/s
TTFT 131 ms
prefill 18K ~426 tok/s
contexto 1M tokens
carga desde frío ~7-8 min (155 GiB por nodo)

La historia de la medición

El baseline inicial fue con llama.cpp: 6 peticiones consecutivas correctas, carga de 7min30s, flash-attention activado, KV en F16. Ya ahí el DSpark (predicción de draft nativa del runtime) dio un salto: de ~14,9 a 139 tok/s de prefill en vLLM con la receta completa.

Lo interesante del proceso fueron los A/B:

  • Sin drafter vs con drafter: ×3 en el mejor caso. El draft del propio runtime, sin modelo auxiliar.
  • Flags “oficiales” de la receta vs config propia: 0,99x. No aportaban nada al decode. La receta completa de NVIDIA (marlin, kv fp8, mamba flashinfer+align, util 0.91) medía lo mismo que nuestra config simple. Lección: los flags venden, los números mandan.
  • Prefill en frío vs caliente: el prefix cache multiplica ×8 el prefill en prompts repetidos. En frío real (prompt único), 426 tok/s.

Por qué marcó un antes y un después

  1. Primera vez que “repartir” fue la respuesta correcta: no cabía en un nodo, y las dos máquinas dieron 43,9 tok/s estables con herramientas.
  2. El TTFT de 131ms: para chat interactivo, ese es el número que se siente. Menos de un héctosegundo hasta la primera palabra.
  3. El contexto de 1M verificado con NIAH: la prueba de aguja en pajar 16/16 a fondo. Reservar el pool es fácil; recuperar la aguja es lo difícil.

Por qué lo rotamos (y no lo borramos)

GLM-5.3 Flash llegó con tool-eval superior (90/100 vs 82/100) y mejor calidad en español. El protocolo de rotación nos permitió cambiar sin drama: backup de receta, cartucho deshabilitado pero intacto, y el rollback documentado paso a paso. Los discos son finitos; los experimentos documentados no se borran.

Si vuelvo a deepseek-cluster será porque alguien necesite exactamente su perfil: el MoE más rápido que hemos medido con 1M verificado. Mientras tanto, su ficha y sus CSV siguen en la bóveda. 📊

Lo que aprendimos (para tu setup)

  • La especulación nativa del runtime (DSpark/MTP) es la primera palanca: ×3 sin instalar nada
  • Los flags “pro” de las recetas ajenas: pruébalos A/B antes de creerte el README
  • El TTFT importa más que el tok/s para uso interactivo; el tok/s importa más para generación larga. Mide ambos.
  • Rotar con protocolo, no con coraje: backup → cambio → smoke → rollback documentado