Local AI Infrastructure

Dos modelos, una mini-PC de $1,400: los números emparejados, fracasos incluidos

Un modelo de razonamiento de 35B ya corre junto a nuestro 27B diario en una caja de $1,400, al mismo tiempo. Cada número emparejado, mismos problemas, misma máquina. Los fracasos también están aquí.

Por Simon Gonzalez de Cruz (sigue la construcción en público en X @KyaniteLabs_), asistido por GLM-5.3. 2026-08-25. Cada número fue re-leído de archivos de resultados crudos en esta máquina antes de escribir.

Operamos un pequeño laboratorio de IA en hardware que cabe bajo un televisor: una mini-PC AMD Strix Halo con 64GB de memoria compartida. Un Qwen3.8-27B ha sido nuestro modelo principal y motor diario desde mediados de agosto. Esta semana hicimos una pregunta más difícil: ¿puede esta misma máquina correr también Ornith-1.5-35B, un modelo abierto más grande, al mismo tiempo, y es realmente bueno cuando lo mides con justicia?

La respuesta es sí, con tres advertencias. Aquí está todo, incluido lo que falló. Un número abajo fue medido mal primero por nuestra propia herramienta. La historia, al final.

La configuración

Una máquina. Dos modelos, residentes al mismo tiempo, sin intercambio:

  • Qwen3.8-27B (nuestro "campeón", sirviendo el producto): contexto de 262k, visión adjunta.
  • Ornith-1.5-35B-A3B (el recién llegado, carril de razonamiento): una construcción Mixture-of-Experts que solo activa ~3B parámetros por token. Corremos una cuantización APEX-Compact de 17.4GB. Juntos, los dos modelos usan 43.4 de 64GB, con unos 20GB de margen.

Ese margen importa: esto solo cabe gracias a un truco de memoria que verificamos (ver abajo). La cuantización de fábrica de ~22GB también cabe, pero con menos holgura.

El marcador, cada número emparejado, mismos problemas, misma máquina

Nunca comparamos dos números que vienen de lugares distintos. Ambos modelos corrieron los mismos conjuntos fijos de problemas, uno tras otro, en la misma máquina:

PruebaCampeón 27BOrnith 35BLectura
Mate de primaria (GSM8K, calificación estricta, 2×2 emparejado, mismos 60 problemas, n=60/celda)96.7% sin razonamiento; 96.7% con razonamiento (resultados idénticos, McNemar p=1.0)90.0% sin razonamiento; 98.3% con razonamiento (p=0.0625, marginal con n=60)En la mejor configuración de cada modelo: empate a un problema (p=1.0). El razonamiento le cuesta al campeón 2.4× tiempo para cero ganancia; Ornith lo necesita
Código, problemas limpios (HumanEval, mismos 30 congelados)28/3026/30Empate dentro del ruido
Código, mundo real (LiveCodeBench, mismos 30)20/3017/30Ventaja ligera del campeón, no decisiva con n=30
Visión, mismas 6 capturas reales6/65/6Ornith malleyó un correo en un formulario (dominio con error)

Si solo recuerdas una fila: un modelo de razonamiento de 35B ya corre a la par de nuestro motor diario en esta clase de hardware. Hasta mediciones emparejadas como esta, eso era una discusión de foro.

Las tres advertencias

  1. Razonar es un dial, no una brecha de modelo. Medido emparejado (2×2, mismos problemas, mismo protocolo): el campeón obtiene 96.7% con razonamiento apagado Y encendido (resultados idénticos, p=1.0), así que su interruptor no compra nada aquí a 2.4× el tiempo. Ornith obtiene 90.0% sin razonamiento y 98.3% con él. En las mejores configuraciones, los dos modelos empatan dentro de un problema (p=1.0). Números anteriores que comparaban Qwen sin razonamiento contra Ornith con razonamiento tenían regímenes mezclados; esta tabla emparejada es la verdad y los reemplaza.
  2. Código es un empate, no una victoria. 26/30 contra 28/30 en problemas idénticos está dentro del ruido. No reclamaremos un campeón de código con estos datos.
  3. Visión tiene un fallo. En una captura real de un formulario de registro, Ornith devolvió un correo con el dominio mal leído. Es una respuesta incorrecta, no un casi. Nuestro campeón obtuvo los 6. Muestra pequeña, etiquetada: 5/6.

Lo que NO funcionó (la parte que pocos publican)

Probamos la decodificación especulativa de dos maneras, porque prometía velocidad gratis:

  • La cabeza de borrador entrenada que viene en las builds APEX: aceptó solo ~33% de los tokens de borrador, y hizo la generación ~9% más lenta de punta a punta. Muerta en este hardware, medido, dos veces.
  • Un borrador improvisado: misma clase de ~33%. Mismo veredicto.

La decodificación especulativa es un truco de ancho de banda de memoria, y el ancho de banda de esta máquina se va en los dos modelos residentes. La configuración correcta es APAGADA, y cualquiera con una máquina similar debería empezar ahí en vez de pagar nuestro costo de descubrimiento.

El truco de memoria que lo hizo caber

La build APEX-Compact empaqueta el 35B en 17.4GB (contra ~22GB de fábrica en el mismo nivel de calidad Q4). No pudimos medir un costo de calidad con estos tamaños de muestra: mate de primaria 95.0% contra 96.7% de fábrica con n=60, y resultados idénticos en un conjunto de 15 problemas de razonamiento de código. Esos ~4.3GB de ahorro son la diferencia entre "un modelo a la vez" y "dos modelos siempre encendidos", que es todo el punto de la máquina.

Velocidad, etiquetada

  • Escribir una respuesta larga: ~55 tokens/segundo sostenidos. Una respuesta de 200 palabras llega en 6-7 segundos. Una corrida completa de razonamiento en un problema difícil: minutos.
  • Leer documentos largos (prefill): ingresamos 130,715 tokens, un libro entero, en 359 segundos (~364 tokens/segundo), con el chip a 72°C todo el camino. El trabajo de contexto largo es donde esta build MoE se gana su lugar.

Nuestra tarjeta de configuración (si tienes la misma máquina)

Decodificación greedy (temperatura 0), caché KV q4_0, decodificación especulativa APAGADA, pesos APEX-Compact Q4, presupuesto de mate 2048 tokens, presupuesto de código difícil 8192 (2/30 problemas aún toparon el tope, etiquetado, no oculto). Nada aquí es exótico; todo fue medido contra al menos una alternativa en esta máquina antes de conservarlo.

Por qué publicar todo

La mayoría de los posts de "corrí un modelo grande localmente" muestran una captura y un número de tokens por segundo. Pensamos que el artefacto valioso es la tabla emparejada con fixture fijo y los fracasos incluidos, incluyendo la corrida donde nuestra propia herramienta de calificación truncó la salida del modelo y brevemente nos dijo que era malo en mate (0.467). No lo era; nuestro instrumento estaba equivocado. Esa diferencia es visible en las dos configuraciones guardadas. Mismos problemas: 0.967. Ambos JSON citados abajo, porque el instrumento debería ser sospechado tan seguido como el modelo.

Fuentes (archivos de resultados crudos, rutas en la máquina): GSM8K 2×2 emparejado ~/exp/2x2-gsm8k/summary.json (campeón 58/60 en ambas celdas; orn 54/60 sin, 59/60 con; McNemar p=1.0/0.0625/1.0; medianas 28.3/68.5/11.4/23.3s; corrida 2026-08-24T19:42Z, puertas vivas, auto-prueba leída antes de calificar). GSM8K Ornith de fábrica corregido ~/exp/w1-35b/gsm-full-b/Ornith35B/results_2026-08-22T01-26-41.json (estricto 0.9667); el falso arranque results_2026-08-22T01-00-27.json (estricto 0.4667, truncamiento de instrumento). APEX-Compact ~/exp/w4-35b/gsm-run.log (0.9500). HumanEval-30 Ornith ~/exp/w1-35b/bench-results-default.log (26/30); campeón 28/30 (~/exp/bench-results-default.log, verificado 2026-08-24). LiveCodeBench-30 Ornith ~/exp/w3b-35b/verdict.txt (17/30, truncados 2/30); campeón 20/30 (registrado en el diseño de comparación, LEÍDO; bytes de resultado aún no localizados, etiquetado). LCB-15 paridad ~/exp/w4-35b/lcb15-run.log (7/15, idéntico a fábrica). Visión UI real: Ornith ~/exp/vision35b-results.log (5/6); campeón ~/exp/vision-real-results.log (6/6). Velocidad de decodificación ~/exp/w4-fire.log (sin espec 55.9 tok/s; espec más lento 50.4 contra 55.2, emparejado, mismo binario). Prefill ~/exp/ornith-window-results.log (359s, 130,715 tokens, 72°C). Aceptación especulativa ~0.33: comparadores window-4. Memoria: pesos APEX-Compact 17.4GB; doble residente 43.4/64GB GTT (lectura viva 2026-08-23). Nota de régimen: lecturas anteriores del campeón GSM8K de 70% estricto y 98% son anteriores al protocolo emparejado y quedan reemplazadas por el 2×2 para esta pieza.

Trabajar con Kyanite

¿Quieres que esto funcione en tu entorno?

Si esta nota describe una herramienta o resultado de Kyanite que necesitas, la ayuda de implementación cubre setup, asesoría, docs, ejemplos, checks y un handoff usable.

Límite de fit

Kyanite offers help grounded in its tools, products, and build practice. La consultoria mas amplia se enruta por PuenteWorks.

Sigue el sistema.

The One-Line Bug That Crashed Our Fast Lane: finding, fixing, and measuring a speculative-decoding crash on a $1,400 mini-PC

Spec decoding crashed our fastest lane on day one. The bug was one missing line in our fork; the fix bought +17.7% and a surprise about draft quantization.

How I became a forward deployed engineer without a software engineer title

The title is new; the work is old. Twelve years of enterprise deployments plus public, measured AI work. The honest path, artifacts included.

Evals are the FDE skill nobody lists: my 495-trial public benchmark

The market says it cannot find people who can build AI evals. The skill is learnable and I published mine: 495 trials, certified floors, sabotage cell, open source.

Forward deployed vs solutions engineer vs implementation vs customer engineer: el decodificador

Cuatro títulos, una familia de trabajo, barras de código distintas. Un decodificador para leer cualquier vacante y saber en qué te estás metiendo.

Qué hace realmente un forward deployed engineer

La respuesta directa y luego los recibos: todo el trabajo de un FDE sobre un mini-PC de $1.400, con evals públicas.

The Delegation Card: we asked a $1,400 mini-PC to take our jobs

Not is-it-smart but can-you-hand-it-work-and-walk-away. 495 certified trials, then re-validated at deeper n after the product changed: 965 total, floors to 92.8%.

Qwen 3.8 27B en Strix Halo: la historia completa, medida

Cada dial medido, cada numero publico: la configuracion optima congelada para un 27B en un mini-PC de $1.400.

Notas: the measured-knees method for reasoning effort

A methods note on reasoning-effort calibration. Thinking rescued 15/40 hards vs 4/40 off. On easy tasks it bought nothing. Publish the knee.

Notas de lab: 67% LiveCodeBench-30 en un rig de $1.400

20/30 = 67% LiveCodeBench-30 en un mini-PC de $1.400. IC Wilson 95% 49-81%. Easy 10/10, medium 8/10, hard 2/10. Subset n=30. No es la card.

Notas de lab: revertimos una regresión de llama.cpp

Encontramos una regresión de llama.cpp y la revertimos. Batería n=6 en un rig de $1.400: 0/6 slashes antes, 5/6 después. Mismo Q4_K_XL. No es una historia de quant.

Notas de lab: 93% HumanEval en un rig de $1.400

28/30 = 93% HumanEval en un mini-PC de $1.400. Qwen3.8-27B Q4_K_XL. Temp 0, thinking off. Fallos: 50 y 145. Log crudo linkeado.

Notas de lab: el modelo que no puede olvidar pero no puede recordar

El número primero: este modelo es 75% no transformer. 48 de 64 capas guardan un estado. En un rig de $1.400, carga 198k una vez (1818s) y consulta en 9-27s.

Notas de lab: la cuenca era un bug

Publicamos una cuenca. El hueco era el binario. Tras revertir c7d8722: 6/6 HIT a 198k. Mapa n=1 del build arreglado.

Notas de lab: el veredicto del KV

La pregunta q8-a-q4 del KV de la noche 1 ya tiene respuesta pareada: misma accuracy, cero tripwires, la mitad del cache. Y el label que tuvimos que corregir en público cuando el contador del server le ganó al estimado.

Notas de lab: la noche del veredicto

Un mini-PC de $1.400 sirviendo un 27B a 262k de contexto hace una pregunta: ¿capear cuánto piensa el modelo te cuesta accuracy? La respuesta pareada, el primer intento inválido, y la doctrina que quedó.

Un mini-PC, una noche y los numeros que discutian entre si: afinando Qwen3.8-27B en Strix Halo

Una noche y una tarde de medicion afinando un modelo denso de 27B en un mini-PC Strix Halo: las bandas honestas, la reversion, la doctrina de crashes y la historia detectivesca del EC.

GPT-5.6 Sol vs. Terra vs. Luna: politica de ruteo basada en evidencia

La division practica es Sol para descubrir, Terra para ejecutar trabajo acotado y Luna para procesar volumen verificable, cada uno con un contrato distinto.

Los agentes necesitan herramientas verificables, no mejor teatro de prompts

El patron util no es un prompt mas bonito. Es una superficie de herramienta que el agente puede llamar, inspeccionar, verificar y revisar.

El historial del repo es una señal de producto

Un repo no es solo almacenamiento. Es evidencia de decisiones, reparaciones, releases, cambios de nombre, huecos de pruebas y oficio real.

La ayuda de implementacion es parte de la superficie del producto

Una herramienta open source util todavia necesita una ruta desde repo publico hasta entorno funcionando. Esa ruta es producto.

Por que importa Kinocut

Kinocut da a los agentes de IA herramientas llamables sobre timelines, efectos, Hyperframes y medios terminados en kinocut.dev.

Monos infinitos, LLMs y el cuarto alrededor de la maquina

El argumento detras del video: la calidad no es solo probabilidad. Es arquitectura, filtros y gusto humano.

Lo que una herramienta de IA necesita antes de que alguien pueda usarla

Una guia practica para convertir una herramienta, flujo o app medio cruda en algo que otros puedan entender, instalar y usar.

Checklist de implementacion para servidores MCP

El checklist que Kyanite usa para distinguir un servidor MCP de juguete, una herramienta usable y algo que vale la pena implementar.

La arqueologia de repos convierte historia en evidencia

Por que el historial de commits es una de las fuentes de prueba mas fuertes para diagnosticos, implementacion y confianza tecnica.

El descubrimiento por IA necesita mas que un sitemap

Lo que Kyanite agrega para que buscadores y asistentes de IA entiendan herramientas, productos, prueba y rutas de soporte.