Saltar al contenido

125.000 millones de parámetros en dos GPU de 8 GB y 6 GB: Qwen3.8-Flash-Next con Strata

Qwen3.8-Flash-Next con 8 GB VRAM + 6 GB: gigante de luz roja sobre dos tarjetas gráficas con patas, con el titular «125B en solo 14 GB» y «Con Strata · dos GPU · 8 GB + 6 GB»

En octubre probé Strata por primera vez, no conseguí buenos resultados y lo desinstalé. Lo conté en mi artículo sobre la caché de expertos. Ahora lo he vuelto a instalar para ejecutar Qwen3.8-Flash-Next con 8 GB VRAM en una gráfica y 6 GB en otra.

Hay un detalle que me hacía dudar: los equipos de ejemplo que publica el proyecto parten de tarjetas de 12 GB de VRAM (una RTX 3060, una RTX 5070). Yo tengo una RTX 2080 SUPER de 8 GB y una RTX 2060 de 6 GB, dos generaciones distintas, 14 GB entre las dos. ¿Se puede ejecutar un modelo de 125.000 millones de parámetros con doble GPU y tan poca VRAM? Spoiler: sí, y a unos 34 tokens por segundo.

Qwen3.8-Flash-Next sigue siendo, a día de hoy, lo mejor que he visto para ejecutar en local, y me había quedado con la espina clavada. Esta vez con una meta clara: que no fuera una demo, sino el motor de un agente de verdad dentro de mi propia aplicación.

Este artículo cuenta tres cosas: cómo funciona Strata en mi equipo y qué ajustes marcaron la diferencia, cómo lo integré en Agente Jiménez con un agente nuevo, Adolfo-Strata, y qué es capaz de hacer, con un ejemplo real: le pedí que programara un videojuego 2D en HTML y lo comprobé.

Este artículo continúa mi prueba de la caché de expertos, donde explico qué es un modelo MoE y por qué un modelo enorme puede caber en una gráfica pequeña. El hardware y la forma de medir son los de mi primer artículo sobre programación autónoma. No repito ese contexto: si te hace falta, empieza por ahí.

Resumen de resultados

PreguntaRespuesta medida
¿Funciona Qwen3.8-Flash-Next en una RTX 2080 SUPER (8 GB) + una RTX 2060 (6 GB)?Sí. Entre 33 y 34 tokens por segundo generando, con la configuración final
¿Qué ajuste dio casi toda la mejora?STRATA_ROUTE_PRIOR=1.5: de +21 % en texto a +63 % generando tras un prompt largo
¿Tiene algún coste?Sí: me coló caracteres chinos en mitad de palabras en castellano. Lo resolví vetando esos tokens en cada petición, sin perder velocidad
¿Y el MTP, la decodificación especulativa?Conseguí que arrancara, pero no acelera y tumba el motor con un prompt largo. Descartado
¿Sirve como motor de un agente?Sí. Adolfo-Strata ejecuta comandos y busca en la web. Le encargué un videojuego 2D y cumple los 11 requisitos del encargo
¿Y con la prueba oficial de Strata?Más modesta: 27,5 tok/s en chat, 18 tok/s como agente y 36,5 tok/s leyendo un prompt de 16K, que tarda unos 7 minutos en dar la primera palabra
¿Dónde se nota el esfuerzo?Al leer prompts largos. El turno de confirmación del juego tardó casi 7 minutos

Strata 0.2.9 · Qwen3.8-Flash-Next Gyro-S · RTX 2080 SUPER + RTX 2060 · Ryzen 7 5800X · 32 GB de RAM · dos pasadas por prueba, una para el prompt largo.

¿Qwen3.8-Flash-Next con 8 GB VRAM? ¿Y con dos GPU de 8 y 6 GB?

Con dos GPU de 8 GB + 6 GB, sí, siempre que tengas RAM y un NVMe rápido: yo uso 32 GB de RAM y un disco a ~2,5 GB/s. Strata reparte las capas del modelo entre las dos gráficas, aunque sean de generaciones distintas (una RTX 2080 SUPER y una RTX 2060), y deja el resto de los expertos en la RAM y el disco. Con una sola gráfica de 8 GB no lo he medido en esta prueba, así que no te prometo nada.

El precio: leer prompts largos es lento. Todo está medido más abajo, también con la prueba oficial del proyecto.

Antes de empezar: cuatro ideas sencillas

  • Strata. Un servidor local que ejecuta modelos MoE enormes en tarjetas pequeñas. Reparte las capas del modelo entre las gráficas y deja los expertos que no caben en la RAM y en el NVMe, de donde los trae cuando hacen falta. Habla como la API de OpenAI, así que cualquier programa que sepa hablar con OpenAI puede usarlo.
  • Gyro-S. La versión muy comprimida de Qwen3.8-Flash-Next que usa Strata. Pesa 58,5 GB, unos 2,6 bits por peso de media. Es el formato propio de Strata: no lo carga el llama.cpp normal.
  • MTP (predicción de varios tokens). El modelo propone de golpe varias palabras siguientes y comprueba si acierta. Si acierta, avanza varias de una vez. Es una técnica de velocidad.
  • Veto de tokens (logit_bias). Una opción de la API para decirle al modelo «esta palabra, ni se te ocurra». Más abajo la uso con un fin muy concreto.

Mi equipo: dos GPU de 8 GB y 6 GB (RTX 2080 SUPER + RTX 2060)

PiezaQué tengo
GráficasRTX 2080 SUPER (8 GB, además mueve el escritorio y ocupa ~1,5 GB) + RTX 2060 (6 GB, en un PCIe x4)
ProcesadorRyzen 7 5800X. Tiene AVX2 pero no AVX-512
Memoria y disco32 GB de RAM · NVMe a unos 2,5 GB/s
SistemaGaruda Linux
StrataAplicación 0.2.9 y motor 0.1.55 (CUDA 13), instalada aislada, con su propio directorio de datos
ModeloQwen3.8-Flash-Next Gyro-S: 58,5 GB, más el paquete de expertos y la capa de MTP. En total, unos 90 GB en disco
Contexto32.768 tokens

Strata detecta que mi RAM no da para tener todo en memoria y activa solo su «modo de poca RAM»: los expertos se leen del NVMe a través de la caché de páginas del sistema. Por eso la RAM libre importa tanto, como verás en los resultados.

El modelo, en números

Para saber con qué trabajaba leí la cabecera del archivo del modelo y sumé el tamaño de cada tensor. No son cifras oficiales de Qwen, son las que salen de mi archivo.

ParteParámetros
Expertos: 48 capas de 512, de los que usa 10 por token120,8 B
Tabla de embeddings por capa (se consultan solo unas filas por token)51,2 B
Atención, capas SSM, experto compartido, entrada y salida4,9 B
Total176,9 B

Sin esa tabla de embeddings, que no se multiplica por token, quedan unos 126 B. Es la cifra de «125B» que citaba en el artículo anterior. En cada token trabajan unos 6,6 B, que es lo que explica que pueda ir tan rápido.

Cómo lo ajusté

Partí de la primera configuración que me arrancó y fui comparando. Esto es lo que quedó:

AjustePara qué sirveEfecto en mi equipo
STRATA_ROUTE_PRIOR=1.5Prefiere los expertos que ya están en la gráfica. Viene apagado desde la 0.2.8 porque causaba texto repetido en sesiones largasCasi toda la mejora de velocidad
KV de 8 bits (int8)Guarda la memoria de la conversación con menos precisión, para que ocupe menosLibera VRAM y deja sitio a los expertos
--gpus 0,1Reparte las capas entre las dos tarjetas. Probé el papel de «ayudante» para una de ellas y Gyro no lo admite: Strata acababa cargándolo todo en la 2080Usa las dos gráficas de verdad
--vram-reserve-mib 400Deja libre un poco de VRAM para el escritorioEvita quedarse sin memoria con la pantalla en uso
--mtp offDesactiva la predicción de varios tokensVer más abajo: no compensa

Además pasé el afinador automático de Strata (strata tune auto). Concluyó que no había nada más rápido que mi configuración.

Resultados

Gráfico de tokens por segundo de Strata 0.2.9 con Gyro-S antes y después de ajustar: texto en castellano de 28,3 a 34,2, código de 26,1 a 33,7, generación tras un prompt largo de 20,3 a 33,1 y lectura del prompt en frío de 51 a 63
Antes y después de ajustar Strata (más alto = mejor)
PruebaAntesDespuésCambio
Texto en castellano28,3 tok/s34,2 tok/s+21 %
Código Python26,1 tok/s33,7 tok/s+29 %
Generación tras un prompt de 3.200 tokens20,3 tok/s33,1 tok/s+63 %
Lectura de ese prompt, en frío51 tok/s63 tok/s+23 %

Con la caché de páginas ya caliente, ese mismo prompt se lee a 106-165 tok/s. «Antes» es la primera configuración que me arrancó (KV q4_0, sin MTP); «después», la final.

En cristiano: lo que cuesta no es escribir, sino leer. Generar va sobre 34 tok/s, una velocidad cómoda. Leer un prompt largo depende de que los expertos estén ya en la RAM, y con 32 GB hay poco margen. La prueba oficial lo confirma: 16K de contexto tardan unos 7 minutos en dar la primera palabra.

El precio de ir más rápido: caracteres chinos

Con STRATA_ROUTE_PRIOR activado, apareció una palabra china en mitad de una frase en castellano: «sea吸入ado». Salió igual en las dos pasadas de la prueba de texto (con temperatura 0 el resultado se repite). Sin la opción, en las mediciones de referencia, no apareció.

No quise renunciar a la mejora, así que la corregí en el cliente. En cada petición mando un logit_bias de −100 para los 66.394 tokens chinos, japoneses y coreanos del vocabulario del modelo (los saqué del vocab.json del propio paquete). El modelo sencillamente no puede elegirlos. No cuesta velocidad medible.

El MTP: lo conseguí y lo descarté

Tenía curiosidad por el MTP. Con 8 GB, la capa de borrador (~825 MiB) no cabe en la 2080 junto al escritorio, así que había que llevarla a la 2060. Esto es lo que hizo falta:

  • --pipeline-windows 2, para que la capa de borrador se pueda mover.
  • La variable STRATA_MTP_STAGE0=1. Las notas de la versión dicen que con las ventanas en tubería la capa va a la primera tarjeta, pero en mi equipo, con NVIDIA y dos gráficas, no pasó. El motor lo explica en su registro: hay que pedirlo con esa variable.
  • Fijar a mano el reparto de capas (--layer-split 7), limitar la caché de expertos (--expert-cache 150) y reducir el bloque de lectura (--prefill 512).

Arrancó y aceptaba la mitad de los borradores. Pero no aceleraba: 23-26 tok/s, igual o peor que sin él. Y con un prompt de 3.200 tokens, el motor se cayó por falta de VRAM. Cuando los expertos vienen de la RAM o del disco, el límite es traerlos, no el número de pasadas. Coincide con lo que contaban otros usuarios con tarjetas de 6 GB en las incidencias #474 y #916 del proyecto.

La prueba oficial de Strata

Las cifras de arriba son mis mediciones. Quise contrastarlas con la prueba rápida oficial del proyecto (tools/strata_bench.py), que usa prompts nuevos en cada pasada, así que la caché no ayuda. Son medianas de 3 pasadas:

Tarjeta con los resultados de la prueba oficial de Strata 0.2.9 en mi equipo: agente 18,0 tok/s, chat 27,5 tok/s, prompt de 4K a 51,4 tok/s y prompt de 16K a 36,5 tok/s
Mis resultados con la prueba rápida oficial de Strata (strata_bench.py), medianas de 3 pasadas. Tarjeta de maquetación propia, no es material oficial del proyecto
PruebaMedianaRango
Chat, 3 preguntas cortas (100 tokens): generación27,5 tok/s22,7 – 28,6
Chat: primera palabra1,05 s0,93 – 1,26
Prompt de 4K: lectura51,4 tok/s35,7 – 58,6
Prompt de 4K: primera palabra78 s69 – 113
Prompt de 16K: lectura36,5 tok/s32,7 – 46,9
Prompt de 16K: primera palabra440 s (7,3 min)343 – 492
Agente, sesión de 6 turnos con herramientas: generación18 tok/s11 – 26
Agente: primera palabra por turno85 s50 – 151
Agente: aciertos de la caché de conversación71 %70,7 – 70,8

Son más bajas que mis mediciones (34 tok/s en texto frente a 27,5 en chat). No las he investigado a fondo. Las pruebas no son iguales: la oficial genera solo 100 tokens por pregunta, con prompts nuevos cada vez, y la mía 400 tokens. Y el rango es amplio: la primera pasada del chat fue la más lenta y las siguientes subieron hasta 28,6, con los expertos cada vez más presentes en la RAM.

Lo que sí deja claro es dónde está el límite: leer. Con 16K de contexto, la primera palabra tarda de 6 a 8 minutos. Como agente, con una sesión que crece turno a turno, cada turno tarda más de un minuto en empezar a responder.

Una advertencia: el informe automático de la prueba detectó solo una gráfica (la RTX 2060) en su ficha de máquina, así que esa ficha no es fiable. La medición se hizo con las dos tarjetas, como el resto del artículo.

Cómo lo integré en Agente Jiménez

Agente Jiménez es mi aplicación de agentes locales. Cada agente tiene su propio modelo, sus herramientas y su manera de arrancar, y no toca a los demás. Añadí uno nuevo, Adolfo-Strata, que habla con Strata.

Esquema de cómo encaja Strata en Agente Jiménez: el chat web, el bucle de herramientas de Adolfo-Strata, el servidor de Strata, el modelo y el reparto entre las dos gráficas, la RAM y el disco
Cómo encaja Strata en Agente Jiménez

Quise un flujo directo, como el de mi agente Adolfo-Assistant, sin OpenCode por medio. En el artículo anterior, la primera petición de OpenCode ya ocupaba 34.005 tokens, y con un modelo al que lo que más le cuesta es leer, prefiero mandarle poco.

  • Un bucle de herramientas propio. Adolfo-Strata puede ejecutar comandos de shell y buscar en la web. Pide confirmación antes de lo delicado, como el resto de mis agentes.
  • Un botón «Arrancar Strata» / «Parar Strata» en la barra superior, con su estado (parado, arrancando, listo). Ningún agente carga modelos por su cuenta: solo lo hace el botón.
  • Gestión de memoria. Antes de arrancar, si LM Studio está abierto con un modelo cargado, lo descarga para dejar libre la VRAM. Si está cerrado, ni lo toca. El protector de recursos de Agente Jiménez reconoce el proceso de Strata.
  • El veto de tokens chinos que acabo de contar, enviado en cada petición.
  • Selector de modelo bloqueado: este agente solo usa el modelo que Strata tiene cargado, que es lo que se muestra.

Arrancar Strata desde cero tarda unos 13-15 segundos con el modelo ya en disco. Una petición sencilla que ejecuta un comando, de punta a punta, llevó unos 27 segundos.

Tres trampas que aparecieron al usarlo

Los dos primeros intentos de la prueba del videojuego (la siguiente sección) fallaron. Lo que descubrí merece un apartado:

  • Respuesta vacía. El modelo escribió el archivo completo dentro de la llamada a la herramienta, pero con secuencias de escape mal formadas en el JSON. Mi código no podía leerlo y lo descartaba, así que no hacía nada. Ahora, para este agente, intenta reparar los escapes. Si aun así no hay comando, le pide que lo repita. Y la respuesta final nunca queda vacía.
  • El filtro de seguridad pedía confirmación sin motivo. Mi filtro de comandos vio la palabra «su» dentro del HTML del juego y la tomó por una orden. Ahora ignora el contenido de los heredoc que solo escriben un archivo. Si ese contenido se pasa a bash o sh, o se escribe en /etc, sigue pidiendo confirmación.
  • Un límite de salida corto. Un juego completo ocupa miles de tokens. Subí el máximo por turno de este agente.

La prueba: que programe un videojuego

Quería una tarea que se pudiera comprobar de verdad, no con una impresión. Elegí un matamarcianos clásico en un único archivo HTML, por varias razones:

  • Todo el mundo sabe cómo debe verse, así que se juzga a ojo y sin explicaciones.
  • Es autocontenido: sin librerías ni imágenes. Todo se dibuja con formas del canvas.
  • Obliga a coordinar cosas distintas a la vez: bucle de juego, colisiones, estado, puntos, niveles y persistencia.
  • Se puede automatizar: se abre en un navegador sin ventana, se juega con el teclado y se registran los errores de JavaScript.

El encargo tenía 11 requisitos concretos: un canvas de 800×600; una pantalla de inicio con «INVASORES»; una nave que se mueve con las flechas y dispara; una formación de 5×11 invasores con tres dibujos y puntos distintos; invasores que disparan desde la fila de abajo; cuatro escudos destructibles; marcador con récord guardado en localStorage y tres vidas; siguiente nivel más rápido; fin de partida; pausa con la tecla P; y todos los textos en español de España.

Cuatro capturas del juego Invasores generado por Adolfo-Strata: pantalla de inicio, partida, segundo nivel y fin de la partida
El juego que generó Adolfo-Strata: inicio, partida, nivel 2 y fin de la partida

Pruébalo tú mismo

Este es el archivo tal cual lo escribió Adolfo-Strata, sin retocar una línea. Haz clic dentro del juego para darle el foco y pulsa Enter para empezar. Se mueve con las flechas o con A y D, se dispara con la barra espaciadora y se pausa con P. Necesita teclado.

Aquí el récord solo dura mientras no cierres la página. Ya sabes lo que te espera: es difícil.

Lo que hizo

Qué se comprobóResultado
Archivo generadoUn solo HTML de unas 370 líneas (10,8 KB), con CSS y JavaScript dentro, creado por Adolfo-Strata con un único comando
Los 11 requisitosCumplidos. En la comprobación automática: puntos (llegó a 150), récord guardado, pausa, paso al nivel 2, reinicio tras la derrota y textos en castellano
Errores de JavaScriptNinguno
Tiempo de generación239 segundos, unos 4 minutos
Turno de confirmación407 segundos: Strata tuvo que releer unos 10.000 tokens de la conversación

Lo que no hizo bien

  • Es demasiado difícil. En mi comprobación automática se perdían las tres vidas en unos 23 segundos.
  • Los escudos tienen una forma rara, con los bloques desordenados. Funcionan, pero no parecen escudos.
  • El modelo no probó nada de lo que escribió: solo comprobó que el archivo existía y contó sus líneas, como pedía el encargo. Las pruebas de verdad las hice yo.

En cristiano: a un modelo comprimido a unos 2,6 bits, en 14 GB de gráfica, le pides un juego entero y te lo escribe a la primera, sin errores y cumpliendo todo lo que has pedido. No te lo deja equilibrado, pero funciona.

¿Merece la pena?

Si tienes…Mi recomendación
Dos gráficas pequeñas (8 + 6 GB), 32 GB de RAM y un NVMe rápidoSí merece la pena probarlo: generar a unos 34 tok/s con un modelo de este tamaño es una buena velocidad
Tareas con muchísimo contexto o conversaciones largasCuidado: leer el prompt es lo lento. Con 16K de contexto la primera palabra tarda unos 7 minutos en la prueba oficial. Cuanta más RAM libre, mejor
Mucha prisaUn MoE de 26-35B que quepa entero, como Cyber-Tiel, es más rápido. Qué modelo escribe mejor es otra pregunta: no los he comparado en calidad
Ganas de ajustarPrueba STRATA_ROUTE_PRIOR=1.5, pero vigila los caracteres extraños, o veta los tokens que no quieras ver
Una gráfica de menos de 12 GB y ganas de MTPCalcula antes si cabe la capa de borrador. En la mía no acelera

Qué no he medido

  • Las velocidades son de pocas pasadas (dos por prueba, una para el prompt largo). Tómalas como orientativas.
  • La prueba oficial que sí he pasado es la rápida (strata_bench.py), no la estándar (strata bench run). Los resultados no son comparables con los de la suite estándar del proyecto.
  • El videojuego es una sola tarea, generada una vez, y la calidad la he juzgado yo, con una comprobación automática y alguna partida a mano.
  • Gyro-S está muy comprimido: va bien en castellano y en código sencillo, pero no es el modelo original.
  • No he comparado la calidad de Flash-Next con la de Cyber-Tiel en las mismas tareas.
  • Strata y Gyro-S no son material mío: es la herramienta de otro proyecto y estas cifras son solo mis mediciones.

Qué me llevo

Con Strata 0.2.9, Qwen3.8-Flash-Next deja de ser una demo y se convierte en algo que se puede usar como motor de un agente, con un modelo de unos 125.000 millones de parámetros (177.000 si cuentas la tabla de embeddings) repartido entre dos gráficas modestas.

No es un modelo rápido leyendo, ni un programador perfecto: te escribe un juego a la primera, pero demasiado difícil. Pero está ahí, funciona y se puede ajustar.

Si quieres entender mejor las piezas, qué es un MoE y por qué la caché de expertos de llama.cpp no me funcionó, lee la prueba anterior.

Si te ha servido, invítame a un café

Estas pruebas se llevan horas de máquina y decenas de gigas de modelos que descargo, mido y borro. Lo único que no sé generar en local es el café.

Si este artículo te ha ahorrado probarlo tú, puedes invitarme a uno.

strata-en-mi-pc.sh
$ cat gastos-de-esta-prueba.txt modelo descargado (GB) ……. 58,5 disco total con extras (GB) .. ~90 tokens chinos vetados …….. 66.394 MTP funcionando, sin acelerar . sí cafés tomados durante ……. demasiados $ ./invitame-a-un-cafe.sh –ko-fi ✓ esperando tu café

Montar esto me llevó una tarde de ajustes, unos 90 GB en disco y más de un arranque fallido. Un café ayuda a seguir probando.

☕ Invítame a un café en Ko-fi

Sigue explorando la IA local

Preguntas frecuentes

¿Puedo ejecutar Qwen3.8-Flash-Next con una gráfica de 8 GB y otra de 6 GB?

Sí, con Strata 0.2.9, la versión Gyro-S, 32 GB de RAM y un NVMe. Yo llego a unos 34 tok/s generando. Lo lento es leer prompts largos.

¿Se puede usar doble GPU con tarjetas distintas, como una RTX 2080 SUPER y una RTX 2060?

Sí. Con --gpus 0,1 Strata reparte las capas entre las dos, aunque tengan distinta VRAM (8 GB y 6 GB) y distinta generación. La 2060 va en un PCIe x4 y no fue un problema. Lo que no admitió fue darle a una de ellas el papel de «ayudante»: con Gyro-S acababa cargándolo todo en la 2080.

¿Cuánta RAM y cuánto disco hacen falta para Qwen3.8-Flash-Next en Strata?

En mi caso, 32 GB de RAM y unos 90 GB de disco (el modelo de 58,5 GB, el paquete de expertos y la capa de MTP). Cuanta más RAM libre, más rápido lee los prompts: con la caché ya caliente subí de 63 a 106-165 tok/s.

¿Funciona con una sola gráfica de 8 GB?

No lo he medido en esta prueba. Los ejemplos del proyecto parten de tarjetas de 12 GB; yo lo hice con dos gráficas (8 GB + 6 GB).

¿Qué es STRATA_ROUTE_PRIOR?

Una variable que hace que Strata prefiera los expertos que ya están en la gráfica. Está apagada por defecto desde la 0.2.8 por un riesgo de texto repetido en sesiones largas. Se activa con STRATA_ROUTE_PRIOR=1.5 en el bloque "env" del archivo de configuración del modelo.

¿Merece la pena el MTP con 8 GB de VRAM?

En mi equipo no. Hay que mover la capa de borrador a la segunda gráfica con una variable que el motor solo cita en su registro, arranca, acepta la mitad de los borradores y no acelera, y se cae con prompts largos.

¿Por qué el agente no usa OpenCode?

Quise un flujo directo, como el de mis otros agentes. Mi razón principal es que OpenCode manda un prompt muy grande y a este modelo es leer lo que más le cuesta.

¿Por qué vetar los tokens chinos en vez de no usar la opción?

Porque la mejora de velocidad era casi toda la ganancia y el veto no cuesta nada medible. Es una solución del lado del cliente: no cambia Strata.