В этом репозитории представлена реализация нашего документа NeurIPS 2024 «Амортизированное планирование с крупномасштабными трансформаторами: практический пример шахмат».
В этой статье шахматы, знаковая задача планирования в области искусственного интеллекта, используются для оценки эффективности преобразователей при выполнении задачи планирования, где запоминание бесполезно — даже в больших масштабах. С этой целью мы выпускаем ChessBench, крупномасштабный эталонный набор данных из 10 миллионов шахматных партий с легальными аннотациями ходов и значений (15 миллиардов точек данных), предоставленный Stockfish 16, современным шахматным движком. Мы обучаем трансформаторы с до 270 миллионами параметров на ChessBench посредством контролируемого обучения и выполняем обширные удаления, чтобы оценить влияние размера набора данных, размера модели, типа архитектуры и различных целей прогнозирования (значения состояния, значения действия и клонирование поведения). Наши крупнейшие модели учатся довольно точно предсказывать значения действий для новых досок, что подразумевает весьма нетривиальное обобщение. Несмотря на отсутствие явного поиска, наша полученная шахматная политика решает сложные шахматные головоломки и достигает удивительно сильного блиц-эло 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
Если у вас есть графический процессор (настоятельно рекомендуется для быстрого обучения), вы можете установить JAX с поддержкой CUDA.
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 с помощью максимально возможной сети из каталога моделей Lc0, т. е. Large
сети. Чтобы загрузить эту сеть, выполните следующую команду:
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,2 ГБ (из 1,1 ТБ) | 34 ГБ | 36 ГБ | - |
Тест | 141 МБ | 4,1 МБ | 4,4 МБ | 4,5 МБ |
Чтобы загрузить предварительно обученные модели в нужные места, выполните следующую команду:
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 для разных агентов, запустите турнир, чтобы сыграть игры между ними, а затем вычислите Elo для файла PGN, сгенерированного турниром (более подробную информацию о 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}
}
Авторские права принадлежат DeepMind Technologies Limited, 2024 г.
Все программное обеспечение лицензируется по лицензии Apache версии 2.0 (Apache 2.0); вы не можете использовать этот файл, кроме как в соответствии с лицензией Apache 2.0. Вы можете получить копию лицензии Apache 2.0 по адресу: https://www.apache.org/licenses/LICENSE-2.0.
Вес модели распространяется по лицензии Creative Commons Attribution 4.0 (CC-BY). Вы можете получить копию лицензии CC-BY по адресу: https://creativecommons.org/licenses/by/4.0/legalcode.
Некоторые части набора данных находятся в свободном доступе по лицензии Creative Commons CC0 от lichess.org. Остальная часть набора данных находится под лицензией Creative Commons Attribution 4.0 (CC-BY). Вы можете получить копию лицензии CC-BY по адресу: https://creativecommons.org/licenses/by/4.0/legalcode.
Если это не требуется действующим законодательством или не согласовано в письменной форме, программное обеспечение и материалы, распространяемые по лицензиям Apache 2.0 или CC-BY, распространяются на условиях «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ ИЛИ УСЛОВИЙ, явных или подразумеваемых. См. лицензии на конкретный язык, регулирующий разрешения и ограничения в рамках этих лицензий.
Это не официальный продукт Google.