本文介紹了騰訊微信翻譯團(tuán)隊(duì)開(kāi)源的人工智能圍棋項(xiàng)目 PhoenixGo,該項(xiàng)目是對(duì) DeepMindAlphaGo Zero論文《Mastering the game of Go without human knowledge》的實(shí)現(xiàn)。
PhoenixGo 是騰訊微信翻譯團(tuán)隊(duì)開(kāi)發(fā)的人工智能圍棋程序。據(jù)介紹,該項(xiàng)目由幾名工程師在開(kāi)發(fā)機(jī)器翻譯引擎之余,基于 AlphaGo Zero 論文實(shí)現(xiàn),做了若干提高訓(xùn)練效率的創(chuàng)新,并利用微信服務(wù)器的閑時(shí)計(jì)算資源進(jìn)行自我對(duì)弈,緩解了 Zero 版本對(duì)海量資源的苛刻需求。
4 月底,在 2018 世界人工智能圍棋大賽上,PhoenixGo 取得冠軍。參賽隊(duì)伍包括絕藝,LeelaZero、TSGo、石子旋風(fēng)、Golois,HEROZ Kishi、Baduki 等來(lái)自中、日、韓、歐美等國(guó)家和地區(qū)的人工智能圍棋高手。
5 月 11 日,PhoenixGo 在 Github 上正式開(kāi)源,以下是技術(shù)細(xì)節(jié):
如果你在研究中使用 PhoenixGo,請(qǐng)按以下方式引用庫(kù):
@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}}}
構(gòu)建和運(yùn)行
在 Linux 上
1 要求
支持 C++11 的 GCC;
Bazel(0.11.1);
(可選)CUDA 和 cuDNN(支持 GPU);
(可選)TensorRT(加速 GPU 上的計(jì)算,建議使用 3.0.4 版本)。
2 構(gòu)建
復(fù)制庫(kù),并進(jìn)行構(gòu)建配置:
git clone https://github.com/Tencent/PhoenixGo.gitcd PhoenixGo./configure
./configure 將詢問(wèn) CUDA 和 TensorRT 的安裝位置,如果必要指定二者的位置。
然后使用 bazel 進(jìn)行構(gòu)建:
bazel build //mcts:mcts_main
TensorFlow 等依賴項(xiàng)將會(huì)自動(dòng)下載。構(gòu)建過(guò)程可能需要很長(zhǎng)時(shí)間。
3 運(yùn)行
下載和提取訓(xùn)練好的網(wǎng)絡(luò):
wget https://github.com/Tencent/PhoenixGo/releases/download/trained-network-20b-v1/trained-network-20b-v1.tar.gztar xv*** trained-network-20b-v1.tar.gz
以 gtp 模式運(yùn)行,使用配置文件(取決于 GPU 的數(shù)量和是否使用 TensorRT):
bazel-bin/mcts/mcts_main --config_path=etc/{config} --gtp --logtostderr --v=1
該引擎支持 GTP 協(xié)議,這意味著它可以和具備 GTP 能力的 GUI 一起使用,如 Sabaki。
--logtostderr 使 mcts_main 向 stderr 寫(xiě)入日志消息,如果你想將消息寫(xiě)入文件,將 --logtostderr 改成 --log_dir={log_dir} 即可。
你可以按照此說(shuō)明更改配置文件:https://github.com/Tencent/PhoenixGo#configure-guide
4 分布模式
如果不同的機(jī)器上有 GPU,PhoenixGo 支持分布式 worker。
構(gòu)建分布式 worker:
bazel build //dist:dist_zero_model_server
在分布式 worker 上運(yùn)行 dist_zero_model_server,每個(gè) worker 對(duì)應(yīng)一個(gè) GPU:
CUDA_VISIBLE_DEVICES={gpu} bazel-bin/dist/dist_zero_model_server --server_address="0.0.0.0:{port}" --logtostderr
在 config 文件中填充 worker 的 ip:port(etc/mcts_dist.conf 是 32 個(gè) worker 的配置示例),并運(yùn)行分布式 master:
bazel-bin/mcts/mcts_main --config_path=etc/{config} --gtp --logtostderr --v=1
在macOS 上
注意:TensorFlow 在 1.2.0 版本之后停止支持macOS 上的 GPU,因此在macOS 上的操作只能在 CPU 上運(yùn)行。
1 要求 & 構(gòu)建
同 Linux。
2 運(yùn)行
首先添加libtensorflow_framework.so 到LD_LIBRARY_PATH 中:
$ export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:{project_root}/bazel-bin/external/org_tensorflow/tensorflow"
在 Windows 上
正在進(jìn)行。
配置指南
以下是 config 文件中的一些重要選項(xiàng):
num_eval_threads:應(yīng)與 GPU 的數(shù)量一致;
num_search_threads:應(yīng)比 num_eval_threads * eval_batch_size 大一些;
timeout_ms_per_step:每步使用的時(shí)間;
max_simulations_per_step:每步要做多少模擬;
gpu_list:使用哪塊 GPU,用逗號(hào)隔開(kāi);
model_config -> train_dir:訓(xùn)練好的網(wǎng)絡(luò)的存儲(chǔ)目錄;
model_config -> checkpoint_path:使用哪個(gè)檢查點(diǎn),如果沒(méi)設(shè)定,則從 train_dir/checkpoint 中獲取;
model_config -> enable_tensorrt:是否使用 TensorRT;
model_config -> tensorrt_model_path:如果 enable_tensorrt,使用哪個(gè) TensorRT 模型;
max_search_tree_size:樹(shù)節(jié)點(diǎn)的最大數(shù)量,根據(jù)存儲(chǔ)容量進(jìn)行更改;
max_children_per_node:每個(gè)節(jié)點(diǎn)的子節(jié)點(diǎn)的最大數(shù)量,根據(jù)存儲(chǔ)容量進(jìn)行更改;
enable_background_search:在對(duì)手下棋的時(shí)候思考;
early_stop:如果結(jié)果不再更改,則 genmove 可能在 timeout_ms_per_step 之前返回;
unstable_overtime:如果結(jié)果仍然不穩(wěn)定,則更多地考慮 timeout_ms_per_step * time_factor;
behind_overtime:如果贏率低于 act_threshold,則更多地考慮 timeout_ms_per_step * time_factor。
分布模式的選項(xiàng):
enable_dist:?jiǎn)?dòng)分布模式;
dist_svr_addrs:分布式 worker 的 ip:port,多條線,每條線中有一個(gè) ip:port;
dist_config -> timeout_ms:RPC 超時(shí)。
async 分布模式的選項(xiàng):
Async 模式是在有大量分布式 worker 的時(shí)候使用的(多余 200),而在 sync 模式中需要過(guò)多的 eval 線程和搜索線程。
etc/mcts_async_dist.conf 是 256 個(gè) worker 模式的 config 示例。
enable_async:開(kāi)啟 async 模式
enable_dist:開(kāi)啟分布模式
dist_svr_addrs:每個(gè)命令行 ip:port 的多行、用逗號(hào)分開(kāi)的列表
eval_task_queue_size:根據(jù)分布 worker 的數(shù)量調(diào)整
num_search_threads:根據(jù)分布式 worker 的數(shù)量調(diào)整
參看 mcts/mcts_config.proto 更詳細(xì)的了解 config 選項(xiàng)。
命令行選項(xiàng)
mcts_main 接受以下命令行選項(xiàng):
--config_path:配置文件路徑;
--gtp:作為 GTP 引擎來(lái)運(yùn)行,如果禁用,則只能進(jìn)行 genmove;
--init_moves:圍棋棋盤上最初的落子;
--gpu_list:覆寫(xiě)配置文件中的 gpu_list;
--listen_port:與 --gtp 一起使用,在 TCP 協(xié)議端口上運(yùn)行 gtp 引擎;
--allow_ip:與 --listen_port 一起使用,是允許連接的客戶端 ip 列表;
--fork_per_request:與 --listen_port 一起使用,表示是否 fork 每個(gè)請(qǐng)求。
Glog 選項(xiàng)還支持:
--logtostderr:向 stderr 寫(xiě)入日志消息;
--log_dir:向該文件夾中的文件寫(xiě)入日志消息;
--minloglevel:記錄級(jí)別:0 - INFO、1 - WARNING、2 - ERROR;
--v:詳細(xì)記錄,--v=1 即記錄調(diào)試日志,--v=0 即關(guān)閉記錄。
mcts_main --help 支持更多命令行選項(xiàng)。
-
人工智能
+關(guān)注
關(guān)注
1805文章
48843瀏覽量
247475 -
機(jī)器翻譯
+關(guān)注
關(guān)注
0文章
140瀏覽量
15149 -
微信
+關(guān)注
關(guān)注
6文章
512瀏覽量
27233
原文標(biāo)題:業(yè)界 | 微信團(tuán)隊(duì)開(kāi)源圍棋AI技術(shù)PhoenixGo,復(fù)現(xiàn)AlphaGo Zero論文
文章出處:【微信號(hào):CAAI-1981,微信公眾號(hào):中國(guó)人工智能學(xué)會(huì)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
評(píng)論