Ultralytics YOLOとROCmによるAMD GPUトレーニング#
Ultralyticsは、PyTorch ROCmを通じて、対応するAMD GPUでのトレーニング、検証、推論をサポートしています。PyTorchは、ROCmデバイスをCUDAと同じtorch.cuda Python APIで意図的に公開しているため、UltralyticsではネイティブPyTorchモデル用に別のrocmデバイスタイプを用意する必要はありません。PyTorchのROCmビルドをインストールし、標準のdevice=0またはdevice=cuda:0構文でAMD GPUを選択してください。
AMDは、PyTorch ROCmとは別の推論テクノロジーも提供しています。AMD製品の1つがサポートされていても、すべての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")
# PyTorch ROCmで認識される最初のAMD GPUでトレーニングする
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=0)
# 2台のAMD GPUを使用してトレーニングする
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 GPUでトレーニング、検証、推論を行うには、互換性のあるPyTorch ROCmビルドとdevice=0またはdevice=cuda:0を使用してください。MIGraphX、DirectML、Ryzen AI NPUはそれぞれ別の機能として扱ってください。ROCmのインストールやONNXモデルのエクスポートだけで、これらが有効になることはありません。
よくある質問#
インストール済みのPyTorchパッケージがCPU版またはCUDA版であるか、使用中のROCmスタックでGPUがサポートされていない可能性があります。PyTorchセレクターから適切なROCmビルドをインストールし、AMDの互換性マトリックスでGPUを確認してください。
これは想定された動作です。PyTorch ROCmはPythonとの互換性を保つため、意図的に
torch.cudaAPIとCUDA形式のデバイス文字列を使用します。モデルはAMD GPU上でHIPとROCmを通じて実行されます。いいえ。ONNXはポータブルなモデル形式です。アクセラレーション実行には引き続き互換性のあるランタイムが必要です。また、ネイティブのMIGraphX、DirectML、Ryzen AI NPUのバックエンドは、現在のUltralytics Pythonパッケージに含まれていません。