Ultralytics YOLO27:

Treino de GPU AMD com Ultralytics YOLO e ROCm#

Ultralytics oferece suporte a treino, validação e inferência em GPUs AMD compatíveis através do PyTorch ROCm. O PyTorch expõe intencionalmente dispositivos ROCm através da mesma API Python torch.cuda usada pelo CUDA, por isso o Ultralytics não precisa de um tipo de dispositivo rocm separado para os modelos PyTorch nativos. Instala uma versão do PyTorch compilada para ROCm e, em seguida, seleciona uma GPU AMD com a sintaxe padrão device=0 ou device=cuda:0.

A AMD também oferece tecnologias de inferência separadas do PyTorch ROCm. O suporte a um produto AMD não implica suporte a todos os runtimes ou aceleradores AMD.

Visão geral do suporte#

Esta tabela descreve o pacote Python do Ultralytics usado para treino, validação, exportação e predição.

Produto ou runtime AMDSuporte do UltralyticsUtilizaçã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.
ROCm para várias GPUs✅Usa device=0,1 ou device=[0, 1]; a execução distribuída depende da stack PyTorch ROCm instalada.
Precisão Mista Automática do ROCm (AMP)⚠️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.
Exportação ONNX✅A exportação é compatível, mas o ficheiro ONNX, por si só, não fornece um runtime acelerado pela AMD.
Inferência MIGraphX🚧Não disponível no pacote Python atual; o trabalho de implementação é acompanhado em PR #24137.
Imagem Docker da AMD e CI em hardware AMD🚧Também acompanhado em PR #24137; não é fornecido apenas pela seleção de dispositivo ROCm.
DirectML no Windows❌ PythonO pacote Python não inclui um backend DirectML para treino ou predição.
NPU Ryzen AI❌Não existe integração nativa do Ultralytics com NPU; os fluxos de trabalho ONNX/Vitis AI externos são geridos pela comunidade.
CPUs AMD✅ CPUUsa device=cpu; trata-se de execução padrão em CPU, não de um 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 o teu hardware na matriz de compatibilidade do ROCm da AMD antes de instalar. O Ultralytics não pode adicionar suporte a um dispositivo que a compilação PyTorch ROCm instalada não exponha.

Porque é que o ROCm usa nomes de dispositivos CUDA#

A compilação PyTorch ROCm usa internamente o HIP, mas reutiliza deliberadamente as interfaces torch.cuda. Por exemplo, torch.cuda.is_available(), torch.cuda.device_count() e torch.cuda.get_device_name() funcionam com GPUs AMD compatíveis. Este design permite que o mesmo fluxo de treino do Ultralytics sirva o CUDA da NVIDIA e o ROCm da AMD sem um backend duplicado.

Consulta a documentação oficial sobre semântica HIP do PyTorch para obteres mais detalhes.

Importante

No pacote Python, usa device=0 ou device=cuda:0 com o PyTorch ROCm. Não uses device=rocm:0; rocm não é um tipo de dispositivo PyTorch.

Instalar o PyTorch ROCm#

  1. Verifica se o teu sistema operativo e a tua GPU aparecem na matriz de compatibilidade do ROCm.

  2. Usa o seletor de instalação do PyTorch para escolher a compilação ROCm correspondente à versão do ROCm instalada.

  3. Instala o Ultralytics depois do PyTorch:

    pip install ultralytics
  4. Verifica se o PyTorch reconhece a GPU AMD:

    import torch
    
    print(torch.cuda.is_available())
    print(torch.cuda.get_device_name(0))
    print(torch.version.hip)

torch.cuda.is_available() deve devolver True, o nome do dispositivo deve identificar a tua GPU AMD e torch.version.hip deve indicar a versão HIP fornecida pela compilação ROCm.

Treinar numa GPU AMD#

Usa os mesmos argumentos de dispositivo que no modo de treino do Ultralytics padrão.

Treino com ROCm
from ultralytics import YOLO

model = YOLO("yolo26n.pt")

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

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

A validação e a predição 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

Compatibilidade com AMP#

O Ultralytics ativa o AMP por predefinição e compara os resultados de precisão total e precisão mista antes do treino. Se a verificação detetar resultados incompatíveis, o AMP é desativado para evitar perdas NaN ou treino com mAP igual a zero. O comportamento do AMP no ROCm pode variar consoante as versões do PyTorch e do ROCm; por isso, usa amp=False para diagnosticar problemas específicos da stack:

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

Funcionalidades ainda não suportadas#

MIGraphX#

MIGraphX é o runtime de inferência e otimização de grafos da AMD. O carregamento nativo de modelos MIGraphX não está incluído no pacote Python atual do Ultralytics. A implementação em curso, o contentor AMD, dependências, testes e documentação são acompanhados em conjunto em PR #24137. Até esse trabalho ser integrado e validado em hardware AMD, a exportação de um modelo ONNX não deve ser descrita como suporte nativo para MIGraphX no pacote Python.

DirectML#

O pacote Python do Ultralytics não tem um backend DirectML para treino ou predição no Windows. O DirectML é distinto do ROCm, e um ambiente ROCm funcional não ativa device=directml.

NPU Ryzen AI#

As NPUs Ryzen AI não são expostas pelo PyTorch ROCm e não são dispositivos nativos do Ultralytics. Os fluxos de trabalho da comunidade podem exportar modelos YOLO para ONNX e executá-los com as ferramentas externas Ryzen AI ou Vitis AI da AMD, mas esse runtime, a conversão e a compatibilidade de hardware estão fora do fluxo de execução suportado pelo Ultralytics.

Resumo#

Usa uma compilação PyTorch ROCm compatível com device=0 ou device=cuda:0 para treinar, validar e executar inferência em GPUs AMD suportadas. Considera MIGraphX, DirectML e NPU Ryzen AI capacidades distintas: nenhuma delas é ativada apenas por instalar o ROCm ou exportar um modelo ONNX.

Perguntas frequentes#

  • O pacote PyTorch instalado pode ser uma compilação para CPU ou CUDA, ou a GPU pode não ser compatível com a stack ROCm ativa. Instala a compilação ROCm correspondente através do seletor do PyTorch e verifica a GPU na matriz de compatibilidade da AMD.

  • É esperado. O PyTorch ROCm usa intencionalmente a API torch.cuda e cadeias de dispositivos no estilo CUDA para manter a compatibilidade com Python. O modelo continua a ser executado através do HIP e do ROCm na GPU AMD.

  • Não. ONNX é um formato de modelo portátil. A execução acelerada continua a exigir um runtime compatível, e os backends nativos MIGraphX, DirectML e NPU Ryzen AI não estão incluídos no pacote Python atual do Ultralytics.

Contribuidores

Comentários