このリポジトリは、NeurIPS 2024 論文「Amortized Planning with Large-Scale Transformers: A Case Study on Chess」の実装を提供します。
この論文では、AI における画期的な計画問題であるチェスを使用して、大規模であっても暗記が無駄な計画タスクにおける変圧器のパフォーマンスを評価します。この目的を達成するために、最先端のチェス エンジンである Stockfish 16 によって提供される合法的な手と値の注釈 (150 億のデータ ポイント) を備えた 1,000 万のチェス ゲームの大規模ベンチマーク データセットである ChessBench をリリースします。 ChessBench では教師あり学習を通じて最大 2 億 7,000 万のパラメーターを使用してトランスフォーマーをトレーニングし、広範なアブレーションを実行して、データセット サイズ、モデル サイズ、アーキテクチャ タイプ、およびさまざまな予測ターゲット (状態値、アクション値、および動作のクローン作成) の影響を評価します。私たちの最大のモデルは、新しいボードのアクション値を非常に正確に予測することを学習し、非常に自明ではない一般化を意味します。明示的な検索を実行していないにもかかわらず、結果として得られたチェス ポリシーは、難しいチェス パズルを解決し、人間に対して驚くほど強力な Lichess blitz Elo 2895 を達成しました (グランドマスター レベル)。また、検索ありと検索なしで、Leela Chess Zero および AlphaZero (監督なしでセルフプレイでトレーニングされたもの) と比較します。私たちは、Stockfish の検索ベースのアルゴリズムの非常に優れた近似は、教師あり学習によって大規模な変換器に抽出できるものの、完全な抽出にはまだ到達できず、したがって ChessBench が将来の研究に適していることを示します。
.
|
├── BayesElo - Elo computation (need to be installed)
|
├── checkpoints - Model checkpoints (need to be downloaded)
| ├── 136M
| ├── 270M
| └── 9M
|
├── data - Datasets (need to be downloaded)
| ├── eco_openings.csv
| ├── test
| ├── train
| └── puzzles.csv
|
├── lc0 - Leela Chess Zero (needs to be installed)
|
├── src
| ├── engines
| | ├── constants.py - Engine constants
| | ├── engine.py - Engine interface
| | ├── lc0_engine.py - Leela Chess Zero engine
| | ├── neural_engines.py - Neural engines
| | └── stockfish_engine.py - Stockfish engine
| |
| ├── bagz.py - Readers for our .bag data files
| ├── config.py - Experiment configurations
| ├── constants.py - Constants, interfaces, and types
| ├── data_loader.py - Data loader
| ├── metrics_evaluator.py - Metrics (e.g., Kendall's tau) evaluator
| ├── puzzles.py - Puzzle evaluation script
| ├── searchless_chess.ipynb - Model analysis notebook
| ├── tokenizer.py - Chess board tokenization
| ├── tournament.py - Elo tournament script
| ├── train.py - Example training + evaluation script
| ├── training.py - Training loop
| ├── training_utils.py - Training utility functions
| ├── transformer.py - Decoder-only Transformer
| └── utils.py - Utility functions
|
├── Stockfish - Stockfish (needs to be installed)
|
├── README.md
└── requirements.txt - Dependencies
ソース コードのクローンをローカル ディレクトリに作成します。
git clone https://github.com/google-deepmind/searchless_chess.git
cd searchless_chess
このリポジトリには Python 3.10 が必要です。 pip install -r requirements.txt
必要な依存関係をすべてインストールします。これは conda 環境内で行うのが最適です。そのためには、Anaconda をインストールします。次に、conda 環境を作成してアクティブ化します。
conda create --name searchless_chess python=3.10
conda activate searchless_chess
pip
をインストールし、それを使用してすべての依存関係をインストールします。
conda install pip
pip install -r requirements.txt
利用可能な GPU がある場合 (高速トレーニングに強く推奨)、CUDA をサポートする JAX をインストールできます。
pip install --upgrade " jax[cuda12_pip] " -f https://storage.googleapis.com/jax-releases/jax_cuda_releases.html
jax バージョンは、使用する既存の CUDA インストールに対応している必要があることに注意してください (上記の例では CUDA 12)。詳細については、JAX ドキュメントを参照してください。
最新バージョンの Stockfish をダウンロードしてコンパイルします (Unix 系システム用)。
git clone https://github.com/official-stockfish/Stockfish.git
cd Stockfish/src
make -j profile-build ARCH=x86-64-avx2
cd ../..
Lc0 のダウンロード手順に従います。つまり、
git clone -b release/0.30 --recurse-submodules https://github.com/LeelaChessZero/lc0.git
次に、Lc0 ビルド手順の説明に従ってエンジンをビルドします。
Lc0 のモデル カタログから可能な最大のネットワーク、つまりLarge
ネットワークを使用して Lc0 を評価します。そのネットワークをダウンロードするには、次のコマンドを実行します。
cd lc0/build/release
wget https://storage.lczero.org/files/768x15x24h-t82-swa-7464000.pb.gz
gzip -d 768x15x24h-t82-swa-7464000.pb.gz
cd ../../..
さまざまなエージェントの Elos を計算するには、次のようにインストールできる BayesElo が必要です。
wget https://www.remi-coulom.fr/Bayesian-Elo/bayeselo.tar.bz2
tar -xvjf bayeselo.tar.bz2
cd BayesElo
make bayeselo
cd ..
データセットを正しい場所にダウンロードするには、次のコマンドを実行します。
cd data
./download.sh
cd ..
次の表では、個々のデータセットのダウンロード リンクも提供しています (アクション値データセットは、サイズの関係で 2148 個のファイルにシャード化されており、最初のシャードへのリンクのみが以下にリストされています)。
スプリット | アクションバリュー | 行動のクローニング | 状態値 | パズル |
---|---|---|---|---|
電車 | 1.2GB (1.1TB中) | 34GB | 36GB | - |
テスト | 141MB | 4.1MB | 4.4MB | 4.5MB |
事前トレーニングされたモデルを正しい場所にダウンロードするには、次のコマンドを実行します。
cd checkpoints
./download.sh
cd ..
コードを実行する前に、必ず conda 環境をアクティブ化し、 PYTHONPATH
設定してください。
conda activate searchless_chess
export PYTHONPATH= $( pwd ) /..
モデルをローカルでトレーニングするには、次のコマンドを実行します。
cd src
python train.py
cd ..
モデルのチェックポイントは/checkpoints/local
に保存されます。
モデルのパズルの精度を評価するには、次のコマンドを実行します。
cd src
python puzzles.py --num_puzzles 10 --agent=local
cd ..
puzzles.py
次のエージェントをサポートしています。
local
9M
、 136M
、および270M
stockfish
およびstockfish_all_moves
leela_chess_zero_depth_1
、 leela_chess_zero_policy_net
、およびleela_chess_zero_400_sims
さまざまなエージェントの Elo を計算するには、トーナメントを実行してエージェント間でゲームをプレイし、トーナメントによって生成された PGN ファイルの Elo を計算します (BayesElo の詳細については、ここを参照してください)。
cd src
python tournament.py --num_games=200
cd ../BayesElo
./bayeselo
> ...
ResultSet > readpgn ../data/tournament.pgn
> N game(s) loaded, 0 game(s) with unknown result ignored.
ResultSet > elo
ResultSet-EloRating > mm
> 00:00:00,00
ResultSet-EloRating > exactdist
> 00:00:00,00
ResultSet-EloRating > ratings
> ...
cd ..
モデルの動作を調査するには (たとえば、すべての正当な手の勝率を計算するには)、ノートブック サーバーを起動し、ブラウザでsrc/searchless_chess.ipynb
を開きます。
jupyter notebook
@inproceedings{ruoss2024amortized,
author = {Anian Ruoss and
Gr{ ' {e}}goire Del{ ' {e}}tang and
Sourabh Medapati and
Jordi Grau{-}Moya and
Li Kevin Wenliang and
Elliot Catt and
John Reid and
Cannada A. Lewis and
Joel Veness and
Tim Genewein},
title = {Amortized Planning with Large-Scale Transformers: A Case Study
on Chess},
booktitle = {NeurIPS},
year = {2024}
}
Copyright 2024 DeepMind Technologies Limited
すべてのソフトウェアは、Apache License バージョン 2.0 (Apache 2.0) に基づいてライセンス供与されています。 Apache 2.0 ライセンスに準拠する場合を除き、このファイルを使用することはできません。 Apache 2.0 ライセンスのコピーは、https://www.apache.org/licenses/LICENSE-2.0 で入手できます。
モデルの重みは、クリエイティブ コモンズ表示 4.0 (CC-BY) に基づいてライセンスされています。 CC-BY ライセンスのコピーは、https://creativecommons.org/licenses/by/4.0/legalcode で入手できます。
データセットの一部は、lichess.org のクリエイティブ コモンズ CC0 ライセンスによりパブリック ドメインにあります。データセットの残りの部分は、クリエイティブ コモンズ表示 4.0 (CC-BY) に基づいてライセンスされています。 CC-BY ライセンスのコピーは、https://creativecommons.org/licenses/by/4.0/legalcode で入手できます。
適用される法律で義務付けられている場合、または書面による同意がない限り、Apache 2.0 または CC-BY ライセンスに基づいて配布されるソフトウェアおよびマテリアルは、明示または黙示を問わず、いかなる種類の保証や条件もなく、「現状のまま」で配布されます。ライセンスに基づく許可と制限を規定する特定の言語のライセンスを参照してください。
これは Google の公式製品ではありません。