对于这个世界上最古老的棋盘游戏之一,人类已经达到了巅峰。但是现在,通过人工智能,我们正在不断地挑战人类的极限。
作为一种新兴的围棋AI,Katago已经在围棋领域中引起了广泛关注和探讨。通过结合深度学习技术和蒙特卡罗树搜索,Katago在围棋比赛中展现出了前所未有的高水平,甚至在某些情况下超过了AlphaGo。而且,Katago的开源代码也吸引了大量围棋爱好者和开发者的兴趣,他们使用Katago进行自我对弈和改进,进一步提高了Katago的棋力。
Katago是一个开源的围棋AI,由David Wu和他的团队开发。它使用深度学习技术,包括卷积神经网络和蒙特卡罗树搜索,以最先进的水平在围棋比赛中击败人类。Katago的算法和代码已经公开发布,并且被广泛用于围棋教学、比赛和研究。通过使用自我对弈和强化学习,Katago不断改进和提高自己的棋力,是一个非常有潜力的AI项目。
最近,我有机会使用Katagomo进行训练,并成功地创建了一个新的围棋AI模型。在本篇博客文章中,我将分享我的经验和过程,以及一些有关Katago的基础知识和使用技巧。
虽然我成功创建了一个模型,但是可能依然有很多错误。因为我还是一个学习者。如果你发现了这篇文章中的错误,请在评论区指出来。谢谢你的理解!
Katago-Github:https://github.com/lightvector/KataGo
Katagomo-Github:https://github.com/hzyhhzy/KataGo
Compiling.md:https://github.com/lightvector/KataGo/blob/master/Compiling.md
SelfplayTraining.md:https://github.com/lightvector/KataGo/blob/master/SelfplayTraining.md
CMake Download:https://cmake.org/download/
Cuda Download:https://developer.nvidia.com/cuda
Cudnn Download:https://developer.nvidia.com/cudnn
Kata1 NetWork:https://katagotraining.org/networks/
想要创建AI模型,第一步需要在你的电脑上进行编译。有关Katago的编译文档在此:Compiling.md。
我的电脑中的运行环境为Ubuntu / GPU(CUDA)。接下来我将复现我的操作,这个操作适用于任何Linux,不清楚是否适用于MacOS,如果您用的是Windows可能需要自行修改。
首先需要一个比较高版本(3.10.2)的Cmake,因为Ubuntu源中的Cmake版本过低,所以需要前往Cmake官网下载Cmake包。之后解压到任何一个目录中即可。无需编译可以直接使用。如果需要加到PATH。请在你的bash配置文件(Bash为~/.bashrc,Zsh为~/.zshrc)中末尾添加:
export PATH=$PATH:(Your Path)/cmake-3.26.0-linux-x86_64/bin
安装好后键入cmake --version,如果返回了Cmake版本号即安装成功。
接下来请按照Compiling.md中给出的步骤顺序检查C++版本,以及各个BackEnd的需求。
一切准备就绪后请进入到工作目录
git clone https://github.com/lightvector/KataGo.git
clone好后进入cpp文件夹,根据你需要的BackEnd来Cmake编译
cmake . -DUSE_BACKEND=CUDA
如果在此报错没有libzip,请先安装libzip。
没有问题后在同一目录下执行
make
等待编译成功,如果在目录下找到可执行文件katago就成功了。
./katago version
恭喜你已经完成了Katago的编译!
开始SelfPlay前请先阅读SelfPlayTraining.md。这篇指南能告诉你如何进行自我训练并生成model。
首先需要有Python3和Tensorflow,在SelfPlay之前,请先安装它们。
接下来请准备好SelfPlay.cfg,这是Katago在SelfPlay时的配置文件。在这个配置文件中,可以调整棋盘的权值,CPU的使用和GPU等一些训练的配置。如果配置好,可以更有效地训练。
根据SelfPlayTraining.md中显示,需要有五个进程同时运作:SelfPlay Shuffler Training Exporter和GateKeeper。
我的过程中只用了前4个:
Selfplay engine (C++ - cpp/katago selfplay) - continuously plays games using the latest neural net in some directory of accepted models, writing the data to some directory.
Shuffler (python - python/shuffle.py) - scans directories of data from selfplay and shuffles it to produce TFRecord files to write to some directory.
Training (python - python/train.py) - continuously trains a neural net using TFRecord files from some directory, saving models periodically to some directory.
Exporter (python - python/export_model.py) - scans a directory of saved models and converts from Tensorflow's format to the format that all the C++ uses, exporting to some directory.
将这4个准备好后开始运行
请先阅读SelfTraining.md中对于命令的详解。(SelfTraining.md中没有关于shuffle.sh和export_model_for_selfplay.sh这两个,因为官方将这两个整合为Shuffle_and_Export_loop.sh)
我的运行指令为:(第一条指令处于cpp文件下,其余处于scripts文件夹下)
./katago selfplay -config ./work/config_files/selfplay1.cfg -models-dir ./work/output/acceptedmodels -output-dir ./selfplay
./shuffle.sh ../ ./TempDir 10 256 -keep-target-rows 10000 -min-rows 100
./train.sh ../ kataAda b6c96 256 main -lr-scale 1.0
./export_model_for_selfplay.sh kataAda ../ 0
我的文件结构是:
Katago
├── cpp
│ ├── katago
│ └── selfplay
└── scripts
├── shuffle.sh
├── train.sh
└── export_model_for_selfplay.sh
先运行好第一条第三条和第四条命令,然后手动运行第二条命令刷洗SelfPlay下的数据。其中第一条命令和第三条命令默认在终端输出,第二条命令手动执行后在终端输出,第四条命令在后台运行,输出到$basedir下的log中,这个可以手动调节。
第一条命令执行时应该输出的是正在进行第n场游戏
第二条命令执行时应该输出的是刷洗的数据量
第三条命令执行时应该输出的是训练过程,而不是未找到Shuffled数据
第四条命令若是想在终端输出可以将.sh文件中的输出到log给删除
如果想让第二条命令持续进行,可以使用shuffler_loop.sh。这个sh默认不会在终端输出,也可以将输出到log删除使得sh在终端输出
正确的结果是:第一个进程进行游戏,第二个进程扫描到数据并刷洗,第三个进程训练数据,最后在cpp文件夹下找到modelstobetests
执行后的文件夹:
Katago
├── cpp
│ ├── katago
│ ├── models
│ ├── modelstobetest
│ ├── selfplay
│ └── shuffleddata
└── scripts
├── shuffle.sh
├── train.sh
└── export_model_for_selfplay.sh
如果你在modelstobetest中找到了model.bin.gz,恭喜你获得了模型!
后续可以用gatekeeper来测试模型并筛选好用的模型。
文章评论