Sabaki + Leela-Zero + Leelasabaki
本文主要阐述在 Windows/Linux 环境下搭建围棋 AI 的过程。使用到的软件栈为:
- Sabaki:一个跨平台的围棋(Go)棋盘和 SGF 编辑工具。
- LeelaSabaki:Leela (Zero) integration with Sabaki.
- Leela-Zero:一个 AlphaGo Zero 论文 的开源实现
Based on Windows (Play for fun)
下载如下软件的 Windows 版本和相关权值文件:
执行如下安装过程
- 安装 Sabaki 到路径 C:\MyPrograms\Sabaki【注意:安装路径避免空格】;
- 安装 LeelaSabaki 到路径 C:\MyPrograms\leesabaki;
- 安装 Leela-Zero CPU Only 到路径 C:\MyPrograms\leela-zero-0.15-cpuonly-win64;
- 解压权值文件到 C:\MyPrograms\leeazero。
启动 Sabaki,配置 Engines->Manage Engines,如下图所示
配置 Engine 参数为 --flat C:\MyPrograms\leela-zero-0.15-cpuonly-win64\leelaz.exe -t 6 -w C:\MyPrograms\leeazero\leelaz-model-swa-12-96000_quantized.txt --noponder
,其中
-t
:表示使用CPU的6线程;-w
:表示调用权重文件;--noponder
:表示对手时间内不思考;
然后,执行 Engines -> Attach 启动对弈程序,选择黑/白为 leelazero Engine,如下图所示
关于 leela-zero 的参数如下所示
Based on Linux (Research)
编译安装 Leela-Zero
1 | git clone https://github.com/gcp/leela-zero |
使用 Dockerfile 安装 Leela-Zero
从 nvidia/cuda
开始构建 docker image,如下为 Dockerfiles/Dockerfile.gpu
1 | FROM nvidia/opencl:devel-ubuntu16.04 |
在 leela-zero
根目录执行
1 | nvidia-docker build -t leelaz:gpu -f Dockerfiles/Dockerfile.gpu . |
运行自对弈程序(Self Play)
通过 nvidia-docker 启动自对弈程序(nvidia-docker 安装参考 NVIDIA/nvidia-docker),执行如下命令
1 | nvidia-docker run -it \ |
命令解释:
-v:挂载自对弈棋面数据的存储路径;挂载权重文件。autogtp 默认在启动路径下找到 networks 路径加载权值。实际执行如下命令启动 leelaz
1
./leelaz --tune-only -w networks/ --gpu=...
-u:Index of the GPU to use for multiple GPUs support
- -k:存储每局自对弈数据的路径。默认情况下,自对弈的数据会先上传到
http://zero.sjeng.org/submit-match
,然后再存储到本地。 如果没有指定-k
参数,自对弈数据直接被删除。
使用 Tensorflow 训练模型(Training)
生成训练数据有如下两种方法
运行自对弈程序,得到对弈数据,如下所示
1
2$ ls ~/data/leelaz/self_play/
257fab047b414591b6d2f1a8eb435516.sgf将自对弈数据转变为训练数据
1
2
3
4
5
6
7
8nvidia-docker run -it \
-v $HOME/data/leelaz/self_play:/data \
-v $HOME/data/leelaz/weights:/src/build/networks \
leelaz:gpu ./leelaz \
-w /src/build/networks/dec5b9d88877fe876a308b42370335c8f5465235d0104c889bdda3b42993aa28
dump_supervised /data/257fab047b414591b6d2f1a8eb435516.sgf /data/train.out
<CTRL+C exit>在自对弈过程中设置 debug 目录,运行
1
./autogtp/autogtp -u 4 -k /data/sgf -d /data/debug
在 /data/debug 目录下,除开以
.debug.txt.0.gz
结尾的数据,以.txt.0.gz
结尾的数据为训练数据。
启动 tensorflow-py3 进行训练
1 | LEELAZ_HOME=`pwd` |
在 Leelaz 中使用新模型
启动 leelaz 加载新模型进行对弈,如下所示
1 | ./leelaz --gpu=0 --noponder -w ../training/tf/leelaz-model-2000.txt |
Errors
更新 apt 源出现网络错误。
修改 Dockerfile,添加国内的 apt source,例如 tsinghua 的 ubuntu 源。
clinfo
没有找到 GPU device选择安装了 OpenCL 驱动的镜像,在 nvidia/opencl hub 中,选择合适的镜像源,在本文中选择
devel-ubuntu16.04
作为基础镜像使用
nvidia-docker
启动镜像,如下所示1
nvidia-docker run -it --rm nvidia/opencl:devel-ubuntu16.04 /bin/bash