0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Ryzen AI Max+ 395の内蔵GPUでYOLO26nが600 FPS超え!MIGraphXで動かすyolodemo

0
Last updated at Posted at 2026-11-02

はじめに

AMD Ryzen AI Max+ 395の内蔵GPU、Radeon 8060SでYOLO26nを動かし、物体検出デモ「yolodemo」のライブ測定で 平均606.2 FPS を達成しました。入力サイズは448×448、バッチサイズは1、演算精度はFP32です。

動画入力と検出結果の配信が動作している状態で、30秒の測定を3回行いました。各回の結果は600.4、610.5、607.6 FPSで、いずれも600 FPSを超えています。

このFPSは、最新の入力フレームに対して完了した推論の回数を表します。同じフレームを繰り返し推論するため、30 FPSの映像でも推論FPSは600を超えます。毎秒600枚の異なる映像フレームを取り込み、描画・配信したという意味ではありません。

公開しているリポジトリはこちらです。

デモ動画

実際の動作はこちらの動画で確認できます。

yolodemoでできること

yolodemoは、USBカメラやローカル動画を入力に、ブラウザで物体検出結果を確認するデモです。画面上のスライダーでRadeon GPUとRyzen AI NPUを切り替えられます。

GPUとNPUの推論入力は、ともに448×448、batch=1です。表示映像は元の縦横比を維持し、推論FPSと入力FPSを分けて表示します。カメラ入力では1920×1080・30 FPSを要求し、実際に取得できた解像度や入力FPSも確認できます。

今回紹介する600 FPS超えはGPU側の結果です。GPUではFP32 ONNXモデルをMIGraphXで実行し、NPU側ではA16W8量子化とCPU分類ヘッドを組み合わせた別の構成を使っています。

測定環境

ライブ測定ログに記録されたGPU環境は次のとおりです。

項目 構成
プロセッサー AMD Ryzen AI Max+ 395
GPU AMD Radeon 8060S Graphics(gfx1151)
OS Ubuntu 26.04.1 LTS
モデル YOLO26n
入力 1×3×448×448、固定shape
演算精度 FP32
Python 3.12.13
PyTorch 2.13.0+rocm10.0.0
Ultralytics 8.4.194
ONNX Runtime 1.29.0
推論バックエンド MIGraphXExecutionProvider

MIGraphX関連パッケージの版などは、公開版の環境記録にもまとめています。過去のPyTorch FP16構成とは実行環境が異なるため、比較するときは測定ごとの精度・バックエンド・入力サイズを確認してください。

600 FPSを超えた測定結果

動画を入力し、MJPEGストリームを受信しながら、GPUワーカーの推論完了カウンターを測定しました。

試行 推論完了回数 実測時間 推論FPS
1 18,014 30.003秒 600.4
2 18,304 29.981秒 610.5
3 18,241 30.023秒 607.6
合計 54,559 90.007秒 606.2

合計のFPSは、全試行の推論完了回数を、全試行の実測時間の合計で割った値です。計測スクリプトはデモの状態APIからカウンターを取得し、推論停止やバックエンドの変更も確認します。

GPUでは各推論の実行後に同期し、完了を確認してからカウンターを増やします。GPUへの実行要求をキューに積んだ回数を数える方式ではありません。

測定に含まれる処理

推論ループでは、GPU上に保持したFP32入力に対してMIGraphXを実行します。新しいフレームが届いた際の入力更新と、表示に必要な検出結果のCPU転送もループ内で行います。

動画デコード、letterboxによる前処理、映像配信は並行して動作します。この測定にはそれらとの競合による負荷がありますが、各推論に毎回デコードから表示までを行う構成ではありません。606.2 FPSの逆数は約1.65 msですが、この値は映像取得からブラウザ表示までの遅延を表しません。

推論単体の5分測定

別途保存した推論単体の測定では、5分間で182,834回、平均609.4 FPSでした。こちらはGPU入力を事前確保し、画像読込・前処理・入力コピー・結果転送・JSON生成・描画を含めない条件です。

ライブ測定の606.2 FPSと推論単体の609.4 FPSは、測定範囲と時間が異なります。ライブデモで5分間600 FPS超えを検証した結果としては扱っていません。測定記録と条件は、yolofast_pubのGPU測定結果で確認できます。

GPU実装で行ったこと

GPUワーカーでは、固定shapeのFP32 ONNXモデルをONNX RuntimeのMIGraphX Execution Providerで実行しています。実装はyolodemoのGPUワーカーで公開しています。

入力バッファとI/O Bindingを再利用する

入力用のGPUバッファは初期化時に確保し、繰り返し使います。PyTorchのテンソルをDLPack経由でONNX RuntimeのOrtValueに変換してI/O Bindingに登録することで、同じGPUメモリを入力として指定できます。

新しい映像が届いたときは、ページロックしたホストメモリを経由してGPU入力を更新します。推論を繰り返すたびに、入力領域を確保し直す必要はありません。

MIGraphX側でHIPグラフを再生する

GPUワーカーでは、次の設定を有効にしています。

os.environ['ORT_MIGRAPHX_HIP_GRAPH_ENABLE'] = '1'

固定した入力バッファと組み合わせ、MIGraphX側でHIPグラフを再生する構成です。初期化時にはモデルの入力shape・型・出力shapeとI/O Bindingの利用を確認し、MIGraphXを使う条件を満たさない場合は起動を停止します。

ただし、今回の記録だけからHIPグラフ単独の高速化率は求めていません。公開したグラフ再生あり・なしの測定は実行時間や順序が揃っていないためです。

FP32を採用し、検出結果も確認する

今回採用したのはFP32構成です。FP16の候補は検出照合に失敗したため、採用結果には含めていません。

デモ起動時には、実画像3枚と合成入力5個の計8入力を使い、FP32 PyTorchとFP32 MIGraphXの検出結果を比較します。信頼度0.25以上の検出に対して、検出数・クラスの一致、IoU 0.95以上、スコア差0.03以下を要求します。今回のライブ測定ログでは、8入力すべてが合格しています。

これとは別に、同じ448入力のFP32構成をCOCO val2017全5,000枚で評価した記録も公開しています。

実行方式 COCO mAP50–95
FP32 PyTorch 35.762346%
FP32 MIGraphX 35.762364%

この評価ではmAPがほぼ一致しました。評価条件は信頼度0.001以上、同じletterbox処理と座標復元、COCOevalのbbox評価、maxDets=[1,10,100]です。起動時の8入力による照合とは別の検証であり、640入力の結果とも区別しています。

精度評価と不採用構成を含む記録は、公開GPU測定結果を参照してください。

AMD公式でもUltralyticsのAMD GPU対応を紹介

AMDは2026年10月26日付のブログ記事、Ultralytics YOLO on AMD GPUs: Train, Run, and Deploy with ROCm™で、UltralyticsのAMD GPU対応を紹介しています。

公式記事では、PyTorchとROCmによるYOLO26の学習・推論、およびONNX Runtime経由のMIGraphX実行を説明しています。検証済みプラットフォームにはRyzen AI Max+ PRO 395も含まれています。今回使用したMax+ 395とは製品表記が異なりますが、Ryzen AI Max系でも同じソフトウェア構成を検討する際の参考になります。

公式記事の基本的な使い方は、UltralyticsでモデルをONNXにエクスポートし、そのONNXを読み込んで推論する流れです。yolodemoでも同じMIGraphX Execution Providerを使い、固定GPU入力バッファやI/O Bindingを組み合わせて推論ループを実装しています。

公式記事の「最大67%のレイテンシ削減」は、複数のモデル・タスクを評価した中の最大値です。本記事の448入力・ライブ測定とは条件が異なるため、600 FPS達成の比較値には使っていません。

デモを動かすには

ソースコードは次のコマンドで取得できます。

git clone https://github.com/kotetsuy/yolodemo.git
cd yolodemo

GPU・NPUランタイム、モデル重み、校正・検証画像などを準備したうえで、モデルを生成して起動します。デモはGPUとNPUの両ワーカーを初期化するため、両方の前提環境が必要です。

./create_models.sh --setup-quant
./create_models.sh --check
./create_models.sh
./start_all.sh

起動すると、ブラウザで http://127.0.0.1:8000 を開きます。測定用の入力を用意し、デモが動作している状態で、次のコマンドからGPUを30秒×3回測定できます。

.venv/bin/python scripts/benchmark_demo.py \
  --backends gpu \
  --seconds 30 \
  --repeats 3

モデル・画像・SDKはリポジトリに含めていません。公開ツールを取得しただけで測定環境が揃う構成ではないため、環境準備の範囲と依存関係はyolodemoの日本語READMEとyolofast_pubのREADMEを確認してください。実行環境や入力動画によってFPSは変わります。

おわりに

Ryzen AI Max+ 395のRadeon 8060Sで、FP32のYOLO26nをライブデモ中に平均606.2 FPSで実行できました。固定shape、入力バッファの再利用、I/O Binding、MIGraphXによる実行を組み合わせた結果です。

内蔵GPUでの処理速度に加え、同じ画面でGPUとNPUを切り替えて試せる点も、このデモの特徴です。コードや測定条件に関心があれば、yolodemoとyolofast_pubを参照してください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?