Pesquisa automática para kernels de GPU. Dê a ele qualquer modelo PyTorch, durma e acorde com kernels Triton otimizados.
Inspirado por @karpathy/autoresearch – que demonstrou agentes autônomos de IA para pesquisa de treinamento LLM. O AutoKernel aplica a mesma filosofia à otimização do kernel da GPU: o agente modifica um arquivo, executa uma avaliação fixa, mantém ou reverte, repete para sempre.
Dê ao AutoKernel qualquer modelo PyTorch. Ele vai:
- Perfil o modelo para descobrir quais kernels de GPU são gargalos
- Extrair cada gargalo como um kernel Triton independente
- Otimizar cada kernel de forma autônoma (editar, comparar, manter/reverter – para sempre)
- Verificar correção de ponta a ponta e relatar a aceleração total
O agente lê program.md – o “código organizacional de pesquisa” – que contém instruções abrangentes para operação autônoma. Ele edita kernel.py um kernel por vez, executa bench.py (benchmark fixo com verificações de correção em 5 estágios + análise da linha do telhado) e mantém ou reverte a alteração. O orquestrador decide quando passar para o próximo kernel usando a lei de Amdahl.
Cada experimento leva cerca de 90 segundos. São aproximadamente 40 experimentos/hora, aproximadamente 320 durante a noite, em todos os kernels.
Requisitos: GPU NVIDIA (testada em H100/A100/RTX 4090), Python 3.10+, uv.
# Install uv (if you don't have it)
curl -LsSf https://astral.sh/uv/install.sh | sh
# Clone and setup
git clone https://github.com/RightNow-AI/autokernel.git
cd autokernel
uv sync
# One-time setup: test data + baselines
uv run prepare.py
# Profile a model (ships with GPT-2, LLaMA, BERT -- no transformers needed)
uv run profile.py --model models/llama_7b.py --class-name LlamaModel \
--input-shape 1,512 --dtype float16
# Extract top bottleneck kernels
uv run extract.py --top 5
# Verify benchmark works
uv run bench.pyAbra Claude, Codex ou qualquer agente de codificação neste diretório:
Read program.md and let's kick off a new experiment. Start with setup.
O agente irá:
- Crie o perfil do seu modelo e apresente o plano de otimização
- Crie uma ramificação (por exemplo,
autokernel/mar10-llama7b) - Otimize cada kernel de gargalo em ordem de prioridade
- Verifique a correção de ponta a ponta e relate a aceleração total
program.md é intencionalmente abrangente para que o agente possa funcionar por mais de 10 horas sem ficar preso. Inclui um manual de otimização de 6 níveis, estrutura de decisão, tratamento de falhas e raciocínio da lei de Amdahl.
profile.py extract.py bench.py (loop) verify.py
Any PyTorch ──> Rank kernels ──> Generate baseline ──> Optimize each ──> End-to-end
model by GPU time Triton kernels kernel (agent) verification
| Ferramenta | O que isso faz |
|---|---|
profile.py | Cria perfis de qualquer modelo PyTorch com torch.profilerclassifica os kernels por tempo de GPU, classifica como computação/limitado à memória |
extract.py | Extrai os N principais núcleos de gargalo dos resultados de criação de perfil em arquivos de kernel Triton independentes |
orchestrate.py | Agendador multi-kernel: decide qual kernel otimizar em seguida usando a lei de Amdahl, rastreia o progresso agregado |
bench.py | Benchmark fixo: correção em 5 estágios (fumaça, varredura de forma, estabilidade numérica, determinismo, casos extremos) + desempenho + linha do teto |
verify.py | Conecta kernels otimizados de volta ao modelo, verifica a correção de ponta a ponta, reporta aceleração total |
9 tipos de kernel que cobrem as operações principais do aprendizado profundo moderno:
| Núcleo | Descrição | Métrica Chave |
|---|---|---|
| matmul | Multiplicação de matrizes densas (M x K) @ (K x N) | TFLOPS |
| softmax | Softmax numericamente estável em linhas paralelas | GB/s |
| norma de camada | Normalização de camada com transformação afim | GB/s |
| norma | Normalização RMS (estilo LLaMA) | GB/s |
| flash_atenção | Atenção escalonada ao produto escalar com mascaramento causal | TFLOPS |
| fundido_mlp | MLP fundido estilo SwiGLU (gate + up + down) | TFLOPS |
| cross_entropy | Perda de entropia cruzada fundida | GB/s |
| rotary_embedding | Incorporações de posição rotativa (RoPE) | GB/s |
| reduzir | Redução paralela (soma) | GB/s |
Cada um tem uma referência PyTorch em reference.py e um kernel Triton inicial em kernels/.
Definições de modelo independentes são fornecidas com o AutoKernel (sem transformers biblioteca necessária):
| Modelo | Arquivo | Parâmetros | Uso |
|---|---|---|---|
| GPT-2 Pequeno | models/gpt2.py | 124 milhões | --class-name GPT2 --input-shape 1,1024 |
| LLaMA (compacto) | models/llama_7b.py | 160 milhões | --class-name LlamaModel --input-shape 1,512 |
| LLaMA 7B | models/llama_7b.py | 7B | --class-name LlamaModel7B --input-shape 1,2048 |
| Base BERT | models/bert_base.py | 110 milhões | --class-name BertModel --input-shape 8,512 |
| Personalizado | models/custom.py | — | Modelo para seu próprio modelo |
Para modelos HuggingFace (uv sync --extra models):
uv run profile.py --module transformers --class-name AutoModelForCausalLM \
--pretrained meta-llama/Llama-2-7b-hf --input-shape 1,2048 --dtype float16autokernel/
kernel.py the file the agent modifies (one kernel at a time)
program.md agent instructions -- the "research org code"
bench.py fixed benchmark + 5-stage correctness harness
reference.py PyTorch reference implementations (ground truth)
prepare.py one-time setup: test data, baselines
profile.py profile any PyTorch model, rank kernels by GPU time
extract.py extract bottleneck kernels into workspace/
orchestrate.py multi-kernel scheduler (Amdahl's law)
verify.py end-to-end model verification + speedup report
analysis.py experiment visualization (generates progress.png)
kernels/ starter Triton kernels (9 types)
models/ self-contained model definitions (GPT-2, LLaMA, BERT)
workspace/ runtime artifacts (gitignored)
Por que Tritão. Sintaxe legível semelhante a Python que o agente pode entender e modificar sem dominar PTX ou SASS inline. O Triton bem ajustado atinge regularmente 80-95% do cuBLAS. O agente precisa iterar rapidamente – o Triton compila em segundos, não em minutos.
Correção primeiro. O benchmark verifica a saída do kernel em relação ao PyTorch antes de medir o desempenho. Um kernel rápido, mas errado, é imediatamente revertido. Isso evita que o agente “otimize” produzindo lixo.
Orquestração da lei de Amdahl. O orquestrador prioriza por impacto. Uma aceleração de 1,5x em um kernel de 60% (1,25x de ponta a ponta) supera uma aceleração de 3x em um kernel de 5% (1,03x de ponta a ponta). Ele segue em frente quando os retornos decrescentes se instalam.
Arquivo único para modificar. O agente apenas toca kernel.py. O escopo permanece gerenciável, as diferenças podem ser revisadas e revertem limpo.
Registro de TSV. Os resultados vão para uma planície results.tsv arquivo. Legível por humanos, compatível com git, analisável trivialmente, sem infraestrutura.
Cada experimento é registrado em results.tsv (separado por tabulação):
| Coluna | Descrição |
|---|---|
experiment | Número sequencial do experimento (0 = linha de base) |
tag | Identificador curto |
kernel_type | Qual kernel (por exemplo, matmul) |
throughput_tflops | Taxa de transferência medida (quanto maior, melhor) |
latency_us | Tempo de execução em microssegundos |
pct_peak | Porcentagem do pico teórico da GPU |
speedup_vs_pytorch | Aceleração vs PyTorch/cuBLAS |
correctness | PASS, FAIL, TIMEOUT ou CRASH |
peak_vram_mb | Uso máximo de memória da GPU |
description | O que foi tentado |
Este projeto é pesquisa automática para kernels de GPU – diretamente inspirado na pesquisa automática de Andrej Karpathy, o experimento original em agentes autônomos de pesquisa de IA para treinamento LLM. Karpathy mostrou que um agente de IA pode realizar centenas de experimentos durante a noite, explorando metodicamente um espaço de busca e registrando cada resultado. O AutoKernel aplica o mesmo loop – o agente edita um arquivo, executa uma avaliação fixa, mantém ou reverte – ao domínio de otimização do kernel da GPU com Triton.
Construído pela equipe por trás do Forge.
COM
Fonte: theverge

