Unity Sentisを使ってonnxでデバイスのみで動くLLMを実装する

初めに

Unityが Unity Sentisで動く phi 1.5のONNXのモデルを公開しているので、こちらを動かしていきます

huggingface.co

(注)Unityが Unity Sentis 1.4向けのONNXを公開していないので、1.3で動かしています

Demo

以下の動画のように動きます

youtu.be

またリポジトリは以下で公開しています

github.com

開発環境

  • Unity 2023.3.0b2
  • Unity Sentis 1.3.0-pre.3
  • nuget.newtonsoft-json 3.2.1

ライブラリのインストール

まずは、Unityを立ち上げて必要なライブラリを入れます

manifest.jsonに以下を追加します

    "com.unity.nuget.newtonsoft-json": "3.2.1",
    "com.unity.sentis": "1.3.0-pre.3",

モデルのダウンロード

2024/05/07時点で、Unity Sentis 1.4向けのONNXを公開していないみたいなので 1.3で動かしていきます

Yes, working on it. The 1.30 version is still here: https://huggingface.co/unity/sentis-phi-1_5/tree/sentis-1-3-0 But we need to upload the 1.4.0 version. The internet was a being a bit slow to upload such a large file. But it should be up there soon.

huggingface.co

以下で 1.3のブランチからモデル等をクローンしてきます

git lfs install
git clone https://huggingface.co/unity/sentis-phi-1_5
cd sentis-phi-1_5/
git checkout -b sentis-1-3-0 origin/sentis-1-3-0

再度のブランチの切り替えは、約6GBのモデルをダウンロードするので時間がかかります

(クローンしなくても以下のダウンロードボタンを押すことでモデルの取得は可能です)

モデルとスクリプトのUnityへの配置

ダウンロードしたモデルを以下の画像のように配置します この時に phi15.sentisvocab.jsonmerges.txtAssets/StreamingAssets に入れる必要があります

Assets/StreamingAssets

RunPhi15.cs

Unity側でLLMの実行

配置が終わったらUnity側で実行をすると 以下で設定されているプロンプトの返信を行い、コンソールに表示されます

    string outputString = "Once upon a time, there were three";

出力