Treinamento de GPU AMD com Ultralytics YOLO e ROCm#
A Ultralytics suporta treino, validação e inferência em GPUs AMD compatíveis através do PyTorch ROCm. O PyTorch expõe intencionalmente os dispositivos ROCm através da mesma API Python torch.cuda utilizada pela CUDA, pelo que a Ultralytics não precisa de um tipo de dispositivo rocm separado para modelos PyTorch nativos. Instala uma versão ROCm do PyTorch e, em seguida, seleciona uma GPU AMD com a sintaxe standard device=0 ou device=cuda:0.
A AMD também oferece tecnologias de inferência que são separadas do PyTorch ROCm. O suporte a um produto AMD não implica suporte a todos os tempos de execução ou aceleradores AMD.
Visão geral do suporte#
Esta tabela descreve o pacote Python do Ultralytics usado para treinamento, validação, exportação e predição.
| Produto ou tempo de execução AMD | Suporte do Ultralytics | Uso ou status |
|---|---|---|
| AMD Instinct e GPUs Radeon suportadas com ROCm | ✅ | Treina, valida e executa modelos PyTorch nativos com device=0 ou device=cuda:0. |
| ROCm multi-GPU | ✅ | Usa device=0,1 ou device=[0, 1]; a execução distribuída segue a pilha PyTorch ROCm instalada. |
| Precisão Mista Automática (AMP) do ROCm | ⚠️ | Disponível quando as versões instaladas do PyTorch e ROCm passam nas verificações de AMP da Ultralytics; usa amp=False se forem incompatíveis. |
| Exportação ONNX | ✅ | A exportação é suportada, mas o arquivo ONNX por si só não fornece um tempo de execução acelerado por AMD. |
| Inferência MIGraphX | 🚧 | Não disponível no pacote Python atual; o trabalho de implementação é acompanhado no PR #24137. |
| Imagem Docker da AMD e CI de hardware AMD | 🚧 | Também acompanhado no PR #24137, não fornecido apenas pela seleção de dispositivos ROCm. |
| Windows DirectML | ❌ Python | Sem backend de treinamento ou predição DirectML no pacote Python. |
| Ryzen AI NPU | ❌ | Sem integração nativa de NPU do Ultralytics; fluxos de trabalho externos ONNX/Vitis AI são gerenciados pela comunidade. |
| CPUs AMD | ✅ CPU | Usa device=cpu; esta é a execução padrão em CPU e não um motor de aceleração específico para AMD. |
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 ROCm da AMD antes de instalar. A Ultralytics não consegue adicionar suporte para um dispositivo que a compilação PyTorch ROCm instalada não exponha.
Por que o ROCm usa nomes de dispositivos CUDA#
A compilação ROCm do PyTorch utiliza HIP internamente, 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 suportadas. Este design permite que o mesmo caminho de treino da Ultralytics sirva NVIDIA CUDA e AMD ROCm sem um backend duplicado.
Consulta as semânticas HIP do PyTorch oficiais para obter mais detalhes.
No pacote Python, usa device=0 ou device=cuda:0 para o PyTorch ROCm. Não uses device=rocm:0; rocm não é um tipo de dispositivo PyTorch.
Instalar o PyTorch ROCm#
-
Verifica se o teu sistema operativo e GPU aparecem na matriz de compatibilidade ROCm.
-
Usa o seletor de instalação do PyTorch para escolher a compilação ROCm correspondente à tua versão instalada do ROCm.
-
Instala o Ultralytics após o PyTorch:
pip install ultralytics -
Verifica se o PyTorch deteta 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 o modo de treino da Ultralytics standard.
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])A validação e a predição utilizam a mesma seleção 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=0Compatibilidade com AMP#
A 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 um treino com mAP zero. O comportamento do AMP no ROCm pode mudar com as versões do PyTorch e do ROCm; por isso, usa amp=False ao resolver uma falha específica da pilha:
yolo detect train data=coco8.yaml model=yolo26n.pt device=0 amp=FalseRecursos ainda não suportados#
MIGraphX#
MIGraphX é o runtime de inferência e otimização de grafos da AMD. O carregamento de modelos MIGraphX nativos não está incluído no pacote Python atual da Ultralytics. A implementação ativa, o contentor AMD, as dependências, os testes e a documentação são acompanhados em conjunto no PR #24137. Até que esse trabalho seja integrado e receba validação de hardware AMD, a exportação de um modelo ONNX não deve ser descrita como suporte nativo a MIGraphX no pacote Python.
DirectML#
O pacote Python da Ultralytics não tem nenhum backend DirectML para treino ou predição no Windows. O DirectML é distinto do ROCm e um ambiente ROCm funcional não ativa device=directml.
Ryzen AI NPU#
As NPU Ryzen AI não são expostas através do PyTorch ROCm e não são dispositivos Ultralytics nativos. 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 tempo de execução, conversão e compatibilidade de hardware estão fora do caminho de execução suportado pelo Ultralytics.
Solução de Problemas#
Porque é que torch.cuda.is_available() devolve False no meu sistema AMD?#
O pacote PyTorch instalado pode ser uma compilação de CPU ou CUDA, ou a GPU pode não ser suportada pela pilha ROCm ativa. Instala a compilação ROCm correspondente a partir do seletor do PyTorch e verifica a GPU em relação à matriz de compatibilidade da AMD.
Por que o Ultralytics diz CUDA quando tenho uma GPU AMD?#
Isto é esperado. O PyTorch ROCm utiliza intencionalmente a API torch.cuda e strings de dispositivos no estilo CUDA para compatibilidade com Python. O modelo continua a ser executado através de HIP e ROCm na GPU AMD.
A exportação ONNX ativa o MIGraphX ou o Ryzen AI automaticamente?#
Não. ONNX é um formato de modelo portátil. A execução acelerada ainda requer um tempo de execução compatível, e os backends nativos MIGraphX, DirectML e Ryzen AI NPU não estão incluídos no pacote Python atual do Ultralytics.
Resumo#
Usa uma compilação PyTorch ROCm compatível com device=0 ou device=cuda:0 para treino, validação e inferência em GPUs AMD suportadas. Trata o MIGraphX, o DirectML e a NPU Ryzen AI como capacidades separadas: nenhuma é ativada apenas por instalar o ROCm ou exportar um modelo ONNX.