Home

Awesome

DarkForest, the Facebook Go engine

Update[12/11/2017] DarkForestGo has been incorporated into ELF platform.

Update: The training code is open source now. See below for detailed instructions.

DarkForest is a Go game engine powered by Deep Learning and developed at Facebook AI Research.

We hope that releasing the source code and pre-trained models are beneficial to the community.

Details of the engine are given in our paper and poster, and if you use our engine in future research, cite our paper:

Better Computer Go Player with Neural Network and Long-term Prediction, ICLR 2016
Yuandong Tian, Yan Zhu

@article{tian2015better,
  title={Better Computer Go Player with Neural Network and Long-term Prediction},
  author={Tian, Yuandong and Zhu, Yan},
  journal={arXiv preprint arXiv:1511.06410},
  year={2015}
}

Architecture

Although DarkForest is standalone and does not depend on external libraries, some portions of the tactics and pattern code were inspired by the Pachi engine.

Build

Dependencies:

  1. Install torch7.
  2. Install CUDA / CuDNN
  3. Install a few packages
luarocks install class
luarocks install image
luarocks install tds
luarocks install cudnn

This program supports 1 to 4 GPUs.

Then just compile with the following command:

sh ./compile.sh

GCC 4.8+ is required. Depending on the location of your C++ compiler, please change the script accordingly. Tested in CentOS 6.5 and Ubuntu 14.04, 15.04.

Install gcc-4.9 as a second compiler and create symlink as:

sudo ln -s /usr/bin/gcc-4.9 /usr/local/cuda/bin/gcc
sudo ln -s /usr/bin/g++-4.9 /usr/local/cuda/bin/g++

During the installation of torch and cudnn, either change the build script or replace symlink at /usr/bin/cc with:

sudo ln -s /usr/bin/gcc-4.9 /usr/bin/cc

More info at (http://stackoverflow.com/questions/6622454/cuda-incompatible-with-my-gcc-version)

After the compilation cc symlink can be reverted back to latest version.

If you get errors like:

These bindings are for version 5005 or above ...

Download latest cuDNN from nvidia at (https://developer.nvidia.com/rdp/cudnn-download), registration required.

Usage

Step 1: Download the models.

Create ./models directory and download trained models.

Step 2: First run the GPU server

cd ./local_evaluator
sh cnn_evaluator.sh [num_gpu] [pipe file path]

Example: sh cnn_evaluator.sh 4 /data/local/go

Step 3: Run the main program

cd ./cnnPlayerV2
th cnnPlayerMCTSV2.lua [options]

See cnnPlayerV2/cnnPlayerMCTSV2.lua for a lot of options. For a simple first run (assuming you have 4 GPUs), you could use:

th cnnPlayerMCTSV2.lua --num_gpu [num_gpu] --time_limit 10

or (if you want to use a set of plausibly good parameters):

th cnnPlayerMCTSV2.lua --use_formal_params --num_gpu [num_gpu] --time_limit 10

To load an existing game up to move 23:

th cnnPlayerMCTSV2.lua [other_options] --setup_board "/path/to/sgf 23"

When you are in the interactive environment, type

A complete game may look like:

clear_board
[MCTS initialization ...]
place_free_handicap 3
genmove b
[MCTS generates moves..e.g., it returns Q16]
play w D4
genmove b
[MCTS generates moves...]
quit

For more commands, please use command list_commands, check the details of GTP protocol or take a look at the source code.

Training

To train the policy network from scratch, please run ./train.sh. 1 GPU is needed. Please install torchnet first (e.g., luarocks install torchnet).

Differences with the award-winning versions

The difference between this open source version (A) and that in KGS/competitions (B) is the following:

Troubleshooting

Q: My program hanged on genmove/quit, what happened? A: Make sure you run the GPU server under ./local_evaluator, the server remains active and the pipe file path matches between the server and the client.

If you have any questions or find any bugs, please open a Github issue by clicking "Issues" tab and then click "New Issue".

Code Overview

The system consists of the following parts.

  1. CNNPlayerV3.lua Run Pure-DCNN player
  2. CNNPlayerMCTSV2.lua Run player with DCNN + MCTS

License

Please check the LICENSE file for the license of Facebook DarkForest Go engine.