Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/Tencent/PhoenixGo
Go AI program which implements the AlphaGo Zero paper
https://github.com/Tencent/PhoenixGo
Last synced: 2 months ago
JSON representation
Go AI program which implements the AlphaGo Zero paper
- Host: GitHub
- URL: https://github.com/Tencent/PhoenixGo
- Owner: Tencent
- License: other
- Created: 2018-05-09T08:04:16.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2019-03-11T11:19:25.000Z (almost 6 years ago)
- Last Synced: 2024-11-05T03:36:32.650Z (3 months ago)
- Language: C++
- Homepage:
- Size: 220 KB
- Stars: 2,878
- Watchers: 192
- Forks: 577
- Open Issues: 23
-
Metadata Files:
- Readme: README.md
- License: LICENSE.TXT
Awesome Lists containing this project
- awesome-github-star - PhoenixGo
- awesome-made-by-chinese - PhoenixGo
README
![PhoenixGo](images/logo.jpg?raw=true)
**PhoenixGo** is a Go AI program which implements the AlphaGo Zero paper
"[Mastering the game of Go without human knowledge](https://deepmind.com/documents/119/agz_unformatted_nature.pdf)".
It is also known as "BensonDarr" and "金毛测试" in [FoxGo](http://weiqi.qq.com/),
"cronus" in [CGOS](http://www.yss-aya.com/cgos/), and the champion of
[World AI Go Tournament 2018](http://weiqi.qq.com/special/109) held in Fuzhou China.If you use PhoenixGo in your project, please consider mentioning in your README.
If you use PhoenixGo in your research, please consider citing the library as follows:
```
@misc{PhoenixGo2018,
author = {Qinsong Zeng and Jianchang Zhang and Zhanpeng Zeng and Yongsheng Li and Ming Chen and Sifan Liu}
title = {PhoenixGo},
year = {2018},
journal = {GitHub repository},
howpublished = {\url{https://github.com/Tencent/PhoenixGo}}
}
```## Building and Running
### On Linux
#### Requirements
* GCC with C++11 support
* Bazel (**0.19.2 is known-good**)
* (Optional) CUDA and cuDNN for GPU support
* (Optional) TensorRT (for accelerating computation on GPU, 3.0.4 is known-good)The following environments have also been tested by independent contributors :
[here](/docs/tested-versions.md). Other versions may work, but they have not been
tested (especially for bazel).#### Download and Install Bazel
Before starting, you need to download and install bazel,
see [here](https://docs.bazel.build/versions/master/install.html).For PhoenixGo, bazel (**0.19.2 is known-good**), read
[Requirements](#requirements) for detailsIf you have issues on how to install or start bazel, you may want
to try this all-in-one command line for easier building instead, see
[FAQ question](/docs/FAQ.md#b0-it-is-too-hard-to-install-bazel-or-start-bazel)#### Building PhoenixGo with Bazel
Clone the repository and configure the building:
```
$ git clone https://github.com/Tencent/PhoenixGo.git
$ cd PhoenixGo
$ ./configure
````./configure` will start the bazel configure : ask where CUDA
and TensorRT have been installed, specify them if need.Then build with bazel:
```
$ bazel build //mcts:mcts_main
```Dependices such as Tensorflow will be downloaded automatically.
The building process may take a long time.Recommendation : the bazel building uses a lot of RAM,
if your building environment is lack of RAM, you may need to restart
your computer and exit other running programs to free as much RAM
as possible.#### Running PhoenixGo
Download and extract the trained network:
```
$ wget https://github.com/Tencent/PhoenixGo/releases/download/trained-network-20b-v1/trained-network-20b-v1.tar.gz
$ tar xvzf trained-network-20b-v1.tar.gz
```The PhoenixGo engine supports GTP
[(Go Text Protocol)](https://senseis.xmp.net/?GoTextProtocol),
which means it can be used with a GUI with GTP capability, such as
[Sabaki](http://sabaki.yichuanshen.de).
It can also run on command-line GTP server tools like
[gtp2ogs](https://github.com/online-go/gtp2ogs).But PhoenixGo does not support all GTP commands, see
[FAQ question](/docs/FAQ.md/#a11-gtp-command-error--invalid-command).There are 2 ways to run PhoenixGo engine
##### 1) start.sh : easy use
Run the engine : `scripts/start.sh`
`start.sh` will automatically detect the number of GPUs, run `mcts_main`
with proper config file,
and write log files in directory `log`.You could also use a customized config file (.conf) by running
`scripts/start.sh {config_path}`.
If you want to do that, see also [#configure-guide](#configure-guide).##### 2) mcts_main : fully control
If you want to fully control all the options of `mcts_main` (such
as changing log destination, or if start.sh is not compatible for your
specific use), you can run directly `bazel-bin/mcts/mcts_main` instead.For a typical usage, these command line options should be added:
- `--gtp` to enable GTP mode
- `--config_path=replace/with/path/to/your/config/file` to specify the
path to your config file
- it is also needed to edit your config file (.conf) and manually add
the full path to ckpt, see
[FAQ question](/docs/FAQ.md/#a5-ckptzerockpt-20b-v1fp32plan-error-no-such-file-or-directory).
You can also change options in config file, see
[#configure-guide](#configure-guide).
- for other command line options , see also
[#command-line-options](#command-line-options)
for details, or run `./mcts_main --help` . A copy of the `--help` is
provided for your convenience [here](/docs/mcts-main-help.md)For example:
```
$ bazel-bin/mcts/mcts_main --gtp --config_path=etc/mcts_1gpu.conf --logtostderr --v=0
```#### (Optional) : Distribute mode
PhoenixGo support running with distributed workers, if there are GPUs
on different machine.Build the distribute worker:
```
$ bazel build //dist:dist_zero_model_server
```Run `dist_zero_model_server` on distributed worker, **one for each GPU**.
```
$ CUDA_VISIBLE_DEVICES={gpu} bazel-bin/dist/dist_zero_model_server --server_address="0.0.0.0:{port}" --logtostderr
```Fill `ip:port` of workers in the config file (`etc/mcts_dist.conf` is an
example config for 32 workers), and run the distributed master:```
$ scripts/start.sh etc/mcts_dist.conf
```### On macOS
**Note: Tensorflow stop providing GPU support on macOS since 1.2.0, so you are only able to run on CPU.**
#### Use Pre-built Binary
Download and extract
[CPU-only version (macOS)](https://github.com/Tencent/PhoenixGo/releases/download/mac-x64-cpuonly-v1/PhoenixGo-mac-x64-cpuonly-v1.tgz)Follow the document included in the archive : using_phoenixgo_on_mac.pdf
#### Building from Source
Same as Linux.
### On Windows
Recommendation: See [FAQ question](/docs/FAQ.md/#a4-syntax-error-windows),
to avoid syntax errors in config file and command line options on Windows.#### Use Pre-built Binary
##### GPU version :
The GPU version is much faster, but works only with compatible nvidia GPU.
It supports this environment :
- CUDA 9.0 only
- cudnn 7.1.x (x is any number) or lower for CUDA 9.0
- no AVX, AVX2, AVX512 instructions supported in this release (so it is
currently much slower than the linux version)
- there is no TensorRT support on WindowsDownload and extract
[GPU version (Windows)](https://github.com/Tencent/PhoenixGo/releases/download/win-x64-gpu-v1/PhoenixGo-win-x64-gpu-v1.zip)Then follow the document included in the archive : how to install
phoenixgo.pdfnote : to support special features like CUDA 10.0 or AVX512 for example,
you can build your own build for windows, see
[#79](https://github.com/Tencent/PhoenixGo/issues/79)##### CPU-only version :
If your GPU is not compatible, or if you don't want to use a GPU, you can download this
[CPU-only version (Windows)](https://github.com/Tencent/PhoenixGo/releases/download/win-x64-cpuonly-v1/PhoenixGo-win-x64-cpuonly-v1.zip),Follow the document included in the archive : how to install
phoenixgo.pdf## Configure Guide
Here are some important options in the config file:
* `num_eval_threads`: should equal to the number of GPUs
* `num_search_threads`: should a bit larger than `num_eval_threads * eval_batch_size`
* `timeout_ms_per_step`: how many time will used for each move
* `max_simulations_per_step`: how many simulations(also called playouts) will do for each move
* `gpu_list`: use which GPUs, separated by comma
* `model_config -> train_dir`: directory where trained network stored
* `model_config -> checkpoint_path`: use which checkpoint, get from `train_dir/checkpoint` if not set
* `model_config -> enable_tensorrt`: use TensorRT or not
* `model_config -> tensorrt_model_path`: use which TensorRT model, if `enable_tensorrt`
* `max_search_tree_size`: the maximum number of tree nodes, change it depends on memory size
* `max_children_per_node`: the maximum children of each node, change it depends on memory size
* `enable_background_search`: pondering in opponent's time
* `early_stop`: genmove may return before `timeout_ms_per_step`, if the result would not change any more
* `unstable_overtime`: think `timeout_ms_per_step * time_factor` more if the result still unstable
* `behind_overtime`: think `timeout_ms_per_step * time_factor` more if winrate less than `act_threshold`Options for distribute mode:
* `enable_dist`: enable distribute mode
* `dist_svr_addrs`: `ip:port` of distributed workers, multiple lines, one `ip:port` in each line
* `dist_config -> timeout_ms`: RPC timeoutOptions for async distribute mode:
> Async mode is used when there are huge number of distributed workers (more than 200),
> which need too many eval threads and search threads in sync mode.
> `etc/mcts_async_dist.conf` is an example config for 256 workers.* `enable_async`: enable async mode
* `enable_dist`: enable distribute mode
* `dist_svr_addrs`: multiple lines, comma sperated lists of `ip:port` for each line
* `num_eval_threads`: should equal to number of `dist_svr_addrs` lines
* `eval_task_queue_size`: tunning depend on number of distribute workers
* `num_search_threads`: tunning depend on number of distribute workersRead `mcts/mcts_config.proto` for more config options.
## Command Line Options
`mcts_main` accept options from command line:
* `--config_path`: path of config file
* `--gtp`: run as a GTP engine, if disable, gen next move only
* `--init_moves`: initial moves on the go board, for example usage, see
[FAQ question](/docs/FAQ.md/#a8-how-make-phoenixgo-start-at-other-position-at-move-1-and-after)
* `--gpu_list`: override `gpu_list` in config file
* `--listen_port`: work with `--gtp`, run gtp engine on port in TCP protocol
* `--allow_ip`: work with `--listen_port`, list of client ip allowed to connect
* `--fork_per_request`: work with `--listen_port`, fork for each request or notGlog options are also supported:
* `--logtostderr`: log message to stderr
* `--log_dir`: log to files in this directory
* `--minloglevel`: log level, 0 - INFO, 1 - WARNING, 2 - ERROR
* `--v`: verbose log, `--v=1` for turning on some debug log, `--v=0` to turning off`mcts_main --help` for more command line options.
A copy of the `--help` is provided for your convenience
[here](/docs/mcts-main-help.md)## Analysis
For analysis purpose, an easy way to display the PV (variations for
main move path) is `--logtostderr --v=1` which will display the main
move path winrate and continuation of moves analyzed, see
[FAQ question](/docs/FAQ.md/#a2-where-is-the-pv-analysis-) for detailsIt is also possible to analyse .sgf files using analysis tools such as :
- [GoReviewPartner](https://github.com/pnprog/goreviewpartner) :
an automated tool to analyse and/or review one or many .sgf files
(saved as .rsgf file). It supports PhoenixGo and other bots. See
[FAQ question](/docs/FAQ.md/#a25-how-to-analyzereview-one-or-many-sgf-files-with-goreviewpartner)
for details## FAQ
You will find a lot of useful and important information, also most common
problems and errors and how to fix themPlease take time to read the [FAQ](/docs/FAQ.md)