ゲームの世界にローカルLLMを!!LlamaCppUnityを公開しました - Thu, May 16, 2024
Writer: 近藤 鯛貴
UnityでローカルLLMを扱えるライブラリ,「LlamaCppUnity」を公開しましたので紹介します。
1.はじめに
近年、LLM(Large Language Models)の利活用が進んでおり、その応用範囲は広がっています。その中でゲーム開発において、LLMを活用したいと考える方も多いと思います。例えばリアルなNPCやプレイヤーの行動に応じた自由度の高い反応を実現したい等。
LLMをアプリに組み込む場合、ChatGPTを筆頭としたクラウドLLMと通信して行うのが主流になっていますが、生成量に応じた課金が必要でゲームへの導入には障壁があります。
そこで、デバイス内でLLMの推論処理を完結するRuntimeライブラリ、 LlamaCppUnityを公開しました。
2. LlamaCppUnity
LlamaCppUnityはllama.cppをバックエンドとしたLLM Runtimeライブラリです。
llama.cppの機能をそのまま使えるので、量子化やGPGPU/SIMD実行, クロスプラットフォーム(Windows, Mac, Android)に対応しています。
MIT Licenseで公開しているので再配布・改造も自由です。(Contribution大歓迎です!)
↓は本ライブラリの紹介動画です。
こちらの動画内で使われているアプリは今回デモ用に作ったユニティちゃんと簡単な会話ができるアプリです。
以下に公開していますので興味がある方はぜひ触ってみてください!(Windows, Android対応)
モデルはELYZA-japanese-Llama-2-7bの2bit量子化モデル
を使っています。
3. サンプルコード
推論を動かすには以下のコードで簡単に実行できます。Token毎に生成結果を返すStream
にも対応しています。
using LlamaCppUnity;
public class LlamaSample : MonoBehaviour
{
void Start()
{
Llama test = new Llama("<path/to/gguf>");
string result = test.Run("Q: Name the planets in the solar system? A: ");
//Output example: "1. Venus, 2. Mercury, 3. Mars,"
//Stream Mode
foreach (string text in test.RunStream("Q: Name the planets in the solar system? A: "))
{
Debug.Log(text);
}
}
}
後ほどデモアプリのソースコードも公開予定です。(アセットをおしゃれにした結果、ライセンス上そのままソースを公開できないアプリになってしまいました…推論部分だけを抽出したサンプルアプリにする予定です。)
4. 今後
Defiosでは現在、どんなゲーム機でもゲーム開発者が簡単にLLMを扱えるSDKを展開することを目的に活動しています。今回のライブラリはそのRuntime部分ということになります。
“どんなゲーム機でも"という部分では、ゲーミングPCのような高性能なGPUを搭載したコンピュータでは数十Bモデルの動作も量子化等を駆使すれば可能になってくると思いますが、スマートフォンスケールではまだまだ厳しい現状です。
現在普及しているスマートフォンのメモリは4GB~8GB程度ですが、7B-2bit量子化モデルでもメモリを2GB程使ってしまい、生成速度・精度も良いとは言えません。
この課題に対して弊社が得意とするAIモデルの軽量化・高速化技術を駆使して解決できないか研究開発中です。また、一般的に生成精度とモデル規模はトレードオフの関係にありますが、ゲームの面白さとは別です。1B以下のモデルでも何か活用できないかも模索しています。
このようにLLM x ゲーム開発というトピックを取り組んでいきますので良ければウォッチしていただけると嬉しいです。
では、良きLLMライフを!