これはYaneuraOuをRaspberryPi3 ModelB上のRaspbianで動作させた時のメモです。
YaneuraOuのバイナリを作成してShogiGUIのエンジンとして登録するとこまで。
#Raspbianにsshで入ることができて、そこでgitやmake,clang等が使える環境であること。
YaneuraOu の取得と patch を ddc0b34 に適用
$ cd ~/ && mkdir work && cd work
$ git clone https://github.com/yaneurao/YaneuraOu
$ cd YaneuraOu
$ git checkout ddc0b34
$ curl -s https://gist.githubusercontent.com/ohga/9aaff079043e2ad6a9c29d0a3e30224e/raw/e1ef741a21e28f6359e199e97c5c090acc03ad47/yaneuraou_raspbian.patch | patch -p1
yaneuraou_raspbian.patch による変更点は以下。
- EVAL_KPP_KKPTが有効
- x86 じゃなくても
__builtin_ctzll
があればそれを使用 - EVAL_LEARN の有無ではなく FOR_TOURNAMENT が無い場合に
SkipLoadingEval
が使えるように -DUSE_NEON
で有効になる neon のジャンクコードの追加。npsが落ちるのでそのまま使ってはいけない- make のターゲットに 'tournament-simple-neon', 'simple-neon', 'tournament-vain-neon', 'vain-neon' を追加
- 'tournament-simple-neon' は
-mfpu=neon
関係の追加をベースに-DNO_SSE -DFOR_TOURNAMENT
を足したもの - 'simple-neon' は
-mfpu=neon
関係の追加をベースに-DNO_SSE
を足したもの - 'tournament-vain-neon' は
-mfpu=neon
関係の追加をベースに-DUSE_NEON -DFOR_TOURNAMENT
を足したもの - 'vain-neon' は
-mfpu=neon
関係の追加をベースに-DUSE_NEON
を足したもの
- 'tournament-simple-neon' は
make実行と配置
$ cd ~/work/YaneuraOu/source
$ make -j `nproc` simple-neon
...
$ install -Cv YaneuraOu-by-gcc ~/work
すでの用意されている場合は ~/work/eval に配置して読み飛してください。
PC側で行う方が早いので、それが出来る場合もそちらでやって配置してください。
ここではelmo_wcsc27を変換します。
elmo.shogi.zip (543M)の取得と展開(と定跡ファイルの配置)
$ cd ~/work/
$ wget --load-cookies /tmp/cookies.txt \
`wget --keep-session-cookies --save-cookies=/tmp/cookies.txt \
'https://drive.google.com/uc?id=0B0XpI3oPiCmFalVGclpIZjBmdGs' -q -O - \
| perl -nle 'if($_=~/download-link.*?href="(.*?)"/i){$str=$1;$str=~s/&/&/g;print "https://drive.google.com$str";}'` \
-O elmo.shogi.zip
...
$
$ unzip elmo.shogi.zip
...
$
$ cp -a elmo.shogi/book/yaneura_format ./book
変換するにはメモリが足りないのでスワップを追加(2分くらい?)
$ sudo dd if=/dev/zero of=/swapfile1 bs=1M count=512
$ sudo mkswap /swapfile1
$ sudo swapon /swapfile1
KPP_KKPTに変換(10分くらい?)
#YaneuraOu-by-gcc を起動して test evalconvert kppt32 elmo.shogi/eval kpp_kkpt32 eval
を投入して quit
$ cd ~/work/
$ mkdir eval
$ ./YaneuraOu-by-gcc SkipLoadingEval true
Options[SkipLoadingEval] = true
test evalconvert kppt32 elmo.shogi/eval kpp_kkpt32 eval
...
converting....done.
quit
$
掃除
$ cd ~/work/
$ rm -Rf elmo.shogi elmo.shogi.zip /tmp/cookies.txt
$ sudo swapoff /swapfile1
$ sudo rm /swapfile1
tcpserverとかのインストール
$ sudo apt-get install -y ucspi-tcp netcat
起動方法
$ cd ~/work/
$ nohup tcpserver -HR -l -c1 -u 1000 0 53556 nice -n 5 ./YaneuraOu-by-gcc > stdout.log 2>&1 &
終了方法(ちょっと乱暴)
$ pkill tcpserver
疎通確認
#netcat
で繋いでusi
を叩いてみる(^C
で終了)
$ netcat 127.0.0.1 53556
usi
id name YaneuraOu 2017 Early KPP_KKPT 4.77 32noSSE
id author by yaneurao
...
usiok
^C
$
https://sites.google.com/site/shogixyz/home/shogiutil の USIClient.exe を使用します。
ダウンロード USIClient
から取得して適当な場所に展開します。
UsiClient.exe.config の HostName を Raspbian のIPアドレスにします。(この例では'192.168.1.3')
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
<appSettings>
<add key="HostName" value="192.168.1.3"/>
<add key="Port" value="53556"/>
<add key="ExePath" value="raspi3"/>
</appSettings>
</configuration>
以上です。
これでShogiGUIのエンジンとして UsiClient.exe を指定できるようになるので、メニューのツール
,エンジン設定
から追加します。
#接続直後、'No such option: connect' を出力するけど、たぶん、大丈夫。