PhoenixGo

PhoenixGo

PhoenixGo是騰訊微信翻譯團隊開發的人工智慧圍棋程式,旨在學習人工智慧前沿技術。從1月底開始,PhoenixGo以BensonDarr(暱稱「金毛」)的名義在騰訊野狐圍棋平台上和全球頂尖職業棋手、圍棋愛好者及各路圍棋AI對弈,在4月底取得了200多連勝,並在福州2018人工智慧圍棋大賽上奪冠,引起了行業內廣泛關注。

基本介紹

  • 外文名:PhoenixGo 
  • 又稱:鳳凰圍棋
  • 類別:計算機軟體
  • 開發公司:騰訊
簡介,PhoenixGo 開源,構建和運行,Linux,macOS 上,配置指南,相關介紹,

簡介

PhoenixGo是由騰訊公司的微信翻譯團隊依照DeepMind在科學期刊《自然》上對於AlphaGo Zero所發表的論文《Mastering the game of Go without human knowledge》所實做出的開源計算機圍棋程式。也就是不使用人類棋譜與累積的圍棋知識,僅實做圍棋規則,使用單一類神經網路從自我對弈中學習(不像AlphaGo以人類角度思考,設計了Policy Network與Value Network)。
團隊除了以BSD許可證發布可供對弈的代碼以外,另外發布了20 blocks的訓練數據供下載,但由於未放出訓練代碼或完整的原始訓練數據(如棋譜)。但開放的20 blocks版本棋力相較於比賽版本弱不少,且使用不同的架構,相較於同時間開源且開放訓練數據的其他軟體(主要是Facebook的ELF OpenGo),社區可重複利用的資源較少。因其之前在野狐圍棋所使用的賬號名稱金毛測試與金毛陪練,故暱稱為“金毛”。
PhoenixGo曾經以多個賬號在同集團的野狐圍棋上對弈:
  • 賬號金毛測試以單片NVIDIA Tesla P40進行對弈,勝率在90%以上,並行為10段賬號。
  • 賬號BensonDarr勝率也在90%以上,並行為10段賬號。
PhoenixGo在2018年3月以cronus為名在CGOS上對弈,其中cronus_v0.1.3是CGOS至2018年5月12日排名最高的對弈程式,BayesElo約4270分。
PhoenixGo在2018年4月以“鳳凰圍棋”身份參賽,並以全勝戰績獲取冠軍。

PhoenixGo 開源

一個好的圍棋 AI,需要算法、工程實現、計算資源三者結合。當前圍棋 AI 已經有了優秀的公開算法,但同時擁有良好工程實現和大量計算資源,並不是一件容易的事。
為了讓行業內其他研究者可以在此基礎上繼續探索圍棋 AI 的奧秘,幫助棋手更方便地研究圍棋 AI 的棋路,也為了眾多圍棋愛好者在家用普通電腦上可以享受和職業九段交鋒的樂趣,微信團隊決定對外開源 PhoenixGo 對弈源碼和訓練模型。
經過了一周多時間的籌備,PhoenixGo 正式開源了對弈源碼和一個 20 block 的模型。這份源碼和模型可以在單塊 GPU 上提供強職業棋手的棋力,在單機多卡和多機多卡的系統上具有遠超人類棋手的水平。PhoenixGo 在野狐圍棋平台上的賬號「金毛測試」,運行於 1 塊性能與 GTX 1080 Ti 性能接近的 Tesla P40 上,對人類棋手具有非常高的勝率。
項目地址:https://github.com/Tencent/PhoenixGo
開源內容包括:
  • 分散式 MCTS 對弈程式源碼,支持 GTP 協定
  • 經過大量資源訓練的 20 block 模型
當前支持 Linux 和 Windows 平台。

構建和運行

Linux

配置要求:
  • 支持 C++11 的 GCC;
  • Bazel(0.11.1);
  • (可選)CUDA 和 cuDNN(支持 GPU);
  • (可選)TensorRT(加速 GPU 上的計算,建議使用 3.0.4 版本)。
構建:複製庫,並進行構建配置。
git clone https://github.com/Tencent/PhoenixGo.gitcd 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.gztar 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} 即可。
分布模式:
如果不同的機器上有 GPU,PhoenixGo 支持分散式 worker。
構建分散式 worker:
bazel build //dist:dist_zero_model_server
在分散式 worker 上運行 dist_zero_model_server,每個 worker 對應一個 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 個 worker 的配置示例),並運行分散式 master:
bazel-bin/mcts/mcts_main --config_path=etc/{config} --gtp --logtostderr --v= 1

macOS 上

注意:TensorFlow 在 1.2.0 版本之後停止支持 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"

配置指南

以下是 config 檔案中的一些重要選項:
  • 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:如果 enable_tensorrt,使用哪個 TensorRT 模型;
  • max_search_tree_size:樹節點的最大數量,根據存儲容量進行更改;
  • max_children_per_node:每個節點的子節點的最大數量,根據存儲容量進行更改;
  • enable_background_search:在對手下棋的時候思考;
  • early_stop:如果結果不再更改,則 genmove 可能在 timeout_ms_per_step 之前返回;
  • unstable_overtime:如果結果仍然不穩定,則更多地考慮 timeout_ms_per_step * time_factor;
  • behind_overtime:如果贏率低於 act_threshold,則更多地考慮 timeout_ms_per_step * time_factor。
分布模式的選項:
  • enable_dist:啟動分布模式;
  • dist_svr_addrs:分散式 worker 的 ip:port,多條線,每條線中有一個 ip:port;
  • dist_config -> timeout_ms:RPC 逾時。
async 分布模式的選項:
Async 模式是在有大量分散式 worker 的時候使用的(多餘 200),而在 sync 模式中需要過多的 eval 執行緒和搜尋執行緒。
etc/mcts_async_dist.conf 是 256 個 worker 模式的 config 示例。
  • enable_async:開啟 async 模式
  • enable_dist:開啟分布模式
  • dist_svr_addrs:每個命令行 ip:port 的多行、用逗號分開的列表
  • eval_task_queue_size:根據分布 worker 的數量調整
  • num_search_threads:根據分散式 worker 的數量調整
參看 mcts/mcts_config.proto 更詳細的了解 config 選項。
命令行選項:
mcts_main 接受以下命令行選項:
  • --config_path:配置檔案路徑;
  • --gtp:作為 GTP 引擎來運行,如果禁用,則只能進行 genmove;
  • --init_moves:圍棋棋盤上最初的落子;
  • --gpu_list:覆寫配置檔案中的 gpu_list;
  • --listen_port:與 --gtp 一起使用,在 TCP 協定連線埠上運行 gtp 引擎;
  • --allow_ip:與 --listen_port 一起使用,是允許連線的客戶端 ip 列表;
  • --fork_per_request:與 --listen_port 一起使用,表示是否 fork 每個請求。
Glog 選項還支持:
  • --logtostderr:向 stderr 寫入日誌訊息;
  • --log_dir:向該資料夾中的檔案寫入日誌訊息;
  • --minloglevel:記錄級別:0 - INFO、1 - WARNING、2 - ERROR;
  • --v:詳細記錄,--v=1 即記錄調試日誌,--v=0 即關閉記錄。
mcts_main --help 支持更多命令行選項。

相關介紹

2016年3月,在韓國首爾四季酒店的那一周里,AlphaGo與李世石的人機大戰,讓圍棋和人工智慧成為全世界的焦點。在之後的兩年間,除了AlphaGo,還湧現出很多圍棋人工智慧,跟人類圍棋高手進行了不少正式的人機對抗賽。對人類保持全勝的只有中國的絕藝,日本的深禪圍棋(DeepZenGo)出場次數最多,8勝7敗。
雖然圍棋程式和人類高手經常在網路上進行對弈,但一方面這些都以快棋為主,人類先天的劣勢被放大;另一方面網路圍棋缺少正式大賽的氣氛,不夠嚴肅,因此本盤點統計都是線下的正式分先對弈。
AlphaGo 對人類正式戰績:7勝1負
李世石與谷歌創始人布林 AlphaGo與李世石、柯潔的人機大戰,無疑是到當前為止影響力最大的兩次。其間有無數的瞬間值得我們回味,李世石“神之一手”帶來的一次勝利,對圍棋界來說價值連城。除了李世石和柯潔,歐洲圍棋冠軍樊麾也曾與AlphaGo有過對抗,但那次比賽並非公開進行,因此未計入正式比賽總戰績。
Google DeepMind 挑戰賽五番棋
2016年3月9日 李世石 執黑中盤負 AlphaGo
2016年3月10日 李世石 執白中盤負 AlphaGo
2016年3月12日 李世石 執黑中盤負 AlphaGo
2016年3月13日 李世石 執白中盤勝 AlphaGo
2016年3月15日 李世石 執黑中盤負 AlphaGo
烏鎮圍棋峰會人機大戰三番棋
2017年5月23日 柯潔 執黑1/4子負 AlphaGo
2017年5月25日 柯潔 執白中盤負 AlphaGo
2017年5月27日 柯潔 執白中盤負 AlphaGo
絕藝 對人類正式戰績:3勝0負
中國的圍棋人工智慧這兩年如雨後春筍般出現,各有特點。“絕藝如君天下少”,杜牧的這句詩恰到好處地形容了騰訊團隊研發的圍棋人工智慧程式“絕藝”。與AlphaGo的深居簡出不同,絕藝長期在野狐圍棋上進行測試,指導棋迷,還衍生出不少實用的圍棋套用。絕藝當前在正式比賽里,對人類棋手的成績是三戰全勝,遺憾的是還未與柯潔、李世石這樣的時代標誌性棋手有過正式的交鋒。
TWT騰訊圍棋錦標賽人機挑戰賽 TWT騰訊圍棋錦標賽人機挑戰賽
2017年12月16日 童夢成 執白中盤負 絕藝
2017年12月16日 連笑 執白中盤負 絕藝
第5期電聖戰世界人機大戰
2017年3月26日 一力遼 執白中盤負 絕藝
神運算元 對人類正式戰績:2勝2負
神運算元退役之戰對壘孔傑 有清華大學背景的“神運算元”是中國另外一款非常活躍的圍棋人工智慧。神運算元已經於4月份正式退役,未來將致力於圍棋人工智慧技術套用的研究和開發,在棋力提升上的探索則交給了馬上要在福州與柯潔進行人機大戰的“星陣圍棋”。
學海弈情廈大校友圍棋大會人機戰
2018年4月14日 王鷺 執黑中盤負 神運算元
中國AI神運算元謝幕戰
2018年 4月7日 孔傑 執黑中盤負 神運算元
第一屆校友京華杯人機戰
2018年1月14日 李喆 執黑中盤勝 神運算元
華山智巔棋妙未來世界人機戰
2017年10月25日 馬曉春 執白中盤勝 神運算元
天壤 對人類正式戰績:0勝1負
天壤對壘王立誠 “天壤圍棋”的研發團隊來自上海,創始人薛貴榮博士曾是阿里媽媽首席數據科學家。天壤圍棋在其官網上也有與愛好者對弈測試,不久前還助陣女子圍甲聯賽,與女棋手們配合下人機配對賽,大受歡迎。天壤與人類棋手的正式交手並不多,不過據說之後會有個大動作。
象嶼杯海峽兩岸人機大戰
2017年11月5日 王立誠 執白中盤勝 天壤
CGI 對人類正式戰績:3勝1負
CGI來自中國台灣,由台北交通大學資訊工程研究所教授吳毅成的計算機遊戲與智慧型實驗室研發。在2017年的中信證券杯世界智慧型圍棋大賽里,CGI爆冷擊敗絕藝,名噪一時。年初CGI三比零完爆中國台灣當前最頂尖的棋手王元均。
馬曉春對陣CGI 戊戌梅竹人機大戰三番棋
2017年12月28日 王元均 執白1又3/4子負 CGI
2018年2月26日 王元均 執黑1又1/4子負 CGI
2018年2月27日 王元均 執黑中盤負 CGI
象嶼杯海峽兩岸人機大戰
2017年11月5日 馬曉春 執白中盤勝 CGI
深禪圍棋(DeepZenGo) 對人類正式戰績:8勝7負
DeepZenGo項目啟動 Zen在日文里是“禪”的意思,是圍棋程式里的老字號。2016年3月1日,在第一次圍棋人機大戰開戰之前,日本著名視頻網站niconico與日本棋院和Zen團隊合作,“DEEPZENGO”項目啟動。2016年底,Zen開始分先挑戰職業高手,從趙治勳開始,到趙治勳結束,總戰績8勝7負。其間Zen還受邀參加了夢百合杯世界圍棋公開賽,不過在32強戰被中國棋手王昊洋阻擊。“DEEPZENGO”項目合作到期,DEEPZENGO這個名字也將成為歷史,不過相信Zen還會繼續活躍在棋壇之中。
世界電王戰謝幕戰三番棋
2018年4月7日 趙治勳 執白中盤負 Zen
2018年4月1日 朴廷桓 執白中盤負 Zen
2018年3月24日 羋昱廷 執黑中盤勝 Zen
韓國華城圍棋大會人機戰
2017年11月11日 申真諝 執白中盤勝 Zen
第三屆夢百合杯世界圍棋公開賽
2017年6月21日 王昊洋 執白1/4子勝 Zen
2017年6月19日 申旻埈 執黑中盤負 Zen
夢百合杯王昊洋成功阻擊 第3期龍星戰日本人機大戰
2017年4月29日 藤澤里菜 執白中盤負 Zen
第5期電聖戰世界人機大戰
2017年3月26日 一力遼 執黑中盤負 Zen
首屆世界最強棋士決定戰
2017年3月23日 井山裕太 執白中盤負 Zen
2017年3月22日 朴廷桓 執黑中盤勝 Zen
2017年3月21日 羋昱廷 執黑中盤勝 Zen
日本寢屋川大會人機大戰
2017年11月23日 河英一 執白中盤負 Zen
日本電王戰三番棋
2016年11月23日 趙治勳 執黑中盤勝 Zen
2016年11月20日 趙治勳 執白中盤負 Zen
2016年11月19日 趙治勳 執黑中盤勝 Zen
石子旋風(DolBaram) 對人類正式戰績:2勝2負
石子旋風開發者:林在范 相比中國、日本圍棋人工智慧程式的此起彼伏,韓國則顯得有些“人丁單薄”,只有石子旋風比較出名。更有趣的是,石子旋風參加的四次正式人機對抗里,三次都是跟中國的馬曉春九段下的。
韓國華城圍棋大會人機戰
2018年2月7日 朴廷桓 執白中盤勝 石子旋風
華山智巔棋妙未來世界人機戰
2017年10月26日 馬曉春 執黑中盤負 石子旋風(決賽)
2017年10月25日 馬曉春 執黑中盤負 石子旋風(預賽)
圍棋人工智慧與物聯網大會人機大戰
2017年6月18日 馬曉春 執白中盤勝 石子旋風

相關詞條

熱門詞條

聯絡我們