rukh · lab

// M6 · lección 08

Evaluar: lo que salió

La tabla única entera, medida el mismo día con la misma suite, y cómo se lee: qué se movió respecto a los números de cada hito y cuánto de eso es el instrumento; el suelo medido cuatro veces; los dos baselines públicos; el encoder; lo que cuesta el int8 en Elo; y la demo con arena y puzles, comprobada en un navegador real.

  • tiempo de trabajo45 min
  • nivel medio
  • actualizado el23 de septiembre de 2026

Las seis lecciones anteriores construyeron el instrumento y la demo; esta pone delante lo que salió al usarlos. Es el torneo con rating oficial: todas las etapas, las mismas reglas, el mismo día.

La tabla, el mismo día

Trece filas de decoder y cuatro de encoder. Todas las de decoder se midieron el 2026-09-21 con la misma suite, once con rukh eval nightly y dos a mano ese mismo día (small v1 y el DPO fuera de política, que no están en el catálogo): 1 000 posiciones de legalidad y de acierto, 6 000 puzles, 160 partidas por etapa, temperatura 0,05 y top_k 1. Se ordena por cualquier columna; las filas marcadas son los dos baselines que no salen de Rukh (Karvonen, de otro autor, y el Qwen3 general afinado en M4), y cada fila enlaza a su card y a la arena con esa etapa cargada.

La tabla única del hito

Una fila por etapa evaluada, en el orden del curso. Pulsa una cabecera para ordenar por esa columna; otra vez, para invertir. Legalidad, top-k y puzles son porcentajes; el Elo lleva su intervalo del 95 %; la entropía de la primera jugada dice si el modelo abre siempre igual (0) o reparte (más bits).

Tabla con desplazamiento horizontal.

Enlaces
karvonen-8lbaseline25,7 M99,6 %50,7 %—47,5 %26,0 %10,8 %1328 (1250 … 1391)—
lora-d4115,1 M99,8 %55,1 %83,0 %57,4 %37,5 %16,9 %1535 (1481 … 1582)0,02
lora-e4115,1 M99,8 %54,7 %83,3 %58,1 %38,2 %17,2 %1538 (1488 … 1604)0,02
medium-elo115,1 M99,7 %54,9 %82,5 %59,8 %37,1 %16,6 %1592 (1532 … 1650)1,74
medium-masters115,1 M99,7 %54,9 %82,3 %58,1 %38,7 %17,1 %1563 (1502 … 1630)1,89
medium-v4-dpo-greedy115,1 M99,8 %53,4 %80,5 %58,3 %39,9 %18,1 %1586 (1530 … 1651)1,78
medium-v4-dpo-onpolicy-greedy115,1 M99,2 %52,3 %79,9 %59,0 %40,3 %17,8 %1632 (1567 … 1706)1,75
medium-v4-greedy115,1 M99,8 %54,4 %82,2 %57,9 %38,0 %16,6 %1535 (1476 … 1599)1,77
medium-v4-grpo-greedy115,1 M99,3 %53,3 %80,3 %58,9 %39,1 %17,8 %1577 (1526 … 1632)1,79
qwen3-pgn-qlorabaseline596,0 M62,5 %12,5 %—1,8 %0,7 %0,4 %320 (… 807)—
small-greedy39,0 M99,4 %51,1 %79,4 %34,7 %21,1 %10,3 %1355 (1297 … 1420)1,74
small-v3-greedy39,0 M99,1 %52,4 %80,5 %41,0 %27,0 %12,2 %1425 (1367 … 1484)1,64
tiny-greedy5,3 M94,5 %40,3 %67,1 %14,1 %8,6 %3,9 %778 (479 … 904)1,72

Fuente: rukh eval nightly · actualizado 21/09/2026 · 13 etapas · 2 baselines · 4 filas del encoder en su propia tabla

Cuatro lecturas, en el orden en que conviene hacerlas:

  1. Las columnas se mueven por separado. medium-v4-dpo-onpolicy es la fila con más Elo (1632, intervalo 1567-1706) y tiene peor top-1 que su base (52,3 % frente a 54,4 %) y peor legalidad (99,2 % frente a 99,8 %). GRPO igual: 1577 de Elo, 53,3 % de top-1, 99,3 % de legalidad. Los dos alineados dejaron de imitar a los humanos de 1800, ganan más al motor y pagan el peaje de M5 en jugadas ilegales.
  2. Afinar no mueve la competencia. Los dos adaptadores LoRA dan 1538 y 1535 sobre una base a 1535; medium-elo y medium-masters, 1592 y 1563. Con ±55 de semiancho, ninguno se separa de la base. Lo que sí los separa, y mucho, es la entropía de la primera jugada: 0,016 y 0,021 bits en los adaptadores (abren siempre igual) frente a 1,77 de la base.
  3. Los puzles ordenan por tamaño y el top-1 apenas. De tiny a small-v3 a medium-v4, el tramo fácil va 14,1 % → 41,0 % → 57,9 % y el top-1, 40,3 % → 52,4 % → 54,4 % (el top-3 lo acompaña: 67,1 → 80,5 → 82,2). Ver táctica cuesta parámetros; imitar la siguiente jugada humana se satura pronto, porque los humanos de 1800 tampoco juegan siempre la misma.
  4. tiny no sabe del todo las reglas: 94,5 % de legalidad sin máscara y un Elo de 778 con un intervalo de 479 a 904, el más ancho de la tabla, porque una de cada veinte jugadas la elige el rescate. Es la fila que enseña por qué la legalidad es la métrica de suelo.

Lo que se movió respecto a los números de cada hito

Cada módulo había medido lo suyo el día que cerró. Comparar aquellos números con los de hoy es la mejor lección de reproducibilidad del curso, porque ni el modelo ni la suite cambiaron.

Etapa Elo al cerrar su hito Elo el 2026-09-21 Diferencia
tiny-greedy 921 (713-1040) 778 (479-904) −143
small-v3-greedy 1365 (1293-1423) 1425 (1367-1484) +60
medium-v4-greedy 1504 (1446-1558) 1535 (1476-1599) +31
medium-elo 1558 (1500-1609) 1592 (1532-1650) +34
medium-masters 1583 (1525-1641) 1563 (1502-1630) −20
medium-v4-dpo-onpolicy-greedy 1560 (1500-1617) 1632 (1567-1706) +72
medium-v4-grpo-greedy 1572 (1512-1640) 1577 (1526-1632) +5
medium-v4-dpo-greedy 1529 (1470-1583) 1586 (1530-1651) +57
small-greedy (v1) 1359 (1293-1429) 1355 (1297-1420) −4

Las demás columnas no se movieron: legalidad, top-1, top-3, puzles y entropía dan el mismo número hasta el tercer decimal, porque a temperatura 0,05 el muestreo es casi determinista y no hay rival con reloj. La única columna que se mueve es la que juega contra Stockfish, y se mueve lo que su intervalo permite: cinco de las nueve diferencias caben en ±55, small-v3 (+60) y el DPO fuera de política (+57) lo rozan, dpo-onpolicy (+72) lo pasa y roza su propio ±69, y tiny (−143) cabe de sobra en el suyo.

Mira la de dpo-onpolicy: +72 en un día. Con la tabla vieja, la ventaja del alineado sobre su base era de 56 puntos; con la de hoy, de 97. Ninguna de las dos es la medida. La medida es el enfrentamiento directo de M5, +57 (36-79) con 800 partidas; la tabla ordena etapas, no se restan sus filas.

El suelo del instrumento, medido cuatro veces

Antes de reconstruir la tabla se midió cuánto se mueve la escalera cuando no cambia nada: medium-v4, misma semilla, dos veces con el rival por reloj y dos con un presupuesto de nodos, con la máquina parada y quince minutos de descanso entre tiradas.

140014501500155016001650Elo medidoStockfish limitado por tiempo · elegidotime-a1538time-b1538Stockfish limitado por nodosnodes-a1541nodes-b1524
Por tiempo
1538 y 1538 → 0 Elo entre tiradas · elegido
Por nodos
1541 y 1524 → 17 Elo entre tiradas
Mismo modelo, misma escalera, misma semilla: no cambia nada. La distancia entre las dos tiradas de cada grupo es lo que el instrumento añade por su cuenta, y por debajo de ella no hay diferencia que publicar. Modelo: checkpoints/medium-v4-20260919-174623/best.pt. 160 partidas por tirada. Se decidió limitar por tiempo.

Por reloj, 1538 y 1538. Por nodos, 1541 y 1524. La sospecha de la lección 1, que el rival no repetía porque jugaba por tiempo, era razonable y estaba mal: UCI_LimitStrength aleatoriza con los dos límites, y las dos tiradas por nodos se separan peldaño a peldaño tanto como las dos por reloj (el 1538 repetido es el agregado; uci-1500 dio 0,45 y 0,625). Los 60 puntos de aquella primera medición fueron una máquina cargada o mala suerte. Así que el rival sigue por reloj, la escalera no se recalibra y ningún Elo cambia de escala. Al runbook entra una condición: nada más en la máquina mientras corre una escalera.

Los dos baselines

Un baseline solo cuenta si se mide con el mismo harness. Dos marcas de maratón en dos ciudades no se comparan aunque las dos digan «maratón»: un recorrido es llano y el otro sube, un día hacía viento y el otro no. Un número copiado del paper de otro es una marca de otra ciudad; para compararla hay que traer al corredor a la tuya. La tabla tiene dos.

Qwen3 con QLoRA (M4): 596 M de parámetros, afinado sobre PGN, y la fila más baja con diferencia: 62,5 % de legalidad, 12,5 % de top-1, 1,8 % del tramo fácil de puzles y un Elo que solo se acota por arriba (< 807, porque perdió casi todo contra el peldaño más bajo). Es lo que compran un vocabulario de jugadas y cinco millones de partidas frente a un modelo general cinco veces más grande con unos miles de partidas encima.

El nanoGPT de Karvonen (8 capas, 25,7 M, 16 millones de partidas en PGN carácter a carácter), con su formato de prompt exacto y una regla más dura que la suya ante una jugada ilegal, da 99,6 % de legalidad sin máscara, 50,7 % de top-1, puzles al 47,5 % / 26,0 % / 10,8 % por tramo y 1328 de Elo (1250-1391). Es la fila más útil para situar el proyecto, porque es el único modelo de fuera que juega de verdad. Frente a small-v3:

  • escribe jugadas legales con más fiabilidad (99,6 % frente a 99,1 %) con 25,7 M de parámetros frente a 39 M y tres veces más partidas de entrenamiento;
  • en puzles se reparten: él gana el tramo fácil (47,5 % frente a 41,0 %) y small-v3 los dos difíciles (27,0 % frente a 26,0 % y 12,2 % frente a 10,8 %);
  • en Elo, small-v3 tiene la estimación más alta, 1425 (1367-1484) frente a 1328 (1250-1391), pero los intervalos se solapan entre 1367 y 1391.

Esa última es la trampa de la lección 1 en la propia tabla: la columna invita a leer «gana small-v3», y lo único medido es que su punto central cae más arriba. Afirmarlo pediría un enfrentamiento directo, que no se hizo porque el baseline no está en el formato que acepta rukh eval match. Lo que sí queda demostrado es que leer el PGN carácter a carácter no cuesta legalidad frente al vocabulario de jugadas de M1. Y medium-v4, a 1535, ya no tiene comparación pública en la tabla.

El encoder

Las filas del encoder van aparte porque no comparten ninguna columna con las de decoder. La que sirve la demo, encoder-v4 (39,0 M), da F1 de blunder 0,186 con un umbral elegido en la mitad de ajuste, frente a 0,089 de la heurística de material: +9,7 puntos, el criterio del módulo. ROC-AUC 0,761, correlación de Pearson con el valor de Stockfish 0,726, y el resultado de la partida al 50,8 %, la cabeza más ruidosa porque todas las posiciones de una partida llevan la misma etiqueta. Las otras tres filas de M3 (encoder con el esquema moves, encoder-rank y encoder-squares) son la comparación de esquemas de aquel módulo y se conservan con su fecha; las dos que llevaban el nombre de su carpeta de ejecución se retiraron con rukh eval drop.

Lo que cuesta el int8

M2 dejó la pregunta abierta y este módulo la cierra jugando: fp32, fp16 e int8 de medium-v4, cada uno como jugador en la misma escalera a través del mismo DecoderPlayer, con el rival por nodos porque ONNX Runtime juega en CPU y por reloj habría cambiado también al motor.

paridad de jugada con el checkpoint0 %25 %50 %75 %100 %fp32100,0 %misma jugada siemprefp1699,9 %0,1 % de jugadas distintasint895,1 %4,9 % de jugadas distintasElo de cada exportación en la misma escalera (por nodos, IC 95 %)1350140014501500155016001650fp321472fp161535int81524
Paridad: en qué fracción de posiciones la exportación elige la misma jugada que el checkpoint en PyTorch. Un 100 % es el mismo modelo; lo que falta hasta 100 es otro modelo, y solo jugar dice cuánto Elo cuesta: el panel de abajo pone las tres exportaciones en la misma escalera, con el rival por nodos, y sus intervalos dicen si la diferencia se ve con este presupuesto de partidas. El enfrentamiento directo fp16 contra int8, que la vería más fina, queda como ejercicio. Modelo: medium-v4.

El int8 no tiene un coste medible con 160 partidas: su intervalo y el del fp16 casi se superponen. Y el fp32, la misma red que el checkpoint, sale 60 puntos por debajo del fp16 sin ningún mecanismo que lo explique: es el suelo del instrumento con el rival por nodos, la misma tarde. Por eso la demo puede servir int8 en el móvil diciendo la verdad: otra etapa, con una fuerza que no se distingue de la del fp16 con este presupuesto de partidas.

La demo: arena y puzles

Se comprobó en Chrome con WebGPU antes de cerrar: tiny-int8 contra sí mismo, diez partidas, 2 victorias, 6 tablas y 2 derrotas, y 0 Elo de diferencia con intervalo de −147 a +147, lo que tiene que dar el control del instrumento. Los puzles de tiny-int8 salieron al 25 % en los ocho primeros del tramo fácil, frente al 14,1 % de su fila: con ocho puzles (dos aciertos), las dos cifras no se distinguen.

La lección 9 trae el comando que produjo cada uno de estos números y el balance de la fase: qué se cumplió, qué no y por qué.