Entrenamiento en GPU AMD con Ultralytics YOLO y ROCm#
Ultralytics admite el entrenamiento, la validación y la inferencia en GPU AMD compatibles mediante
PyTorch ROCm. PyTorch expone intencionadamente los dispositivos ROCm mediante la misma API de Python
torch.cuda que utiliza CUDA, por lo que Ultralytics no necesita un tipo de dispositivo rocm independiente para los modelos
nativos de PyTorch. Instala una compilación de PyTorch con ROCm y, a continuación, selecciona una GPU AMD con la sintaxis estándar device=0 o device=cuda:0.
AMD también ofrece tecnologías de inferencia independientes de PyTorch ROCm. La compatibilidad con un producto de AMD no implica compatibilidad con todos los tiempos de ejecución o aceleradores de AMD.
Compatibilidad de un vistazo#
Esta tabla describe el paquete de Python de Ultralytics utilizado para el entrenamiento, la validación, la exportación y la predicción.
| Producto o tiempo de ejecución de AMD | Compatibilidad de Ultralytics | Uso o estado |
|---|---|---|
| AMD Instinct y GPU Radeon compatibles con ROCm | ✅ | Entrena, valida y ejecuta modelos nativos de PyTorch con device=0 o device=cuda:0. |
| ROCm con varias GPU | ✅ | Usa device=0,1 o device=[0, 1]; la ejecución distribuida sigue la pila de PyTorch ROCm instalada. |
| Automatic Mixed Precision (AMP) de ROCm | ⚠️ | Disponible cuando las versiones instaladas de PyTorch y ROCm superan las comprobaciones de AMP de Ultralytics; usa amp=False si son incompatibles. |
| Exportación a ONNX | ✅ | La exportación es compatible, pero el archivo ONNX no proporciona por sí mismo un tiempo de ejecución acelerado para AMD. |
| Inferencia con MIGraphX | 🚧 | No está disponible en el paquete de Python actual; el trabajo de implementación se sigue en PR #24137. |
| Imagen Docker de AMD y CI con hardware de AMD | 🚧 | También se sigue en PR #24137 y no lo proporciona por sí sola la selección del dispositivo ROCm. |
| Windows DirectML | ❌ Python | El paquete de Python no incluye ningún backend de DirectML para entrenamiento o predicción. |
| NPU Ryzen AI | ❌ | No hay integración nativa de NPU en Ultralytics; los flujos de trabajo externos con ONNX/Vitis AI están gestionados por la comunidad. |
| CPU AMD | ✅ CPU | Usa device=cpu; se trata de una ejecución estándar en CPU, no de un backend de aceleración específico de AMD. |
La disponibilidad de ROCm depende de la GPU exacta, el sistema operativo, la versión de ROCm y la compilación de PyTorch. Confirma tu hardware en la matriz de compatibilidad de ROCm de AMD antes de instalarlo. Ultralytics no puede añadir compatibilidad para un dispositivo que la compilación de PyTorch ROCm instalada no exponga.
Por qué ROCm utiliza nombres de dispositivo de CUDA#
La compilación de PyTorch con ROCm utiliza HIP internamente, pero reutiliza deliberadamente las interfaces de torch.cuda. Por ejemplo,
torch.cuda.is_available(), torch.cuda.device_count() y torch.cuda.get_device_name() funcionan con GPU AMD compatibles.
Este diseño permite que la misma ruta de entrenamiento de Ultralytics sirva para NVIDIA CUDA y AMD ROCm sin duplicar el backend.
Consulta la semántica de HIP de PyTorch oficial para obtener más información.
En el paquete de Python, usa device=0 o device=cuda:0 para PyTorch ROCm. No uses device=rocm:0; rocm no es
un tipo de dispositivo de PyTorch.
Instala PyTorch ROCm#
-
Comprueba que tu sistema operativo y tu GPU aparecen en la matriz de compatibilidad de ROCm.
-
Utiliza el selector de instalación de PyTorch para elegir la compilación de ROCm que coincida con tu versión de ROCm instalada.
-
Instala Ultralytics después de PyTorch:
pip install ultralytics -
Comprueba que PyTorch detecta la GPU AMD:
import torch print(torch.cuda.is_available()) print(torch.cuda.get_device_name(0)) print(torch.version.hip)
torch.cuda.is_available() debería devolver True, el nombre del dispositivo debería identificar tu GPU AMD y torch.version.hip
debería indicar la versión de HIP proporcionada por la compilación de ROCm.
Entrena en una GPU AMD#
Usa los mismos argumentos de dispositivo que en el modo Train de Ultralytics estándar.
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
# Train on the first AMD GPU exposed by PyTorch ROCm
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=0)
# Train across two AMD GPUs
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=[0, 1])La validación y la predicción utilizan la misma selección de dispositivo:
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=0Compatibilidad con AMP#
Ultralytics activa AMP de forma predeterminada y compara los resultados de precisión completa y precisión mixta antes del entrenamiento. Si la comprobación
detecta resultados incompatibles, AMP se desactiva para evitar pérdidas NaN o entrenamientos con mAP cero. El comportamiento de AMP en ROCm puede cambiar
según las versiones de PyTorch y ROCm, así que usa amp=False al solucionar un fallo específico de la pila:
yolo detect train data=coco8.yaml model=yolo26n.pt device=0 amp=FalseFunciones aún no compatibles#
MIGraphX#
MIGraphX es el tiempo de ejecución de AMD para la optimización de grafos y la inferencia. La carga nativa de modelos MIGraphX no está incluida en el paquete de Python actual de Ultralytics. La implementación activa, el contenedor de AMD, las dependencias, las pruebas y la documentación se siguen conjuntamente en PR #24137. Hasta que ese trabajo se integre y reciba validación con hardware de AMD, la exportación de un modelo ONNX no debe describirse como compatibilidad nativa con MIGraphX en el paquete de Python.
DirectML#
El paquete de Python de Ultralytics no tiene ningún backend de DirectML para el entrenamiento o la predicción en Windows. DirectML es distinto de
ROCm, y un entorno ROCm operativo no habilita device=directml.
NPU Ryzen AI#
Las NPU Ryzen AI no se exponen mediante PyTorch ROCm y no son dispositivos nativos de Ultralytics. Los flujos de trabajo de la comunidad pueden exportar modelos YOLO a ONNX y ejecutarlos con las herramientas externas Ryzen AI o Vitis AI de AMD, pero ese tiempo de ejecución, la conversión y la compatibilidad del hardware quedan fuera de la ruta de ejecución compatible de Ultralytics.
Resumen#
Usa una compilación de PyTorch ROCm compatible con device=0 o device=cuda:0 para el entrenamiento, la validación y la
inferencia compatibles en GPU AMD. Trata MIGraphX, DirectML y NPU Ryzen AI como capacidades independientes: ninguna se habilita simplemente instalando
ROCm o exportando un modelo ONNX.
Preguntas frecuentes#
El paquete de PyTorch instalado puede ser una compilación para CPU o CUDA, o puede que la GPU no sea compatible con la pila de ROCm activa. Instala la compilación de ROCm correspondiente desde el selector de PyTorch y comprueba la GPU en la matriz de compatibilidad de AMD.
Es lo esperado. PyTorch ROCm utiliza intencionadamente la API
torch.cuday cadenas de dispositivo con el estilo de CUDA para mantener la compatibilidad con Python. El modelo sigue ejecutándose mediante HIP y ROCm en la GPU AMD.No. ONNX es un formato de modelo portable. La ejecución acelerada sigue requiriendo un tiempo de ejecución compatible, y los backends nativos de MIGraphX, DirectML y NPU Ryzen AI no están incluidos en el paquete de Python actual de Ultralytics.