YaneuraOuさんの将棋ソフトのUbuntuへのインストール(2020/7 バージョン)

YaneuraOuさんの将棋ソフトのUbuntuへのインストール(2020/7 バージョン)

目次

1 概要

  • ここ数年YaneuraOuさんの将棋ライブラリを利用した将棋ソフトがコンピューター将棋大会で優勝
  • C++とアセンブラベース
  • Stockfishというチェスソフトをかなり取り込んだ作りになってるらしい
  • GitHubにてソース公開されている
  • バージョンによって使い方が相当変化している
    • 昔のバージョンに戻せば、過去の動画の使い方も出来る(今は同じ方法で同じように使えない)
    • スレッド等他のライブラリとの依存関係があり、使う難易度が高い

2 リンク

3 エンジン部分のインストール

3.1 Ubuntuでコンパイル

3.1.1 以下の操作を行っている動画





3.2 手順

3.2.1 依存パッケージのインストール

  • 色々あると思う、私は色々入れていたので、私の環境の場合以下を入れる必要があった
sudo apt install bash vim clang make lldb gdb git libc6-dev wget unar
sudo apt install libomp-dev libopenblas-dev
sudo apt install uci2wb xboard 

3.2.2 利用PCのCPUチェック

  • avx拡張命令の利用可能チェック
grep -i avx /proc/cpuinfo
  • sse拡張命令の利用可能チェック
grep -i sse /proc/cpuinfo

3.2.3 ソースゲット

git clone https://github.com/yaneurao/YaneuraOu.git

3.2.4 ソースバックアップ

tar cvzf YaneuraOu.org.tgz YaneuraOu

3.2.5 コンパイル(トーナメントタイプの場合)

  • CPUがSSE42タイプの場合(私のマシンのCPUはタイプが古くAVX2タイプをサポートしていないため)
  • AVX2タイプのCPU命令可能な場合はSSE42の部分をAVX2にすればOK
  • SSE42もダメな場合はNO_SSEや、OTHER、ZEN2というCPUタイプも選択可能
  • UbuntuなどLinuxの場合は/proc/cpuinfoで利用可能かどうか確認可能 ( grep -i sse4 /proc/cpuinfo, grep -i avx2 /proc/cpuinfo 等)
cd YaneuraOu/source 
make clean tournament TARGET_CPU=SSE42
  • これでコンパイルが実行され、YaneuraOu-by-gcc っていう実行可能なファイルが生成される(必要なライブラリやツールがインストールされていた場合、不足している場合はエラーメッセージから必要なパッケージをインストールしていく)
  • 取得してソースバックアップし、コンパイル後にコンパイル後のファイルも保存するスクリプトが以下
  • 現状はSSE42用(CPUタイプ)
    • それ以外のCPUタイプ希望の場合は他のものを有効にし(行頭の#をとる)、SSE42のところをコメントに(行頭に#をいれる)
#!/bin/bash
#TARGET_CPU=AVX512
#TARGET_CPU=AVX2
TARGET_CPU=SSE42
#TARGET_CPU=SSE41
#TARGET_CPU=SSE2
#TARGET_CPU=NO_SSE
#TARGET_CPU=OTHER
#TARGET_CPU=ZEN2
D=`date +%Y%m%d`
DT=`date +%Y%m%d_%H%M`
mkdir ${DT}
cd ${DT}
git clone https://github.com/yaneurao/YaneuraOu.git
tar cvzf YaneuraOu_${DT}.tgz YaneuraOu/
(cd YaneuraOu/source && make clean tournament TARGET_CPU=${TARGET_CPU}) 2>&1 | tee ./log001.txt
tar cvzf YaneuraOu_${DT}_build.tgz YaneuraOu/
(
mkdir LEARN
cd LEARN
tar xvzf ../YaneuraOu_${DT}.tgz
(cd YaneuraOu/source && make clean evallearn TARGET_CPU=${TARGET_CPU}) 2>&1 | tee ./log002.txt
)

3.2.6 コンパイル(学習タイプの場合、評価関数ファイルを生成できるタイプ)

  • CPUがSSE42タイプの場合(私のマシンのCPUはタイプが古くAVX2タイプをサポートしていないため)
  • AVX2タイプのCPU命令可能な場合はSSE42の部分をAVX2にすればOK
  • SSE42もダメな場合はNO_SSEや、OTHER、ZEN2というCPUタイプも選択可能
  • UbuntuなどLinuxの場合は/proc/cpuinfoで利用可能かどうか確認可能 ( grep -i sse4 /proc/cpuinfo, grep -i avx2 /proc/cpuinfo 等)
make clean evallearn TARGET_CPU=SSE42
  • 同じく YaneuraOu-by-gcc というファイルが生成される
  • コンパイルする前にLEARNディレクトリにソースを解凍してそこで行った
mkdir LEARN
cd LEARN
tar xvzf ../YaneuraOu.org.tgz
cd YaneuraOu/source 

3.3 ゼロの評価関数ファイルの生成

  • 学習タイプの YaneuraOu-by-gcc の起動
./YaneuraOu-by-gcc
  • YaneuraOu/docs/解説.txt にある文書の手順で行う
EvalDir xyz              // 存在しないフォルダを評価関数の読み込みフォルダに指定する
SkipLoadingEval true     // こうしておけば評価関数ファイルの読み込みに失敗してもエラーにならない
isready                  // このタイミングで評価関数が読み込まれるが存在しないフォルダから読み込むのでゼロクリアされた評価関数を読み込んだことになる。
EvalSaveDir eval_zero    // 保存フォルダ名を"eval_zero"に設定(何でも良い)
test evalsave            // メモリ上の評価関数を保存するコマンド
  • 停止
quit                     // 停止
  • これにより eval_zero/nn.bin に評価関数ファイル nn.binが生成される
  • nn.binを競技用YaneuraOu-by-gccのあるディレクトリのevalの中に入れる
cp -i eval_zero/nn.bin ../../../YaneuraOu/source/eval/

3.4 動作確認

  • 以下のコマンドで起動
./YaneuraOu-by-gcc
  • usiコマンドをいれて動作確認(usi,d等)
usi
isready
d
  • quitで停止
quit

3.5 評価関数の準備

  • いくつか有力なものある
  • どれかを選択し、解凍したnn.binを eval ディレクトリにいれる

3.6 KristallweizenさんのKristallweizen_kaiV0.4.zipの場合

wget https://github.com/Tama4649/Kristallweizen/raw/master/Kristallweizen_kaiV0.4.zip
unar Kristallweizen_kaiV0.4.zip

3.7 評価関数 orqha レーティング約4330の評価関数

wget https://www.qhapaq.org/static/media/bin/orqha.7z
unar orqha.7z

3.8 Elmo wcsc29バージョン

unar elmo_wcsc29_eval.zip

3.9 定跡の準備

3.10 YaneuraOuさんの定跡

wget https://github.com/yaneurao/YaneuraOu/releases/download/BOOK-700T-Shock/700T-shock-book.zip https://github.com/yaneurao/YaneuraOu/releases/download/v4.73_book/standard_book.zip https://github.com/yaneurao/YaneuraOu/releases/download/v4.73_book/yaneura_book1_V101.zip https://github.com/yaneurao/YaneuraOu/releases/download/v4.73_book/yaneura_book3.zip 
unar 700T-shock-book.zip 
unar standard_book.zip 
unar yaneura_book1_V101.zip 
unar yaneura_book3.zip 

3.11 解凍したものを book というディレクトリを作成していれる

3.12 起動用のスクリプトファイルを用意

3.13 YaneuraOu-by-gccの起動用スクリプトファイル作成

#!/bin/sh
cd `dirname $0`
./YaneuraOu-by-gcc

3.14 実行権限を与える

chmod +x 作成したスクリプトファイル名
  • 例 startYaneuraOu.shなら
chmod +x startYaneuraOu.sh

3.15 ファイルの再配置

  • YaneuraOu-by-gcc はトーナメント用の実行ファイルを利用
.
├── FEN
├── YaneuraOu-by-gcc
├── book
│   ├── standard_book.db
│   ├── yaneura_book1.db
│   └── yaneura_book3.db
├── eval
│   └── nn.bin
└── startYaneuraOu.sh

3.16 エンジンの動作確認

  • startYaneuraOu.shを起動した後に以下を入れる
  • isready に対して readyok が返ってきたらOK (評価関数や、定跡ファイルとしてどれが利用されているか確認すること)
usi
isready
quit

4 GUIの準備

5 xboardの場合

  • インストールが一番簡単
  • 見た目がイマイチ
xboard -fcp "uci2wb debug -s /opt/shogi/20200707/startYaneuraOu.sh" -scp "uci2wb debug -s  /opt/shogi/20200707/startYaneuraOu.sh" -variant shogi  -coords  -pid /usr/share/games/xboard/themes/shogi/ -highlightSquareColor  "#00FFFF" -clockMode true -tc 5 -mps 30 -showMoveTime true -positionDir /opt/shogi/20200707/FEN -useBoardTexture true -liteBackTextureFile /usr/share/games/xboard/themes/textures/wood_d.png -darkBackTextureFile /usr/share/games/xboard/themes/textures/wood_d.png

6 Android用のYaneuraOuをビルド

  • Android用のバイナリを作るためのファイルも配布物に同梱されているらしいことに気づいたので、コンパイルしてみました。
  • 前準備として、Andrido NDKをインストールする必要があります。https://youtu.be/3U5_330aySk

6.1 以下の操作を行っている動画


6.2 Android用のYaneuraOuをビルド する手順

6.2.1 最新バージョンをコンパイル(2021/01/19時点)

  • 頻繁に更新されるため、これ以下の方法では、今後のバージョンコンパイルできない可能性あり
  • gitのタグだと 9bbd0f38498b22e9f3e6cf9493a7f8849c02e496 のものは以下でコンパイル出来ている(通常モードは作成可だった。能詰将棋エンジンはコンパイル中にエラーになる)
  1. YaneuraOuのソースゲット
    git clone https://github.com/yaneurao/YaneuraOu.git
    
  2. ソースのバックアップ
    • 最初の命令はdateコマンドで日付と時間をバックアップファイル名にする方法
    • 後の方はYaneuraOu_000.tgz というファイル名でバックアップ。別の名前でバックアップとっておいてもよい
    • 別のツールでバックアップもOK
    • バックアップ取らない選択もあり
    tar cvzf YaneuraOu_`date +%Y%m%d_%H%M`.tgz YaneuraOu/
    とか
    tar cvzf YaneuraOu_000.tgz YaneuraOu/
    
  3. コンパイル
    • コンパイルできるディレクトリに移動YaneuraOu/jni/
    cd YaneuraOu/jni/
    
    • 以下は64bit用の設定。
    • TARGET_ARCH_ABI=armeabi-v7a とすれば32bit用を作成可能
    • 他のCPUのタイプも含めて全部コンパイルするには TARGET_ARCH_ABI=なんちゃら を省略すればOK
    ndk-build TARGET_ARCH_ABI=arm64-v8a
    
    • 詰将棋エンジンをコンパイルするには以下(ただし、このバージョンではエラー発生してビルド失敗する)
      • ENGINE_NAME=YaneuraOu_MATE_arm64-v8a をいれてないとコンパイルエラーになる
    ndk-build YANEURAOU_EDITION=MATE_ENGINE TARGET_ARCH_ABI=arm64-v8a ENGINE_NAME=YaneuraOu_MATE_arm64-v8a
    

6.2.2 リリースバージョンをコンパイル(version4.88)

  1. YaneuraOuのソースゲット
    • https://github.com/ai5/YaneuraOuの右のReleasehttps://github.com/ai5/YaneuraOu/releasesに「Android版 やねうら王」となってる最新のところからダウンロード。2019/1/19時点で最新はv4.88https://github.com/ai5/YaneuraOu/releases/tag/android_488。zip版でもtar.gz版でもOK。私はtar.gzバージョンをダウンロードした。
    • もっと新しいバージョンでてるなら、そちらを選択してください。2021/1/19時点では4.88が最新
    • こちらは詰将棋エンジンバージョンもコンパイルは成功する。ただし、詰将棋をAndroidでとかせようとすると、セグメーテーションエラー発生。通常バージョンは正常動作していた。
  2. Android版 やねうら王v4.88のソース解凍
    tar xvzf YaneuraOu-android_488.tar.gz
    
  3. Android版 やねうら王v4.88のコンパイル
    • arm64-v8a (64bitCPU用)の詰将棋エンジンを作成します。
    cd YaneuraOu-android_488/jni/
    ndk-build ENGINE_TARGET=MATE_ENGINE TARGET_ARCH_ABI=arm64-v8a
    
    • ../libs/arm64-v8a/YaneuraOu-mate-arm64-v8a が作成されます。
      • ただ私がUmidigi F1Playで動作確認したところ、go mate infiniteするとセグメンテーションエラーで落ちてしまい、詰将棋とけませんでした。
      • エンジンオプションでなんとかならないか色々試しました(Hash減らすとか)が上手く動作せず
      • デバッガーオプションつけて、デバッガーでそのうち確認してみようと思ってますが。まだやってません。
    • arm64-v8a (64bitCPU用)の通常バージョンを作成します。
    ndk-build TARGET_ARCH_ABI=arm64-v8a
    
    • ../libs/arm64-v8a/YaneuraOu-nnue-halfkp256-arm64-v8aが作成されます。
      • こちらは上手く動作しました。Umidigi F1Playで。評価関数と、定跡ファイルをいれれば

6.3 この章のまとめ

  • Android用のバイナリをクロスコンパイルしてみた。
  • 通常の将棋エンジンは、上手くコンパイル実行できていました。また動作確認結果も良好。
  • 詰将棋エンジンは、最新のソースでは上手くコンパイルできず、リリースバージョンでも、コンパイルは出来るものの、詰将棋をとかせる命令(go mate infinite等))を入れるとセグメンテーションエラーが発生

7 Android用のYaneuraOuをビルド2(2021/05/17)

  • 前からノーマル将棋エンジンはクロスコンパイルに成功していた
  • 詰将棋エンジンはv4.88はコンパイルには成功するものの、動かすとセグメンテーションエラーで動かなかった
  • 詰将棋エンジンは最新バージョンでコンパイルに成功しなかった。(色々エラー出て)
  • 久しぶりにGitHubから最新ソースをゲットして、クロスコンパイルを環境変数の設定色々変更してやってみたら、上手くいった

7.1 以下の操作を行っている動画


7.2 Android用のYaneuraOuをビルド2(2021/05/17)を行う手順

  • 前準備として、Andrido NDKをインストールする必要があります。https://youtu.be/3U5_330aySk
  • sdkmanager –list_installed で確認したインストール済みのAndroid SDK NDK関係は以下の通り
    • コンパイルに利用したndkはndk-bundleを利用した
Installed packages:=====================] 100% Fetch remote repository...       
  Path                   | Version      | Description                             | Location               
  -------                | -------      | -------                                 | -------                
  build-tools;24.0.3     | 24.0.3       | Android SDK Build-Tools 24.0.3          | build-tools/24.0.3/    
  build-tools;29.0.2     | 29.0.2       | Android SDK Build-Tools 29.0.2          | build-tools/29.0.2/    
  build-tools;30.0.2     | 30.0.2       | Android SDK Build-Tools 30.0.2          | build-tools/30.0.2/    
  build-tools;30.0.3     | 30.0.3       | Android SDK Build-Tools 30.0.3          | build-tools/30.0.3/    
  build-tools;31.0.0-rc2 | 31.0.0 rc2   | Android SDK Build-Tools 31-rc2          | build-tools/31.0.0-rc2/
  cmake;3.10.2.4988404   | 3.10.2       | CMake 3.10.2.4988404                    | cmake/3.10.2.4988404/  
  cmake;3.6.4111459      | 3.6.4111459  | CMake 3.6.4111459                       | cmake/3.6.4111459/     
  cmdline-tools;latest   | 4.0          | Android SDK Command-line Tools (latest) | cmdline-tools/latest/  
  emulator               | 30.6.5       | Android Emulator                        | emulator/              
  ndk-bundle             | 22.1.7171670 | NDK                                     | ndk-bundle/            
  ndk;19.2.5345600       | 19.2.5345600 | NDK (Side by side) 19.2.5345600         | ndk/19.2.5345600/      
  patcher;v4             | 1            | SDK Patch Applier v4                    | patcher/v4/            
  platform-tools         | 31.0.2       | Android SDK Platform-Tools              | platform-tools/        
  platforms;android-27   | 3            | Android SDK Platform 27                 | platforms/android-27/  
  platforms;android-29   | 5            | Android SDK Platform 29                 | platforms/android-29/  
  platforms;android-30   | 3            | Android SDK Platform 30                 | platforms/android-30/  
  • 頻繁に更新されるため、これ以下の方法では、今後のバージョンコンパイルできない可能性あり
  • gitのタグだと a866bafb71aae5833be3d34c1227564c6ccb323b のものは以下でコンパイル出来ている。
    • YaneuraOuさんのソースの更新頻度高く、新しいバージョンで同じ手順で成功しなくなるかも。その時は上の git の id に git checkout a866bafb71aae5833be3d34c1227564c6ccb323b で戻して、そこで同じ手順でやれば上手くいくはず
  • 動画では、Docker Image( https://youtu.be/473GGAkxqy8に作成方法ある)を使ってコンパイルしています。
  1. YaneuraOuのソースゲット
    git clone https://github.com/yaneurao/YaneuraOu.git
    
  2. ソースのバックアップ
    • 最初の命令はdateコマンドで日付と時間をバックアップファイル名にする方法
    • 後の方はYaneuraOu_000.tgz というファイル名でバックアップ。別の名前でバックアップとっておいてもよい
    • 別のツールでバックアップもOK
    • バックアップ取らない選択もあり
    tar cvzf YaneuraOu_`date +%Y%m%d_%H%M`.tgz YaneuraOu/
    とか
    tar cvzf YaneuraOu_000.tgz YaneuraOu/
    
  3. コンパイル
    • コンパイルできるディレクトリに移動YaneuraOu/jni/
      • 備考 YaneuraOu/jni/ でなく YaneuraOu/ ディレクトリでもコンパイルできた 
    cd YaneuraOu/jni/
    
    • 以下は64bit用の設定。
      • TARGET_ARCH_ABI=armeabi-v7a とすれば32bit用を作成可能
      • 他のCPUのタイプも含めて全部コンパイルするには TARGET_ARCH_ABI=なんちゃら を省略すればOK
      • 実行ファイルのバックアップと、転送の手順は省略している
      • この実行ファイルの動作確認には、評価関数ファイルが必要
      • 定跡ファイルもあった方が良い
    ndk-build TARGET_ARCH_ABI=arm64-v8a clean #掃除
    ndk-build TARGET_ARCH_ABI=arm64-v8a
    mkdir -p arm64-v8a/ #バックアップ用のディレクトリ作成
    mv ../libs/arm64-v8a/YaneuraOu_NNUE_arm64-v8a arm64-v8a/ # 消さないようにビルドしたバイナリを移動
    
  4. tanuki詰将棋エンジンコンパイル
    • 詰将棋エンジンをコンパイルするには以下
      • ENGINE_NAME に設定必要
      • YANEURAOU_EDITION は MATE_ENGINE だとリンク時にエラー発生
      • YANEURAOU_EDITION は TANUKI_MATE_ENGINE か YANEURAOU_ENGINE_MATERIAL なら ビルド可能
    • YANEURAOU_EDITION=TANUKI_MATE_ENGINE と設定するとtanuki詰将棋エンジンビルド
    ndk-build YANEURAOU_EDITION=TANUKI_MATE_ENGINE TARGET_ARCH_ABI=arm64-v8a ENGINE_NAME=Tanuki_MATE_arm64-v8a  clean # 最初にファイルクリア
    ndk-build YANEURAOU_EDITION=TANUKI_MATE_ENGINE TARGET_ARCH_ABI=arm64-v8a ENGINE_NAME=Tanuki_MATE_arm64-v8a  2>&1 | tee log_tanukimate001.txt # ビルド
    mkdir -p arm64-v8a/
    mv ../libs/arm64-v8a/Tanuki_MATE_arm64-v8a_arm64-v8a arm64-v8a/  # 消さないようにビルドしたバイナリを移動
    
  5. YaneuraOu詰将棋エンジンコンパイル
    • YANEURAOU_EDITION=YANEURAOU_ENGINE_MATERIALと設定するとYaneuraOu詰将棋エンジンビルド
    ndk-build YANEURAOU_EDITION=YANEURAOU_ENGINE_MATERIAL TARGET_ARCH_ABI=arm64-v8a ENGINE_NAME=YaneuraOu_MATE_arm64-v8a clean #  最初にファイルクリア
    ndk-build YANEURAOU_EDITION=YANEURAOU_ENGINE_MATERIAL TARGET_ARCH_ABI=arm64-v8a ENGINE_NAME=YaneuraOu_MATE_arm64-v8a 2>&1 | tee log_yanemate001.txt # ビルド
    mkdir -p arm64-v8a/
    mv ../libs/arm64-v8a/YaneuraOu_MATE_arm64-v8a_arm64-v8a  arm64-v8a/ # 消さないようにビルドしたバイナリを移動
    

7.3 動作確認

7.3.1 ビルドしたファイル転送

  • 動作確認するAndroid端末とUSB接続してから以下を実行
adb push arm64-v8a/* /data/local/tmp
# or
# adb push ./arm64-v8a/YaneuraOu_NNUE_arm64-v8a ./arm64-v8a/Tanuki_MATE_arm64-v8a_arm64-v8a ./arm64-v8a/YaneuraOu_MATE_arm64-v8a_arm64-v8a /data/local/tmp

7.3.2 実行

  1. tanuki詰将棋エンジンの実行
    adb shell /data/local/tmp/Tanuki_MATE_arm64-v8a_arm64-v8a 
    
  2. YaneuraOu詰将棋エンジンの実行
    adb shell /data/local/tmp/YaneuraOu_MATE_arm64-v8a_arm64-v8a 
    
  3. USIコマンド
    • 最初はこれをいれて、エンター
    usi
    
    • 次にこれをいれて、エンター
    isready
    
    • テスト用の盤面設定
    position lnsgkgsnl/1r5b1/ppp1+Ppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL b N 1
    
    • 盤面確認(YaneuraOuさんソフト用のUSI拡張コマンド)
    d
    
    • 詰将棋解く (制限時間60秒 秒はmsec単位で与える。無制限の場合は infinite)
    go mate 60000
    
    • 終了
    quit
    

7.4 この章のまとめ

  • Android用のバイナリをクロスコンパイルしてみた。
  • 昔ダメだった、詰将棋エンジンのコンパイルと動作に成功した。(ダメだったのは、コンパイルオプションがまずかったのか、他の原因なのか調べてない)
    • コンパイル時の環境変数の設定を変更したら、最新版のソースで上手くいった
    • リリースバージョンのv4.88では詰将棋エンジン関係は未確認

8 今後

  • 今後も文書追加していきます。

9 この文書のチェンジログ

  • 2020/07/07 初版
  • 2021/01/19 Android用のYaneuraOuをビルド の章追加
  • 2021/05/17 Android用のYaneuraOuをビルド2 の章追加(最新バージョンのソースで、詰将棋エンジンのコンパイルと動作に成功)

著者: NM Max

Created: 2021-05-19 水 06:52

Validate

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です