- Überträgt Karpathys Autoresearch auf die Optimierung von GPU-Kernels
- Ein automatisches Forschungstool für GPU-Kernel, das bei Eingabe eines PyTorch-Modells automatisch Triton- oder CUDA-C++-Kernel optimiert
- Bietet eine vollständig automatisierte Pipeline zum Profiling, Extrahieren, Optimieren und Verifizieren der Bottleneck-Kernel eines Modells
- Passt Prioritäten durch Orchestrierung auf Basis von Amdahls Gesetz an; jedes Experiment dauert etwa 90 Sekunden, sodass über Nacht Hunderte Durchläufe möglich sind
- Integriert mit KernelBench und führt für mehr als 250 Probleme 50 bis 300 iterative Experimente durch, wodurch eine systematische Suche statt einmaliger Generierung möglich wird
- Unterstützt mit doppeltem Backend für Triton und CUDA C++, Verifikation mit Priorität auf Korrektheit und einer Single-File-Änderungsstruktur eine effiziente und reproduzierbare Kernel-Optimierung
Funktionsweise
- AutoKernel nimmt ein PyTorch-Modell als Eingabe und führt die folgenden Schritte aus
- Identifikation von GPU-Bottleneck-Kernels durch Profiling
- Extraktion und Trennung als eigenständige Triton- oder CUDA-C++-Kernel
- Wiederholtes Ändern, Benchmarken, Beibehalten oder Zurückrollen über eine automatische Optimierungsschleife
- Korrektheitsprüfung und anschließender Bericht über die gesamte Geschwindigkeitssteigerung
- Auf Basis der in
program.md enthaltenen Anweisungen wird kernel.py geändert; über bench.py werden eine 5-stufige Korrektheitsprüfung und eine Roofline-Analyse durchgeführt
- Jedes Experiment dauert etwa 90 Sekunden, rund 40 pro Stunde und ungefähr 320 über Nacht
Ausführung und Komponenten
- Erforderliche Umgebung: NVIDIA-GPU (H100/A100/RTX 4090), Python 3.10+, uv-Paket
- Zentrale Skripte
profile.py: Rangfolge der Kernel nach GPU-Zeit
extract.py: Extraktion der wichtigsten Bottleneck-Kernel
bench.py: 5-stufiger Benchmark für Korrektheit und Performance
orchestrate.py: Multi-Kernel-Scheduling auf Basis von Amdahls Gesetz
verify.py: Verifikation des Gesamtmodells und Bericht zur Geschwindigkeitssteigerung
program.md enthält eine 6-stufige Optimierungsstrategie, Konfliktbehandlung und ein Entscheidungs-Framework, sodass auch lange automatische Läufe möglich sind
Unterstützte Kernel und Beispielmodelle
- Unterstützung für 9 Kernel-Typen: matmul, softmax, layernorm, rmsnorm, flash_attention, fused_mlp, cross_entropy, rotary_embedding, reduce
- Jeder Kernel enthält eine referenzbasierte PyTorch-Implementierung (
reference.py) sowie erste Triton-/CUDA-Versionen (kernels/, kernels/cuda/)
- Beispielmodelle: GPT-2, LLaMA (einschließlich 7B), BERT-base, benutzerdefinierte Modelle
- HuggingFace-Modelle lassen sich ebenfalls über
uv sync --extra models integrieren
KernelBench-Integration
- Integriert mit KernelBench (Stanford Scaling Intelligence Lab) zur Durchführung standardisierter Benchmarks für KI-generierte GPU-Kernel
- AutoKernel durchsucht den Optimierungsraum systematisch mit 50 bis 300 iterativen Experimenten pro Problem
- Wichtige Werkzeuge
bridge.py: Laden von Problemen und Erzeugen initialer Kernel
bench_kb.py: Bewertung von Korrektheit und Performance
scorer.py: Berechnung der Gesamtpunktzahl pro Level
program_kb.md: Agent-Anweisungen speziell für KernelBench
Export in den HuggingFace Hub
- Optimierte Kernel können in den HuggingFace Hub exportiert und anschließend einfach mit
get_kernel() geladen werden
export_hf.py unterstützt den Export und Upload von CUDA-Kernels
Designprinzipien
- Doppeltes Backend aus Triton + CUDA C++: Triton ermöglicht schnelle Iteration, CUDA liefert maximale Performance
- Korrektheit zuerst: Wenn die Ergebnisse nicht mit PyTorch übereinstimmen, wird sofort zurückgerollt
- Priorisierung nach Gesamtleistungsbeitrag durch Orchestrierung auf Basis von Amdahls Gesetz
- Single-File-Änderungsstruktur (
kernel.py) erleichtert Nachverfolgung und Wiederherstellung von Änderungen
- TSV-Logs (
results.tsv) protokollieren Versuchsergebnisse einfach und gut lesbar
Format der Ergebnisaufzeichnung
- In
results.tsv werden für jedes Experiment Nummer, Kernel-Typ, Durchsatz (TFLOPS), Latenz, Verhältnis zum GPU-Peak, Geschwindigkeitssteigerung gegenüber PyTorch, Korrektheit, VRAM-Nutzung und Beschreibung gespeichert
Projekthintergrund
- Inspiriert vom Konzept autoresearch von Andrej Karpathy wird eine autonome KI-Agentenstruktur für LLM-Forschung auf die GPU-Kernel-Optimierung übertragen
- Die KernelBench-Integration basiert auf Forschung des Stanford Scaling Intelligence Lab; AutoKernel setzt auf iterative Optimierung statt einmaliger Generierung
- Das Projekt wurde vom Forge-Team von RightNow AI entwickelt und unter der MIT-Lizenz veröffentlicht
1 Kommentare
Hacker-News-Kommentare
Wirklich ein großartiges Projekt
Ich habe in den letzten Wochen auch etwas Ähnliches gebaut, allerdings in einer deutlich allgemeineren und überentwickelten Version
Dieser Ansatz, der sich nur auf Triton und bestimmte Kernel konzentriert, ist simpel und zugleich effizient
Allerdings ist die Fortschrittsgrafik verwirrend. Es sieht nach einem 4096x4096x4096-fp16-Matmul-Benchmark aus, aber obwohl von einem 1,31-fachen Gewinn gegenüber cuBLAS die Rede ist, werden nur 187 TFLOPS gezeigt, also 18,9 % der Peak-Auslastung
cuBLAS erreicht eine Leistung viel näher am Peak, daher liegt es vermutlich an CPU-Overhead oder einem anderen Flaschenhals
Benchmarks sind wirklich schwierig, aber ich halte dieses Feld in den nächsten 6 Monaten für extrem vielversprechend
Wenn das in etwas wie llama.cpp funktionieren würde, wäre der Nutzen vermutlich noch viel größer
Es gibt zahlreiche Quantisierungskernel und Hardware-Konfigurationen, und auch viele Einzelanwender, daher wäre das Potenzial für Effizienzgewinne groß
Es wäre schön, wenn dieses Projekt dort als Contributor mitwirken würde
llama.cpp hat mehrere manuell getunte CUDA-Kernel wie Q4_K_M, Q5_K_S und Q8_0, die jeweils auf unterschiedliche Hardware-Profile abzielen
Wenn eine automatische Optimierung pro GPU möglich wäre, wäre das eine gewaltige Veränderung
Derzeit gibt es selbst beim gleichen Quantisierungsformat große Leistungsunterschiede zwischen einer RTX 3090 und einer 5070 Ti
Gerade eine Umgebung wie llama.cpp mit ihrer großen Hardware-Vielfalt ist genau der Ort, an dem automatische Kernelsuche am meisten glänzen würde
Großartig!
Ich arbeite gerade daran, dieselbe Funktionalität für Apple Silicon hinzuzufügen
In meinem Projekt autoresearch-everywhere arbeite ich daran, autoresearch zu einem ernsthaften Werkzeug zu machen
Irgendetwas ist seltsam
Bezogen auf 4kx4kx4k fp16 GEMM scheint cutlass etwa 3-mal schneller zu sein
Ich frage mich, ob es Benchmark-Vergleiche mit Auto-Scheduling wie Ansor von TVM gab
Das ist erst der Anfang
Zur Einordnung: Google hat bei Modellen bereits vor zwei Generationen etwas Ähnliches gemacht
Im Blogbeitrag vom Mai 2025, AlphaEvolve, wurde angekündigt, dass ein zentraler Kernel der Gemini-Architektur um 23 % beschleunigt wurde, indem große Matrixmultiplikationen in kleinere Teilprobleme aufgeteilt wurden, was die Trainingszeit um 1 % verkürzte
Jetzt sind wir an einem Punkt, an dem solche Techniken auch „zu Hause“ möglich sind
Gerade weil es zuletzt mehr RL-basiertes Training gibt, dürfte eine schnellere Inferenz direkt zu schnellerem Training führen
Ich frage mich, wann solche Optimierungen auch in Open-Source-Sprach-Runtimes wie Swift oder Rust Einzug halten und dort auch noch den letzten Tropfen Leistung herausholen