9 puntos por GN⁺ 2026-03-12 | 1 comentarios | Compartir por WhatsApp
  • Aplica Autoresearch de Karpathy a la optimización de kernels GPU
  • Herramienta automática de investigación de kernels GPU que, al recibir un modelo de PyTorch como entrada, optimiza automáticamente kernels en Triton o CUDA C++
  • Ofrece un pipeline completamente automatizado para perfilar, extraer, optimizar y verificar kernels cuello de botella del modelo
  • Ajusta prioridades con una orquestación basada en la ley de Amdahl, y cada experimento toma unos 90 segundos, por lo que puede repetirse cientos de veces durante la noche
  • Integrado con KernelBench, realiza experimentos iterativos de 50 a 300 veces sobre más de 250 problemas, lo que permite una exploración sistemática en lugar de generación puntual
  • Con backend dual de Triton y CUDA C++, verificación con prioridad en la exactitud y una estructura de modificación de un solo archivo, permite una optimización de kernels eficiente y reproducible

Cómo funciona

  • AutoKernel toma un modelo de PyTorch como entrada y ejecuta los siguientes pasos
    • Identifica kernels GPU cuello de botella mediante profiling
    • Los extrae y los separa como kernels independientes de Triton o CUDA C++
    • Repite un bucle de optimización automática para modificar, hacer benchmark, conservar o revertir cambios
    • Tras la verificación de exactitud, reporta la mejora total de velocidad
  • Modifica kernel.py con base en las instrucciones incluidas en program.md, y mediante bench.py realiza una verificación de exactitud en 5 etapas y análisis roofline
  • Cada experimento toma unos 90 segundos; se pueden ejecutar unas 40 veces por hora y unas 320 veces durante una noche

Ejecución y componentes

  • Entorno requerido: GPU NVIDIA (H100/A100/RTX 4090), Python 3.10+, paquete uv
  • Estructura principal de scripts
    • profile.py: clasifica kernels según tiempo de GPU
    • extract.py: extrae los principales kernels cuello de botella
    • bench.py: benchmark de exactitud y rendimiento en 5 etapas
    • orchestrate.py: programación multikernel basada en la ley de Amdahl
    • verify.py: verificación del modelo completo y reporte de mejora de velocidad
  • program.md incluye una estrategia de optimización de 6 etapas, manejo de conflictos y un framework de toma de decisiones para ejecución automática prolongada

Kernels compatibles y modelos de ejemplo

  • Soporta 9 tipos de kernels: matmul, softmax, layernorm, rmsnorm, flash_attention, fused_mlp, cross_entropy, rotary_embedding, reduce
  • Cada kernel incluye una implementación de referencia basada en PyTorch (reference.py) y versiones iniciales en Triton/CUDA (kernels/, kernels/cuda/)
  • Modelos de ejemplo: GPT-2, LLaMA (incluido 7B), BERT-base y modelos definidos por el usuario
  • Los modelos de HuggingFace también pueden integrarse con uv sync --extra models

Integración con KernelBench

  • Integrado con KernelBench (Stanford Scaling Intelligence Lab), realiza benchmarks estándar de kernels GPU generados por IA
  • AutoKernel explora sistemáticamente el espacio de optimización con 50 a 300 experimentos iterativos por problema
  • Herramientas principales
    • bridge.py: carga problemas y genera kernels iniciales
    • bench_kb.py: evalúa exactitud y rendimiento
    • scorer.py: calcula la puntuación total por nivel
    • program_kb.md: instrucciones del agente para KernelBench

Exportación a HuggingFace Hub

  • Los kernels optimizados pueden exportarse a HuggingFace Hub y cargarse fácilmente con get_kernel()
  • export_hf.py permite exportar y subir kernels CUDA

Principios de diseño

  • Backend dual Triton + CUDA C++: Triton permite iteración rápida, CUDA ofrece el máximo rendimiento
  • Prioridad en la exactitud: si no coincide con los resultados de PyTorch, se revierte de inmediato
  • La orquestación basada en la ley de Amdahl determina prioridades según la contribución al rendimiento total
  • La estructura de modificación de un solo archivo (kernel.py) facilita el seguimiento de cambios y la recuperación
  • Los logs TSV (results.tsv) registran los resultados de los experimentos de forma simple y legible

Formato de registro de resultados

  • En results.tsv se registran para cada experimento el número, tipo de kernel, throughput (TFLOPS), latencia, proporción frente al pico de GPU, mejora de velocidad frente a PyTorch, exactitud, uso de VRAM y descripción

Contexto del proyecto

  • Inspirado en el concepto de autoresearch de Andrej Karpathy, aplica la estructura de agentes autónomos de IA para investigación con LLM a la optimización de kernels GPU
  • La integración con KernelBench se basa en la investigación de Stanford Scaling Intelligence Lab, y AutoKernel realiza optimización iterativa en lugar de generación de una sola vez
  • El proyecto fue desarrollado por el equipo Forge de RightNow AI y se publica bajo la licencia MIT

1 comentarios

 
GN⁺ 2026-03-12
Comentarios de Hacker News
  • Un proyecto realmente genial
    Yo también había estado construyendo algo parecido durante las últimas semanas, aunque era una versión mucho más general y sobreingenierizada
    Este enfoque, centrado solo en Triton y en kernels específicos, es simple y eficiente
    Eso sí, la gráfica de progreso es confusa. Parece ser un benchmark de matmul fp16 de 4096x4096x4096, pero aunque dice que mejora 1.31x frente a cuBLAS, solo muestra 187 TFLOPS, es decir, 18.9% de utilización pico
    cuBLAS logra un rendimiento mucho más cercano al pico, así que probablemente sea por overhead de CPU u otro cuello de botella
    Hacer benchmarks es realmente difícil, pero creo que este campo tiene un potencial enorme en los próximos 6 meses

  • Si esto llegara a funcionar en algo como llama.cpp, creo que el beneficio sería mucho mayor
    Existen varios kernels de cuantización y configuraciones de hardware, y además hay muchos usuarios individuales, así que la mejora en eficiencia podría ser grande
    Estaría bien que este proyecto participara allí como contribuidor

    • Es una observación acertada
      llama.cpp tiene varios kernels CUDA ajustados a mano como Q4_K_M, Q5_K_S y Q8_0, y cada uno apunta a perfiles de hardware distintos
      Si fuera posible optimizar automáticamente para cada GPU, sería un cambio enorme
      Ahora mismo, incluso con el mismo formato de cuantización, la diferencia de rendimiento entre una RTX 3090 y una 5070 Ti es grande
      Un entorno con tanta diversidad de hardware como llama.cpp es justo donde la búsqueda automática de kernels más brillaría
  • ¡Genial!
    Yo estoy agregando la misma funcionalidad para Apple Silicon
    En mi proyecto autoresearch-everywhere estoy trabajando en convertir autoresearch en una herramienta seria

  • Algo está raro
    Tomando como referencia GEMM fp16 de 4kx4kx4k, cutlass es como 3 veces más rápido

  • Me pregunto si han hecho benchmarks comparándolo con auto-scheduling como Ansor de TVM

  • Esto apenas empieza
    Como referencia, Google ya había hecho algo parecido hace dos generaciones de modelos
    En la entrada de blog de mayo de 2025, AlphaEvolve, anunciaron que aceleraron en 23% un kernel clave de la arquitectura Gemini dividiendo una multiplicación de matrices grande en subproblemas más pequeños, reduciendo así el tiempo de entrenamiento en 1%
    Ahora hemos llegado a una era en la que este tipo de técnica también es posible “en casa”
    En particular, con tanto entrenamiento basado en RL últimamente, mejorar la velocidad de inferencia probablemente también se traducirá en mejorar la velocidad de entrenamiento

  • Me pregunto cuándo llegará el día en que este tipo de optimización también se incorpore en runtimes de lenguajes open source como Swift o Rust, para exprimir hasta la última gota de rendimiento