Ultralytics YOLO、ROCm、MIGraphXによるAMD GPUのトレーニングと推論#
このガイドは、AMD GPUカーネルドライバー(amdgpu)がインストールされたLinux x86_64ホストを対象としており、以下のコマンドはすべてLinuxシェル用です。MIGraphX実行プロバイダーはPython 3.11以降向けのLinux x86_64ホイールのみ公開されているため、Windowsネイティブ環境はサポートされていません。また、Windows Subsystem for Linux(WSL2)での動作はまだ検証されていません。
Ultralytics YOLOは、AMDのオープンGPUコンピューティングスタックであるROCmを通じて、AMD Instinctおよびサポート対象のRadeon GPUで動作します。PyTorchのROCmビルドを使用すると、他のGPUと同じdevice=0引数を使って、.ptモデルのトレーニング、検証、予測を実行でき、コードを変更する必要はありません。
デプロイするには、トレーニング済みモデルをONNXにエクスポートし、AMDのグラフ最適化・推論エンジンであるMIGraphXで実行します。UltralyticsのONNXバックエンドはROCmを検出してONNX RuntimeのMIGraphXExecutionProviderを自動的に選択するため、NVIDIA GPUで動作するpredict呼び出しをAMD GPUでも実行できます。Ultralyticsのスケジュール実行される継続的インテグレーションでは、AMD GPUハードウェア上で、すべてのタスクについてONNXエクスポートとMIGraphX推論を実行します。
インストール#
Pythonスタックは、AMDのROCmホイールインデックスからpipを通じてすべてインストールされます。そのため、ホストにAMD GPUカーネルドライバー(amdgpu / /dev/kfd)がすでにインストールされていれば、PyTorch、プラグイン、ROCmランタイムライブラリにaptパッケージやroot権限は必要ありません。
GPUアーキテクチャ(例:Strix Halo上のgfx1151)を検出し、必要なPyTorchカーネルのみをインストールします。
# Read the GPU architecture from the amdgpu driver, e.g. device-gfx1151
GPU_ARCH=$(grep -rhs '^gfx_target_version' /sys/class/kfd/kfd/topology/nodes | awk '$2 {printf "device-gfx%d%d%x\n", int($2/10000), int($2/100)%100, $2%100}' | sort -u | paste -sd, -)
# ROCm PyTorch + torchvision for the detected architecture
pip install "torch[${GPU_ARCH:?No AMD GPU found}]" "torchvision[$GPU_ARCH]" --index-url https://stable.repo.amd.com/rocm/whl-next/
# Ultralytics
pip install ultralyticsUltralyticsは、最初のONNXエクスポート時にonnxを自動的にインストールします。ROCmシステムで初めてONNX推論を実行すると、MIGraphX実行プロバイダープラグイン(onnxruntime-ep-migraphx)と、それが読み込むMIGraphXランタイムライブラリ(migraphx-libs)も、相互にテスト済みのバージョンに固定してインストールします。このプラグインはLinux x86_64上のPython 3.11以降向けにのみ公開されています。それ以外のPythonバージョンやアーキテクチャの場合、またはプラグインがインストールされていない状態でYOLO_AUTOINSTALL=falseを使用した場合、ONNX推論は警告を出してCPUにフォールバックします。詳しい手順とベストプラクティスについては、YOLO26インストールガイドをご覧ください。問題が発生した場合は、よくある問題のガイドを参照してください。
トレーニングまたはエクスポートの前に、PyTorchがAMD GPUを認識していることを確認してください。
import torch
print(torch.cuda.is_available()) # ROCmが正常にインストールされている場合はTrue
print(torch.cuda.get_device_name(0)) # AMD GPU名(例:AMD Radeon 8060S)
print(torch.version.hip) # ROCm版PyTorchビルドのHIPバージョン。CUDA版またはCPU版ビルドではNonePyTorch ROCmでAMD GPU上のトレーニングを実行する#
.ptモデルのネイティブなトレーニング、検証、予測は、以下で説明するMIGraphX推論経路とは独立して、PyTorch ROCmを通じてAMD GPU上で実行されます。インストールの手順に従ってPyTorchのROCmビルドをインストールし、他のUltralyticsトレーニングと同じデバイス引数を使用してください。
PyTorchのROCmビルドは内部でHIPを使用しますが、意図的にtorch.cudaインターフェースを再利用しています。そのため、torch.cuda.is_available()はTrueを返し、AMD GPUは標準的なCUDA形式のIDで指定します。AMD GPUにはdevice=0またはdevice=cuda:0を使用してください。rocmはPyTorchのデバイスタイプではありません。詳細については、PyTorchのHIPセマンティクスを参照してください。
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]).ptモデルの検証と予測でも、同じデバイス選択方法を使用します。
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=0UltralyticsはデフォルトでAMPを有効にし、トレーニング前のチェックで混合精度の結果が完全精度の結果から乖離していると判定した場合、自動的に無効にします。ROCmのAMP動作はPyTorchとROCmのバージョンによって変わることがあります。それでも実行時にNaN損失やゼロのmAPが発生する場合は、amp=Falseを使用してトレーニングしてください。
yolo detect train data=coco8.yaml model=yolo26n.pt device=0 amp=FalseMIGraphXによるエクスポートと推論#
ONNX Runtimeは、プラグイン可能な実行プロバイダー(EP)を通じて、単一のONNXモデルをさまざまなハードウェアバックエンドで実行するクロスプラットフォーム推論エンジンです。各EPはONNXグラフを特定のアクセラレーターにマッピングします。NVIDIA GPU向けのCUDA、Appleシリコン向けのCoreML、そしてROCm上のAMD GPU向けのMIGraphXがあり、MIGraphXはonnxruntime-ep-migraphxプラグインとして提供され、グラフをGPU向けに最適化されたプログラムにコンパイルします。
MIGraphX推論では標準のONNXエクスポートを使用します。モデルをONNX(format="onnx")にエクスポートすると、Ultralyticsの推論はMIGraphXExecutionProviderバックエンドを自動的に使用して、AMD GPU上でONNXモデルを実行します。
MIGraphX推論の主な機能#
- プロバイダーの自動選択:ROCmホストでは、ONNXバックエンドがプラグインを登録し、コードを変更することなく
MIGraphXExecutionProviderを選択します。プラグインがない場合や読み込みに失敗した場合は、警告を出してCPUにフォールバックします。 - グラフ最適化:MIGraphXは、AMD GPUアーキテクチャに合わせて調整された演算子融合、メモリープランニング、カーネル選択を適用します。
- ゼロコピーIOバインディング:DLPackプロトコルを通じて入力と出力をGPUテンソルに直接バインドし、推論中のホストとのデータ転送を回避します。
- 精度オプション:FP32で実行するか、FP16のONNXモデルをエクスポートして低精度推論を行えます。
- ポータブルな成果物:単一の
.onnxファイルをCPU、NVIDIA GPU、AMD GPUで実行でき、1回のエクスポートで複数のプラットフォームを対象にできます。 - 再現性の高いデプロイ:ROCm版PyTorch、MIGraphXプラグイン、およびそのライブラリからなる完全なスタックを、AMDのROCmホイールインデックスから
pipを通じてインストールできます。
対応タスク#
MIGraphX推論は、Ultralyticsの7つすべてのタスクに対応しています。セマンティックセグメンテーションと深度推定は、これらのヘッドを搭載する唯一のファミリーであるYOLO26でのみ利用できます。
使用方法#
使い方の説明に進む前に、Ultralyticsが提供するYOLO26モデルをご確認ください。プロジェクトの要件に最適なモデルを選ぶのに役立ちます。
ONNX形式は、エクスポート、予測、検証の各モードに対応しています。AMD GPUで推論と検証を行うには、MIGraphXプラグインがインストールされたROCmシステムが必要です。モデルをエクスポートしてから、エクスポート済みモデルを読み込み、device=0で推論を実行するか、精度を検証してください。
onnxruntime-gpuと標準のonnxruntimeパッケージは、同じonnxruntime Pythonモジュールにインストールされるため、後からインストールした方がもう一方を上書きします。どちらか一方だけをアンインストールするとモジュールが壊れた状態になり、古いonnxruntime-gpuリリースではMIGraphX推論がクラッシュすることがあります。以前のセットアップでonnxruntime-gpuがインストールされている場合は、pip uninstall -y onnxruntime-gpu onnxruntimeを実行してください。次回のONNX推論時に、Ultralyticsが標準のonnxruntimeを再インストールします。
from ultralytics import YOLO
# YOLO26モデルを読み込みます
model = YOLO("yolo26n.pt")
# モデルをONNXフォーマットにエクスポート
model.export(format="onnx") # 'yolo26n.onnx'を作成しますfrom ultralytics import YOLO
# エクスポートしたONNXモデルを読み込み、AMD GPUで推論を実行します
model = YOLO("yolo26n.onnx")
# ROCmでは、MIGraphX実行プロバイダーが自動的に選択されます
results = model.predict("https://ultralytics.com/images/bus.jpg", device=0)from ultralytics import YOLO
# エクスポートしたONNXモデルを読み込みます
model = YOLO("yolo26n.onnx")
# AMD GPUでCOCO8データセットの精度を検証します
metrics = model.val(data="coco8.yaml", device=0)エクスポート引数#
MIGraphX推論ではONNXエクスポート引数を再利用します。AMD GPUへのデプロイで特に重要なオプションは次のとおりです。
| 引数 | 種類 | デフォルト | 説明 |
|---|---|---|---|
format | str | 'onnx' | エクスポートするモデルのターゲット形式です。MIGraphX EPで推論する場合はonnxを使用します。 |
imgsz | intまたはtuple | 640 | モデル入力の希望する画像サイズです。正方形画像の場合は整数、またはタプル(height, width)を指定できます。 |
quantize | intまたはstr | None | エクスポートしたONNXモデルの精度です。精度を下げた推論には16(FP16)を使用します。32または未指定の場合はFP32です。 |
dynamic | bool | False | 入力サイズを動的に変更できるようにします。静的形状を使用すると、MIGraphXは専用プログラムをコンパイルでき、ゼロコピーのIOバインディングが可能になります。 |
simplify | bool | True | onnxslimを使用してモデルグラフを簡素化し、パフォーマンスと互換性を向上させる可能性があります。 |
opset | int | None | さまざまなランタイムとの互換性を決めるONNX opsetバージョンです。指定しない場合は、サポートされている最新バージョンが使用されます。 |
nms | bool、省略可 | None | 生の出力(None、デフォルト)、組み込みNMS(True)、またはNMSフリーヘッド(False)を選択します。組み込みNMS(True)は、MIGraphX EPではまだサポートされていません(ROCm/AMDMIGraphX#5246)。 |
batch | int | 1 | エクスポートのバッチサイズ、またはpredictモードでエクスポートしたモデルが同時に処理する画像の最大数です。 |
device | str | None | エクスポートに使用するデバイスです。GPU(device=0)またはCPU(device=cpu)を指定します。 |
エクスポート引数の全一覧については、ONNX連携ガイドとUltralyticsのエクスポートに関するドキュメントページをご覧ください。
MIGraphXを使用したAMD GPUへのデプロイ#
MIGraphX EPは最初のセッションでグラフをコンパイルするため、初回のロード時間の大部分を占めます。Ultralyticsはコンパイル済みプログラムをモデルごとにUltralytics設定ディレクトリへキャッシュするため、同じモデルを次回以降にロードする際は再コンパイルが省略されます。キャッシュには最近使用した8つのモデルが保持され、古いモデルは削除されるため、際限なく増えることはありません。場所を上書きするにはORT_MIGRAPHX_CACHE_DIRを設定してください。ROCmまたはMIGraphXをアップグレードした後に再コンパイルするには、キャッシュディレクトリを削除してください。
Ultralyticsは、YOLOグラフのコールドコンパイル時間を短縮するため、MIGraphXのWinograd畳み込みカーネルをデフォルトで無効にしています(MIGRAPHX_DISABLE_WINOGRAD=1)。推論への測定可能な影響はありません(ROCm/AMDMIGraphX#5234。再度有効にするにはMIGRAPHX_DISABLE_WINOGRAD=0を設定します。
すぐに使える環境として、Dockerfile-amdは、ROCm PyTorchとMIGraphX EPをプリインストールしたultralytics/ultralytics:latest-amdイメージをビルドします。DockerクイックスタートのGPUの使用を参照して、AMD GPUをコンテナに公開するdocker runフラグをご確認ください。
ベンチマーク#
以下のYOLO26ベンチマークは、AMD Radeon 8060S GPU(Ryzen AI Max+ PRO 395)でUltralyticsチームが実施し、MIGraphX実行プロバイダー上でPyTorchとONNXの速度と精度を比較したものです。どちらの形式もGPU上でFP32精度で動作し、PyTorchはROCm経由、ONNXはMIGraphX経由で実行されます。
| モデル | 形式 | ステータス | サイズ(MB) | metrics/mAP50-95(B) | 推論時間(ms/im) |
|---|---|---|---|---|---|
| YOLO26n | PyTorch | ✅ | 5.3 | 0.4089 | 4.1 |
| YOLO26n | ONNX(MIGraphX) | ✅ | 9.5 | 0.4089 | 2.1 |
| YOLO26s | PyTorch | ✅ | 19.5 | 0.4850 | 7.2 |
| YOLO26s | ONNX(MIGraphX) | ✅ | 36.5 | 0.4850 | 4.7 |
| YOLO26m | PyTorch | ✅ | 42.2 | 0.5323 | 14.6 |
| YOLO26m | ONNX(MIGraphX) | ✅ | 78.2 | 0.5323 | 10.9 |
| YOLO26l | PyTorch | ✅ | 50.7 | 0.5489 | 18.5 |
| YOLO26l | ONNX(MIGraphX) | ✅ | 95.0 | 0.5489 | 15.0 |
| YOLO26x | PyTorch | ✅ | 113.2 | 0.5748 | 37.4 |
| YOLO26x | ONNX(MIGraphX) | ✅ | 212.9 | 0.5748 | 27.1 |
Ultralytics 8.4.165でベンチマークを実施しました(深度推定は8.4.172を使用)。
上記のベンチマークの検証は、各データセットの検証セット全体を使用し、バッチサイズ1で実施しました。検出、セグメンテーション、姿勢推定では640、セマンティックセグメンテーションでは2048、深度推定では768、分類では224、OBBでは1024を使用しました。推論時間には、前処理・後処理、および初回のMIGraphXコンパイルは含まれません。
サポート状況の概要#
AMD製品またはランタイムの一部がサポートされていても、すべてのAMDアクセラレーターがサポートされるとは限りません。この表は、Ultralytics Pythonパッケージにおける現在の状況をまとめたものです。
| AMD製品またはランタイム | サポート | 使用方法または状況 |
|---|---|---|
| ROCmを搭載したAMD Instinctおよびサポート対象のRadeon GPU | ✅ | device=0またはdevice=cuda:0を使用して、ネイティブPyTorchモデルのトレーニング、検証、実行ができます。 |
| MIGraphX推論 | ✅ | MIGraphX EPを介して、エクスポートしたONNXモデルをAMD GPUで実行します。すべてのYOLO26タスクがサポートされています。 |
| マルチGPU ROCm | ✅ | device=0,1またはdevice=[0, 1]を使用します。分散実行は、インストール済みのPyTorch ROCmスタックに従います。 |
| ROCmの自動混合精度(AMP) | ⚠️ | インストール済みのPyTorchおよびROCmのバージョンがUltralyticsのAMPチェックに合格した場合に利用できます。互換性がない場合はamp=Falseを使用してください。 |
| AMD Dockerイメージ | ✅ | latest-amdには、ROCm PyTorchとMIGraphX EPがプリインストールされています。 |
| ネイティブMIGraphXエクスポート | ❌ | format="onnx"を使用してONNXにエクスポートし、MIGraphX EPで実行すると、AMD GPUで推論できます。 |
| Windows DirectML | ❌ | Pythonパッケージには、DirectMLのトレーニングまたは予測バックエンドはありません。 |
| Ryzen AI NPU | ❌ | ネイティブNPU連携はありません。外部のONNX/Vitis AIワークフローはコミュニティによって管理されています。 |
| AMD Xilinx Versal AI Edge Gen 2 NPU | ✅ | format="xilinx"を使用してエクスポートしてください。AMD Xilinxガイドを参照してください。 |
| AMD Xilinx Zynq、Kria、Versal AI Edge Gen 1 | ❌ | ネイティブエクスポートには対応していません。AMD Xilinxガイドに記載されているAMD Vitis AIのワークフローを使用してください。 |
| AMD CPU | ✅ CPU | device=cpuを使用します。標準的なCPU実行であり、AMD専用のアクセラレーションバックエンドではありません。 |
ROCmを利用できるかどうかは、GPU、オペレーティングシステム、ROCmのバージョン、PyTorchのビルドによって異なります。インストール前に、AMDのROCm互換性マトリックスでハードウェアを確認してください。
概要#
このガイドでは、標準のdevice=0引数を使用して、PyTorch ROCmでAMD GPU上のUltralytics YOLO26モデルをトレーニングする方法と、ONNX RuntimeのMIGraphX実行プロバイダーを介した高速推論のためにONNXへエクスポートする方法を説明しました。ONNXバックエンドはMIGraphXExecutionProviderを自動的に選択し、後続のロードを高速化するためにコンパイル済みプログラムをキャッシュします。また、コードを変更せずにすべてのYOLO26タスクをサポートします。
その他のデプロイ先については、連携ガイドページをご覧ください。また、ベンチマークモードでエクスポート形式を比較できます。
よくある質問#
はい。インストールの手順に従ってROCm版のPyTorchをインストールし、
device=0を使用して.ptモデルをトレーニングします。複数のGPUを使用する場合はdevice=0,1を使用します。トレーニングはPyTorch ROCm経由で実行され、MIGraphXやONNXプラグインは使用しません。例については、PyTorch ROCmを使用したAMD GPUでのトレーニングをご覧ください。モデルをONNXにエクスポートし、ROCmシステムで
device=0を使用して実行します。最初のONNX推論時に、UltralyticsがMIGraphXプラグインをインストールします。使用方法from ultralytics import YOLO # ONNXにエクスポートします model = YOLO("yolo26n.pt") model.export(format="onnx") # 'yolo26n.onnx'を作成します # AMD GPUで推論を実行します(MIGraphX EPが自動的に選択されます) onnx_model = YOLO("yolo26n.onnx") results = onnx_model.predict("https://ultralytics.com/images/bus.jpg", device=0)いいえ。ROCmシステムでは、UltralyticsのONNXバックエンドがHIPを検出し、
onnxruntime-ep-migraphxプラグインをインストールして登録したうえで、MIGraphXExecutionProviderを自動的に選択します。たとえばPython 3.11より古いバージョンやARM64などで、プラグインをインストールまたはロードできない場合は、警告を表示してCPUにフォールバックします。MIGraphXは最初のセッションでONNXグラフを最適化プログラムにコンパイルするため、初回のロード時間の大部分を占めます。Ultralyticsはコンパイル済みプログラムをキャッシュするため、同じモデルを次回以降にロードする際は再コンパイルが省略されます。キャッシュの場所とサイズ上限については、コンパイル済みプログラムのキャッシュに関する注記をご覧ください。
インストールされているPyTorchパッケージは、おそらくROCmビルドではなくCPUまたはCUDAビルドです。または、GPUが現在のROCmスタックでサポートされていません。インストールに示すように、AMDのROCmホイールインデックスからPyTorchを再インストールし、
torch.version.hipがNoneではないことを確認して、AMDのROCm互換性マトリックスでGPUを確認してください。また、通常はvideoグループとrenderグループに参加することで、ユーザーが/dev/kfdと/dev/driにアクセスできることを確認してください。これは想定どおりの動作です。PyTorch ROCmは、Pythonとの互換性を保つために、意図的に
torch.cudaAPIとCUDA形式のデバイス文字列を再利用しています。device=0またはdevice=cuda:0を使用してください。モデルは引き続き、AMD GPU上でHIPとROCmを介して実行されます。Pythonパッケージ経由では利用できません。DirectMLにはトレーニングや予測のバックエンドがなく、Ryzen AI NPUはPyTorch ROCm経由では公開されていません。コミュニティーのワークフローでは、ONNXにエクスポートしてAMDの外部Ryzen AIツールまたはVitis AIツールで実行できる場合がありますが、これらのランタイムはUltralyticsがサポートする実行経路の対象外です。組み込みAMD Xilinx Versal AI Edge Series Gen 2 NPUの場合は、
format="xilinx"でエクスポートしてください。Zynq、Kria、および第1世代Versal AI Edgeデバイスについては、AMD Xilinxガイドを参照してください。GPUインデックスを直接指定します。たとえば、PyTorchとMIGraphX EP推論の両方で、2番目のGPUには
device=1を指定します。プロセスまたはコンテナで使用するGPUを制限するには、HIP_VISIBLE_DEVICESを設定します(コンテナの場合はROCR_VISIBLE_DEVICES)。たとえばHIP_VISIBLE_DEVICES=2を指定します。その後、認識されるGPUの番号はdevice=0から振り直されます。