現状のNNEでのonnxフォーマット学習モデルの問題と今後の対応について

2025年12月に弊社との技術MTGでご回答いただいた内容を元に弊社で実装確認を進めていたところいくつか問題がでてきましたので改めて質問をさせていただければと思います。

<br/>

「UE5.3以降、NNEでonnxフォーマットの学習モデルがコンソール機で動作できなくなったものを復活してもらえないでしょうか?」という質問に対するEPIC様からの回答:

UE5.6からNNERuntimeIREE、NNERuntimeRDGでコンソールでのonnxフォーマットも動作するようになった。

<br/>

現状の問題点:

添付したzipファイル内のエクセルに動作状況の詳細を記述していますが、バニラのUE5.7.2での結果は以下になります。

・動作確認したモデル

Transformer 32bit float、Transformer 動的量子化8bit、LSTM 32bit float、LSTM動的量子化8bit

・動作確認

- NNERuntimeIREECpu

+ LSTM動的量子化8bit以外動作する

+ 処理負荷が高い

- NNERuntimeIREERDG

+ すべて動作せず

- NNERuntimeRDGHlsl

+ すべて動作せず

- NNERuntimeORTCpu

+ すべて動作する(Transformerはたまたま自前モデルがonnxに変換可能なオペレータしか使用してないため)

+ LSTM動的量子化8bitだと高速

<br/>

現状では処理負荷と学習モデルサイズを考慮するとLSTM動的量子化8bitがベストですが、

NNERuntimeORTCpu以外では動作しない。

質問:

・NNERuntimeIREECpuで将来的にLSTM動的量子化8bitが動作するようになりますでしょうか?

・NNERuntimeORTCpuがコンソール機でも動作するようにはなりませんでしょうか?

→ CPU動作なのでプラットフォーム依存がなさそうなイメージがあります。

・UE5のモーションマッチング、ML Deformerなどは機械学習モデルを使用してそうですが、推論実行環境はNNEとは独立したものでしょうか?

<br/>

以上、よろしくお願いいたします。

[Attachment Removed]

> ・NNERuntimeIREECpuで将来的にLSTM動的量子化8bitが動作するようになりますでしょうか?

NNERuntimeIREECpuはIREEランタイムを利用しています。サポートしているONNXのオペレーターは以下のリンクにある標準のONNXオペレーターになっています。この中に onnx.DynamicQuantizeLSTM がないためエラーになっていると推測されます。IREEのOnnx変換でサポートされているオペレーターでモデルを構築することは可能でしょうか?

https://iree.dev/guides/ml-frameworks/onnx/

> ・NNERuntimeORTCpuがコンソール機でも動作するようにはなりませんでしょうか?

大変恐縮ですが、現時点でORTのコンソールプラットフォームサポートを復活させる予定はございません。

しかしORTのランタイムを特定のコンソール向けに独自にビルドすることは可能かもしれません。

> ・UE5のモーションマッチング、ML Deformerなどは機械学習モデルを使用してそうですが、推論実行環境はNNEとは独立したものでしょうか?

ML Deformerでは NNERuntimeBasicCpu を利用しています。NNERuntimeBasicCpuはMLPを利用したシンプルなモデルを高速に実行することが出来ますがRNNやLSTMのような複雑なモデルには対応しておりません。

モーションマッチングには推論は利用しておりません。通常の検索アルゴリズムを使っています。

[Attachment Removed]

お世話になっております。

ご回答ありがとうございます。

>NNERuntimeIREECpuはIREEランタイムを利用しています。サポートしているONNXのオペレーターは以下のリンクにある標準>のONNXオペレーターになっています。この中に onnx.DynamicQuantizeLSTM がないためエラーになっていると推測されます。IREEのOnnx変換でサポートされているオペレーターでモデルを構築することは可能でしょうか?

IREEでは動的量子化がないLSTMは動作するのですが、こちらで計測したところ処理負荷が高かったため、なるべく高速に動作する可能性があるものを選択したいと考えております。​ORTだと動的量子化LSTMだとかなり高速に動作したのでIREEでも同様になる期待を持って、という感じです。NNERuntimeIREECpuが将来的に動的量子化LSTMに対応する可能性はありますでしょうか?

​>しかしORTのランタイムを特定のコンソール向けに独自にビルドすることは可能かもしれません。

試してみます。動いてくれると助かるのですが・・・。​

>ML Deformerでは NNERuntimeBasicCpu を利用しています。NNERuntimeBasicCpuはMLPを利用したシンプルなモデルを高速に実行することが出来ますがRNNやLSTMのような複雑なモデルには対応しておりません。

NNEで動作している​ということがわかっただけでありがたいです。

モーションマッチングは推論使用していない​のですね。何かの記事で機械学習と絡めて紹介されていたので

勘違いしていました。

[Attachment Removed]

> NNERuntimeIREECpuが将来的に動的量子化LSTMに対応する可能性はありますでしょうか?

IREEはオープンソースプロジェクトであり将来的な拡張方針について公開情報以外の情報を持ち合わせていません。

量子化に関してはパフォーマンスなどの観点から重要な要素であることは明白なので可能性はあるのではないでしょうか。

弊社開発チームにも相談してみましたが量子化LSTMに対して具体的なアクションの予定はなく、

少なくとも当面は量子化なしのモデルとNNERuntimeIREECpuの組み合わせを使ってパフォーマンスや精度などを調整いただくことを推奨するということでした。

[Attachment Removed]

DynamicQuantizeLSTMのような融合オペレータの性能とは差が出てしまうと思いますが、

標準のONNXオペレータのQuantize/Dequantizeでint8型に変換することでハードウェア支援が得つつモデルサイズを削減することでパフォーマンスを改善することも検討できるのではないかという見解も得られました。

[Attachment Removed]

お世話になっております。

​現在onnxランタイムをコンソール向けにビルドしてみるのを試していますが、もうしばらく時間がかかりそうです。

>標準のONNXオペレータのQuantize/Dequantizeでint8型に変換することでハードウェア支援が得つつモデルサイズを削減することでパフォーマンスを改善することも検討できるのではないかという見解も得られました。

アドバイスありがとうございます。こちら確認してみます。

進展ありましたら改めてご連絡いたします。​

[Attachment Removed]

> アドバイスありがとうございます。こちら確認してみます。

> 進展ありましたら改めてご連絡いたします。​

承知しました。​

[Attachment Removed]

お世話になっております。

LSTM 32ビット版を変換できるところまで計算ノードで分解して、重み をINT8 に量子化し、

QDQ(DequantizeLinear)で、元に戻すサブグラフを追加することで、動的量子化は実現できました。

パフォーマンス改善も見られたのですが、ORTで実行されるものに比べるとまだ3倍くらい遅いです。

現在高速化を検討しているのですが計算ノードのつなぎ方、使い方によっては、エラーや警告などが出ずに、

UE5.7.2にonnxファイルをインポートするさいにIREE がコンパイルする時点でハングアップしてしまいます。

IREEの不具合情報などどこかまとまっているものがありましたらお知らせください。

それとは別に、onnxからのインポートではなくvmfbを直接インポートする方法がありましたら

教えていただきたいです。

以上、よろしくお願いいたします。

[Attachment Removed]

IREEのバグトラッカーに関しては弊社が直接運営に関与しているわけではないことを予めご承知いただきたいのですが

恐らく https://github.com/iree-org/iree/issues になると思います。

コンパイル時のエラーに関しては

[ProjectPath]\Intermediate\Build\Win64\NNERuntimeIREECpu\[ハッシュ値]\[ハッシュ値]_compile-log.txt

に出力されています。エンジンごとクラッシュしているわけではないのであればこちらで問題を確認できるはずです。

vmfbに関しましては受け入れるファクトリが無いため直接インポートには対応しておりません。

クック時にvmfbに変換されてランタイムで利用されるようになっているためエンジンに手をいれる方法もありますが、

コンパイルエラーの確認などの意図で利用したいのであれば前述のログをご確認いただけることで代用を検討いただけるのではないかと思います。

[Attachment Removed]