Skip to content

Instantly share code, notes, and snippets.

@ohga
Created September 14, 2017 11:23
Show Gist options
  • Save ohga/005ea255e44951f58062270154979a1a to your computer and use it in GitHub Desktop.
Save ohga/005ea255e44951f58062270154979a1a to your computer and use it in GitHub Desktop.

これはYaneuraOuをRaspberryPi3 ModelB上のRaspbianで動作させた時のメモです。
YaneuraOuのバイナリを作成してShogiGUIのエンジンとして登録するとこまで。
#Raspbianにsshで入ることができて、そこでgitやmake,clang等が使える環境であること。

YaneuraOuのビルド

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 による変更点は以下。

  1. EVAL_KPP_KKPTが有効
  2. x86 じゃなくても __builtin_ctzll があればそれを使用
  3. EVAL_LEARN の有無ではなく FOR_TOURNAMENT が無い場合に SkipLoadingEval が使えるように
  4. -DUSE_NEON で有効になる neon のジャンクコードの追加。npsが落ちるのでそのまま使ってはいけない
  5. make のターゲットに 'tournament-simple-neon', 'simple-neon', 'tournament-vain-neon', 'vain-neon' を追加
    1. 'tournament-simple-neon' は -mfpu=neon 関係の追加をベースに -DNO_SSE -DFOR_TOURNAMENT を足したもの
    2. 'simple-neon' は -mfpu=neon 関係の追加をベースに -DNO_SSE を足したもの
    3. 'tournament-vain-neon' は -mfpu=neon 関係の追加をベースに -DUSE_NEON -DFOR_TOURNAMENT を足したもの
    4. 'vain-neon' は -mfpu=neon 関係の追加をベースに -DUSE_NEON を足したもの

make実行と配置

$ cd ~/work/YaneuraOu/source
$ make -j `nproc` simple-neon
...
$ install -Cv YaneuraOu-by-gcc ~/work

KPPT評価関数を変換

すでの用意されている場合は ~/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
$ 

Windowsの設定

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' を出力するけど、たぶん、大丈夫。

関連リンク

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment