Volver al blog

44% en ARC-AGI-1 por 67 Centavos: El Transformer Entrenado desde Cero en 1h30 en una Sola RTX 5090

Hola HaWkers, el 1 de septiembre de 2026 un post llamado "44% on ARC-AGI-1 in 67 cents" subió al tope de Hacker News y cerró el día con 621 puntos y 158 comentarios. El autor, Mithil Vakde, graduado en Ingeniería Física por el IIT Bombay en 2023, entrenó un transformer común de 75 millones de parámetros desde cero, en cerca de 1h30, en una sola RTX 5090 alquilada, y logró 44% en el conjunto público de evaluación del ARC-AGI-1. El costo total de cómputo fue de 67 centavos de dólar. El mismo modelo hace 7% en el ARC-AGI-2.

¿Crees que solo quien tiene un clúster de GPU consigue hacer investigación relevante en inteligencia artificial? En este artículo te muestro qué es el ARC-AGI y por qué resiste a los LLM, cuál fue la receta técnica de Vakde, cómo funciona el entrenamiento en tiempo de prueba que sostiene el resultado, dónde encaja ese número en la tabla al lado de TRM, HRM, o3 y Gemini 3.1 Pro, y cómo reproducir todo por el precio de un café.

Qué Es el ARC-AGI y Por Qué Resiste a los LLM

El ARC, sigla de Abstraction and Reasoning Corpus, fue creado por François Chollet en 2019 en el artículo "On the Measure of Intelligence". Cada tarea es un rompecabezas visual: recibes dos o tres pares de cuadrículas de colores, entrada y salida, y necesitas descubrir la regla de transformación para aplicarla en una cuadrícula nueva. Las cuadrículas tienen como máximo 30 por 30 celdas y diez colores. Un humano resuelve la mayoría de ellas en minutos, sin ningún entrenamiento.

La gracia del benchmark es que cada tarea tiene su propia regla. No existe patrón para memorizar, y es exactamente por eso que los modelos de lenguaje, entrenados para reproducir patrones vistos en internet, sufrieron tanto tiempo con él. El ARC Prize, lanzado en junio de 2024 con más de 1 millón de dólares en premios, convirtió el conjunto de datos en una competencia pública.

El punto de giro llegó en diciembre de 2024, cuando OpenAI presentó el o3: 75,7% en el conjunto semiprivado del ARC-AGI-1 con cerca de 20 dólares por tarea, y 87,5% en la configuración de alto cómputo, con costo estimado en el orden de los miles de dólares por tarea. Conté esa historia en detalle en el post sobre el o3 y la nueva era de los modelos de razonamiento. Resolver el ARC-AGI-1 dejó de ser la pregunta. La pregunta pasó a ser: ¿a qué costo?

Es en ese contexto que 67 centavos se vuelve un número interesante.

Lo Que Mithil Vakde Hizo en 1h30

La idea central del mdlARC, nombre del repositorio, es simple de describir y difícil de ejecutar bien. Cada par entrada-salida de una tarea se convierte en una secuencia de tokens. Un transformer pequeño se entrena desde cero, de forma autorregresiva, en esas secuencias, y el entrenamiento sucede en tiempo de prueba: el modelo ve los ejemplos de entrenamiento y las entradas de las tareas de evaluación, nunca las respuestas, y aprende todo durante el propio examen.

El README del repositorio resume la cuenta: 75 millones de parámetros, un transformer estándar, cerca de 2 horas en una RTX 5090 alquilada en vast.ai y costo total aproximado de 0,67 dólar. La versión anterior del mismo proyecto lograba 27,5% gastando 1,80 dólar en menos de 3 horas en una A100 de Google Colab. El salto a 44% vino de una lista de cambios que cualquier persona que entrena modelos hoy reconoce:

  • Arquitectura moderna: SwiGLU en lugar de GELU, RMSNorm en lugar de LayerNorm.
  • Escala modesta: 8 capas en vez de 4.
  • Embeddings posicionales 3D con RoPE, para que el modelo entienda fila, columna y posición dentro del par.
  • Embeddings aditivos por tarea, que dejan que el aprendizaje atraviese tareas diferentes.
  • Optimizador NorMuon en lugar de AdamW.
  • Flash attention con entrenamiento de longitud variable y kernels de flex attention.
  • Supervisión solo en la salida: el modelo aprende a predecir apenas la cuadrícula de respuesta, no la de entrada.
  • Menos aumentaciones de datos, lo que derrumbó el costo y, según el autor, mejoró la eficiencia muestral.

Los datos de entrenamiento mezclan el ARC-AGI-1, las tareas del ARC-AGI-2 que no se superponen con el primero y el ConceptARC. Las aumentaciones son permutaciones de color y las ocho simetrías diédricas, rotaciones y espejos. Al final, el modelo genera varias respuestas para cada tarea y envía las dos más frecuentes, que es el límite de intentos que el ARC permite.

La Receta Técnica: La Cuadrícula se Vuelve Secuencia de Tokens

Para entender por qué un transformer de texto consigue resolver un rompecabezas visual, vale la pena mirar la tokenización. Cada celda se vuelve un token de 0 a 9, que es el color. Dos tokens extra marcan el fin de la línea y el fin de la cuadrícula, para que el modelo sepa dónde termina la geometría.

# Cada celda de la cuadrícula se vuelve un token de 0 a 9 (el color).
# Dos separadores marcan fin de línea y fin de cuadrícula, como en mdlARC.
NUEVA_LINEA = 10
FIN_CUADRICULA = 11


def cuadricula_a_tokens(cuadricula: list[list[int]]) -> list[int]:
    """Aplana una cuadrícula ARC en una secuencia 1D de tokens."""
    tokens = []
    for fila in cuadricula:
        tokens.extend(fila)          # colores 0-9
        tokens.append(NUEVA_LINEA)   # salto de línea explícito
    tokens.append(FIN_CUADRICULA)    # señal de fin para el modelo
    return tokens


def par_a_secuencia(entrada, salida):
    """Concatena entrada y salida: el modelo solo se supervisa en la salida."""
    return cuadricula_a_tokens(entrada) + cuadricula_a_tokens(salida)


ejemplo = par_a_secuencia([[0, 1], [1, 0]], [[1, 0], [0, 1]])
print(ejemplo)
# [0, 1, 10, 1, 0, 10, 11, 1, 0, 10, 0, 1, 10, 11]

Fíjate que la salida no es una imagen, es una secuencia. Eso permite reaprovechar todo lo que la industria construyó para modelos de lenguaje, de flash attention a RoPE, en un problema que no tiene nada de lenguaje. Fue uno de los debates más largos del hilo de Hacker News: ¿un transformer autorregresivo entrenado en cuadrículas es un LLM? La respuesta del autor fue que una secuencia de tokens no necesita ser una secuencia de palabras.

¿Entrenar en Tiempo de Prueba No Es Trampa?

Esa fue la pregunta más repetida en la discusión, y merece una respuesta técnica. El modelo se entrena en las entradas de las tareas de evaluación, pero nunca ve las salidas. La analogía del autor: naces durante el examen, recibes un conjunto de entrenamiento y aprendes todo desde cero mientras el examen sucede. Es aprendizaje transductivo, y es la misma familia de técnica que ganó el ARC Prize en 2024 y 2025.

Por cierto, el test-time training es primo del test-time compute que expliqué en el post sobre cómo el o3 escala el razonamiento en tiempo de inferencia. La diferencia es que, en vez de gastar más tokens pensando, el modelo gasta gradientes aprendiendo con los ejemplos de la tarea.

El mecanismo que hace que eso funcione sin filtración son las aumentaciones. Como cada tarea tiene solo dos o tres ejemplos, el entrenamiento multiplica esos ejemplos aplicando transformaciones que preservan la regla: girar la cuadrícula, reflejarla, intercambiar los colores entre sí. Si la regla es "pinta de azul la forma más grande", sigue siendo válida después de una rotación de 90 grados con los colores permutados.

import random

import numpy as np


def aumentar(cuadricula: np.ndarray, semilla: int) -> np.ndarray:
    """Genera una variación de la cuadrícula que preserva la regla de la tarea."""
    rng = random.Random(semilla)
    g = cuadricula.copy()

    # 1) Simetría diédrica: una de las 8 combinaciones de rotación y espejo
    g = np.rot90(g, k=rng.randint(0, 3))
    if rng.random() < 0.5:
        g = np.fliplr(g)

    # 2) Permutación de colores: baraja los colores 1-9 y mantiene el fondo 0
    colores = list(range(1, 10))
    rng.shuffle(colores)
    mapa = {0: 0, **{original: nuevo for original, nuevo in zip(range(1, 10), colores)}}
    return np.vectorize(mapa.get)(g)


original = np.array([[0, 1, 2], [3, 0, 4]])
print(aumentar(original, semilla=42))

La misma permutación necesita aplicarse a la entrada y a la salida del mismo par, si no la regla se rompe. A la hora de responder, el proceso se invierte: el modelo genera la salida bajo cada aumentación, el código deshace la transformación y las respuestas que más se repiten ganan. Es una votación, y es la razón por la que el modelo envía las dos cuadrículas más frecuentes:

from collections import Counter


def votar_dos_respuestas(candidatos: list[tuple]) -> list[tuple]:
    """Recibe las salidas generadas bajo varias aumentaciones, ya deshechas
    hacia la orientación original, y devuelve las 2 más frecuentes.
    El ARC acepta 2 intentos por tarea."""
    conteo = Counter(candidatos)
    return [cuadricula for cuadricula, _ in conteo.most_common(2)]


# Cada candidato es la cuadrícula como tupla de tuplas, para poder entrar en el Counter
candidatos = [
    ((1, 0), (0, 1)),
    ((1, 0), (0, 1)),
    ((0, 1), (1, 0)),
    ((1, 0), (0, 1)),
    ((1, 1), (0, 0)),
]
print(votar_dos_respuestas(candidatos))
# [((1, 0), (0, 1)), ((0, 1), (1, 0))]

Sobre la sospecha de que el conjunto público sea más fácil que el privado, el autor respondió en el hilo que el mismo método lo puso en décimo lugar en el conjunto privado de Kaggle. No es lo mismo que un resultado verificado por el ARC Prize, y vale decirlo con claridad, pero es una señal de que el número no es un artefacto de filtración.

Dónde Queda Esto en la Tabla: TRM, HRM, NVARC y Gemini 3.1 Pro

El resultado empata con dos modelos que se volvieron tema en 2025 y que dependen de recursión para razonar. El HRM, Hierarchical Reasoning Model, tiene 27 millones de parámetros y logró 40,3% en el ARC-AGI-1. El TRM, Tiny Recursive Model, del laboratorio Samsung SAIL de Montreal, anunció 7 millones de parámetros con 45% en el ARC-AGI-1 y 8% en el ARC-AGI-2. Vakde hace una salvedad interesante sobre el TRM: el modelo se anuncia como 7M, pero los pesos de embedding entrenados junto con él pasan de 100 millones, lo que lo coloca en una franja parecida a la del mdlARC.

En la punta opuesta están los LLM de frontera. El Gemini 3.1 Pro, en febrero de 2026, alcanzó 77,1% en el ARC-AGI-2 con un costo de 0,962 dólar por tarea en el modo de mayor cómputo. Y el ganador del ARC Prize 2025, el equipo NVARC, de NVIDIA, llegó a 24,03% en el conjunto privado del ARC-AGI-2 gastando cerca de 0,20 dólar por tarea, con un Qwen de 4 mil millones de parámetros y muchos datos sintéticos.

Un script rápido deja la comparación de costo honesta, porque la unidad que importa no es el costo total, sino cuánto cuesta cada tarea resuelta:

# Costo por acierto = costo por tarea / tasa de acierto.
# Los costos por tarea de o3, NVARC y Gemini 3.1 Pro son los publicados por el ARC Prize;
# el del mdlARC es el costo total dividido entre las 400 tareas del conjunto público.
enfoques = {
    # nombre: (benchmark, acierto en %, costo por tarea en US$)
    "mdlARC (Vakde, RTX 5090)": ("ARC-AGI-1 público", 44.0, 0.67 / 400),
    "o3 modo eficiente (dic/2024)": ("ARC-AGI-1 semiprivado", 75.7, 20.0),
    "NVARC (ARC Prize 2025)": ("ARC-AGI-2 privado", 24.03, 0.20),
    "Gemini 3.1 Pro high (feb/2026)": ("ARC-AGI-2 semiprivado", 77.1, 0.962),
}

for nombre, (bench, acierto, costo_tarea) in enfoques.items():
    costo_por_acierto = costo_tarea / (acierto / 100)
    print(f"{nombre:32} {bench:24} {acierto:5.1f}%  "
          f"US$ {costo_tarea:.5f}/tarea  US$ {costo_por_acierto:.4f}/acierto")

Lo que la cuenta muestra es que existen dos juegos diferentes. Los LLM juegan el juego del acierto absoluto, y el ARC-AGI-1 está resuelto para ellos. El mdlARC, el TRM y el HRM juegan el juego de la eficiencia muestral: cuánto razonamiento abstracto se puede extraer de un modelo pequeño, desde cero, sin preentrenamiento en internet alguna. En el ARC-AGI-2, esos modelos pequeños todavía están en el orden de un dígito, y el propio Vakde reconoce que el ARC-AGI-3, con ambientes interactivos, exigiría modelos bastante mayores.

Lo Que Discutió el Hilo de Hacker News

Además del debate sobre la trampa, tres puntos valen el registro.

El primero es sobre el costo. Un comentarista alertó que el "0,67 dólar" es engañoso si alguien extrapola linealmente e imagina que 100 dólares darían 65%. El autor concordó en que el número ilustra eficiencia, no escala lineal.

El segundo es sobre lo que los LLM realmente aprenden. Para Vakde, los modelos de frontera llegan al ARC por postentrenamiento sintético: aprenden a resolver tareas de ARC, no a razonar de forma abstracta en general. Es una crítica antigua al benchmark, y es uno de los motivos por los que el ARC Prize lanzó el ARC-AGI-3 el 25 de marzo de 2026, con ambientes interactivos en los que el agente necesita descubrir el objetivo solo.

El tercero es sobre el mundo real. Un comentario levantó el problema del encuadre: el método puede estar explotando el tamaño limitado del ARC y fallar en distribuciones reales. El autor lo reconoció en parte y dejó la respuesta para trabajos futuros. Es una limitación honesta, y necesita entrar en cualquier lectura entusiasmada del resultado.

Cómo Reproducirlo por 67 Centavos

El repositorio es MIT y el paso a paso cabe en una terminal. En vast.ai, una RTX 5090 bajo demanda sale por alrededor de 0,33 dólar la hora en septiembre de 2026, lo que cierra la cuenta de las 2 horas. La placa tiene 32 GB de GDDR7, y el autor pide CUDA por encima de 12.8, de preferencia 13.

# Clona el repositorio (licencia MIT); antes, crea un venv e instala
# torch, numpy, numba, matplotlib y flash-attn
git clone https://github.com/mvakde/mdlARC.git

# Descarga y arma los datasets: ARC-AGI-1 + ConceptARC + tareas filtradas del ARC-AGI-2
cd mdlARC/dataset_building_scripts
python download_and_group.py
python build_datasets.py arc1 --add-conceptarc --with-filtered
cd ..

# Opcional: borra los datos crudos y el archivo de soluciones para probar que no hay filtración
# rm -r assets_tmp
# rm assets/solutions.json
# rm -r dataset_building_scripts

# Entrenamiento + inferencia. Modos: low, medium o high
python run_script.py high

El paso opcional de borrar los datos crudos y el archivo de soluciones antes del entrenamiento existe para probar que no hay filtración, y vale la pena ejecutarlo si pretendes publicar tu número. El script de entrenamiento tiene tres modos, low, medium y high, y el autor apagó el log de la función de pérdida para ganar velocidad.

Si no quieres gastar ni los 67 centavos, los modos low y medium reducen el presupuesto de cómputo y el código corre en una GPU local, más despacio. Lo que no se puede es correrlo en CPU en un tiempo razonable: flash attention es requisito.

Eficiencia Contra Escala: Qué Cambia Esto Para Quien Desarrolla

El ARC Prize 2026 está en marcha con más de 2 millones de dólares en premios. La pista del ARC-AGI-2 paga 700 mil dólares, y la regla de Kaggle es dura: 240 tareas en 12 horas con cuatro GPU L4, algo así como 0,42 dólar por tarea, sin internet y con código abierto obligatorio. El gran premio exige 85% en el conjunto privado. En ese régimen, un Gemini 3.1 Pro a 0,962 dólar por tarea ni entra en la sala. Es exactamente el régimen en el que un transformer de 75 millones de parámetros entrenado en 2 horas tiene sentido.

Tres lecturas prácticas para ti que desarrollas.

La primera es que la frontera de investigación accesible sigue abierta. Una persona, una placa alquilada y un repositorio MIT empataron con el laboratorio de Samsung y con el estado del arte no-LLM de 2025. Si quieres entrar en investigación de IA, el ARC es un campo donde 67 centavos de experimento caben en el presupuesto de cualquiera.

La segunda es sobre la receta. SwiGLU, RMSNorm, RoPE, flash attention y optimizadores de la familia Muon no son exclusividad de modelo gigante; rinden en 75 millones de parámetros tanto como en 75 mil millones. Si mantienes un modelo pequeño en producción, un clasificador, un generador de embeddings, un transformer de series temporales, vale la pena revisar la arquitectura con esa lista en la mano. Hablé sobre ese movimiento en el post sobre los small language models y la IA accesible, y el mdlARC es el ejemplo más extremo de él hasta ahora.

La tercera es sobre lo que viene después. Vakde afirma estar seguro de que 65% es alcanzable dentro del framework del transformer e invita a quien quiera a intentarlo. El ARC-AGI-2 sigue con un dígito para esa familia de modelos, y el ARC-AGI-3 es otro juego. La pregunta que el post deja en el aire es la misma del hilo: ¿el camino hacia el razonamiento general pasa por escalar lo que ya tenemos, o por descubrir qué hace que un modelo pequeño aprenda con dos ejemplos? En 2026, por primera vez, se pueden probar las dos hipótesis con el dinero de un café.

Vamos con todo! 🦅

📚 ¿Quieres Seguir lo Que Viene Por Delante?

Este artículo cubrió el transformer de 67 centavos que logró 44% en el ARC-AGI-1, pero el ecosistema cambia cada semana y no todo se convierte en artículo aquí.

En X comparto lo que estoy probando, los bastidores de los proyectos y las novedades que aparecen antes de volverse post.

Sígueme Allá

👉 Seguir a @jeffbruchado en X

💡 Contenido diario sobre desarrollo, carrera y las herramientas que realmente uso

Comentarios (0)

Este artículo aún no tiene comentarios 😢. ¡Sé el primero! 🚀🦅

Añadir comentarios