Ultralytics YOLOとROCmによるAMD GPUトレーニング#
Ultralyticsは、PyTorch ROCmを通じて、互換性のあるAMD GPUでのトレーニング、検証、推論をサポートしています。PyTorchは、CUDAで使用されるものと同じtorch.cuda Python APIを通じてROCmデバイスを意図的に公開しているため、UltralyticsではネイティブPyTorchモデル用に別のrocmデバイスタイプを用意する必要がありません。ROCm版のPyTorchをインストールし、標準のdevice=0またはdevice=cuda:0構文でAMD GPUを選択してください。
AMDは、PyTorch ROCmとは別の推論テクノロジーも提供しています。1つのAMD製品をサポートしているからといって、すべてのAMDランタイムやアクセラレーターをサポートしているとは限りません。
サポート概要#
この表では、トレーニング、検証、エクスポート、予測に使用するUltralytics Pythonパッケージについて説明します。
| AMD製品またはランタイム | Ultralyticsのサポート | 使用方法またはステータス |
|---|---|---|
| ROCm対応のAMD Instinctおよび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互換性マトリックスでハードウェアを確認してください。インストールされているPyTorch ROCmビルドで公開されていないデバイスについて、Ultralyticsがサポートを追加することはできません。
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のグラフ最適化および推論ランタイムです。現在のUltralytics Pythonパッケージには、MIGraphXモデルのネイティブ読み込みは含まれていません。実装、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 GPUでトレーニング、検証、推論を行うには、互換性のあるPyTorch ROCmビルドとdevice=0またはdevice=cuda:0を使用してください。MIGraphX、DirectML、Ryzen AI NPUは別個の機能として扱ってください。ROCmをインストールしたりONNXモデルをエクスポートしたりするだけで、これらのいずれかが有効になることはありません。
FAQ#
インストールされているPyTorchパッケージがCPUまたはCUDAビルドであるか、GPUがアクティブなROCmスタックでサポートされていない可能性があります。PyTorchセレクターから一致するROCmビルドをインストールし、AMDの互換性マトリックスでGPUを確認してください。
これは想定された動作です。PyTorch ROCmは、Python互換性のために意図的に
torch.cudaAPIとCUDA形式のデバイス文字列を使用します。モデルはAMD GPU上でHIPとROCmを通じて実行されます。いいえ。ONNXはポータブルなモデル形式です。アクセラレーション実行には互換性のあるランタイムが必要であり、ネイティブのMIGraphX、DirectML、Ryzen AI NPUバックエンドは現在のUltralytics Pythonパッケージに含まれていません。