理事会/BSP:
i.MX8M Plus、aarch64
Galcore バージョン 6.4.11.p2.745085
VSINPUExecutionProviderを用いたONNXランタイム(libtim-vx.so に対して静的リンク)
Vivante OpenCL ICDの存在と機能(Vivante.icd → libVivanteOpenCL.so)
目標:
GC7000UL 3D GPUコア上でResNet50推論ベンチマーク(MLPerfロードゲンハーネス)を実行し、既存のNPU(VIP8000Nano)やCPUベンチマークの結果と比較します。
動作確認済みの項目:
Vivante OpenCL ICDを経由したclGetPlatformIDs/clGetDeviceIDsは、1つのプラットフォーム上で2つの独立したデバイスをきれいに列挙します。
デバイス0:GC7000UL.6204.0000
デバイス1:VIP8000Nano-S+I.8002.0000
両者とも、CL_DEVICE_TYPE_ACCELERATORを報告し、エラーはなく、libOpenCL.so → libGAL.so と連携した最小限のCテストプログラムで確認されました。
ORT経由でGPUディスパッチを妨げている原因:
ort.get_available_providers()は['VSINPUExecutionProvider', 'CPUExecutionProvider']のみを返します — OpenCLベースのEPはありません。
VSINPUExecutionProviderは静的にリンク libtim-vx.so(OVXLIB/vsi_nn_* API)です。libtim-vx.so と libGAL.so の両方のシンボル/文字列ダンプでは、DEVICE_INDEX/DEVICE_IDスタイルのenv varやconfig surfaceは表示されず、動作の切り替え(VIV_VX_ENABLE_SHADER、VSI_NN_ENABLE_*など)のみが表示されます。
libGAL.so 生のHALレイヤーでgcoHAL_SetDeviceIndex/gcoHAL_GetCurrentDeviceIndexをエクスポートしますが、OVXLIB/TIM-VXからその呼び出しまでの配管は見当たりません。これは、VSINPUが使うグラフコンパイラがデバイスインデックスに関係なくNPUコアのみをターゲットにしている可能性を示唆しています。
具体的な質問:
このBSP(galcore 6.4.11.p2)上のTIM-VX / OVXLIBは、グラフをコンパイルして一般的な計算対象としてGC7000ULにディスパッチするのをサポートしているのでしょうか?それともこのビルドではグラフコンパイラは設計上NPUのみ対応されているのでしょうか?また、その方法で実行可能かどうかはどうやって確認すればよいのでしょうか?
もしTIM-VXの上流でGPUターゲットグラフコンパイルがサポートされているのに、このNXP搭載ビルドでは有効になっていない場合、それを公開するビルドフラグやSDKコンポーネントはありますか?
TIM-VX/ORTを通るサポート済みの経路がない場合、NXPが推奨する汎用推論をGC7000UL上で直接実行する方法(例えばOpenCL/OpenVXレイヤー経由、その部分は機能が確認されているため)やサンプルアプリ、SDKコンポーネント、または参照実装などを基準に構築する方法はありますか?
現在学生で、この実装に取り組みながらGPUの上にORTを動かそうとしているのですが、GPUを使って推論できる方法、あるいは他に何か方法はありますか?
どうもありがとうございます。
IMX8MPLUS #GC7000UL
こんにちは、 @WaleedO さん。
NXPサポートまでご連絡いただきありがとうございます。
GPU上で推論を実行するにはGPUデリゲートを使うべきで、これを使うとサポートされた操作をCPUだけで動作するのではなくGPUで加速できます。
利用可能な実行バックエンド、設定の委任、サポートフレームワーク、例のアプリケーションをよりよく理解するために、 Machine Learning ユーザーガイド の確認をお勧めします。ガイドには、GPUデリゲートが正しく読み込まれているか、モデルが期待通りに動作しているかを確認するためのステップバイステップの例も含まれています。
セットアップや実行中に問題が発生した場合は、モデル、BSPバージョン、使用しているコマンドを共有していただければ、喜んでサポートいたします。
よろしくお願いします、
アレハンドロ・ガルシア