News

Neuer Ansatz zur Entwicklung von ROCm-Kerneln mit Hugging Face

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

KI, die in Deutschland zu Hause ist.

Testen Sie Mindverse Studio oder sprechen Sie mit unserem Team über Ihren Anwendungsfall.