YOLO Vision 2026:

Entrenamiento de 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 a través de la misma API de Python torch.cuda que utiliza CUDA, por lo que Ultralytics no necesita un tipo de dispositivo rocm separado para los modelos nativos de PyTorch. Instala una compilación de PyTorch para 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 que están separadas de PyTorch ROCm. El soporte para un producto de AMD no implica soporte para todos los entornos de ejecución o aceleradores de AMD.

Resumen de soporte#

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 entorno de ejecución de AMDSoporte de UltralyticsUso o estado
AMD Instinct y GPU Radeon compatibles con ROCmEntrena, valida y ejecuta modelos nativos de PyTorch con device=0 o device=cuda:0.
ROCm con múltiples GPUUtiliza device=0,1 o device=[0, 1]; la ejecución distribuida sigue la pila de PyTorch ROCm instalada.
Precisión mixta automática (AMP) de ROCm⚠️Disponible cuando las versiones instaladas de PyTorch y ROCm superan las comprobaciones de AMP de Ultralytics; usa amp=False si no son compatibles.
Exportación a ONNXLa exportación es compatible, pero el archivo ONNX por sí solo no proporciona un entorno de ejecución acelerado por AMD.
Inferencia con MIGraphX🚧No disponible en el paquete de Python actual; el trabajo de implementación se realiza en el PR #24137.
Imagen de Docker de AMD y CI de hardware de AMD🚧También se realiza un seguimiento en el PR #24137, no proporcionado únicamente por la selección de dispositivos ROCm.
Windows DirectML❌ PythonNo hay un backend de entrenamiento o predicción de DirectML en el paquete de Python.
Ryzen AI NPUNo hay una integración nativa de NPU en Ultralytics; los flujos de trabajo externos de ONNX/Vitis AI son administrados por la comunidad.
CPU AMD✅ CPUUtiliza device=cpu; se trata de una ejecución estándar en CPU, no de un motor de aceleración específico para AMD.
Verifica primero la compatibilidad entre AMD y PyTorch

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 realizar la instalación. Ultralytics no puede añadir compatibilidad con un dispositivo que la compilación de PyTorch ROCm instalada no exponga.

Por qué ROCm utiliza nombres de dispositivos CUDA#

La compilación de PyTorch para 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 las GPU AMD compatibles. Este diseño permite que la misma ruta de entrenamiento de Ultralytics sirva para NVIDIA CUDA y AMD ROCm sin necesidad de un backend duplicado.

Consulta la semántica oficial de HIP en PyTorch para obtener más detalles.

Importante

En el paquete de Python, utiliza device=0 o device=cuda:0 para PyTorch ROCm. No utilices device=rocm:0; rocm no es un tipo de dispositivo de PyTorch.

Instalar PyTorch ROCm#

  1. Verifica que tu sistema operativo y tu GPU aparezcan en la matriz de compatibilidad de ROCm.

  2. Utiliza el selector de instalación de PyTorch para elegir la compilación de ROCm que coincida con tu versión de ROCm instalada.

  3. Instala Ultralytics después de PyTorch:

    pip install ultralytics
  4. Verifica que PyTorch detecte 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() debe devolver True, el nombre del dispositivo debe identificar tu GPU AMD y torch.version.hip debe informar de la versión de HIP proporcionada por la compilación de ROCm.

Entrenar en una GPU AMD#

Utiliza los mismos argumentos de dispositivo que en el modo de entrenamiento estándar de Ultralytics.

Entrenamiento con ROCm
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 dispositivos:

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

Compatibilidad con AMP#

Ultralytics activa AMP por defecto y compara los resultados de precisión completa y de precisión mixta antes del entrenamiento. Si la comprobación detecta resultados incompatibles, se desactiva AMP para evitar pérdidas de NaN o un entrenamiento con mAP cero. El comportamiento de AMP en ROCm puede cambiar con las versiones de PyTorch y ROCm, así que utiliza amp=False cuando soluciones un fallo específico de la pila:

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

Características aún no compatibles#

MIGraphX#

MIGraphX es el motor de inferencia y optimización de grafos de AMD. La carga de modelos nativos de 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 gestionan conjuntamente en el PR #24137. Hasta que ese trabajo se fusione y reciba la validación del 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 un backend de DirectML para el entrenamiento o la predicción en Windows. DirectML es distinto de ROCm, y un entorno ROCm que funcione no habilita device=directml.

Ryzen AI NPU#

Las NPU de Ryzen AI no se exponen a través de 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 dicho motor de ejecución, conversión y compatibilidad de hardware quedan fuera de la ruta de ejecución compatible de Ultralytics.

Solución de problemas#

¿Por qué torch.cuda.is_available() devuelve False en mi sistema AMD?#

Es posible que el paquete de PyTorch instalado sea una compilación para CPU o CUDA, o que la pila de ROCm activa no admita la GPU. Instala la compilación de ROCm correspondiente desde el selector de PyTorch y verifica la GPU con la matriz de compatibilidad de AMD.

¿Por qué Ultralytics dice CUDA cuando tengo una GPU AMD?#

Esto es lo esperado. PyTorch ROCm utiliza intencionadamente la API de torch.cuda y cadenas de dispositivos al estilo de CUDA por compatibilidad con Python. El modelo se sigue ejecutando a través de HIP y ROCm en la GPU AMD.

¿La exportación a ONNX habilita automáticamente MIGraphX o Ryzen AI?#

No. ONNX es un formato de modelo portátil. La ejecución acelerada sigue requiriendo un entorno de ejecución compatible, y los backends nativos para MIGraphX, DirectML y Ryzen AI NPU no están incluidos en el paquete actual de Python de Ultralytics.

Resumen#

Utiliza una compilación compatible de PyTorch ROCm con device=0 o device=cuda:0 para el entrenamiento, la validación y la inferencia en GPU AMD compatibles. Trata MIGraphX, DirectML y Ryzen AI NPU como capacidades independientes: ninguna de ellas se habilita simplemente instalando ROCm o exportando un modelo ONNX.

Colaboradores

Comentarios