読み書きプログラミング

日常のプログラミングで気づいたことを綴っています

GPUEaterでLeela Zeroを動かす

https://pbs.twimg.com/media/DjGFRRyUUAAn2eM?format=png

GPUEaterというGPUサーバーレンタルサービスがあります。

www.gpueater.com

RX Vega 56などハイエンドのPCやワークステーションに搭載されるGPUマシンをお手頃な値段で時間貸ししてくれます。RX Vega 56の場合、1時間$0.4794(≒53円)。

ここではAMDGPUマシンを借りて、Leela Zero、Lizzieをインストールし、VNCで接続して遊ぶ手順を公開します。

手順

GPUEaterでアカウントを作る。

省略^^:

インスタンスを生成する。

省略^^:
ここでの手順はAMD GPU用なので、インスタンスはa1.rx580, a1.vega56, a1.vegafeのいずれかを選んでください。
ImageはデフォルトのAMD-ROCm 1.8 192+TensorFlow1.8 Ubuntu 16.04 x64ではなく、Ubuntu 16.04 x64を選択してください。ROCmのOpenCLではLeela Zeroが正常動作しませんでした。(a1.vega56インスタンスで確認。)

追記(2018/08/07)
今日、Leela Zero nextブランチ488de43コミットで確認したところ、AMD-ROCm 1.8 192+TensorFlow1.8 Ubuntu 16.04 x64イメージで動きました。なのでこのイメージを使えば以下の「OpenCLのインストール」は必要ありません。
488de43コミットはhalf float auto detectionもサポートしています。ROCm OpenCLドライバはVegaのhalf floatがサポートされているので、amdproドライバと比較してLeela Zeroのパフォーマンスが1.5倍(netbench比較)になりました。
追記(2018/08/08)
動くのは特定ウェイト(62b5417b64c46976795d10a6741801f15f857e5029681a42d02c9852097df4b9)のようで、best-networkでは動かないことを確認しました。イメージは変わっていないので、ROCmドライバにバグがあって、地雷を踏むウェイトとそうじゃないウェイトがあるようです。

SSHで接続してインストール作業をする。

SSH接続手順は省略^^;

OpenCLのインストール

以下のスクリプトを走らせてください。

# OpenCLのインストール

apt update

# AMDのサイトから直接ダウンロードできなかったのでDropboxに落としたものをダウンロード
wget https://www.dropbox.com/s/r1totpsb5e5z1lb/amdgpu-pro-18.20-606296.tar.xz
apt install xz-utils
tar -Jxvf amdgpu-pro-18.20-606296.tar.xz
cd amdgpu-pro-18.20-606296
dpkg --add-architecture i386
./amdgpu-install --opencl=pal
#実行途中でインストールの意思を聞かれるのでYを入力
reboot

最後にrebootするのでSSHが一旦切れます。再度SSHで接続してください。

OpenCLがインストールされたか確認したい場合、以下を実行してください。

apt install -y clinfo && clinfo
Leela Zeroのインストール

以下のスクリプトを実行してください。ウェイトはELF OpenGo移植ウェイトを選びました。

git clone -b next http://github.com/gcp/leela-zero.git
cd leela-zero/src
apt install -y g++ libboost-dev libboost-program-options-dev libopenblas-dev opencl-headers ocl-icd-libopencl1 ocl-icd-opencl-dev zlib1g-dev
make
cd ..
wget http://zero.sjeng.org/networks/62b5417b64c46976795d10a6741801f15f857e5029681a42d02c9852097df4b9.gz

Leela Zeroが動くか確認したい場合、以下を実行してください。

src/leelaz -g --weights 62b5417b64c46976795d10a6741801f15f857e5029681a42d02c9852097df4b9.gz

a1.vega56dでのnetbenchの結果は以下の通りでした。

 1600 evaluations in  4.59 seconds -> 348 n/s
VNC関連のインストール

以下のスクリプトを実行してください。

apt install -y --no-install-recommends ubuntu-desktop gnome-panel gnome-settings-daemon metacity nautilus gnome-terminal
apt install -y vnc4server

(軽量なデスクトップにしてインストール時間を短くしたかったのですが、それだと以下に出てくるxstartupがうまく設定できなかったのでUbuntu 1604のデフォルトデスクトップUnityを使いました。Unityは開発中止になっているので、せめてGnomeのほうがよかったかもしれません。軽量なデスクトップでいいものがあれば設定方法含めて教えてください。)

VNCの初期設定のために以下を実行してください。(これはサーバー起動コマンドです。)

vncserver :1

一旦サーバーは停止させます。

vncserver -kill :1

.vnc/xstartupというファイルが生成されますので、中身を以下に変えてください。

#!/bin/sh

# Uncomment the following two lines for normal desktop:
# unset SESSION_MANAGER
# exec /etc/X11/xinit/xinitrc

#[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
#[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
#xsetroot -solid grey
#vncconfig -iconic &
#x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
#x-window-manager &

export XKL_XMODMAP_DISABLE=1
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS

[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
gnome-session &
gnome-panel &
gnome-settings-daemon &
metacity &
nautilus &
gnome-terminal &

xstartupの中身を変えたら、再度VNCサーバーを起動します。

vncserver :1
Lizzieのインストール

以下のスクリプトを実行してください。

apt install -y default-jre
wget https://github.com/featurecat/lizzie/releases/download/0.5/Lizzie.0.5.Mac-Linux.zip
unzip Lizzie.0.5.Mac-Linux.zip
cd lizzie
# config.txtの設定
mv ~/leela-zero/src/leelaz .
mv ~/leela-zero/62b5417b64c46976795d10a6741801f15f857e5029681a42d02c9852097df4b9.gz network.gz

以上でインストール作業終了です。

遊び方

VNCクライアントソフトでVNCサーバ接続します。(手順省略^^;)

接続すると、ターミナルが開いているのでそこで、以下のコマンドを実行してください。

cd lizzie
java -jar Lizzie.jar

これでLizzieが起動します。(初回はLeela Zeroの起動に少し時間がかかります) Enjoy!