이 저장소는 NeurIPS 2024 논문 대규모 변압기를 사용한 상각 계획: 체스에 대한 사례 연구의 구현을 제공합니다.
이 논문에서는 AI의 획기적인 계획 문제인 체스를 사용하여 대규모에서도 암기가 무의미한 계획 작업에 대한 변환기의 성능을 평가합니다. 이를 위해 최첨단 체스 엔진인 Stockfish 16에서 제공하는 합법적인 이동 및 값 주석(150억 데이터 포인트)이 포함된 1,000만 개의 체스 게임에 대한 대규모 벤치마크 데이터 세트인 ChessBench를 출시합니다. 우리는 지도 학습을 통해 ChessBench에서 최대 2억 7천만 개의 매개변수로 변환기를 훈련하고 광범위한 제거를 수행하여 데이터 세트 크기, 모델 크기, 아키텍처 유형 및 다양한 예측 대상(상태 값, 작업 값 및 행동 복제)의 영향을 평가합니다. 우리의 가장 큰 모델은 새로운 보드의 행동 가치를 매우 정확하게 예측하는 방법을 학습하며 이는 매우 사소하지 않은 일반화를 의미합니다. 명시적인 검색을 수행하지 않음에도 불구하고 결과적인 체스 정책은 까다로운 체스 퍼즐을 해결하고 인간(그랜드마스터 수준)을 상대로 놀랍도록 강력한 Lichess 공세 Elo 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
사용 가능한 GPU가 있는 경우(빠른 훈련에 적극 권장됨) CUDA를 지원하는 JAX를 설치할 수 있습니다.
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의 모델 카탈로그에서 가능한 가장 큰 네트워크, 즉 Large
네트워크를 사용하여 Lc0을 평가합니다. 해당 네트워크를 다운로드하려면 다음 명령어를 실행하세요.
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.2GB(1.1TB 중) | 34GB | 36GB | - |
시험 | 141MB | 4.1MB | 4.4MB | 4.5MB |
사전 훈련된 모델을 올바른 위치에 다운로드하려면 다음 명령을 실행하십시오.
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를 계산하려면 토너먼트를 실행하여 에이전트 간에 게임을 한 다음 토너먼트에서 생성된 PGN 파일에 대한 Elo를 계산합니다(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}
}
저작권 2024 DeepMind Technologies Limited
모든 소프트웨어는 Apache 라이센스 버전 2.0(Apache 2.0)에 따라 라이센스가 부여됩니다. Apache 2.0 라이센스를 준수하는 경우를 제외하고는 이 파일을 사용할 수 없습니다. https://www.apache.org/licenses/LICENSE-2.0에서 Apache 2.0 라이센스 사본을 얻을 수 있습니다.
모델 가중치는 Creative Commons Attribution 4.0(CC-BY)에 따라 라이센스가 부여됩니다. 귀하는 https://creativecommons.org/licenses/by/4.0/legalcode에서 CC-BY 라이선스 사본을 얻을 수 있습니다.
데이터세트의 일부는 lichess.org의 Creative Commons CC0 라이선스에 따라 공개 도메인에 있습니다. 나머지 데이터세트는 Creative Commons Attribution 4.0(CC-BY)에 따라 라이선스가 부여됩니다. 귀하는 https://creativecommons.org/licenses/by/4.0/legalcode에서 CC-BY 라이선스 사본을 얻을 수 있습니다.
해당 법률에서 요구하거나 서면으로 동의하지 않는 한, Apache 2.0 또는 CC-BY 라이센스에 따라 배포되는 소프트웨어 및 자료는 명시적이든 묵시적이든 어떠한 종류의 보증이나 조건 없이 "있는 그대로" 배포됩니다. 해당 라이선스에 따른 허가 및 제한 사항을 관리하는 특정 언어는 라이선스를 참조하세요.
이것은 공식 Google 제품이 아닙니다.