来下围棋吧~TensorFlow minigo~

TensorFlow 早些天发布了一个名为 minigo 的项目,因为 Google 官方还一直没有开源 AlphaZero,那么就先来看看 minigo 怎么玩(搞事情)吧www

假设乃使用的是 macOS / Ubuntu / debian,当然其他系统也可以,操作大同小异。

首先是安装 Python 3,macOS 下默认是 python2.7,新的 Python 3 需要去 Python 官网下载,https://www.python.org/downloads/。对于 Ubuntu / debian 来说的话,则是直接

apt-get install python3

当然,比较新的 Ubuntu / debian 都会默认安装 python3.6~

接下来需要的是 pip,也就是那个最常被用来安装、管理 Python 包的工具~对于以上三个系统,都可以在terminal中执行如下语句安装w

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python3 get-pip.py

随后就可以用 pip 安装virtualenv了,virtualenv用于隔离不同项目的环境,以避免个项目之间的依赖冲突。

pip3 install virtualenv
pip3 install virtualenvwrapper

之后就可以生成一个用于 minigo 的环境了~

export WORKON_HOME=~/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=$(which python3)

稍有不同的是,macOS 中,virtualenvwrapper.sh 的安装位置可能不在 /usr/local/bin/virtualenvwrapper.sh。而是在 python3 本体的目录下。于是这里对于 macOS 来说,需要执行的是

export VIRTUALENVWRAPPER_SCRIPT="`dirname $VIRTUALENVWRAPPER_PYTHON`/virtualenvwrapper.sh"

而对于 Ubuntu / debian 则是

export VIRTUALENVWRAPPER_SCRIPT="/usr/local/bin/virtualenvwrapper.sh"

接下来的步骤则都是相同的了~

初始化 virtualenvwrapper~指定 python3 创建名为 minigo 的环境

source $VIRTUALENVWRAPPER_SCRIPT
mkvirtualenv -p `which python3` minigo

第一次创建时会自动切换到该环境上,之后需要切换进来则是

source $VIRTUALENVWRAPPER_SCRIPT
workon minigo

现在到正式开始 minigo 的部分了~macOS / Ubuntu / debian 都有自带 git,于是就直接开始w

git clone https://github.com/tensorflow/minigo.git
cd minigo
pip3 install -r requirements.txt

接下来,如果乃的机器上有支持 CUDA 的 GPU 的话,则推荐安装 CUDA9.0,并且用 GPU 版本的 TensorFlow

pip3 install "tensorflow-gpu>=1.5,<1.6"

若不满足条件的话,则是

pip3 install "tensorflow>=1.5,<1.6"

安装好之后,就可以开始设置 minigo 的环境了w

# 用于 cluster/common.sh 的环境变量
PROJECT=minigo-project
source cluster/common.sh
# 我们将训练的模型放在 ~/minigo-models 下
MINIGO_MODELS=\$HOME/minigo-models
# 创建一会儿需要的目录
mkdir -p \$MINIGO_MODELS
mkdir -p \$MINIGO_MODELS/models
mkdir -p \$MINIGO_MODELS/data/selfplay
mkdir -p \$MINIGO_MODELS/sgf/
# 设置第一个模型的名字
export MODEL_NAME=000000-bootstrap

现在就可以开始第 1 个模型了~

# main.py bootstrap 部分的话,需要两个参数
# 第一个是工作目录,这里我们使用 "." 也就是当前目录
# 第二个是模型保存的路径,这里将前面设置好的变量拼接起来
python3 main.py bootstrap . "\$MINIGO_MODELS/models/$MODEL_NAME"

如果之前的步骤都正确的话,那么输出看上去就是类似这样的w

(minigo) root@minigo:~/minigo# python3 main.py bootstrap . \$MINIGO_MODELS/$MODEL_NAME
See tf.nn.softmax_cross_entropy_with_logits_v2.
Copying ./model.ckpt-1.meta to /root/minigo-models/000000-bootstrap.meta
Copying ./model.ckpt-1.index to /root/minigo-models/000000-bootstrap.index
Copying ./model.ckpt-1.data-00000-of-00001 to /root/minigo-models/000000-bootstrap.data-00000-of-00001
(minigo) root@ minigo:~/minigo# ls /root/minigo-models/
000000-bootstrap.data-00000-of-00001 000000-bootstrap.index 000000-bootstrap.meta

蓝后就可以让 minigo 来进行 selfplay 了~

python3 main.py selfplay "\$MINIGO_MODELS/models/\$MODEL_NAME" \
--readouts 10 \
-v 3 \
--output-dir="\$MINIGO_MODELS/data/selfplay/\$MODEL_NAME/local_worker" \
--output-sgf="\$MINIGO_MODELS/sgf/\$MODEL_NAME/local_worker"

接下来,让 minigo 在本地进行增强学习的话,我们需要修改一下 rl_loop.py,因为虽然目前官方提供了 local_rl_loop.py,但是里面模型的名字是写死的。

修改的部分在 rl_loop.py 的第 31 行,

# 原本是这样的
# BASE_DIR = "gs://{}".format(BUCKET_NAME)
# 需要修改成下面这样
BASE_DIR = os.environ['MINIGO_MODELS']

修改好之后,则可以不需要Google Cloud Storage就能在本地进行增强学习(其实照着 rl_loop.py 去改 local_rl_loop.py 也行)

python3 rl_loop.py selfplay --readouts=10 -v 2

执行好之后,就可以把数据收集起来了

python3 main.py gather --input-directory="\$MINIGO_MODELS/data/selfplay" --output-directory="\$MINIGO_MODELS/data/training_chunks"

然后生成新的模型~

export NEXT_MODEL=000001-naive
python3 main.py train . "\$MINIGO_MODELS/data/training_chunks" "\$MINIGO_MODELS/models/\$NEXT_MODEL" --generation-num=1

最后就可以继续在新的模型上训练

# 使用新的模型
export MODEL_NAME=\$NEXT_MODEL
# selfplay
python3 main.py selfplay "\$MINIGO_MODELS/models/\$MODEL_NAME" \
--readouts 10 \
-v 3 \
--output-dir="\$MINIGO_MODELS/data/selfplay/\$MODEL_NAME/local_worker" \
--output-sgf="\$MINIGO_MODELS/sgf/\$MODEL_NAME/local_worker"
# 增强学习
python3 rl_loop.py selfplay --readouts=10 -v 2

在这之后,又可以 gather、生成新模型等等~

如果想和训练好的模型对战的话,则是

LATEST_MODEL=$(ls -d \$MINIGO_MODELS/models/* | tail -1 | cut -f 1 -d '.')
python3 main.py gtp -l \$LATEST_MODEL -r 10 -v 3

当提示出“GTP engine ready”的时候,就可以开始玩了~

genmove white # 让 minigo 给 white 下一步
play black A1 # 自己给 black 下一步,下在 A1 这个位置
showboard # 查看现在的局面www
minigo
minigo

5 thoughts on “来下围棋吧~TensorFlow minigo~”

  1. 之后就可以生成一个用于 minigo 的环境了~

    1
    2
    export WORKON_HOME=HOME/.virtualenvsexportVIRTUALENVWRAPPERPYTHON=HOME/.virtualenvs

    輸入上面後, 出現ERROR
    -bash: syntax error near unexpected token `<'

    找不到方法解決???

    1. 上面顯示錯誤
      export WORKON_HOME=HOME/.virtualenvsexportVIRTUALENVWRAPPERPYTHON=HOME/.virtualenvs
      -bash: syntax error near unexpected token `<'

  2. 報錯的訊息是輸入python3 main.py bootstrap . "MINIGOMODELS/models/MODEL_NAME"

    而輸入python3 main.py bootstrap . "MINIGO_MODELS/models/MODEL_NAME"也是一樣的錯誤訊息

    有用gcloud auth application-default login去登入google帳號了 但一樣無用 (系統為ubuntu 16.04)前置步驟都已順利完成

  3. python3 main.py bootstrap . "MINIGO_MODELS/models/MODEL_NAME"

    您好~ 在這段部份有問題過不去呢!有如下的錯誤訊息, 有任何建議嘛?

    WARNING:google.auth._default:No project ID could be determined. Consider running `gcloud config set project` or setting the GOOGLE_CLOUD_PROJECT environment variable
    usage: main.py [-h]
    {gtp,bootstrap,train,selfplay,gather,evaluate,validate} ...
    main.py: error: unrecognized arguments: . MINIGOMODELS/models/MODEL_NAME
    Waiting up to 5 seconds.
    Sent all pending logs.

Leave a Reply

Your email address will not be published. Required fields are marked *

13 − three =