Hex Judgeでは、NPCとの会話生成にローカルLLMを使用しています。これまでメインモデルとしてGemma 2 9Bを使用していましたが、今回、Gemma 4 E4Bへの移行を行いました。
今回の移行で目指したのは、単純に「新しいモデルに変更する」ことではありません。
Hex Judgeでは、プレイヤーが村人を尋問し、その返答を読みながら次の質問を考えるというゲームデザインになっています。そのため、LLMの性能はそのままゲームのテンポや遊びやすさに直結します。
特に改善したかったのが、会話開始時のロード時間と、会話中のレスポンスの滑らかさです。
これまでのGemma 2 9Bでは、環境によっては最初の会話生成までにかなり時間がかかることがありました。プレイヤーが質問を入力してから長く待つ必要があると、尋問ゲームとしての緊張感が途切れてしまいます。
Gemma 4 E4Bへの移行では、モデルそのものの変更に加えて、llama.cppやCUDA周辺の構成も見直しました。より軽量なモデルを使うことで、ロード時間や会話時の処理負荷を抑えながら、NPCとの会話をよりテンポよく進められることを目指しました。
また、Hex Judgeは多言語対応も進めています。日本語だけでなく、英語、中国語、スペイン語、ポルトガル語など、複数の言語でNPCとの会話を成立させる必要があります。
ローカルLLMによる会話では、単純な固定テキストの翻訳とは違い、プレイヤーの質問に応じて、その場で生成される文章そのものが自然であることが重要です。
そのため、モデルを変更する際には、日本語だけでなく各言語での会話の自然さや、キャラクター性が維持されるかという点も確認しました。
しかし、今回の移行で最大の問題になったのがGPU互換性でした。
開発PCでは正常に動作する一方、別のPCでは会話処理のタイミングで問題が発生。WinDbgによる解析を行ったところ、
no kernel image is available for execution on the device
というCUDA関連のエラーを確認しました。
さらに調査を進めると、GPU世代によって利用できるCUDAカーネルが異なることが分かり、CUDA環境そのものも見直す必要がありました。
そこでCUDA 12.9を使用してggml-cuda.dllを再ビルド。
今回は、GTX 1070世代のsm_61からRTX 40シリーズ、さらにRTX 50世代までを想定したGPUアーキテクチャを収録し、PTXも含めた構成にしました。
このDLLのビルドには、なんと約4時間かかりました。
完成したDLLを問題が発生していたPCで検証したところ、ゲームの起動だけでなく、会話、エピローグ生成、エンディングまで正常に動作。
さらに、友人のPCにある
Core i7-8750H / メモリ16GB / GeForce GTX 1070 8GB
という環境でも同じく最後までプレイできることを確認しました。
これにより、最低動作環境についても、これまでのRTX 2060からGTX 1070まで引き下げることができました。
今回のGemma 4 E4Bへの移行は、モデルファイルを入れ替えるだけの作業ではありませんでした。
LLM、llama.cpp、CUDA、GPUアーキテクチャ、DLLの依存関係、そして実際のユーザー環境での動作確認。
これらを一つずつ確認していく必要がありました。
その結果、会話のテンポ、ロード時間、会話の滑らかさ、多言語対応、そしてGPU互換性を含めて、Hex JudgeのローカルLLM環境を一段階進化させることができました。
ローカルLLMをゲームに組み込む場合、モデルの性能だけではなく、「プレイヤーのPCでちゃんと動くこと」そのものがゲーム体験の一部になると今回改めて感じました。
4時間かけてビルドしたDLLが、GTX 1070で動いてエンディングまで到達した瞬間は、今回の作業が報われたと感じました。
これで、より多くのプレイヤーに「AIと会話するゲーム」ではなく、「会話そのものがゲームプレイになる」Hex Judgeを体験してもらえる環境に近づけたと思います。
フォローすると、開発ログや新作ゲームの公開が通知されます