Entraînement sur GPU AMD avec Ultralytics YOLO et ROCm#
Ultralytics prend en charge l’entraînement, la validation et l’inférence sur les GPU AMD compatibles via
PyTorch ROCm. PyTorch expose délibérément les appareils ROCm via la même
API Python torch.cuda que celle utilisée par CUDA. Ultralytics n’a donc pas besoin d’un type d’appareil rocm distinct pour les modèles PyTorch natifs. Installe une version de PyTorch compilée pour ROCm, puis sélectionne un GPU AMD avec la syntaxe standard device=0 ou device=cuda:0.
AMD propose également des technologies d’inférence distinctes de PyTorch ROCm. La prise en charge d’un produit AMD ne signifie pas que tous les environnements d’exécution ou accélérateurs AMD sont pris en charge.
Aperçu de la prise en charge#
Ce tableau décrit le package Python Ultralytics utilisé pour l’entraînement, la validation, l’exportation et la prédiction.
| Produit ou environnement d’exécution AMD | Prise en charge par Ultralytics | Utilisation ou état |
|---|---|---|
| AMD Instinct et GPU Radeon pris en charge avec ROCm | ✅ | Entraîne, valide et exécute des modèles PyTorch natifs avec device=0 ou device=cuda:0. |
| ROCm multi-GPU | ✅ | Utilise device=0,1 ou device=[0, 1] ; l’exécution distribuée dépend de la pile PyTorch ROCm installée. |
| Précision mixte automatique (AMP) de ROCm | ⚠️ | Disponible lorsque les versions installées de PyTorch et ROCm réussissent les vérifications AMP d’Ultralytics ; utilise amp=False en cas d’incompatibilité. |
| Exportation ONNX | ✅ | L’exportation est prise en charge, mais le fichier ONNX ne fournit pas à lui seul un environnement d’exécution accéléré par AMD. |
| Inférence MIGraphX | 🚧 | Non disponible dans le package Python actuel ; les travaux d’implémentation sont suivis dans PR #24137. |
| Image Docker AMD et CI sur matériel AMD | 🚧 | Également suivi dans PR #24137, ce n’est pas fourni par la seule sélection d’un appareil ROCm. |
| DirectML sous Windows | ❌ Python | Aucun backend DirectML pour l’entraînement ou la prédiction n’est disponible dans le package Python. |
| NPU Ryzen AI | ❌ | Aucune intégration native des NPU Ultralytics ; les workflows ONNX/Vitis AI externes sont gérés par la communauté. |
| CPU AMD | ✅ CPU | Utilise device=cpu ; il s’agit d’une exécution CPU standard, et non d’un backend d’accélération spécifique à AMD. |
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 installée. Vérifie ton matériel dans la matrice de compatibilité ROCm d’AMD avant l’installation. Ultralytics ne peut pas prendre en charge un appareil que la version de PyTorch ROCm installée n’expose pas.
Pourquoi ROCm utilise les noms d’appareils CUDA#
La version de PyTorch compilée pour ROCm utilise HIP en interne, mais réutilise délibérément les interfaces torch.cuda. Par exemple,
torch.cuda.is_available(), torch.cuda.device_count() et torch.cuda.get_device_name() fonctionnent avec les GPU AMD pris en charge.
Cette conception permet au même workflow d’entraînement Ultralytics de prendre en charge NVIDIA CUDA et AMD ROCm sans backend en double.
Consulte la documentation officielle sur la sémantique HIP de PyTorch pour en savoir plus.
Dans le package Python, utilise device=0 ou device=cuda:0 pour PyTorch ROCm. N’utilise pas device=rocm:0 ; rocm n’est pas un type d’appareil PyTorch.
Installer PyTorch ROCm#
-
Vérifie que ton système d’exploitation et ton GPU figurent dans la matrice de compatibilité ROCm.
-
Utilise le sélecteur d’installation PyTorch pour choisir la version ROCm correspondant à la version de ROCm installée.
-
Installe Ultralytics après PyTorch :
pip install ultralytics -
Vérifie que PyTorch détecte le GPU AMD :
import torch print(torch.cuda.is_available()) print(torch.cuda.get_device_name(0)) print(torch.version.hip)
torch.cuda.is_available() doit renvoyer True, le nom de l’appareil doit identifier ton GPU AMD et torch.version.hip
doit indiquer la version HIP fournie par la version ROCm.
Entraîner sur un GPU AMD#
Utilise les mêmes arguments d’appareil que pour le mode Train d’Ultralytics standard.
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
# Entraîner sur le premier GPU AMD exposé 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 utilisent la même sélection d’appareil :
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=0Compatibilité AMP#
Ultralytics active AMP par défaut et compare les résultats en précision complète et en précision mixte avant l’entraînement. Si la vérification
détecte des résultats incompatibles, AMP est désactivé pour éviter les pertes NaN ou un entraînement avec un mAP nul. Le comportement d’AMP avec ROCm peut varier
selon les versions de PyTorch et ROCm ; utilise amp=False pour diagnostiquer un problème propre à une pile donnée :
yolo detect train data=coco8.yaml model=yolo26n.pt device=0 amp=FalseFonctionnalités pas encore prises en charge#
MIGraphX#
MIGraphX est l’environnement d’exécution d’AMD pour l’optimisation de graphes et l’inférence. Le chargement natif de modèles MIGraphX n’est pas inclus dans le package Python Ultralytics actuel. L’implémentation en cours, le conteneur AMD, les dépendances, les tests et la documentation sont suivis ensemble dans PR #24137. Tant que ces travaux ne sont pas fusionnés et validés sur du matériel AMD, l’exportation d’un modèle ONNX ne doit pas être présentée comme une prise en charge native de MIGraphX dans le package Python.
DirectML#
Le package Python Ultralytics ne dispose d’aucun backend DirectML pour l’entraînement ou la prédiction sous Windows. DirectML est distinct de
ROCm, et un environnement ROCm fonctionnel n’active pas device=directml.
NPU Ryzen AI#
Les NPU Ryzen AI ne sont pas exposés par PyTorch ROCm et ne sont pas des appareils Ultralytics natifs. Les workflows communautaires peuvent exporter des modèles YOLO vers ONNX et les exécuter avec les outils externes Ryzen AI ou Vitis AI d’AMD, mais cet environnement d’exécution, la conversion et la compatibilité matérielle ne font pas partie du chemin d’exécution pris en charge par Ultralytics.
Résumé#
Pour l’entraînement, la validation et l’inférence sur les GPU AMD pris en charge, utilise une version compatible de PyTorch ROCm avec device=0 ou device=cuda:0. Considère MIGraphX, DirectML et le NPU Ryzen AI comme des fonctionnalités distinctes : aucune n’est activée par la simple installation de ROCm ou l’exportation d’un modèle ONNX.
FAQ#
Le package PyTorch installé peut être une version CPU ou CUDA, ou le GPU peut ne pas être pris en charge par la pile ROCm active. Installe la version ROCm correspondante à l’aide du sélecteur PyTorch et vérifie la compatibilité du GPU dans la matrice d’AMD.
C’est normal. PyTorch ROCm utilise délibérément l’API
torch.cudaet les chaînes d’appareil de style CUDA pour assurer la compatibilité avec Python. Le modèle s’exécute tout de même via HIP et ROCm sur le GPU AMD.Non. ONNX est un format de modèle portable. L’exécution accélérée nécessite toujours un environnement d’exécution compatible, et les backends natifs MIGraphX, DirectML et NPU Ryzen AI ne sont pas inclus dans le package Python Ultralytics actuel.