Ultralytics YOLO27: Iscriviti alla lista d'attesa.
Get Started

Addestramento e inferenza su GPU AMD con Ultralytics YOLO, ROCm e MIGraphX#

Solo Linux x86_64

Questa guida è destinata agli host Linux x86_64 con il driver kernel per GPU AMD (amdgpu) installato; tutti i comandi riportati di seguito sono per una shell Linux. Il provider di esecuzione MIGraphX è distribuito solo come pacchetti wheel Linux x86_64 per Python 3.11 o versioni successive, quindi Windows nativo non è supportato e Windows Subsystem for Linux (WSL2) non è ancora stato convalidato.

Ultralytics YOLO funziona sulle GPU AMD Instinct e Radeon supportate tramite ROCm, lo stack di calcolo GPU open source di AMD. Con una build ROCm di PyTorch, puoi addestrare, convalidare ed eseguire predizioni con i modelli .pt usando lo stesso argomento device=0 di qualsiasi altra GPU, senza modificare il codice.

Per la distribuzione, esporta il modello addestrato in ONNX ed eseguilo tramite MIGraphX, il motore di AMD per l'ottimizzazione dei grafi e l'inferenza. Il backend ONNX di Ultralytics rileva ROCm e seleziona automaticamente il runtime ONNX MIGraphXExecutionProvider, così la stessa chiamata predict eseguita sulle GPU NVIDIA funziona anche sulle GPU AMD. Le esecuzioni pianificate dell'integrazione continua di Ultralytics effettuano l'esportazione ONNX e l'inferenza MIGraphX per ogni attività su hardware GPU AMD.

Installazione#

Lo stack Python si installa interamente tramite pip dagli indici wheel ROCm di AMD, quindi non servono pacchetti apt né l'accesso root per PyTorch, il plugin o le librerie runtime ROCm, a condizione che sull'host sia già installato il driver kernel per GPU AMD (amdgpu / /dev/kfd).

Installazione

Rileva l'architettura della GPU (ad esempio gfx1151 su Strix Halo) e installa solo i kernel PyTorch necessari:

# 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 installa automaticamente onnx alla prima esportazione ONNX. Alla prima inferenza ONNX su un sistema ROCm, installa anche il plugin provider di esecuzione MIGraphX (onnxruntime-ep-migraphx) e le librerie runtime MIGraphX caricate dal plugin (migraphx-libs), bloccando le versioni a quelle verificate per funzionare insieme. Il plugin è disponibile solo per Python 3.11 o versioni successive su Linux x86_64; con altre versioni di Python o architetture, oppure con YOLO_AUTOINSTALL=false e senza plugin installato, l'inferenza ONNX ripiega sulla CPU e mostra un avviso. Per istruzioni dettagliate e best practice, consulta la nostra guida all'installazione di YOLO26; se riscontri difficoltà, consulta la nostra guida ai problemi comuni.

Prima di addestrare o esportare, verifica che PyTorch rilevi la GPU AMD:

import torch

print(torch.cuda.is_available())  # Vero con un'installazione ROCm funzionante
print(torch.cuda.get_device_name(0))  # Nome della GPU AMD, ad es. AMD Radeon 8060S
print(torch.version.hip)  # Versione HIP della build ROCm di PyTorch, None nelle build CUDA o CPU

Addestramento su GPU AMD con PyTorch ROCm#

L'addestramento, la convalida e le predizioni native sui modelli .pt vengono eseguiti su GPU AMD tramite PyTorch ROCm, indipendentemente dal percorso di inferenza MIGraphX descritto di seguito. Installa una build ROCm di PyTorch come indicato in Installazione e usa gli stessi argomenti del dispositivo di qualsiasi altra esecuzione di addestramento Ultralytics:

Perché le GPU AMD sono indicate come CUDA in Ultralytics

La build ROCm di PyTorch usa internamente HIP, ma riutilizza intenzionalmente le interfacce torch.cuda, quindi torch.cuda.is_available() restituisce True e le GPU AMD vengono indicate con gli ID standard in stile CUDA. Usa device=0 o device=cuda:0 per le GPU AMD; rocm non è un tipo di dispositivo PyTorch. Per i dettagli, consulta la semantica HIP di PyTorch.

Addestramento ROCm
from ultralytics import YOLO

model = YOLO("yolo26n.pt")

# Addestra sulla prima GPU AMD esposta da PyTorch ROCm
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=0)

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

La convalida e le predizioni dei modelli .pt usano la stessa selezione del 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
Precisione mista su ROCm

Ultralytics abilita AMP per impostazione predefinita e lo disabilita automaticamente se un controllo preliminare all'addestramento rileva che i risultati a precisione mista divergono da quelli a precisione completa. Il comportamento di AMP su ROCm può variare in base alle versioni di PyTorch e ROCm; se l'esecuzione continua a produrre loss NaN o mAP pari a zero, addestra con amp=False:

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

Esportazione e inferenza con MIGraphX#

ONNX Runtime è un motore di inferenza multipiattaforma che esegue un singolo modello ONNX su diversi backend hardware tramite provider di esecuzione (EP) collegabili. Ogni EP mappa il grafo ONNX su un acceleratore specifico: CUDA per le GPU NVIDIA, CoreML per Apple silicon e MIGraphX per le GPU AMD con ROCm. MIGraphX è distribuito come plugin onnxruntime-ep-migraphx e compila il grafo in un programma ottimizzato per la tua GPU.

L'inferenza MIGraphX usa la normale esportazione ONNX. Esporta il modello in ONNX (format="onnx") e l'inferenza Ultralytics userà automaticamente il backend MIGraphXExecutionProvider per eseguire il modello ONNX sulla tua GPU AMD.

Funzionalità principali dell'inferenza MIGraphX#

  • Selezione automatica del provider: su un host ROCm, il backend ONNX registra il plugin e seleziona MIGraphXExecutionProvider senza richiedere modifiche al codice. Se il plugin manca o non si carica, l'inferenza ripiega sulla CPU e mostra un avviso.
  • Ottimizzazione del grafo: MIGraphX applica la fusione degli operatori, la gestione della memoria e la selezione dei kernel ottimizzate per le architetture GPU AMD.
  • Associazione IO a copia zero: input e output vengono associati direttamente ai tensori GPU tramite il protocollo DLPack, evitando trasferimenti avanti e indietro dall'host durante l'inferenza.
  • Opzioni di precisione: esegui in FP32 oppure esporta un modello ONNX FP16 per l'inferenza a precisione ridotta.
  • Artefatto portabile: un singolo file .onnx funziona su CPU, GPU NVIDIA e GPU AMD, consentendoti di distribuire su più piattaforme partendo da una sola esportazione.
  • Distribuzione riproducibile: l'intero stack (PyTorch ROCm, il plugin MIGraphX e le relative librerie) si installa tramite pip dagli indici wheel ROCm di AMD.

Attività supportate#

L'inferenza MIGraphX supporta tutte e sette le attività Ultralytics. La segmentazione semantica e la stima della profondità sono disponibili solo con YOLO26, l'unica famiglia che include queste teste.

AttivitàYOLOv8YOLO11YOLO26
Rilevamento✅✅✅
Segmentazione✅✅✅
Semantica❌❌✅
Profondità❌❌✅
Classificazione✅✅✅
Stima della posa✅✅✅
OBB✅✅✅

Utilizzo#

Prima di approfondire le istruzioni per l'uso, dai un'occhiata alla gamma di modelli YOLO26 offerti da Ultralytics. Ti aiuterà a scegliere il modello più adatto ai requisiti del tuo progetto.

Il formato ONNX supporta le modalità Export, Predict e Validate. Per eseguire inferenza e convalida su una GPU AMD serve un sistema ROCm con il plugin MIGraphX installato. Esporta il modello, quindi carica il modello esportato per eseguire inferenze o convalidarne la precisione su device=0.

Conflitto con onnxruntime-gpu

onnxruntime-gpu e il pacchetto standard onnxruntime vengono installati nello stesso modulo Python onnxruntime, quindi quello installato per ultimo sovrascrive l'altro. Disinstallarne solo uno lascia il modulo non funzionante, mentre le versioni precedenti di onnxruntime-gpu possono causare un arresto anomalo durante l'inferenza con MIGraphX. Se una configurazione precedente ha installato onnxruntime-gpu, esegui pip uninstall -y onnxruntime-gpu onnxruntime e Ultralytics reinstallerà il pacchetto standard onnxruntime alla successiva inferenza ONNX.

Esporta
from ultralytics import YOLO

# Carica un modello YOLO26
model = YOLO("yolo26n.pt")

# Esporta il modello in formato ONNX
model.export(format="onnx")  # crea 'yolo26n.onnx'
Predici
from ultralytics import YOLO

# Carica il modello ONNX esportato ed esegui l'inferenza su una GPU AMD
model = YOLO("yolo26n.onnx")

# Il provider di esecuzione MIGraphX viene selezionato automaticamente su ROCm
results = model.predict("https://ultralytics.com/images/bus.jpg", device=0)
Convalida
from ultralytics import YOLO

# Carica il modello ONNX esportato
model = YOLO("yolo26n.onnx")

# Convalida l'accuratezza sul dataset COCO8 su una GPU AMD
metrics = model.val(data="coco8.yaml", device=0)

Argomenti di esportazione#

L'inferenza con MIGraphX riutilizza gli argomenti di esportazione ONNX. Le opzioni più rilevanti per la distribuzione su GPU AMD sono:

ArgomentoTipoPredefinitoDescrizione
formatstr'onnx'Formato di destinazione per il modello esportato. Usa onnx per l'inferenza con MIGraphX EP.
imgszint o tuple640Dimensione desiderata dell'immagine di input del modello. Può essere un intero per immagini quadrate oppure una tupla (height, width).
quantizeint o strNonePrecisione del modello ONNX esportato: 16 (FP16) per un'inferenza a precisione ridotta; 32/non impostato corrisponde a FP32.
dynamicboolFalseConsente dimensioni di input dinamiche. Le forme statiche permettono a MIGraphX di compilare un programma specializzato e abilitano il binding IO a copia zero.
simplifyboolTrueSemplifica il grafo del modello con onnxslim, migliorando potenzialmente prestazioni e compatibilità.
opsetintNoneVersione dell'opset ONNX per la compatibilità con diversi runtime. Se non è impostata, viene usata la versione più recente supportata.
nmsbool, facoltativoNoneSeleziona l'output grezzo (None, predefinito), NMS integrata (True) oppure la head senza NMS (False). La NMS integrata (True) non è ancora supportata da MIGraphX EP (ROCm/AMDMIGraphX#5246).
batchint1Dimensione del batch di esportazione, ovvero il numero massimo di immagini che il modello esportato elabora contemporaneamente in modalità predict.
devicestrNoneDispositivo per l'esportazione: GPU (device=0), CPU (device=cpu).

Per l'elenco completo degli argomenti di esportazione, consulta l'integrazione ONNX e la pagina della documentazione Ultralytics sull'esportazione.

Distribuzione su GPU AMD con MIGraphX#

Cache dei programmi compilati

MIGraphX EP compila il grafo nella prima sessione, incidendo soprattutto sul tempo di caricamento iniziale. Ultralytics memorizza nella cache il programma compilato per ogni modello nella directory di configurazione di Ultralytics, così i caricamenti successivi dello stesso modello non richiedono una nuova compilazione. La cache conserva gli 8 modelli usati più di recente ed elimina quelli meno recenti, quindi non può crescere senza limiti. Imposta ORT_MIGRAPHX_CACHE_DIR per sostituire il percorso e cancella la directory della cache per forzare una nuova compilazione dopo l'aggiornamento di ROCm o MIGraphX.

Tempo di compilazione

Per impostazione predefinita, Ultralytics disabilita i kernel di convoluzione Winograd di MIGraphX (MIGRAPHX_DISABLE_WINOGRAD=1) per ridurre i tempi di compilazione a freddo sui grafi YOLO senza modificare in modo misurabile l'inferenza (ROCm/AMDMIGraphX#5234); imposta MIGRAPHX_DISABLE_WINOGRAD=0 per riattivarli.

Per un ambiente pronto all'uso, Dockerfile-amd crea l'immagine ultralytics/ultralytics:latest-amd con PyTorch ROCm e MIGraphX EP preinstallati. Consulta Uso delle GPU nella guida rapida di Docker per conoscere i flag docker run che rendono accessibili le GPU AMD al container.

Benchmark#

I benchmark di YOLO26 riportati di seguito sono stati eseguiti dal team Ultralytics su una GPU AMD Radeon 8060S (Ryzen AI Max+ PRO 395), confrontando velocità e accuratezza tra PyTorch e ONNX con il provider di esecuzione MIGraphX. Entrambi i formati vengono eseguiti sulla GPU con precisione FP32: PyTorch tramite ROCm e ONNX tramite MIGraphX.

Prestazioni
ModelloFormatoStatoDimensione (MB)metrics/mAP50-95(B)Tempo di inferenza (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

Testato con Ultralytics 8.4.165 (stima della profondità con 8.4.172)

Nota

La validazione per i benchmark sopra indicati è stata eseguita con una dimensione del batch pari a 1 sugli interi set di validazione, a 640 per il rilevamento, la segmentazione e la stima della posa, a 2048 per la segmentazione semantica, a 768 per la stima della profondità, a 224 per la classificazione e a 1024 per OBB. Il tempo di inferenza non include la pre/post-elaborazione né la compilazione una tantum di MIGraphX.

Panoramica del supporto#

Il supporto per un prodotto o runtime AMD non implica il supporto per tutti gli acceleratori AMD. Questa tabella riassume lo stato attuale nel pacchetto Python Ultralytics.

Prodotto o runtime AMDSupportoUso o stato
AMD Instinct e GPU Radeon supportate con ROCm✅Addestra, convalida ed esegui modelli PyTorch nativi con device=0 o device=cuda:0.
Inferenza MIGraphX✅Esegui modelli ONNX esportati su GPU AMD tramite MIGraphX EP. Sono supportate tutte le attività YOLO26.
ROCm multi-GPU✅Usa device=0,1 o device=[0, 1]; l'esecuzione distribuita segue lo stack PyTorch ROCm installato.
Precisione mista automatica ROCm (AMP)⚠️Disponibile quando le versioni installate di PyTorch e ROCm superano i controlli AMP di Ultralytics; usa amp=False se non sono compatibili.
Immagine Docker AMD✅latest-amd include PyTorch ROCm con MIGraphX EP preinstallato.
Esportazione nativa MIGraphX❌Esporta in ONNX con format="onnx" ed eseguilo su MIGraphX EP per l'inferenza su GPU AMD.
Windows DirectML❌Il pacchetto Python non include un backend DirectML per l'addestramento o la predizione.
NPU Ryzen AI❌Nessuna integrazione NPU nativa; i flussi di lavoro ONNX/Vitis AI esterni sono gestiti dalla community.
NPU AMD Xilinx Versal AI Edge Gen 2✅Esporta con format="xilinx"; consulta la guida AMD Xilinx.
AMD Xilinx Zynq, Kria, Versal AI Edge Gen 1❌Esportazione nativa non disponibile; usa i flussi AMD Vitis AI descritti nella guida AMD Xilinx.
CPU AMD✅ CPUUsa device=cpu; esecuzione CPU standard, senza un backend di accelerazione specifico per AMD.
Verifica prima la compatibilità tra AMD e PyTorch

La disponibilità di ROCm dipende dalla GPU specifica, dal sistema operativo, dalla versione di ROCm e dalla build di PyTorch. Prima dell'installazione, verifica la compatibilità del tuo hardware nella matrice di compatibilità ROCm di AMD.

Riepilogo#

In questa guida hai imparato ad addestrare i modelli Ultralytics YOLO26 su GPU AMD con PyTorch ROCm usando l'argomento standard device=0, quindi a esportarli in ONNX per un'inferenza accelerata tramite il provider di esecuzione MIGraphX di ONNX Runtime. Il backend ONNX seleziona automaticamente MIGraphXExecutionProvider, memorizza nella cache il programma compilato per velocizzare i caricamenti successivi e supporta tutte le attività YOLO26 senza modifiche al codice.

Per altre destinazioni di distribuzione, consulta la pagina della guida alle integrazioni e confronta i formati di esportazione con la modalità Benchmark.

Domande frequenti#

  • Sì. Installa una build ROCm di PyTorch come indicato nella sezione Installazione, quindi addestra i modelli .pt con device=0 oppure usa device=0,1 per più GPU. L'addestramento viene eseguito tramite PyTorch ROCm e non usa MIGraphX né il plugin ONNX. Consulta Addestramento su GPU AMD con PyTorch ROCm per alcuni esempi.

  • Esporta il modello in ONNX, quindi eseguilo con device=0 su un sistema ROCm. Ultralytics installa il plugin MIGraphX alla prima inferenza ONNX:

    Utilizzo
    from ultralytics import YOLO
    
    # Esporta in ONNX
    model = YOLO("yolo26n.pt")
    model.export(format="onnx")  # crea 'yolo26n.onnx'
    
    # Esegui l'inferenza sulla GPU AMD (MIGraphX EP viene selezionato automaticamente)
    onnx_model = YOLO("yolo26n.onnx")
    results = onnx_model.predict("https://ultralytics.com/images/bus.jpg", device=0)
  • No. Su un sistema ROCm, il backend ONNX di Ultralytics rileva HIP, installa e registra il plugin onnxruntime-ep-migraphx e seleziona automaticamente MIGraphXExecutionProvider. Se non è possibile installare o caricare il plugin, ad esempio con una versione di Python precedente alla 3.11 o su ARM64, l'inferenza passa alla CPU con un avviso.

  • MIGraphX compila il grafo ONNX in un programma ottimizzato durante la prima sessione, incidendo soprattutto sul tempo di caricamento iniziale. Ultralytics memorizza nella cache il programma compilato, così i caricamenti successivi dello stesso modello non richiedono una nuova compilazione. Consulta la nota sulla cache dei programmi compilati per conoscere il percorso e il limite di dimensione.

  • Il pacchetto PyTorch installato è probabilmente una build CPU o CUDA anziché una build ROCm, oppure la GPU non è supportata dallo stack ROCm attivo. Reinstalla PyTorch dall'indice di wheel ROCm di AMD come illustrato in Installazione, verifica che torch.version.hip non sia None e controlla che la GPU sia presente nella matrice di compatibilità ROCm di AMD. Assicurati anche che l'utente possa accedere a /dev/kfd e /dev/dri, in genere entrando nei gruppi video e render.

  • È un comportamento previsto. PyTorch ROCm riutilizza intenzionalmente l'API torch.cuda e le stringhe dei dispositivi in stile CUDA per garantire la compatibilità con Python. Usa device=0 o device=cuda:0; il modello viene comunque eseguito tramite HIP e ROCm sulla GPU AMD.

  • Non tramite il pacchetto Python. DirectML non dispone di un backend per l'addestramento o la predizione, e le NPU Ryzen AI non sono accessibili tramite PyTorch ROCm. I flussi di lavoro della community possono esportare in ONNX ed eseguire i modelli con gli strumenti esterni Ryzen AI o Vitis AI di AMD, ma questi runtime non rientrano nel percorso di esecuzione supportato da Ultralytics. Per le NPU AMD Xilinx Versal AI Edge Series Gen 2 embedded, esporta con format="xilinx"; per i dispositivi Zynq, Kria e Versal AI Edge di prima generazione, consulta la guida AMD Xilinx.

  • Passa direttamente l'indice della GPU, ad esempio device=1 per la seconda GPU, sia per PyTorch sia per l'inferenza MIGraphX EP. Per limitare un processo o un container a GPU specifiche, imposta HIP_VISIBLE_DEVICES (o ROCR_VISIBLE_DEVICES per i container), ad esempio HIP_VISIBLE_DEVICES=2; le GPU visibili verranno rinumerate a partire da device=0.

Collaboratori

Commenti