- 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
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
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