腾讯开源围棋AI程序PhoenixGo,复现AlphaGo Zero
2018年05月14日 由 浅浅 发表
407319
0
PhoenixGo是一个围棋AI程序,它执行AlphaGo Zero论文“掌握无人知识的Go游戏”。它也被称为FoxGo中的“BensonDarr”,CGOS中的“cronus”。在中国福州举办的“World AI Go Tournament 2018”中,来自微信团队的人工智能围棋程序PhoenixGo获得了冠军。
如果您在项目中使用PhoenixGo,请在您的自述文件中提及。
如果您在研究中使用PhoenixGo,请考虑引用库:
@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}}
}
建立和运行
在Linux上
要求
支持C++11的GCC
Bazel(0.11.1最好)
(可选)CUDA和cuDNN(用于GPU支持)
(可选)TensorRT(用于加速GPU上的计算,已知为3.0.4)
建立
$ git clone https://github.com/Tencent/PhoenixGo.git
$ cd PhoenixGo
$ ./configure
./configure 会询问CUDA和TensorRT的安装位置,如果需要请指定它们。
然后用bazel建立:
$ bazel build //mcts:mcts_main
诸如Tensorflow之类的将自动下载。此命令可能需要很长时间。
运行
下载并提取经过训练的网络:
$ 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
使用配置文件以gtp模式运行(取决于GPU的数量和是否使用TensorRT):
$ bazel-bin/mcts/mcts_main --config_path=etc/{config} --gtp --logtostderr --v=1
该引擎支持GTP协议,这意味着它可以用于具有GTP功能的GUI,如Sabaki。
--logtostderr让mcts_main日志消息到stderr,如果你想登录到文件,--logtostderr改为--log_dir={log_dir}
你可以在#configure-guide之后修改你的配置文件。
分配模式
PhoenixGo支持与分配式工作人员一起运行,如果在不同机器上有GPU的话。
建立分配者:
$ bazel build //dist:dist_zero_model_server
dist_zero_model_server在分布式工作器上运行,每个GPU运行一个。
$ CUDA_VISIBLE_DEVICES={gpu} bazel-bin/dist/dist_zero_model_server --server_address="0.0.0.0:{port}" --logtostderr
ip:port在配置文件中填充工作人员(etc/mcts_dist.conf是32位工作人员的示例配置),然后运行分布式主服务器:
$ bazel-bin/mcts/mcts_main --config_path=etc/{config} --gtp --logtostderr --v=1
在macOS上
注意:自1.2.0起,Tensorflow停止在macOS上提供GPU支持,因此您只能在macOS中的CPU上运行。
要求和建设
与Linux相同
运行
添加libtensorflow_framework.so到LD_LIBRARY_PATH第一个:
$ export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:{project_root}/bazel-bin/external/org_tensorflow/tensorflow"
其余步骤应与Linux相同。
在Windows上
这项工作正在进行。
配置指南
以下是配置文件中的一些重要选项:
num_eval_threads
:应该等于GPU的数量
num_search_threads
:应该大于 num_eval_threads * eval_batch_size
timeout_ms_per_step
:每一步移动将花费多少时间
max_simulations_per_step
:每次移动会做多少次模拟
gpu_list
:使用哪个GPU,用逗号分隔
model_config -> train_dir
:存储经过培训的网络的目录
model_config -> checkpoint_path
:使用哪个检查点,train_dir/checkpoint
如果没有设置,则从中获取
model_config -> enable_tensorrt
:使用TensorRT或不使用
model_config -> tensorrt_model_path
:如果使用哪个TensorRT模型 enable_tensorrt
max_search_tree_size
:树节点的最大数量,改变它取决于内存大小
max_children_per_node
:每个节点的最大孩子数量,取决于内存大小
enable_background_search
:思考对手的时间
early_stop
:timeout_ms_per_step
如果结果不会再改变,则genmove可能会返回
unstable_overtime
:timeout_ms_per_step * time_factor
如果结果仍然不稳定,请多考虑一下
behind_overtime
:timeout_ms_per_step * time_factor
如果胜利率小于,就多想想act_threshold
分配模式的选项:
enable_dist
:启用分配模式
dist_svr_addrs
:ip:port
分布式工人,多行,ip:port
每行一行
dist_config -> timeout_ms
:RPC超时
异步分配模式的选项:
异步模式用于有大量分布式工作人员(超过200人),这需要太多的eval线程和同步模式下的搜索线程。etc/mcts_async_dist.conf
是256名工作人员的示例配置。
enable_async
:启用异步模式
enable_dist
:启用分配模式
dist_svr_addrs
:多行,ip:port
每行的逗号分隔列表
num_eval_threads
:应该等于dist_svr_addrs
行数
eval_task_queue_size
:取决于分销人员的数量
num_search_threads
:取决于分销人员的数量
mcts/mcts_config.proto获取更多配置选项。
命令行选项
mcts_main
接受来自命令行的选项:
--config_path
:配置文件的路径
--gtp
:作为GTP引擎运行,如果禁用,则仅下一步移动
--init_moves
:在棋盘上进行初始移动
--gpu_list
:gpu_list
在配置文件中覆盖
--listen_port
:使用--gtp
TCP协议在端口上运行gtp引擎
--allow_ip
:使用--listen_port
,允许连接的客户端IP列表
--fork_per_request
:使用--listen_port
,为每个请求分配或不分配
Glog选项也受支持:
--logtostderr
:将消息记录到stderr
--log_dir
:登录到此目录中的文件
--minloglevel
:日志级别,0 - INFO,1 - 警告,2 - 错误
--v
:详细日志,--v=1
用于打开某些调试日志,--v=0
关闭
mcts_main --help
获取更多命令行选项。