Ultralytics YOLO27: Únete a la lista de espera.
Get Started

Entrenamiento e inferencia con GPU AMD y Ultralytics YOLO, ROCm y MIGraphX#

Solo Linux x86_64

Esta guía está dirigida a hosts Linux x86_64 que tengan instalado el controlador del kernel de GPU AMD (amdgpu); todos los comandos siguientes son para un shell de Linux. El proveedor de ejecución MIGraphX solo se publica como wheels para Linux x86_64 y Python 3.11 o posterior, por lo que Windows nativo no es compatible y WSL2 aún no se ha validado.

Ultralytics YOLO funciona en GPU AMD Instinct y Radeon compatibles mediante ROCm, la plataforma abierta de AMD para computación con GPU. Con una compilación de PyTorch para ROCm, puedes entrenar, validar y predecir con modelos .pt usando el mismo argumento device=0 que en cualquier otra GPU, sin cambiar el código.

Para la implementación, exporta el modelo entrenado a ONNX y ejecútalo mediante MIGraphX, el motor de AMD para optimizar grafos y realizar inferencias. El backend ONNX de Ultralytics detecta ROCm y selecciona automáticamente el MIGraphXExecutionProvider de ONNX Runtime, por lo que la misma llamada predict que funciona en GPU NVIDIA también funciona en GPU AMD. La integración continua programada de Ultralytics ejecuta la exportación ONNX y las inferencias MIGraphX para todas las tareas en hardware con GPU AMD.

Instalación#

Toda la pila de Python se instala mediante pip desde los índices de wheels de ROCm de AMD, por lo que no hacen falta paquetes apt ni acceso root para PyTorch, el complemento o las bibliotecas de ejecución de ROCm, siempre que el host ya tenga instalado el controlador del kernel de GPU AMD (amdgpu / /dev/kfd).

Instalación

Detecta la arquitectura de tu GPU (por ejemplo, gfx1151 en Strix Halo) e instala solo los kernels de PyTorch que necesita:

# 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 instala automáticamente onnx en la primera exportación ONNX. En la primera inferencia ONNX en un sistema ROCm, también instala el complemento proveedor de ejecución MIGraphX (onnxruntime-ep-migraphx) y las bibliotecas de ejecución MIGraphX que carga (migraphx-libs), fijadas a versiones probadas conjuntamente. El complemento solo se publica para Python 3.11 o posterior en Linux x86_64; en otras versiones de Python o arquitecturas, o si se usa YOLO_AUTOINSTALL=false sin tener instalado el complemento, la inferencia ONNX recurre a la CPU y muestra una advertencia. Para ver instrucciones detalladas y prácticas recomendadas, consulta nuestra guía de instalación de YOLO26; si tienes algún problema, consulta nuestra guía de problemas habituales.

Comprueba que PyTorch detecta la GPU AMD antes de entrenar o exportar:

import torch

print(torch.cuda.is_available())  # True en una instalación de ROCm funcional
print(torch.cuda.get_device_name(0))  # Nombre de la GPU AMD, por ejemplo, AMD Radeon 8060S
print(torch.version.hip)  # Versión de HIP de la compilación de PyTorch para ROCm; None en compilaciones para CUDA o CPU

Entrenar en GPU AMD con PyTorch ROCm#

El entrenamiento nativo, la validación y la predicción en modelos .pt se ejecutan en GPU AMD mediante PyTorch ROCm, independientemente de la ruta de inferencia MIGraphX que se describe a continuación. Instala una compilación de PyTorch para ROCm como se indica en Instalación y usa los mismos argumentos de dispositivo que en cualquier otra ejecución de entrenamiento de Ultralytics:

Por qué las GPU AMD aparecen como CUDA en Ultralytics

La compilación de PyTorch para ROCm usa HIP internamente, pero reutiliza deliberadamente las interfaces torch.cuda, por lo que torch.cuda.is_available() devuelve True y se accede a las GPU AMD con los identificadores estándar de CUDA. Usa device=0 o device=cuda:0 para las GPU AMD; rocm no es un tipo de dispositivo de PyTorch. Consulta la semántica de HIP de PyTorch para obtener más información.

Entrenamiento con ROCm
from ultralytics import YOLO

model = YOLO("yolo26n.pt")

# Entrena en la primera GPU AMD que PyTorch ROCm ponga a disposición
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=0)

# Entrena usando dos GPU AMD
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=[0, 1])

La validación y la predicción de modelos .pt 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=0
Precisión mixta en ROCm

Ultralytics activa AMP de forma predeterminada y la desactiva automáticamente si una comprobación previa al entrenamiento detecta que los resultados de precisión mixta difieren de los de precisión completa. El comportamiento de AMP en ROCm puede variar según las versiones de PyTorch y ROCm; si una ejecución sigue produciendo pérdidas NaN o un mAP de cero, entrena con amp=False:

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

Exportación e inferencia con MIGraphX#

ONNX Runtime es un motor de inferencia multiplataforma que ejecuta un único modelo ONNX en distintos backends de hardware mediante proveedores de ejecución conectables (EP). Cada EP asigna el grafo ONNX a un acelerador específico: CUDA para GPU NVIDIA, CoreML para Apple silicon y MIGraphX para GPU AMD con ROCm. MIGraphX se distribuye como el complemento onnxruntime-ep-migraphx y compila el grafo en un programa optimizado para tu GPU.

La inferencia MIGraphX utiliza la exportación ONNX estándar. Exporta el modelo a ONNX (format="onnx") y la inferencia de Ultralytics utilizará automáticamente el backend MIGraphXExecutionProvider para ejecutar el modelo ONNX en tu GPU AMD.

Características principales de la inferencia MIGraphX#

  • Selección automática del proveedor: En un host ROCm, el backend ONNX registra el complemento y selecciona MIGraphXExecutionProvider sin necesidad de cambiar el código. Si falta el complemento o no se puede cargar, la inferencia recurre a la CPU y muestra una advertencia.
  • Optimización del grafo: MIGraphX aplica fusión de operadores, planificación de memoria y selección de kernels optimizados para las arquitecturas de GPU AMD.
  • Enlace de E/S sin copias: Las entradas y salidas se enlazan directamente a los tensores de la GPU mediante el protocolo DLPack, lo que evita transferencias de ida y vuelta al host durante la inferencia.
  • Opciones de precisión: Ejecuta en FP32 o exporta un modelo ONNX FP16 para realizar inferencias con precisión reducida.
  • Artefacto portátil: Un único archivo .onnx funciona en CPU, GPU NVIDIA y GPU AMD, lo que te permite usar varias plataformas a partir de una sola exportación.
  • Implementación reproducible: Toda la pila (PyTorch ROCm, el complemento MIGraphX y sus bibliotecas) se instala mediante pip desde los índices de wheels de ROCm de AMD.

Tareas compatibles#

La inferencia MIGraphX admite las siete tareas de Ultralytics. La segmentación semántica y la estimación de profundidad solo están disponibles con YOLO26, la única familia que incluye esas cabezas.

TareaYOLOv8YOLO11YOLO26
Detectar✅✅✅
Segmentar✅✅✅
Semántica❌❌✅
Profundidad❌❌✅
Clasificar✅✅✅
Pose✅✅✅
OBB✅✅✅

Uso#

Antes de consultar las instrucciones de uso, echa un vistazo a la gama de modelos YOLO26 que ofrece Ultralytics. Así podrás elegir el modelo más adecuado para los requisitos de tu proyecto.

El formato ONNX admite los modos Exportar, Predecir y Validar. Para realizar inferencias y validaciones en una GPU AMD, necesitas un sistema ROCm con el complemento MIGraphX instalado. Exporta tu modelo y, después, carga el modelo exportado para ejecutar inferencias o validar su precisión en device=0.

Conflicto con onnxruntime-gpu

onnxruntime-gpu y el paquete estándar onnxruntime se instalan en el mismo módulo de Python onnxruntime, por lo que el paquete que se instale en último lugar sobrescribe al otro. Si desinstalas solo uno de ellos, el módulo queda inutilizable, y las versiones antiguas de onnxruntime-gpu pueden provocar errores en la inferencia con MIGraphX. Si una configuración anterior instaló onnxruntime-gpu, ejecuta pip uninstall -y onnxruntime-gpu onnxruntime y Ultralytics volverá a instalar el paquete estándar onnxruntime en la siguiente inferencia con ONNX.

Exportar
from ultralytics import YOLO

# Carga un modelo YOLO26
model = YOLO("yolo26n.pt")

# Exporta el modelo al formato ONNX
model.export(format="onnx")  # crea 'yolo26n.onnx'
Predecir
from ultralytics import YOLO

# Carga el modelo ONNX exportado y ejecuta la inferencia en una GPU AMD
model = YOLO("yolo26n.onnx")

# El proveedor de ejecución MIGraphX se selecciona automáticamente en ROCm
results = model.predict("https://ultralytics.com/images/bus.jpg", device=0)
Validar
from ultralytics import YOLO

# Carga el modelo ONNX exportado
model = YOLO("yolo26n.onnx")

# Valida la precisión en el conjunto de datos COCO8 en una GPU AMD
metrics = model.val(data="coco8.yaml", device=0)

Argumentos de exportación#

La inferencia con MIGraphX reutiliza los argumentos de exportación de ONNX. Estas son las opciones más relevantes para implementar en una GPU AMD:

ArgumentoTipoPredeterminadoDescripción
formatstr'onnx'Formato de destino del modelo exportado. Usa onnx para la inferencia con MIGraphX EP.
imgszint o tuple640Tamaño de imagen deseado para la entrada del modelo. Puede ser un entero para imágenes cuadradas o una tupla (height, width).
quantizeint o strNonePrecisión del modelo ONNX exportado: 16 (FP16) para inferencias con precisión reducida; 32/sin definir corresponde a FP32.
dynamicboolFalsePermite tamaños de entrada dinámicos. Las formas estáticas permiten que MIGraphX compile un programa especializado y habilite el enlace de E/S sin copias.
simplifyboolTrueSimplifica el grafo del modelo con onnxslim, lo que puede mejorar el rendimiento y la compatibilidad.
opsetintNoneVersión del conjunto de operaciones ONNX para garantizar la compatibilidad con distintos tiempos de ejecución. Si no se especifica, se usa la última versión compatible.
nmsbool, opcionalNoneSelecciona la salida sin procesar (None, predeterminada), NMS integrada (True) o el cabezal sin NMS (False). MIGraphX EP aún no admite la NMS integrada (True) (ROCm/AMDMIGraphX#5246.
batchint1Tamaño del lote de exportación o número máximo de imágenes que procesa simultáneamente el modelo exportado en el modo predict.
devicestrNoneDispositivo para exportar: GPU (device=0), CPU (device=cpu).

Para consultar la lista completa de argumentos de exportación, visita la integración de ONNX y la página de la documentación de Ultralytics sobre exportación.

Implementación en GPU AMD con MIGraphX#

Caché de programas compilados

MIGraphX EP compila el grafo durante la primera sesión, lo que determina la mayor parte del tiempo de carga inicial. Ultralytics guarda en caché el programa compilado para cada modelo en el directorio de configuración de Ultralytics, de modo que las cargas posteriores del mismo modelo omiten la recompilación. La caché conserva los 8 modelos utilizados más recientemente y elimina los más antiguos, por lo que no puede crecer sin límite. Define ORT_MIGRAPHX_CACHE_DIR para cambiar la ubicación y elimina el directorio de caché para forzar la recompilación tras actualizar ROCm o MIGraphX.

Tiempo de compilación

Ultralytics desactiva de forma predeterminada los kernels de convolución Winograd de MIGraphX (MIGRAPHX_DISABLE_WINOGRAD=1) para reducir el tiempo de compilación en frío en los grafos YOLO sin cambios medibles en la inferencia (ROCm/AMDMIGraphX#5234); define MIGRAPHX_DISABLE_WINOGRAD=0 para volver a activarlos.

Para disponer de un entorno listo para usar, Dockerfile-amd crea la imagen ultralytics/ultralytics:latest-amd con ROCm PyTorch y MIGraphX EP preinstalados. Consulta Uso de GPU en la guía de inicio rápido de Docker para ver las opciones docker run que permiten usar GPU AMD en el contenedor.

Pruebas de rendimiento#

El equipo de Ultralytics realizó los benchmarks de YOLO26 que aparecen a continuación en una GPU AMD Radeon 8060S (Ryzen AI Max+ PRO 395), comparando la velocidad y la precisión de PyTorch y ONNX con el proveedor de ejecución MIGraphX. Ambos formatos se ejecutan con precisión FP32 en la GPU: PyTorch a través de ROCm y ONNX a través de MIGraphX.

Rendimiento
ModeloFormatoEstadoTamaño (MB)metrics/mAP50-95(B)Tiempo de inferencia (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

Evaluado con Ultralytics 8.4.165 (estimación de profundidad con 8.4.172)

Nota

La validación de las pruebas comparativas anteriores se realizó con un tamaño de lote de 1 en los conjuntos de validación completos: a una resolución de 640 para detección, segmentación y estimación de pose; 2048 para segmentación semántica; 768 para estimación de profundidad; 224 para clasificación; y 1024 para OBB. El tiempo de inferencia no incluye el procesamiento previo/posterior ni la compilación única de MIGraphX.

Compatibilidad de un vistazo#

La compatibilidad con un producto o tiempo de ejecución de AMD no implica compatibilidad con todos los aceleradores AMD. Esta tabla resume el estado actual en el paquete de Python de Ultralytics.

Producto o tiempo de ejecución de AMDCompatibilidadUso o estado
AMD Instinct y GPU Radeon compatibles con ROCm✅Entrena, valida y ejecuta modelos PyTorch nativos con device=0 o device=cuda:0.
Inferencia con MIGraphX✅Ejecuta modelos ONNX exportados en GPU AMD mediante MIGraphX EP. Se admiten todas las tareas de YOLO26.
ROCm multigpu✅Usa device=0,1 o device=[0, 1]; la ejecución distribuida se basa en la pila ROCm de PyTorch 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.
Imagen Docker de AMD✅latest-amd incluye ROCm PyTorch con MIGraphX EP preinstalado.
Exportación nativa a MIGraphX❌Exporta a ONNX con format="onnx" y ejecútalo con MIGraphX EP para realizar inferencias en GPU AMD.
DirectML en Windows❌El paquete de Python no incluye ningún backend de entrenamiento o predicción de DirectML.
NPU Ryzen AI❌No hay integración nativa con NPU; los flujos de trabajo externos de ONNX/Vitis AI están gestionados por la comunidad.
NPU AMD Xilinx Versal AI Edge Gen 2✅Exporta con format="xilinx"; consulta la guía de AMD Xilinx.
AMD Xilinx Zynq, Kria, Versal AI Edge Gen 1❌No hay exportación nativa; usa los flujos de AMD Vitis AI de la guía de AMD Xilinx.
CPU AMD✅ CPUUsa device=cpu; ejecución estándar en CPU, sin aceleración específica de AMD.
Comprueba primero la compatibilidad de AMD y PyTorch

La disponibilidad de ROCm depende de la GPU concreta, el sistema operativo, la versión de ROCm y la compilación de PyTorch. Confirma que tu hardware sea compatible en la matriz de compatibilidad de ROCm de AMD antes de instalar.

Resumen#

En esta guía has aprendido a entrenar modelos Ultralytics YOLO26 en GPU AMD con PyTorch ROCm mediante el argumento estándar device=0 y, después, a exportarlos a ONNX para acelerar la inferencia con el proveedor de ejecución MIGraphX de ONNX Runtime. El backend de ONNX selecciona automáticamente MIGraphXExecutionProvider, almacena en caché el programa compilado para agilizar las cargas posteriores y admite todas las tareas de YOLO26 sin modificar el código.

Para otros destinos de implementación, consulta la página de la guía de integraciones y compara los formatos de exportación con el modo Benchmark.

Preguntas frecuentes#

  • Sí. Instala una compilación de PyTorch con ROCm, como se indica en Instalación, y después entrena modelos .pt con device=0, o usa device=0,1 para varias GPU. El entrenamiento se ejecuta mediante PyTorch ROCm y no utiliza MIGraphX ni el complemento de ONNX. Consulta Entrena en GPU AMD con PyTorch ROCm para ver ejemplos.

  • Exporta el modelo a ONNX y ejecútalo con device=0 en un sistema ROCm. Ultralytics instala el complemento MIGraphX durante la primera inferencia con ONNX:

    Uso
    from ultralytics import YOLO
    
    # Exporta a ONNX
    model = YOLO("yolo26n.pt")
    model.export(format="onnx")  # crea 'yolo26n.onnx'
    
    # Ejecuta la inferencia en la GPU AMD (MIGraphX EP se selecciona automáticamente)
    onnx_model = YOLO("yolo26n.onnx")
    results = onnx_model.predict("https://ultralytics.com/images/bus.jpg", device=0)
  • No. En un sistema ROCm, el backend ONNX de Ultralytics detecta HIP, instala y registra el complemento onnxruntime-ep-migraphx y selecciona automáticamente MIGraphXExecutionProvider. Si no se puede instalar o cargar el complemento, por ejemplo, en Python anterior a la versión 3.11 o en ARM64, la inferencia pasa a ejecutarse en la CPU y muestra una advertencia.

  • MIGraphX compila el grafo ONNX en un programa optimizado durante la primera sesión, lo que determina la mayor parte del tiempo de carga inicial. Ultralytics guarda en caché el programa compilado, por lo que las cargas posteriores del mismo modelo omiten la recompilación. Consulta la nota sobre la caché de programas compilados para conocer su ubicación y límite de tamaño.

  • Es probable que el paquete de PyTorch instalado sea una versión para CPU o CUDA, en lugar de una versión para ROCm, o que la GPU no sea compatible con la pila activa de ROCm. Reinstala PyTorch desde el índice de wheels de ROCm de AMD, como se muestra en Instalación, comprueba que torch.version.hip no sea None y confirma la GPU en la matriz de compatibilidad de ROCm de AMD. Comprueba también que el usuario pueda acceder a /dev/kfd y /dev/dri, normalmente añadiéndolo a los grupos video y render.

  • Es lo esperado. PyTorch ROCm reutiliza intencionadamente la API torch.cuda y las cadenas de dispositivo de estilo CUDA para mantener la compatibilidad con Python. Usa device=0 o device=cuda:0; el modelo sigue ejecutándose mediante HIP y ROCm en la GPU AMD.

  • No a través del paquete Python. DirectML no tiene un backend de entrenamiento ni de predicción, y las NPU Ryzen AI no están expuestas a través de PyTorch ROCm. Los flujos de trabajo de la comunidad pueden exportar a ONNX y ejecutarse con las herramientas externas Ryzen AI o Vitis AI de AMD, pero esos entornos de ejecución quedan fuera de la ruta de ejecución compatible con Ultralytics. Para las NPU integradas AMD Xilinx Versal AI Edge Series Gen 2, exporta con format="xilinx"; para Zynq, Kria y los dispositivos Versal AI Edge de primera generación, consulta la guía de AMD Xilinx.

  • Pasa directamente el índice de la GPU; por ejemplo, device=1 para la segunda GPU, tanto para PyTorch como para la inferencia con MIGraphX EP. Para limitar un proceso o contenedor a GPU concretas, define HIP_VISIBLE_DEVICES (o ROCR_VISIBLE_DEVICES para contenedores), por ejemplo, HIP_VISIBLE_DEVICES=2; las GPU visibles se renumeran a partir de device=0.

Colaboradores

Comentarios