Este repositorio proporciona una implementación de nuestro documento NeurIPS 2024 Planificación amortizada con transformadores a gran escala: un estudio de caso sobre ajedrez.
Este artículo utiliza el ajedrez, un problema de planificación histórico en la IA, para evaluar el desempeño de los transformadores en una tarea de planificación donde la memorización es inútil, incluso a gran escala. Con este fin, lanzamos ChessBench, un conjunto de datos de referencia a gran escala de 10 millones de partidas de ajedrez con movimientos legales y anotaciones de valor (15 mil millones de puntos de datos) proporcionados por Stockfish 16, el motor de ajedrez de última generación. Entrenamos transformadores con hasta 270 millones de parámetros en ChessBench mediante aprendizaje supervisado y realizamos ablaciones extensas para evaluar el impacto del tamaño del conjunto de datos, el tamaño del modelo, el tipo de arquitectura y diferentes objetivos de predicción (valores de estado, valores de acción y clonación de comportamiento). Nuestros modelos más grandes aprenden a predecir valores de acción para tableros novedosos con bastante precisión, lo que implica una generalización muy no trivial. A pesar de no realizar una búsqueda explícita, nuestra política de ajedrez resultante resuelve desafiantes acertijos de ajedrez y logra un bombardeo de Lichess sorprendentemente fuerte Elo de 2895 contra humanos (nivel de gran maestro). También lo comparamos con Leela Chess Zero y AlphaZero (entrenados sin supervisión mediante autojuego) con y sin búsqueda. Mostramos que, aunque se puede destilar una aproximación notablemente buena del algoritmo basado en búsqueda de Stockfish en transformadores a gran escala mediante aprendizaje supervisado, la destilación perfecta aún está fuera de alcance, lo que hace que ChessBench sea muy adecuado para futuras investigaciones.
.
|
├── 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
Clona el código fuente en un directorio local:
git clone https://github.com/google-deepmind/searchless_chess.git
cd searchless_chess
Este repositorio requiere Python 3.10. pip install -r requirements.txt
instalará todas las dependencias requeridas. Esto se hace mejor dentro de un entorno conda. Para ello, instale Anaconda. Luego, crea y activa el entorno conda:
conda create --name searchless_chess python=3.10
conda activate searchless_chess
Instale pip
y úselo para instalar todas las dependencias:
conda install pip
pip install -r requirements.txt
Si tiene una GPU disponible (muy recomendable para un entrenamiento rápido), puede instalar JAX con soporte CUDA.
pip install --upgrade " jax[cuda12_pip] " -f https://storage.googleapis.com/jax-releases/jax_cuda_releases.html
Tenga en cuenta que la versión de jax debe corresponder a la instalación CUDA existente que desea utilizar (CUDA 12 en el ejemplo anterior). Consulte la documentación de JAX para obtener más detalles.
Descargue y compile la última versión de Stockfish (para sistemas tipo Unix):
git clone https://github.com/official-stockfish/Stockfish.git
cd Stockfish/src
make -j profile-build ARCH=x86-64-avx2
cd ../..
Siga las instrucciones de descarga de Lc0, es decir,
git clone -b release/0.30 --recurse-submodules https://github.com/LeelaChessZero/lc0.git
Luego construya el motor como se describe en las instrucciones de construcción de Lc0.
Evaluamos Lc0 con la red más grande posible del catálogo de modelos de Lc0, es decir, la red Large
. Para descargar esa red, ejecute el siguiente comando:
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 ../../..
Para calcular los Elos para los diferentes agentes, necesitamos BayesElo, que se puede instalar de la siguiente manera:
wget https://www.remi-coulom.fr/Bayesian-Elo/bayeselo.tar.bz2
tar -xvjf bayeselo.tar.bz2
cd BayesElo
make bayeselo
cd ..
Para descargar nuestros conjuntos de datos en las ubicaciones correctas, ejecute el siguiente comando:
cd data
./download.sh
cd ..
También proporcionamos los enlaces de descarga de conjuntos de datos individuales en la siguiente tabla (el conjunto de datos de valor de acción está dividido en 2148 archivos debido a su tamaño y solo el enlace al primer fragmento se enumera a continuación):
Dividir | Valor de acción | Clonación conductual | Valor de estado | Rompecabezas |
---|---|---|---|---|
Tren | 1,2 GB (de 1,1 TB) | 34GB | 36GB | - |
Prueba | 141 megas | 4,1 megas | 4,4MB | 4,5 megas |
Para descargar los modelos previamente entrenados en las ubicaciones correctas, ejecute el siguiente comando:
cd checkpoints
./download.sh
cd ..
Antes de ejecutar cualquier código, asegúrese de activar el entorno conda y configurar PYTHONPATH
:
conda activate searchless_chess
export PYTHONPATH= $( pwd ) /..
Para entrenar un modelo localmente, ejecute el siguiente comando:
cd src
python train.py
cd ..
Los puntos de control del modelo se guardarán en /checkpoints/local
.
Para evaluar la precisión del rompecabezas de un modelo, ejecute el siguiente comando:
cd src
python puzzles.py --num_puzzles 10 --agent=local
cd ..
puzzles.py
admite los siguientes agentes:
local
9M
, 136M
y 270M
stockfish
y stockfish_all_moves
leela_chess_zero_depth_1
, leela_chess_zero_policy_net
y leela_chess_zero_400_sims
Para calcular el Elo para los diferentes agentes, ejecute el torneo para jugar juegos entre ellos y luego calcule el Elo para el archivo PGN generado por el torneo (puede encontrar más información sobre BayesElo aquí):
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 ..
Para investigar el comportamiento del modelo (por ejemplo, para calcular el porcentaje de ganancias para todos los movimientos legales), inicie un servidor portátil y luego abra src/searchless_chess.ipynb
en su navegador:
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
Todo el software tiene la licencia Apache, versión 2.0 (Apache 2.0); no puede utilizar este archivo excepto de conformidad con la licencia Apache 2.0. Puede obtener una copia de la licencia Apache 2.0 en: https://www.apache.org/licenses/LICENSE-2.0
Los pesos del modelo tienen licencia Creative Commons Attribution 4.0 (CC-BY). Puede obtener una copia de la licencia CC-BY en: https://creativecommons.org/licenses/by/4.0/legalcode
Algunas partes del conjunto de datos son de dominio público mediante una licencia Creative Commons CC0 de lichess.org. El resto del conjunto de datos tiene licencia Creative Commons Attribution 4.0 (CC-BY). Puede obtener una copia de la licencia CC-BY en: https://creativecommons.org/licenses/by/4.0/legalcode.
A menos que lo exija la ley aplicable o se acuerde por escrito, el software y los materiales distribuidos bajo las licencias Apache 2.0 o CC-BY se distribuyen "TAL CUAL", SIN GARANTÍAS NI CONDICIONES DE NINGÚN TIPO, ya sean expresas o implícitas. Consulte las licencias para conocer el idioma específico que rige los permisos y limitaciones de dichas licencias.
Este no es un producto oficial de Google.