AMD GPU Training with Ultralytics YOLO and ROCm#
Ultralyticsは、PyTorch ROCmを通じて互換性のあるAMD GPUでのトレーニング、検証、推論をサポートしています。PyTorchは、CUDAで使用されるものと同じtorch.cuda Python APIを通じて意図的にROCmデバイスを公開するため、ネイティブPyTorchモデルのためにUltralyticsが別のrocmデバイスタイプを必要とすることはありません。ROCmビルドのPyTorchをインストールし、標準のdevice=0またはdevice=cuda:0構文を使用してAMD GPUを選択してください。
AMDは、PyTorch ROCmとは異なる推論テクノロジーも提供しています。1つのAMD製品に対するサポートは、すべてのAMDランタイムまたはアクセラレータに対するサポートを意味するものではありません。
サポートの概要#
このテーブルは、トレーニング、検証、エクスポート、および予測に使用されるUltralytics Pythonパッケージについて説明します。
| AMD製品またはランタイム | Ultralyticsのサポート | 使用方法またはステータス |
|---|---|---|
| AMD InstinctおよびROCmをサポートするRadeon GPU | ✅ | device=0またはdevice=cuda:0を使用して、ネイティブPyTorchモデルのトレーニング、検証、および実行を行います。 |
| マルチGPU ROCm | ✅ | device=0,1またはdevice=[0, 1]を使用します。分散実行はインストールされているPyTorch ROCmスタックに従います。 |
| ROCm自動混合精度 (AMP) | ⚠️ | インストールされているPyTorchおよびROCmのバージョンがUltralyticsのAMPチェックを通過した場合に利用可能です。互換性がない場合はamp=Falseを使用してください。 |
| ONNXエクスポート | ✅ | エクスポートはサポートされていますが、ONNXファイル単体ではAMDでアクセラレーションされたランタイムは提供されません。 |
| MIGraphX推論 | 🚧 | 現在のPythonパッケージでは利用できません。実装作業はPR #24137で追跡されています。 |
| AMD DockerイメージおよびAMDハードウェアCI | 🚧 | これもPR #24137で追跡されており、ROCmデバイスの選択だけでは提供されません。 |
| Windows DirectML | ❌ Python | PythonパッケージにDirectMLのトレーニングまたは予測バックエンドはありません。 |
| Ryzen AI NPU | ❌ | ネイティブのUltralytics NPU統合はありません。外部のONNX/Vitis AIワークフローはコミュニティによって管理されています。 |
| AMD CPU | ✅ CPU | device=cpuを使用してください。これは標準のCPU実行であり、AMD固有のアクセラレーションバックエンドではありません。 |
ROCmの可用性は、正確なGPU、オペレーティングシステム、ROCmのバージョン、およびPyTorchのビルドによって異なります。インストールする前に、AMDのROCm互換性マトリックスでハードウェアを確認してください。Ultralyticsは、インストールされたPyTorch ROCmビルドが公開していないデバイスのサポートを追加することはできません。
ROCmがCUDAデバイス名を使用する理由#
PyTorchのROCmビルドは内部でHIPを使用しますが、意図的にtorch.cudaインターフェイスを再利用します。たとえば、torch.cuda.is_available()、torch.cuda.device_count()、およびtorch.cuda.get_device_name()は、サポートされているAMD GPUで動作します。この設計により、同じUltralyticsのトレーニングパスが、重複するバックエンドなしでNVIDIA CUDAとAMD ROCmの両方に対応できるようになります。
詳細については、公式のPyTorch HIPセマンティクスを参照してください。
Pythonパッケージでは、PyTorch ROCmに対してdevice=0またはdevice=cuda:0を使用してください。device=rocm:0を使用しないでください。rocmはPyTorchのデバイスタイプではありません。
PyTorch ROCmのインストール#
-
オペレーティングシステムとGPUがROCm互換性マトリックスに表示されていることを確認してください。
-
PyTorchインストールセレクターを使用して、インストールされているROCmバージョンに一致するROCmビルドを選択してください。
-
PyTorchの後にUltralyticsをインストールします:
pip install ultralytics -
PyTorchがAMD GPUを認識していることを確認します:
import torch print(torch.cuda.is_available()) print(torch.cuda.get_device_name(0)) print(torch.version.hip)
torch.cuda.is_available()はTrueを返し、デバイス名でAMD GPUが特定され、torch.version.hipはROCmビルドによって提供されるHIPバージョンを報告する必要があります。
AMD GPUでのトレーニング#
標準のUltralytics Trainモードと同じデバイス引数を使用します。
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])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=0AMPの互換性#
UltralyticsはデフォルトでAMPを有効にし、トレーニング前に高精度と混合精度の結果を比較します。チェックによって互換性のない結果が検出された場合、NaNロスやゼロmAPでのトレーニングを防ぐためにAMPが無効化されます。ROCmのAMPの動作はPyTorchやROCmのバージョンによって変わる可能性があるため、スタック固有の障害のトラブルシューティングを行う場合はamp=Falseを使用してください:
yolo detect train data=coco8.yaml model=yolo26n.pt device=0 amp=Falseまだサポートされていない機能#
MIGraphX#
MIGraphXは、AMDのグラフ最適化および推論ランタイムです。ネイティブのMIGraphXモデルの読み込みは、現在のUltralytics Pythonパッケージには含まれていません。アクティブな実装、AMDコンテナ、依存関係、テスト、およびドキュメントは、PR #24137で一緒に追跡されています。その作業がマージされ、AMDハードウェアの検証を受けるまでは、ONNXモデルのエクスポートをPythonパッケージにおけるネイティブMIGraphXサポートとして説明すべきではありません。
DirectML#
Ultralytics Pythonパッケージには、Windowsでのトレーニングや予測のためのDirectMLバックエンドはありません。DirectMLはROCmとは異なり、機能するROCm環境であってもdevice=directmlが有効になるわけではありません。
Ryzen AI NPU#
Ryzen AI NPUはPyTorch ROCmを通じて公開されておらず、ネイティブなUltralyticsデバイスではありません。コミュニティのワークフローでは、YOLOモデルをONNXにエクスポートしてAMDの外部Ryzen AIまたはVitis AIツールで実行することができますが、そのランタイム、変換、およびハードウェアの互換性は、サポートされているUltralyticsの実行パスの範囲外です。
トラブルシューティング#
AMDシステムでtorch.cuda.is_available()がFalseを返すのはなぜですか?#
インストールされているPyTorchパッケージがCPUビルドまたはCUDAビルドであるか、またはアクティブなROCmスタックでGPUがサポートされていない可能性があります。PyTorchセレクターから一致するROCmビルドをインストールし、AMDの互換性マトリックスに対してGPUを確認してください。
AMD GPUを使用しているのに、UltralyticsがCUDAと表示するのはなぜですか?#
これは想定どおりの動作です。PyTorch ROCmは、Pythonとの互換性のために意図的にtorch.cuda APIとCUDAスタイルのデバイス文字列を使用します。モデルは引き続きAMD GPU上でHIPとROCmを通じて実行されます。
ONNXエクスポートにより、MIGraphXやRyzen AIが自動的に有効になりますか?#
いいえ。ONNXはポータブルなモデルフォーマットです。アクセラレーションされた実行には引き続き互換性のあるランタイムが必要であり、ネイティブなMIGraphX、DirectML、およびRyzen AI NPUの各バックエンドは現在のUltralytics Pythonパッケージに含まれていません。
要約#
サポートされているAMD GPUのトレーニング、検証、および推論には、device=0またはdevice=cuda:0を指定した互換性のあるPyTorch ROCmビルドを使用してください。MIGraphX、DirectML、およびRyzen AI NPUは別個の機能として扱い、ROCmのインストールやONNXモデルのエクスポート単体では、いずれも有効になりません。