Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/official-stockfish/nnue-pytorch

Stockfish NNUE (Chess evaluation) trainer in Pytorch
https://github.com/official-stockfish/nnue-pytorch

chess deep-learning pytorch stockfish

Last synced: about 2 hours ago
JSON representation

Stockfish NNUE (Chess evaluation) trainer in Pytorch

Awesome Lists containing this project

README

        

# Setup

### Software prerequisites

#### Python

If using easy_train.py then at least 3.7 is required.

Otherwise versions around 3.6 should also work, but updating is recommended.

Python 3.11 was also tested and works well.

#### A C++ compiler

If you're using easy_train.py then at least GCC 9.2 is required for compiling the data loader, Stockfish, and c-chess-cli. This a defensive version requirement as older versions were known to cause problems with Stockfish.

If you're not using easy_train.py then no automatic compilation will take place; use what you wish.

If you're on Windows the best way is to probably use [MSYS2](https://www.msys2.org/). It would also make it easy to install Make (next step).

#### Make

For compiling Stockfish and c-chess-cli. Not strictly necessary if you're not using easy_train.py, but recommended.

#### CMake

Necessary for compiling the data loader.

https://cmake.org/install/

### Package dependencies

```
python -m venv trainer
pip install -r requirements.txt
```

PyTorch with CUDA 11.8 will be automatically installed, along with the matching CuPy version.

### The data loader (if not using easy_train.py)

This requires a C++17 compiler and cmake.

Windows:
```
compile_data_loader.bat
```

Linux/Mac:
```
sh compile_data_loader.bat
```

# Network training and management

Hard way: [wiki](https://github.com/official-stockfish/nnue-pytorch/wiki/Basic-training-procedure-(train.py))

Easier way: [wiki](https://github.com/official-stockfish/nnue-pytorch/wiki/Basic-training-procedure-(easy_train.py))

# Logging

TODO: Move to wiki. Add setup for easy_train.py

```
tensorboard --logdir=logs
```
Then, go to http://localhost:6006/

# Automatically run matches to determine the best net generated by a (running) training

TODO: Move to wiki

```
python run_games.py --concurrency 16 --stockfish_exe ./stockfish.master --c_chess_exe ./c-chess-cli --ordo_exe ./ordo --book_file_name ./noob_3moves.epd run96
```

Automatically converts all `.ckpt` found under `run96` to `.nnue` and runs games to find the best net. Games are played using `c-chess-cli` and nets are ranked using `ordo`.
This script runs in a loop, and will monitor the directory for new checkpoints. Can be run in parallel with the training, if idle cores are available.

# Thanks

* Sopel - for the amazing fast sparse data loader
* connormcmonigle - https://github.com/connormcmonigle/seer-nnue, and loss function advice.
* syzygy - http://www.talkchess.com/forum3/viewtopic.php?f=7&t=75506
* https://github.com/DanielUranga/TensorFlowNNUE
* https://hxim.github.io/Stockfish-Evaluation-Guide/
* dkappe - Suggesting ranger (https://github.com/lessw2020/Ranger-Deep-Learning-Optimizer)