微信团队开源围棋AI技术PhoenixGo,复现AlphaGo Zero论文
liebian365 2024-10-16 13:02 38 浏览 0 评论
本文介绍了腾讯微信翻译团队开源的人工智能围棋项目 PhoenixGo,该项目是对 DeepMindAlphaGo Zero论文《Mastering the game of Go without human knowledge》的实现。
PhoenixGo 是腾讯微信翻译团队开发的人工智能围棋程序。据介绍,该项目由几名工程师在开发机器翻译引擎之余,基于 AlphaGo Zero 论文实现,做了若干提高训练效率的创新,并利用微信服务器的闲时计算资源进行自我对弈,缓解了 Zero 版本对海量资源的苛刻需求。
4 月底,在 2018 世界人工智能围棋大赛上,PhoenixGo 取得冠军。参赛队伍包括绝艺,LeelaZero、TSGo、石子旋风、Golois,HEROZ Kishi、Baduki 等来自中、日、韩、欧美等国家和地区的人工智能围棋高手。
5 月 11 日,PhoenixGo 在 Github 上正式开源,以下是技术细节:
项目地址:https://github.com/Tencent/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 上
1 要求
支持 C++11 的 GCC;
Bazel(0.11.1);
(可选)CUDA 和 cuDNN(支持 GPU);
(可选)TensorRT(加速 GPU 上的计算,建议使用 3.0.4 版本)。
2 构建
复制库,并进行构建配置:
git clone https://github.com/Tencent/PhoenixGo.gitcd PhoenixGo ./configure
./configure 将询问 CUDA 和 TensorRT 的安装位置,如果必要指定二者的位置。
然后使用 bazel 进行构建:
bazel build //mcts:mcts_main
TensorFlow 等依赖项将会自动下载。构建过程可能需要很长时间。
3 运行
下载和提取训练好的网络:
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} 即可。
你可以按照此说明更改配置文件:https://github.com/Tencent/PhoenixGo#configure-guide
4 分布模式
如果不同的机器上有 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
在 Windows 上
正在进行。
配置指南
以下是 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 支持更多命令行选项。
相关推荐
- “版本末期”了?下周平衡补丁!国服最强5套牌!上分首选
-
明天,酒馆战棋就将迎来大更新,也聊了很多天战棋相关的内容了,趁此机会,给兄弟们穿插一篇构筑模式的卡组推荐!老规矩,我们先来看10职业胜率。目前10职业胜率排名与一周前基本类似,没有太多的变化。平衡补丁...
- VS2017 C++ 程序报错“error C2065:“M_PI”: 未声明的标识符"
-
首先,程序中头文件的选择,要选择头文件,在文件中是没有对M_PI的定义的。选择:项目——>”XXX属性"——>配置属性——>C/C++——>预处理器——>预处理器定义,...
- 东营交警实名曝光一批酒驾人员名单 88人受处罚
-
齐鲁网·闪电新闻5月24日讯酒后驾驶是对自己和他人生命安全极不负责的行为,为守护大家的平安出行路,东营交警一直将酒驾作为重点打击对象。5月23日,东营交警公布最新一批饮酒、醉酒名单。对以下驾驶人醉酒...
- Qt界面——搭配QCustomPlot(qt platform)
-
这是我第一个使用QCustomPlot控件的上位机,通过串口精确的5ms发送一次数据,再将读取的数据绘制到图表中。界面方面,尝试卡片式设计,外加QSS简单的配了个色。QCustomPlot官网:Qt...
- 大话西游2分享赢取种族坐骑手办!PK趣闻录由你书写
-
老友相聚,仗剑江湖!《大话西游2》2021全民PK季4月激燃打响,各PK玩法鏖战齐开,零门槛参与热情高涨。PK季期间,不仅各种玩法奖励丰厚,参与PK趣闻录活动,投稿自己在PK季遇到的趣事,还有机会带走...
- 测试谷歌VS Code AI 编程插件 Gemini Code Assist
-
用ClaudeSonnet3.7的天气测试编码,让谷歌VSCodeAI编程插件GeminiCodeAssist自动编程。生成的文件在浏览器中的效果如下:(附源代码)VSCode...
- 顾爷想知道第4.5期 国服便利性到底需优化啥?
-
前段时间DNF国服推出了名为“阿拉德B计划”的系列改版计划,截至目前我们已经看到了两项实装。不过关于便利性上,国服似乎还有很多路要走。自从顾爷回归DNF以来,几乎每天都在跟我抱怨关于DNF里面各种各样...
- 掌握Visual Studio项目配置【基础篇】
-
1.前言VisualStudio是Windows上最常用的C++集成开发环境之一,简称VS。VS功能十分强大,对应的,其配置系统较为复杂。不管是对于初学者还是有一定开发经验的开发者来说,捋清楚VS...
- 还嫌LED驱动设计套路深?那就来看看这篇文章吧
-
随着LED在各个领域的不同应用需求,LED驱动电路也在不断进步和发展。本文从LED的特性入手,推导出适合LED的电源驱动类型,再进一步介绍各类LED驱动设计。设计必读:LED四个关键特性特性一:非线...
- Visual Studio Community 2022(VS2022)安装图文方法
-
直接上步骤:1,首先可以下载安装一个VisualStudio安装器,叫做VisualStudioinstaller。这个安装文件很小,很快就安装完成了。2,打开VisualStudioins...
- Qt添加MSVC构建套件的方法(qt添加c++11)
-
前言有些时候,在Windows下因为某些需求需要使用MSVC编译器对程序进行编译,假设我们安装Qt的时候又只是安装了MingW构建套件,那么此时我们该如何给现有的Qt添加一个MSVC构建套件呢?本文以...
- Qt为什么站稳c++GUI的top1(qt c)
-
为什么现在QT越来越成为c++界面编程的第一选择,从事QT编程多年,在这之前做C++界面都是基于MFC。当时为什么会从MFC转到QT?主要原因是MFC开发界面想做得好看一些十分困难,引用第三方基于MF...
- qt开发IDE应该选择VS还是qt creator
-
如果一个公司选择了qt来开发自己的产品,在面临IDE的选择时会出现vs或者qtcreator,选择qt的IDE需要结合产品需求、部署平台、项目定位、程序猿本身和公司战略,因为大的软件产品需要明确IDE...
- Qt 5.14.2超详细安装教程,不会来打我
-
Qt简介Qt(官方发音[kju:t],音同cute)是一个跨平台的C++开库,主要用来开发图形用户界面(GraphicalUserInterface,GUI)程序。Qt是纯C++开...
- Cygwin配置与使用(四)——VI字体和颜色的配置
-
简介:VI的操作模式,基本上VI可以分为三种状态,分别是命令模式(commandmode)、插入模式(Insertmode)和底行模式(lastlinemode),各模式的功能区分如下:1)...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- “版本末期”了?下周平衡补丁!国服最强5套牌!上分首选
- VS2017 C++ 程序报错“error C2065:“M_PI”: 未声明的标识符"
- 东营交警实名曝光一批酒驾人员名单 88人受处罚
- Qt界面——搭配QCustomPlot(qt platform)
- 大话西游2分享赢取种族坐骑手办!PK趣闻录由你书写
- 测试谷歌VS Code AI 编程插件 Gemini Code Assist
- 顾爷想知道第4.5期 国服便利性到底需优化啥?
- 掌握Visual Studio项目配置【基础篇】
- 还嫌LED驱动设计套路深?那就来看看这篇文章吧
- Visual Studio Community 2022(VS2022)安装图文方法
- 标签列表
-
- wireshark怎么抓包 (75)
- qt sleep (64)
- cs1.6指令代码大全 (55)
- factory-method (60)
- sqlite3_bind_blob (52)
- hibernate update (63)
- c++ base64 (70)
- nc 命令 (52)
- wm_close (51)
- epollin (51)
- sqlca.sqlcode (57)
- lua ipairs (60)
- tv_usec (64)
- 命令行进入文件夹 (53)
- postgresql array (57)
- statfs函数 (57)
- .project文件 (54)
- lua require (56)
- for_each (67)
- c#工厂模式 (57)
- wxsqlite3 (66)
- dmesg -c (58)
- fopen参数 (53)
- tar -zxvf -c (55)
- 速递查询 (52)