ONNX Runtime GenAIをUnityで動かす実験

OnnxRuntime を動かす実験のログは以下のScrapに↓
最近気付いた Onnx Runtime Generative AI package。
良さそうなonnxモデルを見かけてpythonコードを見ても、メインの実装はOnnxRuntimeでやっていても、結局 pre-processingをHuggingFace/Transformersに依存していて、モバイル移植できない〜。みたいな経験が多く。
ONNX Runtime GenAIは tokenizer などの実装を C++で実装して、C# 用FFIインターフェースが出ている。
NuGetにビルド済ライブラリが公開されている。など今の私のニーズに合っている気がしたので、Unity C#から動くか実験して見ますというログ

macOS用ライブラリをつかって、ライブラリを起動してみると、UnityEditorごとクラッシュ。
libonnxruntime.dylib
-
libonnxruntime-genai.dylib
を同じフォルダに置くと起動するので、 .dylibを探すのに失敗しているらしい。
ソースコードを読み込むと、ORT_LIB_PATH
という環境変数を設定すれば良さそう。

macOS は動いた!
iOSはstatic linkされてるはずなのに、dylibを呼ぼうとしてクラッシュするな。わからん
Library not loaded: @rpath/onnxruntime-genai.framework/onnxruntime-genai

C#からアクセスされるUnityFramework.frameworkへembedしてみると以下のエラーが出る。コードサイン周りのエラーである。実装的にはC#からアクセスするためにはUnityFramework.framework
へリンクされていなくてはいけないが何か回避策は無いだろうか…。
'/...../onnxruntime-unity-examples.app/Frameworks/UnityFramework.framework/Frameworks/onnxruntime-genai.framework/onnxruntime-genai' (code signature in <.....> '/private/var/containers/Bundle/Application/...../onnxruntime-unity-examples.app/Frameworks/UnityFramework.framework/Frameworks/onnxruntime-genai.framework/onnxruntime-genai' not valid for use in process: mapped file has no cdhash, completely unsigned? Code has to be at least ad-hoc signed.),
と探っていて、UnityFramework.frameworkへはembedなしでリンク。Unity-iPhone本体ターゲット側にembed + signで埋め込み。で起動までは確認した。
該当コードは以下。
この処理が正しいかは自信ないが、起動するようになったので先に進める。

Phi-4 がmacOSで動くのは確認。

モデルの最適化 (for CPU)
CUDA, DirectML対応のonnxモデルは提供されているが、モバイルでの可能性も調べたいので、CPU版も試しておきたい。
動画でつかったモデルは、int4 quantized CPU optimized モデル
マルチモーダルも試してみようと、こちらを試してみたのだが、GPU用のモデルしか提供されてないため残念な速度。
自分でCPU版を生成するのはoliveを使ってできるのかな?試してみよう。

結構手動な作業だな。まだ実験的な対応な気がする

OnnxRuntime Execution Providersへなんの文字列を入れられるのか分かりづらかったが、このPRでわかりやすくなった。