Ce référentiel fournit une implémentation de notre article NeurIPS 2024 Planification amortie avec des transformateurs à grande échelle : une étude de cas sur les échecs.
Cet article utilise les échecs, un problème de planification historique en IA, pour évaluer les performances des transformateurs dans une tâche de planification où la mémorisation est futile, même à grande échelle. À cette fin, nous publions ChessBench, un ensemble de données de référence à grande échelle de 10 millions de parties d'échecs avec des annotations légales de mouvements et de valeurs (15 milliards de points de données) fourni par Stockfish 16, le moteur d'échecs de pointe. Nous entraînons des transformateurs avec jusqu'à 270 millions de paramètres sur ChessBench via un apprentissage supervisé et effectuons des ablations approfondies pour évaluer l'impact de la taille de l'ensemble de données, de la taille du modèle, du type d'architecture et des différentes cibles de prédiction (valeurs d'état, valeurs d'action et clonage comportemental). Nos plus grands modèles apprennent à prédire avec assez de précision les valeurs d'action pour les nouveaux tableaux, ce qui implique une généralisation très non triviale. Bien qu'elle n'effectue aucune recherche explicite, notre politique d'échecs qui en résulte résout des énigmes d'échecs difficiles et réalise un blitz Lichess Elo étonnamment fort de 2895 contre les humains (niveau grand maître). Nous comparons également à Leela Chess Zero et AlphaZero (entraînés sans supervision via self-play) avec et sans recherche. Nous montrons que, bien qu'une approximation remarquablement bonne de l'algorithme basé sur la recherche de Stockfish puisse être distillée en transformateurs à grande échelle via un apprentissage supervisé, la distillation parfaite est encore hors de portée, ce qui rend ChessBench bien adapté aux recherches futures.
.
|
├── 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
Clonez le code source dans un répertoire local :
git clone https://github.com/google-deepmind/searchless_chess.git
cd searchless_chess
Ce référentiel nécessite Python 3.10. pip install -r requirements.txt
installera toutes les dépendances requises. Il est préférable de le faire dans un environnement conda. À cette fin, installez Anaconda. Ensuite, créez et activez l'environnement conda :
conda create --name searchless_chess python=3.10
conda activate searchless_chess
Installez pip
et utilisez-le pour installer toutes les dépendances :
conda install pip
pip install -r requirements.txt
Si vous disposez d'un GPU (fortement recommandé pour une formation rapide), vous pouvez installer JAX avec le support CUDA.
pip install --upgrade " jax[cuda12_pip] " -f https://storage.googleapis.com/jax-releases/jax_cuda_releases.html
Notez que la version jax doit correspondre à l'installation CUDA existante que vous souhaitez utiliser (CUDA 12 dans l'exemple ci-dessus). Veuillez consulter la documentation JAX pour plus de détails.
Téléchargez et compilez la dernière version de Stockfish (pour les systèmes de type Unix) :
git clone https://github.com/official-stockfish/Stockfish.git
cd Stockfish/src
make -j profile-build ARCH=x86-64-avx2
cd ../..
Suivez les instructions de téléchargement de Lc0, c'est-à-dire
git clone -b release/0.30 --recurse-submodules https://github.com/LeelaChessZero/lc0.git
Construisez ensuite le moteur comme décrit dans les instructions de construction Lc0.
Nous évaluons Lc0 avec le réseau le plus grand possible du catalogue de modèles de Lc0, c'est-à-dire le Large
réseau. Pour télécharger ce réseau, exécutez la commande suivante :
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 ../../..
Pour calculer l'Elos pour les différents agents, nous avons besoin de BayesElo, qui peut être installé comme suit :
wget https://www.remi-coulom.fr/Bayesian-Elo/bayeselo.tar.bz2
tar -xvjf bayeselo.tar.bz2
cd BayesElo
make bayeselo
cd ..
Pour télécharger nos ensembles de données aux emplacements appropriés, exécutez la commande suivante :
cd data
./download.sh
cd ..
Nous fournissons également les liens de téléchargement des ensembles de données individuels dans le tableau suivant (l'ensemble de données action-valeur est divisé en 2 148 fichiers en raison de sa taille et seul le lien vers le premier fragment est répertorié ci-dessous) :
Diviser | Valeur d'action | Clonage comportemental | État-Valeur | Des énigmes |
---|---|---|---|---|
Former | 1,2 Go (sur 1,1 To) | 34 Go | 36 Go | - |
Test | 141 Mo | 4,1 Mo | 4,4 Mo | 4,5 Mo |
Pour télécharger les modèles pré-entraînés aux emplacements appropriés, exécutez la commande suivante :
cd checkpoints
./download.sh
cd ..
Avant d'exécuter un code, assurez-vous d'activer l'environnement conda et de définir le PYTHONPATH
:
conda activate searchless_chess
export PYTHONPATH= $( pwd ) /..
Pour entraîner un modèle localement, exécutez la commande suivante :
cd src
python train.py
cd ..
Les points de contrôle du modèle seront enregistrés dans /checkpoints/local
.
Pour évaluer la précision du puzzle d'un modèle, exécutez la commande suivante :
cd src
python puzzles.py --num_puzzles 10 --agent=local
cd ..
puzzles.py
prend en charge les agents suivants :
local
9M
, 136M
et 270M
stockfish
et stockfish_all_moves
leela_chess_zero_depth_1
, leela_chess_zero_policy_net
et leela_chess_zero_400_sims
Pour calculer l'Elo des différents agents, lancez le tournoi pour jouer à des jeux entre eux, puis calculez l'Elo pour le fichier PGN généré par le tournoi (plus d'informations sur BayesElo peuvent être trouvées ici) :
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 ..
Pour étudier le comportement du modèle (par exemple, pour calculer le pourcentage de victoire pour tous les mouvements légaux), démarrez un serveur notebook, puis ouvrez src/searchless_chess.ipynb
dans votre navigateur :
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 Limitée
Tous les logiciels sont sous licence Apache, version 2.0 (Apache 2.0) ; vous ne pouvez pas utiliser ce fichier sauf en conformité avec la licence Apache 2.0. Vous pouvez obtenir une copie de la licence Apache 2.0 à l'adresse : https://www.apache.org/licenses/LICENSE-2.0
Les poids des modèles sont sous licence Creative Commons Attribution 4.0 (CC-BY). Vous pouvez obtenir une copie de la licence CC-BY à l'adresse : https://creativecommons.org/licenses/by/4.0/legalcode
Certaines parties de l'ensemble de données sont dans le domaine public grâce à une licence Creative Commons CC0 de lichess.org. Le reste de l'ensemble de données est sous licence Creative Commons Attribution 4.0 (CC-BY). Vous pouvez obtenir une copie de la licence CC-BY à l'adresse : https://creativecommons.org/licenses/by/4.0/legalcode.
Sauf disposition contraire de la loi applicable ou accord écrit, les logiciels et matériels distribués sous les licences Apache 2.0 ou CC-BY sont distribués « TELS QUELS », SANS GARANTIE NI CONDITIONS D'AUCUNE SORTE, expresses ou implicites. Consultez les licences pour connaître la langue spécifique régissant les autorisations et les limitations de ces licences.
Ce n'est pas un produit Google officiel.