Ultralytics YOLO27:

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❌ PythonPythonパッケージにはDirectMLを使用したトレーニングまたは予測のバックエンドはありません。
Ryzen AI NPU❌ネイティブのUltralytics NPU統合はありません。外部のONNX/Vitis AIワークフローはコミュニティによって管理されています。
AMD CPU✅ CPUdevice=cpuを使用してください。これは標準的なCPU実行であり、AMD固有のアクセラレーションバックエンドではありません。
まずAMDとPyTorchの互換性を確認してください

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をインストールする#

  1. ご使用のオペレーティングシステムとGPUがROCm互換性マトリックスに記載されていることを確認してください。

  2. PyTorchインストールセレクターを使用して、インストール済みのROCmバージョンに合ったROCmビルドを選択してください。

  3. PyTorchの後にUltralyticsをインストールします。

    pip install ultralytics
  4. 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モードと同じデバイス引数を使用してください。

ROCmでのトレーニング
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=0

AMPの互換性#

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.cuda APIとCUDA形式のデバイス文字列を使用します。モデルはAMD GPU上でHIPとROCmを通じて実行されます。

  • いいえ。ONNXはポータブルなモデル形式です。アクセラレーション実行には引き続き互換性のあるランタイムが必要です。また、ネイティブのMIGraphX、DirectML、Ryzen AI NPUのバックエンドは、現在のUltralytics Pythonパッケージに含まれていません。

コントリビューター

コメント