MarioGPTは、「パイプが多い、敵が少ない、高低差がある」のような自然言語の指示から、スーパーマリオブラザーズのステージを自動生成するAIツールです。
GitHub リポジトリを見るMarioGPTは、NeurIPS 2023で発表された研究プロジェクトで、GPT-2(大規模言語モデル)をスーパーマリオブラザーズのステージデータでファインチューニングしたものです。
3.8 以上
8 以上(ステージプレイ用)
CUDA対応。CPUでも動作可
約2GB(モデル自動DL)
プロジェクト専用の仮想環境を作成します。これにより、他のプロジェクトとパッケージが干渉しません。
# プロジェクトディレクトリを作成 $ mkdir mario-gpt-project $ cd mario-gpt-project # Python仮想環境を作成・有効化 $ python3 -m venv venv $ source venv/bin/activate
pipコマンドで簡単にインストールできます。
# pip でインストール(推奨) $ pip install mario-gpt
ソースからインストールする場合:
# リポジトリをクローンしてインストール $ git clone https://github.com/shyamsn97/mario-gpt.git $ cd mario-gpt $ pip install -e .
生成したステージを実際にプレイするには、Java 8以上が必要です。
# Ubuntu / WSL の場合 $ sudo apt update $ sudo apt install default-jdk # バージョン確認 $ java -version openjdk version "17.0.x" ...
Pythonスクリプトでステージを生成してみましょう。初回実行時にモデルが自動的にHugging Faceからダウンロードされます(約500MB)。
# test_mario.py として保存 from mario_gpt import MarioLM # モデルの読み込み(初回はダウンロードが発生) mario_lm = MarioLM() # プロンプトでステージを生成 prompts = ["many pipes, many enemies, some blocks, high elevation"] # ステージ生成(num_stepsでステージの長さを制御) generated_level = mario_lm.sample( prompts=prompts, num_steps=1400, temperature=2.0 ) # 生成結果を表示 generated_level.img.show() # ステージをプレイ!(Java必要) generated_level.play()
# 実行 $ python3 test_mario.py
MarioGPTは以下のキーワードの組み合わせでステージを制御します。
| カテゴリ | キーワード | 効果 |
|---|---|---|
| パイプ | many pipes / some pipes / no pipes |
パイプ(土管)の数を制御 |
| 敵 | many enemies / some enemies / few enemies / no enemies |
敵キャラクターの数を制御 |
| ブロック | many blocks / some blocks / few blocks |
ブロック(? ブロック含む)の数を制御 |
| 高低差 | high elevation / low elevation |
地形の高さ・起伏を制御 |
# 画像として保存 generated_level.img.save("my_level.png") # テキスト表現を取得 level_text = generated_level.level print(level_text) # 複数ステージを一括生成 prompts = [ "many pipes, few enemies, low elevation", "no pipes, many enemies, high elevation", "many blocks, some enemies, high elevation", ] levels = mario_lm.sample(prompts=prompts, num_steps=1400, temperature=2.0)
自分のPCにGPUがない場合や、環境構築が面倒な場合は、Google Colabを使うと簡単に試せます。
# セル1: インストール !pip install mario-gpt !apt-get install -y default-jdk # セル2: ステージ生成 from mario_gpt import MarioLM mario_lm = MarioLM() prompts = ["many pipes, many enemies, some blocks, high elevation"] generated_level = mario_lm.sample(prompts=prompts, num_steps=1400, temperature=2.0) # 生成結果を表示 generated_level.img
MarioGPTで生成したステージのデータを、スーパーマリオの改良課題で作成したゲームに取り込むことで、AIが生成したステージで遊べるゲームを作れます。
仮想環境が有効化されていない可能性があります。source venv/bin/activate を実行してからやり直してください。
num_steps を小さくする(例: 700)か、CPUで実行してください。
# CPUで明示的に実行 import torch device = torch.device("cpu") mario_lm = MarioLM(device=device)
Javaがインストールされていないか、GUIが利用できない環境(リモートサーバ等)の可能性があります。WSLの場合はsudo apt install default-jdkでJavaをインストールしてください。画像保存は generated_level.img.save("level.png") でGUIなしでも可能です。
Hugging Faceからのダウンロードは初回のみです。ネットワーク状況により時間がかかる場合があります。学内Wi-Fiが遅い場合は有線LAN接続を試してください。