Ultralytics YOLO27 : Rejoins la liste d’attente.
Get Started

Entraînement et inférence sur GPU AMD avec Ultralytics YOLO, ROCm et MIGraphX#

Linux x86_64 uniquement

Ce guide s’adresse aux hôtes Linux x86_64 sur lesquels le pilote du noyau GPU AMD (amdgpu) est installé, et toutes les commandes ci-dessous sont destinées à un shell Linux. Le fournisseur d’exécution MIGraphX est publié uniquement sous forme de paquets wheel Linux x86_64 pour Python 3.11 ou une version ultérieure ; Windows en mode natif n’est donc pas pris en charge, et le sous-système Windows pour Linux (WSL2) n’a pas encore été validé.

Ultralytics YOLO fonctionne sur les GPU AMD Instinct et les GPU Radeon pris en charge via ROCm, la pile de calcul GPU ouverte d’AMD. Avec une version de PyTorch compilée pour ROCm, tu peux entraîner, valider et effectuer des prédictions avec les modèles .pt en utilisant le même argument device=0 que sur n’importe quel autre GPU, sans modifier le code.

Pour le déploiement, exporte le modèle entraîné au format ONNX et exécute-le avec MIGraphX, le moteur d’optimisation de graphes et d’inférence d’AMD. Le backend ONNX d’Ultralytics détecte ROCm et sélectionne automatiquement l’environnement d’exécution ONNX MIGraphXExecutionProvider, de sorte que le même appel predict qui s’exécute sur les GPU NVIDIA fonctionne aussi sur les GPU AMD. L’intégration continue planifiée d’Ultralytics effectue l’exportation ONNX et l’inférence MIGraphX pour chaque tâche sur du matériel GPU AMD.

Installation#

La pile Python s’installe entièrement via pip à partir des index de paquets wheel ROCm d’AMD ; aucun paquet apt ni accès root n’est donc nécessaire pour PyTorch, le plug-in ou les bibliothèques d’exécution ROCm, à condition que le pilote du noyau GPU AMD (amdgpu / /dev/kfd) soit déjà installé sur l’hôte.

Installation

Détecte l’architecture de ton GPU (par exemple gfx1151 sur Strix Halo) et installe uniquement les noyaux PyTorch nécessaires :

# 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 installe automatiquement onnx lors de la première exportation ONNX. Lors de la première inférence ONNX sur un système ROCm, Ultralytics installe également le plug-in du fournisseur d’exécution MIGraphX (onnxruntime-ep-migraphx) ainsi que les bibliothèques d’exécution MIGraphX qu’il charge (migraphx-libs), dans des versions testées ensemble. Le plug-in est publié uniquement pour Python 3.11 ou une version ultérieure sur Linux x86_64 ; avec d’autres versions de Python ou architectures, ou avec YOLO_AUTOINSTALL=false sans plug-in installé, l’inférence ONNX bascule sur le CPU avec un avertissement. Pour obtenir des instructions détaillées et connaître les bonnes pratiques, consulte notre guide d’installation de YOLO26 ; si tu rencontres des difficultés, consulte notre guide des problèmes courants.

Vérifie que PyTorch détecte le GPU AMD avant l’entraînement ou l’exportation :

import torch

print(torch.cuda.is_available())  # Vrai avec une installation ROCm fonctionnelle
print(torch.cuda.get_device_name(0))  # Nom du GPU AMD, par exemple AMD Radeon 8060S
print(torch.version.hip)  # Version HIP de la compilation PyTorch ROCm, None avec les compilations CUDA ou CPU

Entraîner sur des GPU AMD avec PyTorch ROCm#

L’entraînement, la validation et la prédiction en mode natif sur les modèles .pt s’exécutent sur les GPU AMD via PyTorch ROCm, indépendamment du chemin d’inférence MIGraphX présenté ci-dessous. Installe une version de PyTorch compilée pour ROCm comme indiqué dans la section Installation, puis utilise les mêmes arguments de périphérique que pour n’importe quelle exécution d’entraînement Ultralytics :

Pourquoi les GPU AMD sont-ils identifiés comme CUDA dans Ultralytics ?

La version de PyTorch compilée pour ROCm utilise HIP en interne, mais réutilise délibérément les interfaces torch.cuda ; ainsi, torch.cuda.is_available() renvoie True et les GPU AMD sont désignés à l’aide d’identifiants standard de type CUDA. Utilise device=0 ou device=cuda:0 pour les GPU AMD ; rocm n’est pas un type de périphérique PyTorch. Consulte la page sur la sémantique HIP de PyTorch pour en savoir plus.

Entraînement ROCm
from ultralytics import YOLO

model = YOLO("yolo26n.pt")

# Entraîner sur le premier GPU AMD détecté par PyTorch ROCm
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=0)

# Entraîner sur deux GPU AMD
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=[0, 1])

La validation et la prédiction des modèles .pt utilisent la même sélection de périphérique :

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
Précision mixte sur ROCm

Ultralytics active AMP par défaut et la désactive automatiquement si une vérification préalable à l’entraînement détecte que les résultats en précision mixte divergent de ceux en pleine précision. Le comportement d’AMP avec ROCm peut varier selon les versions de PyTorch et de ROCm ; si une exécution produit toujours des pertes NaN ou un mAP nul, entraîne avec amp=False :

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

Exportation et inférence avec MIGraphX#

ONNX Runtime est un moteur d’inférence multiplateforme qui exécute un même modèle ONNX sur de nombreux backends matériels via des fournisseurs d’exécution (EP) enfichables. Chaque EP projette le graphe ONNX sur un accélérateur spécifique : CUDA pour les GPU NVIDIA, CoreML pour les puces Apple et MIGraphX pour les GPU AMD avec ROCm ; ce dernier est fourni sous forme de plug-in onnxruntime-ep-migraphx et compile le graphe en un programme optimisé pour ton GPU.

L’inférence MIGraphX utilise l’exportation ONNX standard. Exporte le modèle au format ONNX (format="onnx") et l’inférence Ultralytics utilisera automatiquement le backend MIGraphXExecutionProvider pour exécuter le modèle ONNX sur ton GPU AMD.

Principales fonctionnalités de l’inférence MIGraphX#

  • Sélection automatique du fournisseur : sur un hôte ROCm, le backend ONNX enregistre le plug-in et sélectionne MIGraphXExecutionProvider sans modification du code. Si le plug-in est absent ou ne se charge pas, l’inférence bascule sur le CPU avec un avertissement.
  • Optimisation du graphe : MIGraphX applique la fusion d’opérateurs, la planification de la mémoire et la sélection de noyaux optimisées pour les architectures GPU AMD.
  • Liaison IO sans copie : les entrées et sorties sont liées directement aux tenseurs GPU via le protocole DLPack, ce qui évite les allers-retours par l’hôte pendant l’inférence.
  • Options de précision : exécute en FP32 ou exporte un modèle ONNX FP16 pour une inférence en précision réduite.
  • Artefact portable : un seul fichier .onnx fonctionne sur les CPU, les GPU NVIDIA et les GPU AMD, ce qui te permet de cibler plusieurs plateformes avec une seule exportation.
  • Déploiement reproductible : toute la pile (PyTorch ROCm, le plug-in MIGraphX et ses bibliothèques) s’installe via pip à partir des index de paquets wheel ROCm d’AMD.

Tâches prises en charge#

L’inférence MIGraphX prend en charge les sept tâches Ultralytics. La segmentation sémantique et l’estimation de la profondeur sont uniquement disponibles avec YOLO26, la seule famille proposant ces têtes.

TâcheYOLOv8YOLO11YOLO26
Détecter✅✅✅
Segmenter✅✅✅
Sémantique❌❌✅
Profondeur❌❌✅
Classifier✅✅✅
Pose✅✅✅
OBB✅✅✅

Utilisation#

Avant de passer aux instructions d’utilisation, pense à découvrir la gamme de modèles YOLO26 proposés par Ultralytics. Cela t’aidera à choisir le modèle le mieux adapté aux exigences de ton projet.

Le format ONNX prend en charge les modes Export, Prédiction et Validation. Pour effectuer l’inférence et la validation sur un GPU AMD, il faut un système ROCm sur lequel le plug-in MIGraphX est installé. Exporte ton modèle, puis charge le modèle exporté pour effectuer l’inférence ou valider sa précision sur device=0.

Conflit avec onnxruntime-gpu

onnxruntime-gpu et le package standard onnxruntime s’installent dans le même module Python onnxruntime : celui qui est installé en dernier écrase l’autre. Désinstaller un seul des deux rend le module inutilisable, et les anciennes versions onnxruntime-gpu peuvent faire planter l’inférence MIGraphX. Si une configuration antérieure a installé onnxruntime-gpu, exécute pip uninstall -y onnxruntime-gpu onnxruntime ; Ultralytics réinstalle le package standard onnxruntime lors de la prochaine inférence ONNX.

Export
from ultralytics import YOLO

# Charger un modèle YOLO26
model = YOLO("yolo26n.pt")

# Exporter le modèle au format ONNX
model.export(format="onnx")  # crée « yolo26n.onnx »
Prédiction
from ultralytics import YOLO

# Charger le modèle ONNX exporté et exécuter l’inférence sur un GPU AMD
model = YOLO("yolo26n.onnx")

# Le fournisseur d’exécution MIGraphX est sélectionné automatiquement sur ROCm
results = model.predict("https://ultralytics.com/images/bus.jpg", device=0)
Valider
from ultralytics import YOLO

# Charger le modèle ONNX exporté
model = YOLO("yolo26n.onnx")

# Valider la précision sur le jeu de données COCO8 sur un GPU AMD
metrics = model.val(data="coco8.yaml", device=0)

Arguments d’exportation#

L’inférence MIGraphX réutilise les arguments d’exportation ONNX. Voici les options les plus pertinentes pour le déploiement sur GPU AMD :

ArgumentTypeValeur par défautDescription
formatstr'onnx'Format cible du modèle exporté. Utilise onnx pour l’inférence avec le fournisseur d’exécution MIGraphX.
imgszint ou tuple640Taille d’image souhaitée pour l’entrée du modèle. Peut être un entier pour les images carrées ou un tuple (height, width).
quantizeint ou strNonePrécision du modèle ONNX exporté : 16 (FP16) pour une inférence à précision réduite ; 32/non défini correspond à FP32.
dynamicboolFalseAutorise les tailles d’entrée dynamiques. Les formes statiques permettent à MIGraphX de compiler un programme spécialisé et d’activer la liaison d’E/S sans copie.
simplifyboolTrueSimplifie le graphe du modèle avec onnxslim, ce qui peut améliorer les performances et la compatibilité.
opsetintNoneVersion de l’opset ONNX pour assurer la compatibilité avec différents moteurs d’exécution. Si elle n’est pas définie, la dernière version prise en charge est utilisée.
nmsbool, facultatifNoneSélectionne la sortie brute (None, par défaut), le NMS intégré (True) ou la tête sans NMS (False). Le NMS intégré (True) n’est pas encore pris en charge par le fournisseur d’exécution MIGraphX (ROCm/AMDMIGraphX#5246).
batchint1Taille de lot à l’exportation, ou nombre maximal d’images que le modèle exporté traite simultanément en mode predict.
devicestrNonePériphérique d’exportation : GPU (device=0), CPU (device=cpu).

Pour consulter la liste complète des arguments d’exportation, voir l’intégration ONNX et la page de la documentation Ultralytics sur l’exportation.

Déploiement sur des GPU AMD avec MIGraphX#

Cache des programmes compilés

Le fournisseur d’exécution MIGraphX compile le graphe lors de la première session, ce qui représente l’essentiel du temps de chargement initial. Ultralytics met en cache le programme compilé pour chaque modèle dans le répertoire de configuration Ultralytics, afin que les chargements ultérieurs du même modèle évitent une nouvelle compilation. Le cache conserve les 8 modèles les plus récemment utilisés et supprime les plus anciens : sa taille est donc limitée. Définis ORT_MIGRAPHX_CACHE_DIR pour remplacer l’emplacement, et supprime le répertoire du cache pour forcer une nouvelle compilation après la mise à niveau de ROCm ou de MIGraphX.

Temps de compilation

Par défaut, Ultralytics désactive les noyaux de convolution Winograd de MIGraphX (MIGRAPHX_DISABLE_WINOGRAD=1) afin de réduire le temps de compilation à froid sur les graphes YOLO, sans changement mesurable de l’inférence (ROCm/AMDMIGraphX#5234) ; définis MIGRAPHX_DISABLE_WINOGRAD=0 pour les réactiver.

Pour disposer d’un environnement prêt à l’emploi, Dockerfile-amd crée l’image ultralytics/ultralytics:latest-amd, où PyTorch ROCm et le fournisseur d’exécution MIGraphX sont préinstallés. Consulte la section Utiliser des GPU du guide de démarrage rapide Docker pour connaître les options docker run qui rendent les GPU AMD accessibles au conteneur.

Benchmarks#

Les benchmarks YOLO26 ci-dessous ont été réalisés par l’équipe Ultralytics sur un GPU AMD Radeon 8060S (Ryzen AI Max+ PRO 395), en comparant la vitesse et la précision de PyTorch et ONNX avec le fournisseur d’exécution MIGraphX. Les deux formats s’exécutent sur le GPU en précision FP32 : PyTorch via ROCm et ONNX via MIGraphX.

Performances
ModèleFormatStatutTaille (Mo)metrics/mAP50-95(B)Temps d’inférence (ms/im)
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

Évalué avec Ultralytics 8.4.165 (estimation de profondeur avec 8.4.172)

Remarque

La validation des benchmarks ci-dessus a été effectuée avec une taille de lot de 1 sur les ensembles de validation complets, à une résolution de 640 pour la détection, la segmentation et l’estimation de pose, de 2048 pour la segmentation sémantique, de 768 pour l’estimation de profondeur, de 224 pour la classification et de 1024 pour l’OBB. Le temps d’inférence n’inclut pas le prétraitement, le post-traitement ni la compilation ponctuelle de MIGraphX.

Aperçu de la prise en charge#

La prise en charge d’un produit ou d’un environnement d’exécution AMD ne signifie pas que tous les accélérateurs AMD sont pris en charge. Ce tableau résume l’état actuel dans le package Python Ultralytics.

Produit ou environnement d’exécution AMDPrise en chargeUtilisation ou état
AMD Instinct et GPU Radeon compatibles avec ROCm✅Entraîne, valide et exécute des modèles PyTorch natifs avec device=0 ou device=cuda:0.
Inférence MIGraphX✅Exécute des modèles ONNX exportés sur des GPU AMD via le fournisseur d’exécution MIGraphX. Toutes les tâches YOLO26 sont prises en charge.
ROCm multi-GPU✅Utilise device=0,1 ou device=[0, 1] ; l’exécution distribuée s’appuie sur la pile PyTorch ROCm installée.
Précision mixte automatique (AMP) de ROCm⚠️Disponible lorsque les versions de PyTorch et de ROCm installées passent les vérifications AMP d’Ultralytics ; utilise amp=False en cas d’incompatibilité.
Image Docker AMD✅latest-amd fournit PyTorch ROCm avec le fournisseur d’exécution MIGraphX préinstallé.
Export natif MIGraphX❌Exporte au format ONNX avec format="onnx", puis exécute le modèle avec le fournisseur d’exécution MIGraphX pour l’inférence sur GPU AMD.
DirectML sous Windows❌Le package Python ne fournit aucun moteur d’entraînement ou de prédiction DirectML.
NPU Ryzen AI❌Aucune intégration native avec un NPU ; les workflows ONNX/Vitis AI externes sont gérés par la communauté.
NPU AMD Xilinx Versal AI Edge Gen 2✅Exporte avec format="xilinx" ; consulte le guide AMD Xilinx.
AMD Xilinx Zynq, Kria, Versal AI Edge Gen 1❌Pas d’export natif ; utilise les workflows AMD Vitis AI présentés dans le guide AMD Xilinx.
CPU AMD✅ CPUUtilise device=cpu ; exécution CPU standard, sans moteur d’accélération propre à AMD.
Vérifie d’abord la compatibilité d’AMD et de PyTorch

La disponibilité de ROCm dépend du GPU exact, du système d’exploitation, de la version de ROCm et de la version de PyTorch. Vérifie la compatibilité de ton matériel dans la matrice de compatibilité ROCm d’AMD avant l’installation.

Résumé#

Dans ce guide, tu as appris à entraîner des modèles Ultralytics YOLO26 sur des GPU AMD avec PyTorch ROCm à l’aide de l’argument standard device=0, puis à les exporter au format ONNX pour accélérer l’inférence avec le fournisseur d’exécution MIGraphX d’ONNX Runtime. Le backend ONNX sélectionne automatiquement MIGraphXExecutionProvider, met le programme compilé en cache pour accélérer les chargements suivants et prend en charge toutes les tâches YOLO26 sans modification du code.

Pour découvrir d’autres cibles de déploiement, consulte le guide des intégrations et compare les formats d’exportation avec le mode Benchmark.

FAQ#

  • Oui. Installe une version de PyTorch compilée pour ROCm, comme indiqué dans la section Installation, puis entraîne des modèles .pt avec device=0, ou utilise device=0,1 pour plusieurs GPU. L’entraînement s’effectue via PyTorch ROCm et n’utilise ni MIGraphX ni le plug-in ONNX. Consulte Entraîner sur des GPU AMD avec PyTorch ROCm pour des exemples.

  • Exporte ton modèle au format ONNX, puis exécute-le avec device=0 sur un système ROCm. Ultralytics installe le plug-in MIGraphX lors de la première inférence ONNX :

    Utilisation
    from ultralytics import YOLO
    
    # Exporter au format ONNX
    model = YOLO("yolo26n.pt")
    model.export(format="onnx")  # crée « yolo26n.onnx »
    
    # Exécuter l’inférence sur le GPU AMD (fournisseur d’exécution MIGraphX sélectionné automatiquement)
    onnx_model = YOLO("yolo26n.onnx")
    results = onnx_model.predict("https://ultralytics.com/images/bus.jpg", device=0)
  • Non. Sur un système ROCm, le backend ONNX d’Ultralytics détecte HIP, installe et enregistre le plug-in onnxruntime-ep-migraphx, puis sélectionne automatiquement MIGraphXExecutionProvider. Si le plug-in ne peut pas être installé ou chargé, par exemple avec une version de Python antérieure à 3.11 ou sur ARM64, l’inférence bascule sur le CPU avec un avertissement.

  • MIGraphX compile le graphe ONNX en un programme optimisé lors de la première session, ce qui représente l’essentiel du temps de chargement initial. Ultralytics met le programme compilé en cache afin que les chargements ultérieurs du même modèle évitent une nouvelle compilation. Consulte la note sur le cache des programmes compilés pour connaître son emplacement et sa limite de taille.

  • Le package PyTorch installé est probablement une version CPU ou CUDA plutôt qu’une version ROCm, ou le GPU n’est pas pris en charge par la pile ROCm active. Réinstalle PyTorch depuis l’index de wheels ROCm d’AMD, comme indiqué dans Installation, vérifie que torch.version.hip n’est pas None, et confirme la compatibilité du GPU dans la matrice de compatibilité ROCm d’AMD. Vérifie également que l’utilisateur peut accéder à /dev/kfd et /dev/dri, généralement en rejoignant les groupes video et render.

  • C’est normal. PyTorch ROCm réutilise volontairement l’API torch.cuda et les chaînes de périphérique de style CUDA pour assurer la compatibilité avec Python. Utilise device=0 ou device=cuda:0 ; le modèle s’exécute toujours via HIP et ROCm sur le GPU AMD.

  • Pas avec le package Python. DirectML ne dispose d’aucun backend d’entraînement ou de prédiction, et les NPU Ryzen AI ne sont pas exposés par PyTorch ROCm. Les workflows communautaires peuvent exporter vers ONNX et exécuter le modèle avec les outils externes Ryzen AI ou Vitis AI d’AMD, mais ces environnements d’exécution ne font pas partie du parcours d’exécution Ultralytics pris en charge. Pour les NPU embarqués AMD Xilinx Versal AI Edge Series Gen 2, exporte avec format="xilinx" ; pour les appareils Zynq, Kria et Versal AI Edge de première génération, consulte le guide AMD Xilinx.

  • Indique directement l’index du GPU, par exemple device=1 pour le deuxième GPU, aussi bien pour PyTorch que pour l’inférence avec MIGraphX EP. Pour limiter un processus ou un conteneur à certains GPU, définis HIP_VISIBLE_DEVICES (ou ROCR_VISIBLE_DEVICES pour les conteneurs), par exemple HIP_VISIBLE_DEVICES=2 ; les GPU visibles sont alors renumérotés à partir de device=0.

Contributeurs

Commentaires