Este repositório fornece uma implementação de nosso artigo NeurIPS 2024 Planejamento Amortizado com Transformadores em Grande Escala: Um Estudo de Caso sobre Xadrez.
Este artigo usa o xadrez, um problema de planejamento histórico em IA, para avaliar o desempenho dos transformadores em uma tarefa de planejamento onde a memorização é inútil – mesmo em grande escala. Para este fim, lançamos o ChessBench, um conjunto de dados de referência em grande escala de 10 milhões de jogos de xadrez com movimentos legais e anotações de valor (15 bilhões de pontos de dados) fornecidos pelo Stockfish 16, o mecanismo de xadrez de última geração. Treinamos transformadores com até 270 milhões de parâmetros no ChessBench por meio de aprendizagem supervisionada e realizamos extensas ablações para avaliar o impacto do tamanho do conjunto de dados, tamanho do modelo, tipo de arquitetura e diferentes alvos de previsão (valores de estado, valores de ação e clonagem comportamental). Nossos maiores modelos aprendem a prever valores de ação para novos conselhos com bastante precisão, implicando uma generalização altamente não trivial. Apesar de não realizar nenhuma pesquisa explícita, nossa política de xadrez resultante resolve quebra-cabeças de xadrez desafiadores e alcança uma blitz Lichess Elo de 2895 surpreendentemente forte contra humanos (nível de grande mestre). Também comparamos com Leela Chess Zero e AlphaZero (treinados sem supervisão via autojogo) com e sem pesquisa. Mostramos que, embora uma aproximação notavelmente boa do algoritmo baseado em pesquisa do Stockfish possa ser destilada em transformadores de grande escala através de aprendizagem supervisionada, a destilação perfeita ainda está além do alcance, tornando assim o ChessBench adequado para pesquisas futuras.
.
|
├── 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
Clone o código-fonte em um diretório local:
git clone https://github.com/google-deepmind/searchless_chess.git
cd searchless_chess
Este repositório requer Python 3.10. pip install -r requirements.txt
instalará todas as dependências necessárias. Isso é melhor feito dentro de um ambiente conda. Para isso, instale o Anaconda. Em seguida, crie e ative o ambiente conda:
conda create --name searchless_chess python=3.10
conda activate searchless_chess
Instale pip
e use-o para instalar todas as dependências:
conda install pip
pip install -r requirements.txt
Se você tiver uma GPU disponível (altamente recomendada para treinamento rápido), poderá instalar o JAX com suporte CUDA.
pip install --upgrade " jax[cuda12_pip] " -f https://storage.googleapis.com/jax-releases/jax_cuda_releases.html
Observe que a versão jax deve corresponder à instalação CUDA existente que você deseja usar (CUDA 12 no exemplo acima). Consulte a documentação do JAX para obter mais detalhes.
Baixe e compile a versão mais recente do Stockfish (para sistemas do tipo Unix):
git clone https://github.com/official-stockfish/Stockfish.git
cd Stockfish/src
make -j profile-build ARCH=x86-64-avx2
cd ../..
Siga as instruções de download do Lc0, ou seja,
git clone -b release/0.30 --recurse-submodules https://github.com/LeelaChessZero/lc0.git
Em seguida, construa o mecanismo conforme descrito nas instruções de construção do Lc0.
Avaliamos Lc0 com a maior rede possível do catálogo de modelos de Lc0, ou seja, a rede Large
. Para baixar essa rede, execute o seguinte 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 os Elos dos diferentes agentes, necessitamos do BayesElo, que pode ser instalado da seguinte forma:
wget https://www.remi-coulom.fr/Bayesian-Elo/bayeselo.tar.bz2
tar -xvjf bayeselo.tar.bz2
cd BayesElo
make bayeselo
cd ..
Para baixar nossos conjuntos de dados nos locais corretos, execute o seguinte comando:
cd data
./download.sh
cd ..
Também fornecemos os links de download de conjuntos de dados individuais na tabela a seguir (o conjunto de dados de valor de ação é fragmentado em 2.148 arquivos devido ao seu tamanho e apenas o link para o primeiro fragmento está listado abaixo):
Dividir | Ação-Valor | Clonagem Comportamental | Valor do estado | Quebra-cabeças |
---|---|---|---|---|
Trem | 1,2 GB (de 1,1 TB) | 34GB | 36GB | - |
Teste | 141MB | 4,1MB | 4,4MB | 4,5MB |
Para baixar os modelos pré-treinados nos locais corretos, execute o seguinte comando:
cd checkpoints
./download.sh
cd ..
Antes de executar qualquer código, certifique-se de ativar o ambiente conda e definir o PYTHONPATH
:
conda activate searchless_chess
export PYTHONPATH= $( pwd ) /..
Para treinar um modelo localmente, execute o seguinte comando:
cd src
python train.py
cd ..
Os pontos de verificação do modelo serão salvos em /checkpoints/local
.
Para avaliar a precisão do quebra-cabeça de um modelo, execute o seguinte comando:
cd src
python puzzles.py --num_puzzles 10 --agent=local
cd ..
puzzles.py
oferece suporte aos seguintes agentes:
local
9M
, 136M
e 270M
stockfish
e stockfish_all_moves
leela_chess_zero_depth_1
, leela_chess_zero_policy_net
e leela_chess_zero_400_sims
Para calcular o Elo para os diferentes agentes, execute o torneio para jogar entre eles e depois calcule o Elo para o arquivo PGN gerado pelo torneio (mais informações sobre BayesElo podem ser encontradas aqui):
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 o comportamento do modelo (por exemplo, para calcular a porcentagem de vitórias para todos os movimentos legais), inicie um servidor notebook e abra src/searchless_chess.ipynb
em seu 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}
}
Direitos autorais 2024 DeepMind Technologies Limited
Todo o software é licenciado sob a Licença Apache, Versão 2.0 (Apache 2.0); você não pode usar este arquivo, exceto em conformidade com a licença Apache 2.0. Você pode obter uma cópia da licença Apache 2.0 em: https://www.apache.org/licenses/LICENSE-2.0
Os pesos do modelo são licenciados sob Creative Commons Attribution 4.0 (CC-BY). Você pode obter uma cópia da licença CC-BY em: https://creativecommons.org/licenses/by/4.0/legalcode
Algumas partes do conjunto de dados são de domínio público por uma licença Creative Commons CC0 de lichess.org. O restante do conjunto de dados está licenciado sob Creative Commons Attribution 4.0 (CC-BY). Você pode obter uma cópia da licença CC-BY em: https://creativecommons.org/licenses/by/4.0/legalcode.
A menos que exigido pela lei aplicável ou acordado por escrito, o software e os materiais distribuídos sob as licenças Apache 2.0 ou CC-BY são distribuídos "COMO ESTÃO", SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, expressas ou implícitas. Consulte as licenças para o idioma específico que rege as permissões e limitações dessas licenças.
Este não é um produto oficial do Google.