はじめに
いままで、幾つかの方法でゲーム開発(Godot)にてローカルLLMを使う方法を記事にしてきました。
記事を書くにあたって調べたことや、記事にしたことを共有したいと思うので、今回のまとめ記事を作りました。
今からLLMを使ったゲーム開発をする方は、どの方法が良いかを考えてみてください。
また、記事作成時点での話なのでご了承ください
対象となるゲームエンジン
この記事では次のゲームエンジンを対象として話していきます。基本的にC系統の言語(C# or C++)が使えれば、ライブラリ化して呼び出せるので、ほとんどのゲームエンジンで利用できると思います。
- Unity : C#
- Unreal Engine : C++
- Godot : C# / C++ / GDScript
また、方法の1つ目であるllamafileを使う方法は、コマンドライン実行に依存するので、ほとんどの言語で使えると思います。
ローカルLLMを使う方法まとめ
本記事で紹介する方法は次の3つです。
- ローカルLLMの実行ファイルを利用する
- llama.cppを直接プログラムに組み込む
- ONNX Runtimeを利用する
各方法についての詳細を書いていきます。
ローカルLLMの実行ファイルを利用する
実装難易度 :
まず1つ目はローカルLLMの実行ファイルを用意し、それをサブプロセスとして実行する方法です。
実行ファイルはllama.cppをビルドすると生成できます。実行ファイルとGUFF形式のモデルデータを用意することで、ほとんどの言語でローカルLLMを利用できます。
また、llama.cppのビルドが面倒であれば、llamafileというダウンロードするだけで利用できる実行ファイルもあります。
これらの実行ファイルを用意し、各言語のコマンドライン実行関数を呼び出せば、LLMの実行が可能です。
また、llama.cpp(llamafile)の実行ファイルにはサーバーモードがあります。サーバーをサブプロセスとして実行し、http通信をすることで、LLMの結果を順次受け取るなどの操作がしやすくなります。
以下の過去記事を参考にしてください。Godotで動かした話ですが、ほとんどのゲームエンジンで転用できると思います。
llama.cppを直接プログラムに組み込む
実装難易度 :
2つ目の方法はllama.cppを外部ライブラリとして、プログラムに組み込むことです。
llama.cppは名前の通りC++で書かれているため、C++のライブラリとして組み込むことが可能です。
また、他の言語のラッパーも多数存在しています(公式ページにラッパー一覧が書いてあります)。
- C# : https://github.com/SciSharp/LLamaSharp
- Java : https://github.com/kherud/java-llama.cpp
- nodeJS : https://github.com/withcatai/node-llama-cpp
- python : https://github.com/abetlen/llama-cpp-python
- Go : https://github.com/go-skynet/go-llama.cpp
これだけあれば、ほとんどのゲームエンジン言語で組み込むことが可能です。
この方法は、1つ目の実行ファイルとして呼び出す方法と比べると、ソフトの安定性が確保されます。なぜなら、「外部プログラムが何らかの要因で止まる」などの外的要因が無いからです。
ただし、ライブラリとして組み込むということは、ライブラリの登録、ドキュメントの理解などの知識が必要になります。また、記事も殆ど無いので、エラーに対処する方法も自分で考えなければなりません。
過去にGodotでllama.cppのC#ラッパーであるLLamaSharpを組み込んだ話を記事にしています。C#はC++より外部ライブラリの登録が簡単なので、おすすめです。
また、この記事の内容はLLMの実行のみをC#で書いているため、容易にUnityへの移植が可能です。
ONNX Runtimeを利用する
実装難易度 :
3つ目の方法としてONNX Runtimeを利用するというものがあります。
![](https://i.ibb.co/0YBy62j/ORT-icon-for-light-bg.png)
これを利用すればONNX形式のモデルが実行できるようになります。
C++やC#、Java, Python, Objective-Cなどにも対応しているので、様々なゲームエンジンに組み込むことが可能になります。
また、C#であればMicrosoftのMicrosoft.ML.OnnxRuntimeGenAIを利用することで更に簡単に実装ができます。簡単なガイドも公開されているので、それに沿うだけで利用可能です。
![](https://learn.microsoft.com/en-us/media/open-graph-image.png)
これらの話をGodotのC#で書いた記事がこちらになります。
もちろんUnityにも移植ができるように書いてあるので、参考にしてください。
この方法のメリットは、ONNX形式のモデルが利用できることであり、GUFF形式に対応していないモデルも利用できることにあります。
また、WindowsであればDirectMLが利用できるため、CUDAを入れなくてもGPU利用ができるようになります。LLamaSharpでGPUを利用しようとするとひと手間かかります。
一方で、ONNX Runtimeは煩雑なドキュメントとなっており、エラーが出た場合に原因を救命するのは、かなり大変です。
逆に利便性だけで言ったら、2つ目のLLamaSharpのほうが簡単にできるので、そちらを利用するのが簡単だと思います。
それと、ONNX RuntimeはLLM以外の機械学習モデルも動かせるため、ONNX Runtimeを実装すれば、LLM以外のモデルも利用できます。
まとめ
今回はゲーム開発でローカルLLMを使う3つ方法をまとめました。
おすすめとしてはとりあえず、1つ目の実行ファイルでLLMを利用する方法を試した後に、2つ目もしくは3つ目を試すのが良いと思います。1つ目の方法はほぼ失敗しないですし、かなり簡単に実装できます。
この記事を参考にした誰かが、LLMを利用したゲームが作り、ゲーム増えていくことを願っています。