Dieses Repository bietet eine Implementierung unseres NeurIPS 2024-Papiers Amortized Planning with Large-Scale Transformers: A Case Study on Chess.
In diesem Artikel wird Schach, ein bahnbrechendes Planungsproblem in der KI, verwendet, um die Leistung von Transformatoren bei einer Planungsaufgabe zu bewerten, bei der das Auswendiglernen sinnlos ist – selbst im großen Maßstab. Zu diesem Zweck veröffentlichen wir ChessBench, einen umfangreichen Benchmark-Datensatz von 10 Millionen Schachpartien mit legalen Zug- und Wertanmerkungen (15 Milliarden Datenpunkte), der von Stockfish 16, der hochmodernen Schach-Engine, bereitgestellt wird. Wir trainieren Transformatoren mit bis zu 270 Millionen Parametern auf ChessBench durch überwachtes Lernen und führen umfangreiche Ablationen durch, um die Auswirkungen von Datensatzgröße, Modellgröße, Architekturtyp und verschiedenen Vorhersagezielen (Zustandswerte, Aktionswerte und Verhaltensklonen) zu bewerten. Unsere größten Modelle lernen, Aktionswerte für neuartige Boards ziemlich genau vorherzusagen, was eine höchst nicht triviale Verallgemeinerung impliziert. Obwohl keine explizite Suche durchgeführt wird, löst unsere resultierende Schachrichtlinie anspruchsvolle Schachrätsel und erreicht einen überraschend starken Lichess-Blitz-Elo von 2895 gegen Menschen (Großmeisterniveau). Wir vergleichen auch mit Leela Chess Zero und AlphaZero (ohne Aufsicht durch Selbstspiel trainiert) mit und ohne Suche. Wir zeigen, dass zwar eine bemerkenswert gute Annäherung an den suchbasierten Algorithmus von Stockfish durch überwachtes Lernen in groß angelegte Transformatoren destilliert werden kann, eine perfekte Destillation jedoch immer noch unerreichbar ist, sodass ChessBench für zukünftige Forschung gut geeignet ist.
.
|
├── 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
Klonen Sie den Quellcode in ein lokales Verzeichnis:
git clone https://github.com/google-deepmind/searchless_chess.git
cd searchless_chess
Dieses Repository erfordert Python 3.10. pip install -r requirements.txt
installiert alle erforderlichen Abhängigkeiten. Dies geschieht am besten in einer Conda-Umgebung. Installieren Sie zu diesem Zweck Anaconda. Erstellen und aktivieren Sie dann die Conda-Umgebung:
conda create --name searchless_chess python=3.10
conda activate searchless_chess
Installieren Sie pip
und installieren Sie damit alle Abhängigkeiten:
conda install pip
pip install -r requirements.txt
Wenn Sie über eine GPU verfügen (sehr empfehlenswert für schnelles Training), können Sie JAX mit CUDA-Unterstützung installieren.
pip install --upgrade " jax[cuda12_pip] " -f https://storage.googleapis.com/jax-releases/jax_cuda_releases.html
Beachten Sie, dass die Jax-Version der vorhandenen CUDA-Installation entsprechen muss, die Sie verwenden möchten (CUDA 12 im Beispiel oben). Weitere Informationen finden Sie in der JAX-Dokumentation.
Laden Sie die neueste Version von Stockfish herunter und kompilieren Sie sie (für Unix-ähnliche Systeme):
git clone https://github.com/official-stockfish/Stockfish.git
cd Stockfish/src
make -j profile-build ARCH=x86-64-avx2
cd ../..
Befolgen Sie die Anweisungen zum Herunterladen von Lc0, d. h.
git clone -b release/0.30 --recurse-submodules https://github.com/LeelaChessZero/lc0.git
Bauen Sie dann die Engine wie in der Lc0-Bauanleitung beschrieben auf.
Wir bewerten Lc0 mit dem größtmöglichen Netzwerk aus dem Modellkatalog von Lc0, also dem Large
Netzwerk. Um dieses Netzwerk herunterzuladen, führen Sie den folgenden Befehl aus:
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 ../../..
Um den Elos für die verschiedenen Agenten zu berechnen, benötigen wir BayesElo, das wie folgt installiert werden kann:
wget https://www.remi-coulom.fr/Bayesian-Elo/bayeselo.tar.bz2
tar -xvjf bayeselo.tar.bz2
cd BayesElo
make bayeselo
cd ..
Um unsere Datensätze an die richtigen Speicherorte herunterzuladen, führen Sie den folgenden Befehl aus:
cd data
./download.sh
cd ..
In der folgenden Tabelle stellen wir auch die einzelnen Download-Links für Datensätze bereit (der Aktionswert-Datensatz ist aufgrund seiner Größe in 2148 Dateien unterteilt und nur der Link zum ersten Shard ist unten aufgeführt):
Teilt | Aktionswert | Verhaltensklonen | Zustandswert | Rätsel |
---|---|---|---|---|
Zug | 1,2 GB (von 1,1 TB) | 34 GB | 36 GB | - |
Prüfen | 141 MB | 4,1 MB | 4,4 MB | 4,5 MB |
Führen Sie den folgenden Befehl aus, um die vorab trainierten Modelle an die richtigen Speicherorte herunterzuladen:
cd checkpoints
./download.sh
cd ..
Bevor Sie Code ausführen, stellen Sie sicher, dass Sie die Conda-Umgebung aktivieren und den PYTHONPATH
festlegen:
conda activate searchless_chess
export PYTHONPATH= $( pwd ) /..
Um ein Modell lokal zu trainieren, führen Sie den folgenden Befehl aus:
cd src
python train.py
cd ..
Die Modellprüfpunkte werden unter /checkpoints/local
gespeichert.
Führen Sie den folgenden Befehl aus, um die Puzzle-Genauigkeit eines Modells zu bewerten:
cd src
python puzzles.py --num_puzzles 10 --agent=local
cd ..
puzzles.py
unterstützt die folgenden Agenten:
local
9M
, 136M
und 270M
stockfish
und stockfish_all_moves
leela_chess_zero_depth_1
, leela_chess_zero_policy_net
und leela_chess_zero_400_sims
Um den Elo für die verschiedenen Agenten zu berechnen, führen Sie das Turnier aus, um Spiele zwischen ihnen auszuspielen, und berechnen Sie dann den Elo für die vom Turnier generierte PGN-Datei (weitere Informationen zu BayesElo finden Sie hier):
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 ..
Um das Verhalten des Modells zu untersuchen (z. B. um den Gewinnprozentsatz für alle legalen Züge zu berechnen), starten Sie einen Notebook-Server und öffnen Sie dann src/searchless_chess.ipynb
in Ihrem Browser:
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
Die gesamte Software ist unter der Apache-Lizenz, Version 2.0 (Apache 2.0), lizenziert. Sie dürfen diese Datei nur in Übereinstimmung mit der Apache 2.0-Lizenz verwenden. Eine Kopie der Apache 2.0-Lizenz erhalten Sie unter: https://www.apache.org/licenses/LICENSE-2.0
Die Modellgewichte sind unter Creative Commons Attribution 4.0 (CC-BY) lizenziert. Eine Kopie der CC-BY-Lizenz erhalten Sie unter: https://creativecommons.org/licenses/by/4.0/legalcode
Einige Teile des Datensatzes sind durch eine Creative Commons CC0-Lizenz von lichess.org gemeinfrei. Der Rest des Datensatzes ist unter Creative Commons Attribution 4.0 (CC-BY) lizenziert. Eine Kopie der CC-BY-Lizenz erhalten Sie unter: https://creativecommons.org/licenses/by/4.0/legalcode.
Sofern nicht durch geltendes Recht vorgeschrieben oder schriftlich vereinbart, werden Software und Materialien, die unter der Apache 2.0- oder CC-BY-Lizenz vertrieben werden, „WIE BESEHEN“ und OHNE GEWÄHRLEISTUNGEN ODER BEDINGUNGEN JEGLICHER ART, weder ausdrücklich noch stillschweigend, vertrieben. Sehen Sie sich die Lizenzen für die spezifische Sprache an, die die Berechtigungen und Einschränkungen dieser Lizenzen regelt.
Dies ist kein offizielles Google-Produkt.