Repositori ini menyediakan implementasi makalah NeurIPS 2024 kami, Perencanaan Amortisasi dengan Transformator Skala Besar: Studi Kasus tentang Catur.
Makalah ini menggunakan catur, sebuah masalah perencanaan penting dalam AI, untuk menilai kinerja transformator pada tugas perencanaan di mana menghafal menjadi sia-sia — bahkan dalam skala besar. Untuk mencapai tujuan ini, kami merilis ChessBench, kumpulan data tolok ukur berskala besar yang berisi 10 juta permainan catur dengan anotasi pergerakan dan nilai yang sah (15 miliar poin data) yang disediakan oleh Stockfish 16, mesin catur canggih. Kami melatih transformator dengan hingga 270 juta parameter di ChessBench melalui pembelajaran yang diawasi dan melakukan ablasi ekstensif untuk menilai dampak ukuran kumpulan data, ukuran model, tipe arsitektur, dan target prediksi yang berbeda (nilai status, nilai tindakan, dan kloning perilaku). Model terbesar kami belajar memprediksi nilai tindakan untuk papan novel dengan cukup akurat, sehingga menyiratkan generalisasi yang sangat tidak sepele. Meskipun tidak melakukan penelusuran eksplisit, kebijakan catur yang kami hasilkan memecahkan teka-teki catur yang menantang dan mencapai serangan Lichess Elo yang sangat kuat pada tahun 2895 melawan manusia (tingkat grandmaster). Kami juga membandingkan Leela Chess Zero dan AlphaZero (dilatih tanpa pengawasan melalui permainan mandiri) dengan dan tanpa pencarian. Kami menunjukkan bahwa, meskipun perkiraan algoritma berbasis pencarian Stockfish yang sangat baik dapat disaring menjadi transformator skala besar melalui pembelajaran yang diawasi, distilasi sempurna masih di luar jangkauan, sehingga membuat ChessBench sangat cocok untuk penelitian di masa depan.
.
|
├── 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
Kloning kode sumber ke direktori lokal:
git clone https://github.com/google-deepmind/searchless_chess.git
cd searchless_chess
Repositori ini memerlukan Python 3.10. pip install -r requirements.txt
akan menginstal semua dependensi yang diperlukan. Ini paling baik dilakukan di dalam lingkungan conda. Untuk itu, instal Anaconda. Kemudian, buat dan aktifkan lingkungan conda:
conda create --name searchless_chess python=3.10
conda activate searchless_chess
Instal pip
dan gunakan untuk menginstal semua dependensi:
conda install pip
pip install -r requirements.txt
Jika Anda memiliki GPU yang tersedia (sangat disarankan untuk pelatihan cepat), Anda dapat menginstal JAX dengan dukungan CUDA.
pip install --upgrade " jax[cuda12_pip] " -f https://storage.googleapis.com/jax-releases/jax_cuda_releases.html
Perhatikan bahwa versi jax harus sesuai dengan instalasi CUDA yang ingin Anda gunakan (CUDA 12 pada contoh di atas). Silakan lihat dokumentasi JAX untuk lebih jelasnya.
Unduh dan kompilasi Stockfish versi terbaru (untuk sistem mirip Unix):
git clone https://github.com/official-stockfish/Stockfish.git
cd Stockfish/src
make -j profile-build ARCH=x86-64-avx2
cd ../..
Ikuti instruksi pengunduhan Lc0, yaitu,
git clone -b release/0.30 --recurse-submodules https://github.com/LeelaChessZero/lc0.git
Kemudian buat mesin seperti yang dijelaskan dalam instruksi pembuatan Lc0.
Kami mengevaluasi Lc0 dengan jaringan sebesar mungkin dari katalog model Lc0, yaitu jaringan Large
. Untuk mengunduh jaringan itu, jalankan perintah berikut:
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 ../../..
Untuk menghitung Elos untuk agen yang berbeda, kami memerlukan BayesElo, yang dapat diinstal sebagai berikut:
wget https://www.remi-coulom.fr/Bayesian-Elo/bayeselo.tar.bz2
tar -xvjf bayeselo.tar.bz2
cd BayesElo
make bayeselo
cd ..
Untuk mengunduh kumpulan data kami ke lokasi yang benar, jalankan perintah berikut:
cd data
./download.sh
cd ..
Kami juga menyediakan tautan unduhan kumpulan data individual dalam tabel berikut (kumpulan data nilai tindakan dibagi menjadi 2148 file karena ukurannya dan hanya tautan ke pecahan pertama yang tercantum di bawah):
Membelah | Nilai-Aksi | Kloning Perilaku | Nilai-Negara | Teka-teki |
---|---|---|---|---|
Kereta | 1,2 GB (dari 1,1 TB) | 34 GB | 36 GB | - |
Tes | 141 MB | 4,1 MB | 4,4 MB | 4,5 MB |
Untuk mengunduh model terlatih ke lokasi yang benar, jalankan perintah berikut:
cd checkpoints
./download.sh
cd ..
Sebelum menjalankan kode apa pun, pastikan untuk mengaktifkan lingkungan conda dan mengatur PYTHONPATH
:
conda activate searchless_chess
export PYTHONPATH= $( pwd ) /..
Untuk melatih model secara lokal, jalankan perintah berikut:
cd src
python train.py
cd ..
Pos pemeriksaan model akan disimpan ke /checkpoints/local
.
Untuk mengevaluasi keakuratan teka-teki model, jalankan perintah berikut:
cd src
python puzzles.py --num_puzzles 10 --agent=local
cd ..
puzzles.py
mendukung agen berikut:
local
9M
, 136M
, dan 270M
stockfish
dan stockfish_all_moves
leela_chess_zero_depth_1
, leela_chess_zero_policy_net
, dan leela_chess_zero_400_sims
Untuk menghitung Elo untuk agen yang berbeda, jalankan turnamen untuk memainkan permainan di antara mereka dan kemudian hitung Elo untuk file PGN yang dihasilkan oleh turnamen tersebut (informasi lebih lanjut tentang BayesElo dapat ditemukan di sini):
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 ..
Untuk menyelidiki perilaku model (misalnya, untuk menghitung persentase kemenangan untuk semua tindakan hukum), mulai server notebook lalu buka src/searchless_chess.ipynb
di browser Anda:
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}
}
Hak Cipta 2024 DeepMind Technologies Limited
Semua perangkat lunak dilisensikan di bawah Lisensi Apache, Versi 2.0 (Apache 2.0); Anda tidak boleh menggunakan file ini kecuali sesuai dengan lisensi Apache 2.0. Anda dapat memperoleh salinan lisensi Apache 2.0 di: https://www.apache.org/licenses/LICENSE-2.0
Anak timbangan model dilisensikan di bawah Creative Commons Attribution 4.0 (CC-BY). Anda dapat memperoleh salinan lisensi CC-BY di: https://creativecommons.org/licenses/by/4.0/legalcode
Beberapa bagian kumpulan data berada dalam domain publik dengan lisensi Creative Commons CC0 dari lichess.org. Kumpulan data lainnya dilisensikan di bawah Creative Commons Attribution 4.0 (CC-BY). Anda dapat memperoleh salinan lisensi CC-BY di: https://creativecommons.org/licenses/by/4.0/legalcode.
Kecuali diwajibkan oleh hukum yang berlaku atau disetujui secara tertulis, perangkat lunak dan materi yang didistribusikan di bawah lisensi Apache 2.0 atau CC-BY didistribusikan berdasarkan DASAR "APA ADANYA", TANPA JAMINAN ATAU KETENTUAN DALAM BENTUK APAPUN, baik tersurat maupun tersirat. Lihat lisensi untuk bahasa tertentu yang mengatur izin dan batasan berdasarkan lisensi tersebut.
Ini bukan produk resmi Google.