News
Neuer Ansatz zur Entwicklung von ROCm-Kerneln mit Hugging Face
Das Wichtigste in Kürze
- Hugging Face hat die Bibliotheken kernel-builder und kernels eingeführt, um die Entwicklung, das Bauen und das Teilen von hochleistungsfähigen GPU-Kerneln, insbesondere für ROCm-kompatible AMD GPUs, zu vereinfachen.
- Benutzer können benutzerdefinierte Kernel erstellen, die für spezifische Workloads optimiert sind, und diese nahtlos in PyTorch-Workflows integrieren.
- Der Prozess umfasst eine definierte Projektstruktur, die Konfiguration über eine `build.toml`-Datei und die Sicherstellung der Reproduzierbarkeit mittels `flake.nix`.
- Kernel werden als native PyTorch-Operatoren registriert, was die Kompatibilität mit `torch.compile` und hardware-spezifische Implementierungen ermöglicht.
- Das Hochladen von Kerneln auf den Hugging Face Hub macht sie für die Community zugänglich und ermöglicht ein einfaches Laden und Verwenden mit der `kernels`-Bibliothek.
- Versioning und Lock-Dateien unterstützen die Verwaltung von Kernel-Abhängigkeiten in Produktionsumgebungen.
Optimierung und Bereitstellung von ROCm-Kerneln mit Hugging Face
Die fortschreitende Entwicklung im Bereich des Deep Learning erfordert zunehmend spezialisierte und hochoptimierte Software, um die Leistungsfähigkeit moderner GPU-Architekturen voll auszuschöpfen. Im Kontext von AMD GPUs und der ROCm-Software-Plattform stellt die Entwicklung, Integration und gemeinsame Nutzung von benutzerdefinierten Kerneln eine entscheidende Herausforderung dar. Hugging Face hat mit der Einführung der kernel-builder- und kernels-Bibliotheken einen strukturierten Ansatz geschaffen, der diesen Prozess erheblich vereinfacht und beschleunigt.
Die Rolle von benutzerdefinierten Kerneln in der Hochleistungs-KI
Benutzerdefinierte Kernel sind grundlegend für die Erzielung hoher Leistung im Deep Learning. Sie ermöglichen es, GPU-Operationen präzise auf spezifische Workloads abzustimmen, sei es für Bildverarbeitung, Tensor-Transformationen oder andere rechenintensive Aufgaben. Die manuelle Kompilierung dieser Kernel für verschiedene Architekturen, die korrekte Einstellung von Build-Flags und die saubere Integration in PyTorch-Erweiterungen kann jedoch schnell komplex und fehleranfällig werden. Die Bibliotheken von Hugging Face zielen darauf ab, diese Komplexität zu reduzieren, indem sie eine standardisierte Methode zum Erstellen, Testen und Teilen von Kerneln bereitstellen.
Der Hugging Face Ansatz für ROCm-Kernel
Der Fokus liegt hier auf ROCm-kompatiblen Kerneln, die speziell für AMD GPUs optimiert sind. Die kernel-builder-Bibliothek bietet eine umfassende Anleitung zur Erstellung von Kerneln, die effizient auf AMD GPUs laufen, und liefert Best Practices für Reproduzierbarkeit, Paketierung und Bereitstellung. Dieser Leitfaden ist eine spezifische Anpassung der allgemeinen kernel-builder-Dokumentation, die auch CUDA, Metal und XPU unterstützt.
Exemplarische Umsetzung: Der RadeonFlow GEMM-Kernel
Als praktisches Beispiel wird der GEMM-Kernel (General Matrix Multiplication) aus den RadeonFlow_Kernels herangezogen. Dieser Kernel ist eine hochleistungsfähige, blockweise FP8-Matrixmultiplikationsimplementierung, die für die AMD Instinct MI300X GPU optimiert wurde. Er wurde im Rahmen der AMD Developer Challenge 2025 ausgezeichnet und demonstriert das Potenzial spezieller Kernel zur Leistungssteigerung. Der Kernel arbeitet mit quantisierten Eingaben im `e4m3fnuz`-Format und verwendet blockweise Skalierungsfaktoren, um die Genauigkeit bei geringer Präzision zu erhalten.
Schritt 1: Projektstruktur
Eine klar definierte Projektstruktur ist essenziell für die Wartbarkeit und Reproduzierbarkeit. Der Hugging Face Kernel Builder erwartet eine spezifische Verzeichnisstruktur:
build.toml: Das Manifest des Projekts, das den gesamten Bauprozess steuert.gemm/: Enthält den eigentlichen HIP/GPU-Quellcode.flake.nix: Garantiert eine vollständig reproduzierbare Build-Umgebung.torch-ext/gemm/: Beinhaltet den Python-Wrapper für die PyTorch-Operatoren.
Die Umbenennung von `.cpp`-Dateien in `.h` oder `.hip` ist dabei entscheidend, um dem Kernel-Builder die korrekte Identifikation und Kompilierung zu ermöglichen.
Schritt 2: Konfigurationsdateien
Das build.toml Manifest
Diese Datei orchestriert den gesamten Build-Prozess. Sie definiert unter anderem den Projektnamen, ob es sich um einen universellen Kernel handelt, die Quell- und Header-Dateien für die PyTorch-Erweiterung sowie die spezifischen Backend-Konfigurationen für den Kernel (z.B. "rocm" und die Zielarchitektur "gfx942" für MI300 GPUs).
Die flake.nix Reproduzierbarkeitsdatei
Die `flake.nix`-Datei ist entscheidend für die Sicherstellung, dass der Kernel auf jeder Maschine reproduzierbar gebaut werden kann. Sie fixiert die exakte Version des Kernel-Builders und seiner Abhängigkeiten, wodurch "es funktioniert auf meiner Maschine"-Probleme eliminiert werden.
Kernel-Implementierung und PyTorch-Operator-Registrierung
Die eigentliche GPU-Logik wird in `.hip`-Dateien implementiert. Ein wesentlicher Schritt ist die Registrierung des Kernel als nativen PyTorch-Operator über eine C++-Bindungsdatei (`torch-ext/torch_binding.cpp`). Dies ermöglicht die Integration in das PyTorch-Ökosystem und die Kompatibilität mit Optimierungstechniken wie `torch.compile`, was die Ausführung des benutzerdefinierten Operators in größeren Berechnungsgraphen optimiert. Der `__init__.py`-Wrapper in `torch-ext/gemm/` stellt den Operator schließlich auf benutzerfreundliche Weise in Python zur Verfügung.
Schritt 3: Den Kernel bauen
Der Kernel-Builder nutzt Nix für den Bauprozess. Nach der Installation von Nix kann der Kernel über den Befehl `nix build . -L` gebaut werden. Für die lokale Entwicklung bietet `nix develop` eine isolierte Entwicklungsumgebung mit allen notwendigen Abhängigkeiten, einschliesslich `build2cmake` zum Generieren von Projektdateien und der Möglichkeit, den Kernel in einem Python Virtual Environment zu testen.
Schritt 4: Hochladen des Kernels auf den Hub
Nachdem der Kernel erfolgreich gebaut und getestet wurde, kann er auf den Hugging Face Hub hochgeladen werden. Vor dem Hochladen ist es ratsam, Entwicklungsartefakte zu bereinigen. Der kernel-builder automatisiert den Bau des Kernels für alle unterstützten PyTorch- und ROCm-Versionen. Die resultierenden Binärdateien werden dann in ein `build/`-Verzeichnis verschoben und können mittels Git und LFS (Large File Storage) in ein neues Hugging Face Repository gepusht werden. Dies macht den Kernel für andere Entwickler zugänglich und voll kompatibel mit der kernels-Bibliothek.
Schritt 5: Den Kernel nutzen
Die kernels-Bibliothek ermöglicht das direkte Laden eines Kernels aus seinem Hub-Repository, ohne dass eine traditionelle Installation erforderlich ist. Dies registriert den neuen Operator automatisch und macht ihn sofort nutzbar. Ein Beispiel zeigt, wie der GEMM-Kernel geladen und mit PyTorch-Tensoren verwendet werden kann, um Matrixmultiplikationen auf AMD GPUs auszuführen.
Fazit
Die von Hugging Face bereitgestellten Tools kernel-builder und kernels vereinfachen den Prozess der Erstellung und Verbreitung von ROCm-Kerneln erheblich. Durch die Kombination eines reproduzierbaren Workflows auf Basis von Nix und einer nahtlosen Integration in PyTorch können Entwickler sich auf die Leistungsoptimierung konzentrieren, anstatt sich mit Einrichtungs- und Kompilierungsproblemen auseinanderzusetzen. Die Möglichkeit, benutzerdefinierte Kernel auf dem Hugging Face Hub zu teilen, fördert die Zusammenarbeit und ermöglicht der Community einen schnellen Zugang zu optimierten Lösungen.
Die beschriebenen Mechanismen für Versionierung und Abhängigkeitsmanagement, einschliesslich der Verwendung von Git-Tags und `kernels.lock`-Dateien, tragen dazu bei, die Stabilität und Wartbarkeit von Projekten zu gewährleisten. Darüber hinaus bietet die Option, Kernel als Python Wheels zu exportieren, Flexibilität für spezifische Bereitstellungsszenarien, obwohl das Laden über den Hub die bevorzugte Methode bleibt.
Die Implementierung und Optimierung von Kerneln, wie am Beispiel des RMS-Norm-Kernels, des SwiGLU-Kernels und des Skinny GEMM-Kernels auf AMD MI300X GPUs gezeigt, demonstriert die signifikanten Leistungsverbesserungen, die durch maßgeschneiderte Hardware-Optimierungen erzielt werden können. Diese Optimierungen umfassen sowohl speicherbezogene Techniken (z.B. coalesced memory accesses, Nutzung von Shared Memory) als auch rechenbezogene Ansätze (z.B. gepackte Instruktionen, Warp-Spezialisierung und asynchrone Ausführung).
Die Initiativen von Hugging Face in Zusammenarbeit mit AMD unterstreichen die Bedeutung offener und kollaborativer Entwicklung, um die Leistungsfähigkeit von KI-Modellen auf verschiedenen Hardware-Plattformen zu maximieren und die Zugänglichkeit für die breitere Entwicklergemeinschaft zu verbessern.
Bibliographie
- Hugging Face Blog. (2025, November 17). *Easily Build and Share ROCm Kernels with Hugging Face*. Verfügbar unter: https://huggingface.co/blog/build-rocm-kernels - Hugging Face Blog. (2025, July 9). *Creating custom kernels for the AMD MI300*. Verfügbar unter: https://huggingface.co/blog/mi300kernels - Hugging Face Blog. (2025, August 18). *A Guide to Building and Scaling Production-Ready CUDA Kernels*. Verfügbar unter: https://huggingface.co/blog/kernel-builder - Hugging Face Blog. (2025, June 12). *Learn the Hugging Face Kernel Hub in 5 Minutes*. Verfügbar unter: https://huggingface.co/blog/hello-hf-kernels - GitHub. (n.d.). *huggingface/hf-rocm-kernels*. Verfügbar unter: https://github.com/huggingface/hf-rocm-kernels - AMD ROCm Documentation. (2025, October 16). *Running models from Hugging Face*. Verfügbar unter: https://rocm.docs.amd.com/en/latest/how-to/rocm-for-ai/inference/hugging-face-models.html - AMD ROCm Documentation. (2025, January 1). *Running inference with Hugging Face Transformers*. Verfügbar unter: https://rocm.docs.amd.com/projects/ai-developer-hub/en/latest/notebooks/inference/1_inference_ver3_HF_transformers.html - arXiv. (2025, November 11). *HipKittens: Fast and Furious AMD Kernels*. Verfügbar unter: https://arxiv.org/abs/2511.08083Weitere News-Artikel
Alle ansehen- Neuer Ansatz für das Schlussfolgern in großen Sprachmodellen im latenten Raum
- Neuer Ansatz zur Selbstüberprüfung großer Sprachmodelle durch Dual Preference Optimization
- Neuer Ansatz für selbstüberwachtes Lernen: Das LeJEPA-Modell von Yann LeCun und Randall Balestriero
- Neuer Ansatz zur Sequenzmodellierung: Mixture-of-Memories für verbesserte Effizienz und Leistung
- Neuer Ansatz zur Verbesserung der Sicherheit von Large Language Models durch das ReSA-Dataset von ByteDance
- Neuer Ansatz zur Verbesserung der Sicherheit und Resilienz von KI-Modellen durch gezieltes Training
KI, die in Deutschland zu Hause ist.
Testen Sie Mindverse Studio oder sprechen Sie mit unserem Team über Ihren Anwendungsfall.