Ultralytics YOLO27: Inscreve-te na lista de espera.
Get Started

Treino e inferência em GPU AMD com Ultralytics YOLO, ROCm e MIGraphX#

Apenas Linux x86_64

Este guia destina-se a anfitriões Linux x86_64 com o controlador de kernel de GPU AMD (amdgpu) instalado, e todos os comandos abaixo são para uma shell Linux. O fornecedor de execução MIGraphX é publicado apenas como pacotes wheel Linux x86_64 para Python 3.11 ou posterior, pelo que o Windows nativo não é compatível e o Subsistema Windows para Linux (WSL2) ainda não foi validado.

O Ultralytics YOLO funciona em GPUs AMD Instinct e Radeon compatíveis através do ROCm, a pilha aberta de computação para GPU da AMD. Com uma compilação PyTorch para ROCm, podes treinar, validar e fazer previsões com modelos .pt usando o mesmo argumento device=0 que em qualquer outra GPU, sem alterações ao código.

Para a implementação, exporta o modelo treinado para ONNX e executa-o através do MIGraphX, o motor de otimização de grafos e inferência da AMD. O backend ONNX do Ultralytics deteta o ROCm e seleciona automaticamente o MIGraphXExecutionProvider do ONNX Runtime, pelo que a mesma chamada predict que funciona em GPUs NVIDIA também funciona em GPUs AMD. A integração contínua agendada do Ultralytics executa a exportação ONNX e a inferência MIGraphX para cada tarefa em hardware de GPU AMD.

Instalação#

A pilha Python é instalada inteiramente através de pip a partir dos índices de pacotes wheel ROCm da AMD, pelo que não são necessários pacotes apt nem acesso root para o PyTorch, o plugin ou as bibliotecas de runtime ROCm, desde que o anfitrião já tenha instalado o controlador de kernel de GPU AMD (amdgpu / /dev/kfd).

Instalação

Deteta a arquitetura da tua GPU (por exemplo, gfx1151 no Strix Halo) e instala apenas os kernels PyTorch de que precisa:

# 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

O Ultralytics instala onnx automaticamente na primeira exportação ONNX. Na primeira inferência ONNX num sistema ROCm, também instala o plugin do fornecedor de execução MIGraphX (onnxruntime-ep-migraphx) e as bibliotecas de runtime MIGraphX que este carrega (migraphx-libs), com versões fixadas e testadas em conjunto. O plugin só é publicado para Python 3.11 ou posterior em Linux x86_64; noutras versões de Python ou arquiteturas, ou com YOLO_AUTOINSTALL=false e sem o plugin instalado, a inferência ONNX recorre à CPU e apresenta um aviso. Para instruções detalhadas e boas práticas, consulta o nosso guia de instalação do YOLO26; se tiveres dificuldades, consulta o nosso guia de problemas comuns.

Confirma que o PyTorch deteta a GPU AMD antes de treinar ou exportar:

import torch

print(torch.cuda.is_available())  # Verdadeiro numa instalação ROCm funcional
print(torch.cuda.get_device_name(0))  # Nome da GPU AMD, por exemplo, AMD Radeon 8060S
print(torch.version.hip)  # Versão HIP da compilação PyTorch para ROCm, None em compilações CUDA ou CPU

Treinar em GPUs AMD com PyTorch ROCm#

O treino, a validação e a previsão nativos em modelos .pt são executados em GPUs AMD através do PyTorch ROCm, independentemente do fluxo de inferência MIGraphX descrito abaixo. Instala uma compilação PyTorch para ROCm conforme indicado em Instalação e usa os mesmos argumentos de dispositivo que em qualquer outra execução de treino do Ultralytics:

Porque é que as GPUs AMD são identificadas como CUDA no Ultralytics

A compilação PyTorch para ROCm usa internamente HIP, mas reutiliza deliberadamente as interfaces torch.cuda, pelo que torch.cuda.is_available() devolve True e as GPUs AMD são identificadas com IDs padrão ao estilo CUDA. Usa device=0 ou device=cuda:0 para GPUs AMD; rocm não é um tipo de dispositivo PyTorch. Consulta a semântica de HIP do PyTorch para mais informações.

Treino ROCm
from ultralytics import YOLO

model = YOLO("yolo26n.pt")

# Treinar na primeira GPU AMD disponibilizada pelo PyTorch ROCm
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=0)

# Treinar em duas GPUs AMD
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=[0, 1])

A validação e a previsão de modelos .pt usam a mesma seleção 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
Precisão mista no ROCm

O Ultralytics ativa o AMP por predefinição e desativa-o automaticamente se uma verificação antes do treino detetar que os resultados de precisão mista divergem dos de precisão total. O comportamento do AMP no ROCm pode variar consoante as versões do PyTorch e do ROCm; por isso, se uma execução continuar a produzir perdas NaN ou mAP zero, treina com amp=False:

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

Exportação e inferência com MIGraphX#

O ONNX Runtime é um motor de inferência multiplataforma que executa um único modelo ONNX em muitos backends de hardware através de fornecedores de execução (EPs) conectáveis. Cada EP mapeia o grafo ONNX para um acelerador específico: CUDA para GPUs NVIDIA, CoreML para Apple silicon e MIGraphX para GPUs AMD com ROCm. O MIGraphX é fornecido como o plugin onnxruntime-ep-migraphx e compila o grafo num programa otimizado para a tua GPU.

A inferência MIGraphX usa a exportação ONNX padrão. Exporta o modelo para ONNX (format="onnx") e a inferência do Ultralytics usará automaticamente o backend MIGraphXExecutionProvider para executar o modelo ONNX na tua GPU AMD.

Principais funcionalidades da inferência MIGraphX#

  • Seleção automática do fornecedor: num anfitrião ROCm, o backend ONNX regista o plugin e seleciona MIGraphXExecutionProvider sem alterações ao código. Se o plugin estiver em falta ou não for carregado, a inferência recorre à CPU e apresenta um aviso.
  • Otimização do grafo: o MIGraphX aplica fusão de operadores, planeamento de memória e seleção de kernels otimizados para arquiteturas de GPU AMD.
  • Vinculação de E/S sem cópia: as entradas e saídas são associadas diretamente a tensores da GPU através do protocolo DLPack, evitando transferências de e para o host durante a inferência.
  • Opções de precisão: executa em FP32 ou exporta um modelo ONNX FP16 para inferência com precisão reduzida.
  • Artefacto portátil: um único ficheiro .onnx funciona em CPUs, GPUs NVIDIA e GPUs AMD, permitindo-te usar várias plataformas a partir de uma única exportação.
  • Implementação reproduzível: toda a pilha (PyTorch ROCm, o plugin MIGraphX e as respetivas bibliotecas) é instalada através de pip a partir dos índices de pacotes wheel ROCm da AMD.

Tarefas suportadas#

A inferência MIGraphX é compatível com as sete tarefas do Ultralytics. A segmentação semântica e a estimativa de profundidade só estão disponíveis com YOLO26, a única família que inclui esses cabeçalhos.

TarefaYOLOv8YOLO11YOLO26
Detetar✅✅✅
Segmentar✅✅✅
Semântica❌❌✅
Profundidade❌❌✅
Classificar✅✅✅
Pose✅✅✅
OBB✅✅✅

Uso#

Antes de consultares as instruções de utilização, não te esqueças de ver a variedade de modelos YOLO26 disponibilizados pelo Ultralytics. Isto vai ajudar-te a escolher o modelo mais adequado aos requisitos do teu projeto.

O formato ONNX é compatível com os modos Export, Predict e Validate. A inferência e a validação numa GPU AMD requerem um sistema ROCm com o plugin MIGraphX instalado. Exporta o teu modelo e, em seguida, carrega o modelo exportado para executar inferências ou validar a sua precisão em device=0.

Conflito com onnxruntime-gpu

onnxruntime-gpu e o pacote padrão onnxruntime são instalados no mesmo módulo Python onnxruntime, portanto aquele que for instalado por último substitui o outro. Desinstalar apenas um deles deixa o módulo avariado, e versões mais antigas de onnxruntime-gpu podem causar falhas na inferência com MIGraphX. Se uma configuração anterior tiver instalado onnxruntime-gpu, executa pip uninstall -y onnxruntime-gpu onnxruntime, e o Ultralytics reinstala o onnxruntime padrão na próxima inferência ONNX.

Exportar
from ultralytics import YOLO

# Carrega um modelo YOLO26
model = YOLO("yolo26n.pt")

# Exporta o modelo para o formato ONNX
model.export(format="onnx")  # cria 'yolo26n.onnx'
Prever
from ultralytics import YOLO

# Carrega o modelo ONNX exportado e executa a inferência numa GPU AMD
model = YOLO("yolo26n.onnx")

# O provedor de execução MIGraphX é selecionado automaticamente no ROCm
results = model.predict("https://ultralytics.com/images/bus.jpg", device=0)
Validar
from ultralytics import YOLO

# Carrega o modelo ONNX exportado
model = YOLO("yolo26n.onnx")

# Valida a precisão no conjunto de dados COCO8 numa GPU AMD
metrics = model.val(data="coco8.yaml", device=0)

Argumentos de exportação#

A inferência MIGraphX reutiliza os argumentos de exportação ONNX. As opções mais relevantes para a implementação em GPU AMD são:

ArgumentoTipoPadrãoDescrição
formatstr'onnx'Formato de destino do modelo exportado. Usa onnx para inferência com MIGraphX EP.
imgszint ou tuple640Tamanho de imagem pretendido para a entrada do modelo. Pode ser um número inteiro para imagens quadradas ou uma tupla (height, width).
quantizeint ou strNonePrecisão do modelo ONNX exportado: 16 (FP16) para inferência com precisão reduzida; 32/não definido corresponde a FP32.
dynamicboolFalsePermite tamanhos de entrada dinâmicos. As formas estáticas permitem que o MIGraphX compile um programa especializado e ativam a vinculação de E/S sem cópia.
simplifyboolTrueSimplifica o grafo do modelo com onnxslim, podendo melhorar o desempenho e a compatibilidade.
opsetintNoneVersão do opset ONNX para compatibilidade com diferentes runtimes. Se não for definida, usa a versão mais recente compatível.
nmsbool, opcionalNoneSeleciona a saída bruta (None, predefinição), o NMS incorporado (True) ou a cabeça sem NMS (False). O NMS incorporado (True) ainda não é compatível com o MIGraphX EP (ROCm/AMDMIGraphX#5246).
batchint1Tamanho do lote de exportação, ou o número máximo de imagens que o modelo exportado processa em simultâneo no modo predict.
devicestrNoneDispositivo para a exportação: GPU (device=0), CPU (device=cpu).

Para consultar a lista completa de argumentos de exportação, vê a integração ONNX e a página da documentação do Ultralytics sobre exportação.

Implementação em GPUs AMD com MIGraphX#

Cache de programas compilados

O MIGraphX EP compila o grafo na primeira sessão, o que representa a maior parte do tempo de carregamento inicial. O Ultralytics armazena em cache o programa compilado para cada modelo no diretório de configuração do Ultralytics, para que os carregamentos seguintes do mesmo modelo não precisem de o recompilar. O cache mantém os 8 modelos usados mais recentemente e elimina os mais antigos, pelo que não pode crescer indefinidamente. Define ORT_MIGRAPHX_CACHE_DIR para substituir a localização e elimina o diretório de cache para forçar a recompilação após atualizares o ROCm ou o MIGraphX.

Tempo de compilação

Por predefinição, o Ultralytics desativa os kernels de convolução Winograd do MIGraphX (MIGRAPHX_DISABLE_WINOGRAD=1) para reduzir o tempo de compilação a frio em grafos YOLO sem alterar de forma mensurável a inferência (ROCm/AMDMIGraphX#5234); define MIGRAPHX_DISABLE_WINOGRAD=0 para os reativar.

Para obter um ambiente pronto a executar, Dockerfile-amd cria a imagem ultralytics/ultralytics:latest-amd com PyTorch ROCm e o MIGraphX EP pré-instalados. Consulta Utilizar GPUs no Guia de início rápido do Docker para ver as flags docker run que disponibilizam GPUs AMD ao contentor.

Benchmarks#

As avaliações comparativas do YOLO26 abaixo foram realizadas pela equipa do Ultralytics numa GPU AMD Radeon 8060S (Ryzen AI Max+ PRO 395), comparando a velocidade e a precisão entre PyTorch e ONNX com o provedor de execução MIGraphX. Ambos os formatos são executados na GPU com precisão FP32: PyTorch através do ROCm e ONNX através do MIGraphX.

Desempenho
ModeloFormatoStatusTamanho (MB)metrics/mAP50-95(B)Tempo de inferência (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

Avaliado com Ultralytics 8.4.165 (estimativa de profundidade com 8.4.172)

Nota

A validação dos benchmarks acima foi feita com tamanho de lote 1 nos conjuntos completos de validação, a 640 para deteção, segmentação e estimativa de pose, 2048 para segmentação semântica, 768 para estimativa de profundidade, 224 para classificação e 1024 para OBB. O tempo de inferência não inclui o pré/pós-processamento nem a compilação única do MIGraphX.

Resumo da compatibilidade#

A compatibilidade com um produto ou runtime AMD não implica compatibilidade com todos os aceleradores AMD. Esta tabela resume o estado atual no pacote Python do Ultralytics.

Produto ou runtime AMDCompatibilidadeUtilização ou estado
AMD Instinct e GPUs Radeon compatíveis com ROCm✅Treina, valida e executa modelos PyTorch nativos com device=0 ou device=cuda:0.
Inferência MIGraphX✅Executa modelos ONNX exportados em GPUs AMD através do MIGraphX EP. Todas as tarefas do YOLO26 são compatíveis.
ROCm com várias GPUs✅Usa device=0,1 ou device=[0, 1]; a execução distribuída depende da stack ROCm do PyTorch instalada.
Precisão mista automática (AMP) do ROCm⚠️Disponível quando as versões instaladas do PyTorch e do ROCm passam nas verificações AMP do Ultralytics; usa amp=False se forem incompatíveis.
Imagem Docker AMD✅latest-amd inclui PyTorch ROCm com o MIGraphX EP pré-instalado.
Exportação nativa para MIGraphX❌Exporta para ONNX com format="onnx" e executa no MIGraphX EP para fazer inferência numa GPU AMD.
Windows DirectML❌O pacote Python não tem backend de treino ou previsão DirectML.
NPU Ryzen AI❌Sem integração nativa com NPU; os fluxos de trabalho externos com ONNX/Vitis AI são geridos pela comunidade.
NPUs AMD Xilinx Versal AI Edge Gen 2✅Exporte com format="xilinx"; consulte o guia AMD Xilinx.
AMD Xilinx Zynq, Kria, Versal AI Edge Gen 1❌Não há exportação nativa; use os fluxos AMD Vitis AI descritos no guia AMD Xilinx.
CPUs AMD✅ CPUUsa device=cpu; execução padrão em CPU, sem backend de aceleração específico da AMD.
Verifica primeiro a compatibilidade entre AMD e PyTorch

A disponibilidade do ROCm depende da GPU exata, do sistema operativo, da versão do ROCm e da compilação do PyTorch. Confirma a compatibilidade do teu hardware na matriz de compatibilidade do ROCm da AMD antes de instalar.

Resumo#

Neste guia, aprendeste a treinar modelos Ultralytics YOLO26 em GPUs AMD com PyTorch ROCm usando o argumento padrão device=0 e, em seguida, a exportá-los para ONNX para acelerar a inferência através do provedor de execução MIGraphX do ONNX Runtime. O backend ONNX seleciona automaticamente MIGraphXExecutionProvider, armazena em cache o programa compilado para acelerar carregamentos posteriores e é compatível com todas as tarefas do YOLO26 sem exigir alterações ao código.

Para outros destinos de implementação, consulta a página do guia de integrações e compara os formatos de exportação com o modo de avaliação comparativa.

Perguntas frequentes#

  • Sim. Instala uma compilação do PyTorch com ROCm, conforme explicado em Instalação, e depois treina modelos .pt com device=0 ou usa device=0,1 para várias GPUs. O treino é executado através do PyTorch ROCm e não utiliza o MIGraphX nem o plug-in ONNX. Consulta Treinar em GPUs AMD com PyTorch ROCm para ver exemplos.

  • Exporta o modelo para ONNX e executa-o com device=0 num sistema ROCm. O Ultralytics instala o plug-in MIGraphX na primeira inferência ONNX:

    Uso
    from ultralytics import YOLO
    
    # Exporta para ONNX
    model = YOLO("yolo26n.pt")
    model.export(format="onnx")  # cria 'yolo26n.onnx'
    
    # Executa a inferência na GPU AMD (MIGraphX EP selecionado automaticamente)
    onnx_model = YOLO("yolo26n.onnx")
    results = onnx_model.predict("https://ultralytics.com/images/bus.jpg", device=0)
  • Não. Num sistema ROCm, o backend ONNX do Ultralytics deteta o HIP, instala e regista o plug-in onnxruntime-ep-migraphx e seleciona automaticamente MIGraphXExecutionProvider. Se não for possível instalar ou carregar o plug-in, por exemplo, numa versão do Python anterior à 3.11 ou em ARM64, a inferência recorre à CPU e apresenta um aviso.

  • O MIGraphX compila o grafo ONNX num programa otimizado durante a primeira sessão, o que representa a maior parte do tempo de carregamento inicial. O Ultralytics armazena em cache o programa compilado, pelo que os carregamentos seguintes do mesmo modelo não precisam de o recompilar. Consulta a nota sobre o cache de programas compilados para saber a localização e o limite de tamanho.

  • O pacote PyTorch instalado provavelmente é uma versão para CPU ou CUDA, e não para ROCm, ou a GPU não é compatível com a pilha ROCm ativa. Reinstala o PyTorch a partir do índice de wheels ROCm da AMD, conforme mostrado em Instalação, verifica se torch.version.hip não é None e confirma se a GPU está na matriz de compatibilidade do ROCm da AMD. Verifica também se o utilizador pode aceder a /dev/kfd e /dev/dri, normalmente entrando nos grupos video e render.

  • Este comportamento é esperado. O PyTorch ROCm reutiliza intencionalmente a API torch.cuda e as strings de dispositivo no estilo CUDA para garantir a compatibilidade com Python. Usa device=0 ou device=cuda:0; o modelo continua a ser executado através de HIP e ROCm na GPU AMD.

  • Não por meio do pacote Python. O DirectML não tem backend de treinamento ou previsão, e as NPUs Ryzen AI não são expostas pelo PyTorch ROCm. Os fluxos de trabalho da comunidade podem exportar para ONNX e executar com as ferramentas externas Ryzen AI ou Vitis AI da AMD, mas esses ambientes de execução não fazem parte do caminho de execução compatível com Ultralytics. Para NPUs AMD Xilinx Versal AI Edge Series Gen 2 integradas, exporte com format="xilinx"; para dispositivos Zynq, Kria e Versal AI Edge de primeira geração, consulte o guia AMD Xilinx.

  • Passa o índice da GPU diretamente, por exemplo, device=1 para a segunda GPU, tanto para inferência com PyTorch como com MIGraphX EP. Para restringir um processo ou contentor a GPUs específicas, define HIP_VISIBLE_DEVICES (ou ROCR_VISIBLE_DEVICES para contentores), por exemplo, HIP_VISIBLE_DEVICES=2; as GPUs visíveis são então renumeradas a partir de device=0.

Colaboradores

Comentários