見出し画像

LLM同士をストリートファイター3で戦わせる方法

Twitterを見ていたら、LLM同士をストリートファイター3で戦わせてどちらが性能が良いかを競い合うプロジェクトを見つけました。LLMの性能を計測するベンチマークとしてストリートファイター3を利用しています。

LLM同士を戦わせて、どちらが優れているかを計測するプロジェクトとなります。ストリートファイターというゲームのため、非常に可視化出来てわかりやすく、このプロジェクトは面白いと思いましたので、自身でも実行してみたくなり試してみました。



LLM-Colosseumの設定方法の紹介

LLM-ColosseumのGitHubプロジェクトは、こちらとなります。


主な流れとしては、ストリートファイターの環境を用意し、Docker環境を用意し、コードを実行するの3ステップになります。今回は、OpenAIのgpt-3.5-turboとgpt-4-turbo-preview同士をストリートファイターで戦わせることを目指します。


ストリートファイター3の環境設定

ストリートファイター3の環境設定は、少し複雑です。

DIAMBRAというソフトウェアパッケージをインストールします。diambraというコマンドラインインターフェースをインストールし、DIAMBRAアリーナをインストールします。

python3 -m pip install diambra
python3 -m pip install diambra-arena

次に、利用可能なゲームを確認します。

diambra arena list-roms

すると、次のように表示されます。

出力例

上記は、Street Fighter IIIというROMの情報となります。sfiii3n.zipというROMがストリートファイター用となります。こちらは、各自がなんらかの方法で手に入れる必要があります。

次に、ストリートファイター3のROMを手に入れたら、正しいROMかを下記コマンドで確認します。

diambra arena check-roms 絶対パス指定でsfii3n.zip

正しい場合は、次のようにCorrectと表示されます。

Correct ROM file for Dead Or Alive ++, sha256 = d95855c7d8596a90f0b8ca15725686567d767a9a3f93a8896b489a160e705c4e


次に、DIAMBRAにアカウントを登録します。※このサイトがどういうサイトなのか詳細に調べていないため、自己責任で実行をお願いいたします。

下記にEmailアドレスとPasswordを入力して、Registerを押下しますと、メールで認証コードが来ますので、認証コード入力画面に認証コードを入力して完了となります。


Docker Desktopの起動

次に、Docker Desktopを起動させておきます。この時点では、ただ単にDocker Desktopを起動させておくだけで良いです。最終的には、diambra/engineのイメージがインストールされます。


LLM-Colosseumのインストール方法

次に、LLM-Colosseumのインストールを行っていきます。

git clone https://github.com/OpenGenerativeAI/llm-colosseum.git
cd llm-colosseum.git
pip install -r requirements.txt

次に、3つのファイルを修正していきます。

  1. .envファイル

  2. scriptファイル

  3. Makeファイル

1.envファイル
.envファイルは、.env.exampleとなっておりますので、.envにリネームします。このファイル内で、利用したいLLMのAPIキーを記載します。今回は、OPENAI_API_KEYに、OpenAIのAPIキーを記載してみましょう。

MISTRAL_API_KEY=""
OPENAI_API_KEY="sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
GROK_API_KEY=""
DISABLE_LLM="False"


2.script.pyファイル
script.pyファイルで、戦わせたいLLMの設定をいたします。今回は、OpenAI同士で戦わせたいので、modelのところは次のように、model="openai:gpt-3.5-turbo"とmodel="openai:gpt-4-turbo-preview"と記載いたします。修正後のscript.pyとなります。

import sys

from dotenv import load_dotenv
from eval.game import Game, Player1, Player2, generate_random_model
from loguru import logger

logger.remove()
logger.add(sys.stdout, level="INFO")

load_dotenv()


def main():
    # Environment Settings
    game = Game(
        render=True,
        player_1=Player1(
            nickname="Daddy",
            model="openai:gpt-3.5-turbo",
        ),
        player_2=Player2(
            nickname="Baby",
            model="openai:gpt-4-turbo-preview",
        ),
    )
    return game.run()


3.Makefile

Makefileは、次のように変更しております。python3をpythonに変更したり、私の環境では、C:\Users\81906がホームディレクトリなので、その下に.diambra\domsフォルダを作成し、sfiii3n.zipを配置しております。Makefileで、sfiii3n.zipが置かれている場所を絶対パスで指定します。

run:
	diambra -r "C:\Users\81906\.diambra\roms" run -l python script.py

demo:
	diambra -r "C:\Users\81906\.diambra\roms" run -l python mistral.py && python result.py

install:
	pip install -r requirements.txt

go:
	while true; do make run; done


ここまで実行すれば、準備は完了となります。次のコマンドを実行すると、DIAMBRAのアカウントとPWを求められますので、DIAMBRAのアカウントとPWを入力します。

make run


実行されると、Docker DesktopにDiambraのエンジンがインストールされ、ストリートファイターの画面が表示され、戦いが開始されます。


Docker Desktopの画面

ちなみに、gpt-3.5-turboとgpt-4-turbo-previewを戦わせたら、gpt-3..5-turboが勝ちました。


実行結果のログ

この記事が参加している募集

この記事が気に入ったらサポートをしてみませんか?