Ultralytics YOLO27: Trag dich auf die Warteliste ein.
Get Started

AMD-GPU-Training und -Inferenz mit Ultralytics YOLO, ROCm und MIGraphX#

Nur Linux x86_64

Diese Anleitung richtet sich an Linux-x86_64-Hosts, auf denen der AMD-GPU-Kerneltreiber (amdgpu) installiert ist. Alle folgenden Befehle sind für eine Linux-Shell vorgesehen. Der MIGraphX-Ausführungsanbieter wird ausschließlich als Linux-x86_64-Wheel für Python 3.11 oder neuer veröffentlicht. Daher wird Windows nicht nativ unterstützt; auch das Windows-Subsystem für Linux (WSL2) wurde noch nicht validiert.

Ultralytics YOLO läuft auf AMD Instinct und unterstützten Radeon-GPUs über ROCm, den offenen GPU-Rechenstack von AMD. Mit einem ROCm-Build von PyTorch kannst du Modelle mit .pt genauso trainieren, validieren und Vorhersagen erstellen wie auf jeder anderen GPU. Dafür verwendest du dasselbe Argument device=0 und musst den Code nicht ändern.

Für die Bereitstellung exportierst du das trainierte Modell nach ONNX und führst es mit MIGraphX aus, der Engine von AMD zur Graphoptimierung und Inferenz. Das Ultralytics-ONNX-Backend erkennt ROCm und wählt automatisch MIGraphXExecutionProvider von ONNX Runtime aus. So läuft derselbe Aufruf predict sowohl auf NVIDIA- als auch auf AMD-GPUs. Bei geplanten Ultralytics-Läufen für kontinuierliche Integration werden ONNX-Export und MIGraphX-Inferenz für jede Aufgabe auf AMD-GPU-Hardware ausgeführt.

Installation#

Der Python-Stack wird vollständig über pip aus den ROCm-Wheel-Indizes von AMD installiert. Für PyTorch, das Plugin oder die ROCm-Laufzeitbibliotheken sind daher weder apt-Pakete noch Root-Zugriff erforderlich, sofern der AMD-GPU-Kerneltreiber (amdgpu / /dev/kfd) bereits auf dem Host installiert ist.

Installation

Ermittle die GPU-Architektur (zum Beispiel gfx1151 bei Strix Halo) und installiere nur die benötigten PyTorch-Kernels:

# Read the GPU architecture from the amdgpu driver, e.g. device-gfx1151
GPU_ARCH=$(grep -rhs '^gfx_target_version' /sys/class/kfd/kfd/topology/nodes | awk '$2 {printf "device-gfx%d%d%x\n", int($2/10000), int($2/100)%100, $2%100}' | sort -u | paste -sd, -)

# ROCm PyTorch + torchvision for the detected architecture
pip install "torch[${GPU_ARCH:?No AMD GPU found}]" "torchvision[$GPU_ARCH]" --index-url https://stable.repo.amd.com/rocm/whl-next/

# Ultralytics
pip install ultralytics

Ultralytics installiert onnx automatisch beim ersten ONNX-Export. Bei der ersten ONNX-Inferenz auf einem ROCm-System installiert es außerdem das MIGraphX-Ausführungsanbieter-Plugin (onnxruntime-ep-migraphx) und die MIGraphX-Laufzeitbibliotheken, die dieses lädt (migraphx-libs. Die Versionen sind aufeinander abgestimmt und getestet. Das Plugin wird ausschließlich für Python 3.11 oder neuer unter Linux x86_64 veröffentlicht. Bei anderen Python-Versionen oder Architekturen sowie bei YOLO_AUTOINSTALL=false, wenn kein Plugin installiert ist, weicht die ONNX-Inferenz mit einer Warnung auf die CPU aus. Ausführliche Anleitungen und bewährte Vorgehensweisen findest du in unserem YOLO26-Installationsleitfaden. Falls du auf Probleme stößt, hilft dir unser Leitfaden zu häufigen Problemen weiter.

Vergewissere dich vor dem Training oder Export, dass PyTorch die AMD-GPU erkennt:

import torch

print(torch.cuda.is_available())  # Bei einer funktionierenden ROCm-Installation True
print(torch.cuda.get_device_name(0))  # Name der AMD-GPU, z. B. AMD Radeon 8060S
print(torch.version.hip)  # HIP-Version des ROCm-PyTorch-Builds; bei CUDA- oder CPU-Builds None

Mit PyTorch ROCm auf AMD-GPUs trainieren#

Natives Training, Validierung und Vorhersagen mit .pt-Modellen laufen über PyTorch ROCm auf AMD-GPUs und sind unabhängig vom weiter unten beschriebenen MIGraphX-Inferenzpfad. Installiere einen ROCm-Build von PyTorch wie unter Installation beschrieben und verwende dieselben Geräteargumente wie bei jedem anderen Ultralytics-Training:

Warum AMD-GPUs in Ultralytics als CUDA angezeigt werden

Der ROCm-Build von PyTorch verwendet intern HIP, greift jedoch bewusst auf die Schnittstellen von torch.cuda zurück. Deshalb gibt torch.cuda.is_available() den Wert True zurück, und AMD-GPUs werden mit den üblichen CUDA-ähnlichen IDs angesprochen. Verwende device=0 oder device=cuda:0 für AMD-GPUs; rocm ist kein PyTorch-Gerätetyp. Weitere Informationen findest du unter PyTorch-HIP-Semantik.

ROCm-Training
from ultralytics import YOLO

model = YOLO("yolo26n.pt")

# Auf der ersten AMD-GPU trainieren, die PyTorch ROCm erkennt
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=0)

# Auf zwei AMD-GPUs trainieren
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=[0, 1])

Für Validierung und Vorhersagen mit .pt-Modellen wird dasselbe Gerät ausgewählt:

yolo detect val model=path/to/best.pt data=coco8.yaml device=0
yolo predict model=path/to/best.pt source=path/to/image.jpg device=0
Gemischte Genauigkeit mit ROCm

Ultralytics aktiviert AMP standardmäßig und deaktiviert es automatisch, wenn eine Prüfung vor dem Training feststellt, dass Ergebnisse mit gemischter Genauigkeit von Ergebnissen mit voller Genauigkeit abweichen. Das Verhalten von ROCm AMP kann sich je nach PyTorch- und ROCm-Version ändern. Falls bei einem Lauf weiterhin NaN-Verlustwerte oder ein mAP von null auftreten, trainiere mit amp=False:

yolo detect train data=coco8.yaml model=yolo26n.pt device=0 amp=False

Export und Inferenz mit MIGraphX#

ONNX Runtime ist eine plattformübergreifende Inferenz-Engine, die ein einzelnes ONNX-Modell über austauschbare Ausführungsanbieter (EPs) auf vielen Hardware-Backends ausführt. Jeder EP ordnet den ONNX-Graphen einem bestimmten Beschleuniger zu: CUDA für NVIDIA-GPUs, CoreML für Apple Silicon und MIGraphX für AMD-GPUs mit ROCm. MIGraphX wird als Plugin onnxruntime-ep-migraphx bereitgestellt und kompiliert den Graphen zu einem für deine GPU optimierten Programm.

Für die MIGraphX-Inferenz wird der standardmäßige ONNX-Export verwendet. Exportiere das Modell nach ONNX (format="onnx"), und Ultralytics wählt für die Inferenz automatisch das Backend MIGraphXExecutionProvider, um das ONNX-Modell auf deiner AMD-GPU auszuführen.

Wichtige Funktionen der MIGraphX-Inferenz#

  • Automatische Anbieterauswahl: Auf einem ROCm-Host registriert das ONNX-Backend das Plugin und wählt MIGraphXExecutionProvider aus, ohne dass du den Code ändern musst. Fehlt das Plugin oder kann es nicht geladen werden, wird die Inferenz mit einer Warnung auf der CPU ausgeführt.
  • Graphoptimierung: MIGraphX führt Operatorfusion, Speicherplanung und Kernel-Auswahl durch, abgestimmt auf AMD-GPU-Architekturen.
  • Ein-/Ausgabebindung ohne Kopieren: Ein- und Ausgaben werden über das DLPack-Protokoll direkt an GPU-Tensoren gebunden. So entfallen während der Inferenz Umwege über den Host.
  • Genauigkeitsoptionen: Führe das Modell mit FP32 aus oder exportiere ein FP16-ONNX-Modell für Inferenz mit geringerer Genauigkeit.
  • Portables Artefakt: Eine einzelne .onnx-Datei läuft auf CPUs, NVIDIA-GPUs und AMD-GPUs. Damit kannst du mit einem Export mehrere Plattformen abdecken.
  • Reproduzierbare Bereitstellung: Der gesamte Stack (ROCm PyTorch, das MIGraphX-Plugin und dessen Bibliotheken) wird über pip aus den ROCm-Wheel-Indizes von AMD installiert.

Unterstützte Aufgaben#

Die MIGraphX-Inferenz unterstützt alle sieben Ultralytics-Aufgaben. Semantische Segmentierung und Tiefenschätzung sind nur mit YOLO26 verfügbar, der einzigen Modellfamilie mit entsprechenden Ausgabeköpfen.

AufgabeYOLOv8YOLO11YOLO26
Erkennung✅✅✅
Segmentierung✅✅✅
Semantik❌❌✅
Tiefe❌❌✅
Klassifizierung✅✅✅
Pose✅✅✅
OBB✅✅✅

Verwendung#

Bevor du mit den Anwendungshinweisen beginnst, solltest du dir die verschiedenen YOLO26-Modelle von Ultralytics ansehen. So findest du das Modell, das am besten zu den Anforderungen deines Projekts passt.

Das ONNX-Format unterstützt die Modi Export, Vorhersage und Validierung. Für Inferenz und Validierung auf einer AMD-GPU benötigst du ein ROCm-System mit installiertem MIGraphX-Plugin. Exportiere dein Modell und lade es anschließend, um Inferenz auszuführen oder seine Genauigkeit auf device=0 zu validieren.

Konflikt mit onnxruntime-gpu

onnxruntime-gpu und das standardmäßige Paket onnxruntime werden im selben Python-Modul onnxruntime installiert. Daher überschreibt die zuletzt installierte Version die andere. Wenn du nur eines der beiden Pakete deinstallierst, bleibt das Modul defekt. Ältere Versionen von onnxruntime-gpu können außerdem bei der MIGraphX-Inferenz abstürzen. Wurde bei einer früheren Einrichtung onnxruntime-gpu installiert, führe pip uninstall -y onnxruntime-gpu onnxruntime aus. Bei der nächsten ONNX-Inferenz installiert Ultralytics dann erneut das standardmäßige onnxruntime.

Exportieren
from ultralytics import YOLO

# Ein YOLO26-Modell laden
model = YOLO("yolo26n.pt")

# Exportiere das Modell in das ONNX-Format
model.export(format="onnx")  # erstellt 'yolo26n.onnx'
Vorhersagen
from ultralytics import YOLO

# Das exportierte ONNX-Modell laden und Inferenz auf einer AMD GPU ausführen
model = YOLO("yolo26n.onnx")

# Der MIGraphX-Ausführungsanbieter wird unter ROCm automatisch ausgewählt
results = model.predict("https://ultralytics.com/images/bus.jpg", device=0)
Validieren
from ultralytics import YOLO

# Das exportierte ONNX-Modell laden
model = YOLO("yolo26n.onnx")

# Die Genauigkeit auf dem COCO8-Datensatz auf einer AMD GPU validieren
metrics = model.val(data="coco8.yaml", device=0)

Exportargumente#

Die MIGraphX-Inferenz verwendet dieselben Exportargumente wie ONNX. Für die Bereitstellung auf einer AMD GPU sind diese Optionen besonders relevant:

ArgumentTypStandardBeschreibung
formatstr'onnx'Zielformat für das exportierte Modell. Verwende onnx für die MIGraphX-EP-Inferenz.
imgszint oder tuple640Gewünschte Bildgröße für die Modelleingabe. Möglich ist eine Ganzzahl für quadratische Bilder oder ein Tupel (height, width).
quantizeint oder strNoneGenauigkeit des exportierten ONNX-Modells: 16 (FP16) für Inferenz mit reduzierter Genauigkeit; 32/nicht festgelegt entspricht FP32.
dynamicboolFalseErmöglicht dynamische Eingabegrößen. Mit statischen Formen kann MIGraphX ein spezialisiertes Programm kompilieren und Zero-Copy-IO-Binding ermöglichen.
simplifyboolTrueVereinfacht den Modellgraphen mit onnxslim und kann dadurch Leistung und Kompatibilität verbessern.
opsetintNoneONNX-Operator-Satzversion für die Kompatibilität mit verschiedenen Laufzeitumgebungen. Wenn nicht festgelegt, wird die neueste unterstützte Version verwendet.
nmsbool, optionalNoneWähle die Rohausgabe (None, Standard), eingebettetes NMS (True) oder den NMS-freien Kopf (False). Eingebettetes NMS (True) wird vom MIGraphX-EP noch nicht unterstützt (ROCm/AMDMIGraphX#5246).
batchint1Export-Batchgröße, also die maximale Anzahl von Bildern, die das exportierte Modell gleichzeitig im Modus predict verarbeitet.
devicestrNoneGerät für den Export: GPU (device=0), CPU (device=cpu).

Die vollständige Liste der Exportargumente findest du in der ONNX-Integration und auf der Ultralytics-Dokumentationsseite zum Export.

Bereitstellung auf AMD GPUs mit MIGraphX#

Cache für kompilierte Programme

Der MIGraphX-EP kompiliert den Graphen in der ersten Sitzung, was die anfängliche Ladezeit maßgeblich bestimmt. Ultralytics speichert das kompilierte Programm pro Modell im Ultralytics-Konfigurationsverzeichnis, sodass spätere Ladevorgänge desselben Modells die Neukompilierung überspringen. Der Cache behält die 8 zuletzt verwendeten Modelle und entfernt ältere, damit er nicht unbegrenzt anwächst. Lege ORT_MIGRAPHX_CACHE_DIR fest, um den Speicherort zu überschreiben. Lösche das Cache-Verzeichnis, um nach einem Upgrade von ROCm oder MIGraphX eine Neukompilierung zu erzwingen.

Kompilierungszeit

Ultralytics deaktiviert MIGraphX-Winograd-Faltungskerne standardmäßig (MIGRAPHX_DISABLE_WINOGRAD=1), um die erstmalige Kompilierung von YOLO-Graphen zu beschleunigen, ohne die messbare Inferenzleistung zu verändern (ROCm/AMDMIGraphX#5234). Lege MIGRAPHX_DISABLE_WINOGRAD=0 fest, um sie wieder zu aktivieren.

Für eine sofort einsatzbereite Umgebung erstellt Dockerfile-amd das Image ultralytics/ultralytics:latest-amd mit vorinstalliertem ROCm PyTorch und MIGraphX-EP. Im Docker-Schnellstart unter GPUs verwenden findest du die docker run-Flags, mit denen AMD GPUs für den Container verfügbar gemacht werden.

Benchmarks#

Die folgenden YOLO26-Benchmarks wurden vom Ultralytics-Team auf einer AMD Radeon 8060S GPU (Ryzen AI Max+ PRO 395) durchgeführt. Dabei wurden Geschwindigkeit und Genauigkeit von PyTorch und ONNX mit dem MIGraphX-Ausführungsanbieter verglichen. Beide Formate werden auf der GPU mit FP32-Genauigkeit ausgeführt: PyTorch über ROCm und ONNX über MIGraphX.

Leistung
ModellFormatStatusGröße (MB)metrics/mAP50-95(B)Inferenzzeit (ms/Bild)
YOLO26nPyTorch✅5.30.40894.1
YOLO26nONNX (MIGraphX)✅9.50.40892.1
YOLO26sPyTorch✅19.50.48507.2
YOLO26sONNX (MIGraphX)✅36.50.48504.7
YOLO26mPyTorch✅42.20.532314.6
YOLO26mONNX (MIGraphX)✅78.20.532310.9
YOLO26lPyTorch✅50.70.548918.5
YOLO26lONNX (MIGraphX)✅95.00.548915.0
YOLO26xPyTorch✅113.20.574837.4
YOLO26xONNX (MIGraphX)✅212.90.574827.1

Benchmark mit Ultralytics 8.4.165 (Tiefenschätzung mit 8.4.172)

Hinweis

Die Validierung für die obigen Benchmarks erfolgte mit einer Batchgröße von 1 auf den vollständigen Validierungssätzen, mit 640 für Objekterkennung, Segmentierung und Posenschätzung, 2048 für semantische Segmentierung, 768 für Tiefenschätzung, 224 für Klassifizierung und 1024 für OBB. Die Inferenzzeit umfasst weder die Vor- und Nachverarbeitung noch die einmalige Kompilierung mit MIGraphX.

Unterstützung auf einen Blick#

Die Unterstützung eines AMD-Produkts oder einer Laufzeitumgebung bedeutet nicht, dass alle AMD-Beschleuniger unterstützt werden. Diese Tabelle fasst den aktuellen Stand im Ultralytics-Python-Paket zusammen.

AMD-Produkt oder LaufzeitumgebungUnterstützungVerwendung oder Status
AMD Instinct und unterstützte Radeon GPUs mit ROCm✅Trainiere und validiere native PyTorch-Modelle und führe sie mit device=0 oder device=cuda:0 aus.
MIGraphX-Inferenz✅Führe exportierte ONNX-Modelle auf AMD GPUs über den MIGraphX-EP aus. Alle YOLO26-Aufgaben werden unterstützt.
ROCm mit mehreren GPUs✅Verwende device=0,1 oder device=[0, 1]. Die verteilte Ausführung nutzt den installierten PyTorch-ROCm-Stack.
Automatische gemischte Genauigkeit (AMP) unter ROCm⚠️Verfügbar, wenn die installierten PyTorch- und ROCm-Versionen die AMP-Prüfungen von Ultralytics bestehen. Verwende amp=False, falls sie nicht kompatibel sind.
AMD-Docker-Image✅latest-amd enthält ROCm PyTorch mit vorinstalliertem MIGraphX-EP.
Nativer MIGraphX-Export❌Exportiere nach ONNX mit format="onnx" und führe das Modell für die Inferenz auf einer AMD GPU mit dem MIGraphX-EP aus.
Windows DirectML❌Das Python-Paket bietet kein DirectML-Backend für Training oder Vorhersagen.
Ryzen AI NPU❌Keine native NPU-Integration; externe ONNX-/Vitis-AI-Workflows werden von der Community betreut.
AMD-Xilinx-Versal-AI-Edge-Gen-2-NPUs✅Exportiere mit format="xilinx"; siehe den AMD-Xilinx-Leitfaden.
AMD Xilinx Zynq, Kria, Versal AI Edge Gen 1❌Kein nativer Export; verwende die AMD-Vitis-AI-Workflows im AMD-Xilinx-Leitfaden.
AMD-CPUs✅ CPUVerwende device=cpu für die standardmäßige CPU-Ausführung, nicht für ein AMD-spezifisches Beschleunigungs-Backend.
Prüfe zuerst die AMD- und PyTorch-Kompatibilität

Die Verfügbarkeit von ROCm hängt von der konkreten GPU, dem Betriebssystem, der ROCm-Version und dem PyTorch-Build ab. Prüfe vor der Installation deine Hardware in der ROCm-Kompatibilitätsmatrix von AMD.

Zusammenfassung#

In dieser Anleitung hast du erfahren, wie du Ultralytics-YOLO26-Modelle auf AMD GPUs mit PyTorch ROCm und dem standardmäßigen Argument device=0 trainierst und sie anschließend für eine beschleunigte Inferenz über den MIGraphX-Ausführungsanbieter von ONNX Runtime nach ONNX exportierst. Das ONNX-Backend wählt MIGraphXExecutionProvider automatisch aus, speichert das kompilierte Programm für schnellere nachfolgende Ladevorgänge zwischen und unterstützt alle YOLO26-Aufgaben ohne Codeänderungen.

Weitere Bereitstellungsziele findest du auf der Integrationsübersicht. Mit dem Benchmark-Modus kannst du Exportformate vergleichen.

Häufig gestellte Fragen#

  • Ja. Installiere einen ROCm-Build von PyTorch wie unter Installation beschrieben. Trainiere dann .pt-Modelle mit device=0 oder verwende device=0,1 für mehrere GPUs. Das Training läuft über PyTorch ROCm und verwendet weder MIGraphX noch das ONNX-Plug-in. Beispiele findest du unter Mit PyTorch ROCm auf AMD GPUs trainieren.

  • Exportiere dein Modell nach ONNX und führe es anschließend mit device=0 auf einem ROCm-System aus. Ultralytics installiert das MIGraphX-Plug-in bei der ersten ONNX-Inferenz:

    Verwendung
    from ultralytics import YOLO
    
    # Nach ONNX exportieren
    model = YOLO("yolo26n.pt")
    model.export(format="onnx")  # erstellt 'yolo26n.onnx'
    
    # Inferenz auf der AMD GPU ausführen (MIGraphX-EP wird automatisch ausgewählt)
    onnx_model = YOLO("yolo26n.onnx")
    results = onnx_model.predict("https://ultralytics.com/images/bus.jpg", device=0)
  • Nein. Auf einem ROCm-System erkennt das Ultralytics-ONNX-Backend HIP, installiert und registriert das Plug-in onnxruntime-ep-migraphx und wählt automatisch MIGraphXExecutionProvider aus. Kann das Plug-in nicht installiert oder geladen werden, zum Beispiel mit einer älteren Python-Version als 3.11 oder auf ARM64, wird die Inferenz mit einer Warnung auf die CPU umgeleitet.

  • MIGraphX kompiliert den ONNX-Graphen in der ersten Sitzung zu einem optimierten Programm, was die anfängliche Ladezeit maßgeblich bestimmt. Ultralytics speichert das kompilierte Programm zwischen, sodass spätere Ladevorgänge desselben Modells die Neukompilierung überspringen. Im Hinweis zum Cache für kompilierte Programme findest du Angaben zu Speicherort und Größenbegrenzung.

  • Das installierte PyTorch-Paket ist wahrscheinlich ein CPU- oder CUDA-Build statt eines ROCm-Builds, oder die GPU wird vom aktiven ROCm-Stack nicht unterstützt. Installiere PyTorch wie unter Installation gezeigt über den ROCm-Wheel-Index von AMD neu, überprüfe, dass torch.version.hip nicht None ist, und bestätige die GPU anhand der ROCm-Kompatibilitätsmatrix von AMD. Stelle außerdem sicher, dass der Benutzer auf /dev/kfd und /dev/dri zugreifen kann, üblicherweise durch den Beitritt zu den Gruppen video und render.

  • Das ist erwartungsgemäß. PyTorch ROCm verwendet absichtlich dieselbe torch.cuda-API und CUDA-artige Gerätezeichenfolgen, um die Kompatibilität mit Python zu gewährleisten. Verwende device=0 oder device=cuda:0; das Modell wird weiterhin über HIP und ROCm auf der AMD-GPU ausgeführt.

  • Nicht über das Python-Paket. DirectML bietet kein Backend für Training oder Vorhersagen, und Ryzen-AI-NPUs sind über PyTorch ROCm nicht verfügbar. Community-Workflows können nach ONNX exportieren und die Modelle mit externen Ryzen-AI- oder Vitis-AI-Tools von AMD ausführen; diese Laufzeitumgebungen gehören jedoch nicht zum unterstützten Ausführungspfad von Ultralytics. Für eingebettete NPUs der AMD Versal AI Edge Series Gen 2 exportiere mit format="xilinx"; Informationen zu Zynq-, Kria- und Versal-AI-Edge-Geräten der ersten Generation findest du im AMD-Xilinx-Leitfaden.

  • Übergib den GPU-Index direkt, zum Beispiel device=1 für die zweite GPU, sowohl für PyTorch- als auch für MIGraphX-EP-Inferenz. Um einen Prozess oder Container auf bestimmte GPUs zu beschränken, setze HIP_VISIBLE_DEVICES (oder ROCR_VISIBLE_DEVICES für Container), zum Beispiel HIP_VISIBLE_DEVICES=2; die sichtbaren GPUs werden anschließend ab device=0 neu nummeriert.

Mitwirkende

Kommentare