MRが楽しい

MRやVRについて学習したことを書き残す

Unity.InferenceEngineパッケージを使ってSLMをUnity上で実行する

本日はUnityの小ネタ枠です。
Unity.InferenceEngineパッケージを使ってSLMをUnity上で実行する方法です。

SLMとは

SLM(Small Language Model)は小規模な言語モデルを指します。
LLM(Large Language Model)と比較してサイズが小さくエッジデバイスで動くよう最適化されています。
ただしLLMと比較すると知識量や推論性能は低くなります。

モデルを取得する

今回は以下のRinna Japanese GPT2モデルを利用しました。
ONNX版があるため、Unity.InferenceEngineでそのまま利用できます。
saldra/rinna-japanese-gpt2-xsmall-onnx · Hugging Face

[Files and versions]を開き、onnxフォルダのモデルとtokenizer.jsonをダウンロードします。

Unityにモデルを取り込む際、Inspectorでbatch_size = 1、seequence_length = 64〜128に設定して最適化します。
batch_sizeは入力する文章の数、sequence_lengthは一度に扱えるトークン列(文章)の長さに当たります。
デフォルトだと、batch_size = -1(動的)、sequence_length = -1(動的)に設定されており、推論コンパイラが最適化できません。

Unity.InferenceEngineパッケージを使ってSLMをUnity上で実行する

Unity.InferenceEngineでSLMの言語推論を利用する場合、文字列をテンソルとして受け渡す必要があります。
以下のようなRinnaモデルに合わせて言語推論を行うサンプルスクリプトを作成しました。
・RinnaModelService.cs

スクリプトをシーンに配置し、シーンを再生します。

コメントを入力すると推論結果が返ってきました。