人智を超えた将棋ソフトにもてあそばれてみる【やねうら王編】

Ubuntu 20.04上で「Mono」を使って「将棋所」から「やねうら王」がプレイできる環境を構築します。

ここで紹介するAI将棋はWindows上で実行することが想定されていますが、「Mono」によりLinux上で動作になります。
「将棋所」とはGUIを提供する将棋ソフトです。将棋エンジン(思考ルーチン)を変更できる仕組みになっているため、AIコンピュータ同士で戦わせることもできます。
「やねうら王」は、WCSC29(世界コンピュータ将棋選手権/2019年)において優勝した実績ある将棋エンジンです。今回は「やねうら王」でプレーできるようにします。

必要なパッケージをインストールしよう

将棋所、将棋エンジンを実行する上で必要となるパッケージをインストールします。
まず、Ctrl+Alt+[T](CtrlキーとAltキーと[T]の3つのキーを同時に押下する)により、ターミナルを開きます。次に、以下のコマンドを実行します。
最初の”$”はプロンプトです。パスワードを聞かれたら入力します。

$ sudo apt install clang fonts-takao make mono-complete

「将棋所」をダウンロードしよう

このリンクから将棋所をダウンロードし、展開します。
展開にあたっては、ホームディレクトリに”shogi”というディレクトリを作成し、この中にAI将棋関連のソフトウェアを集約します。

$ cd
$ mkdir shogi
$ cd shogi
$ wget http://shogidokoro.starfree.jp/download/Shogidokoro.zip
$ unzip Shogidokoro.zip

「やねうら王」をダウンロードしよう

「やねうら王」をダウンロードします。
このURLをクリックしてダウンロードページに移動します。
本稿の執筆時点で「やねうら王」のバージョンは6.00でした。
図の「Source code(tar.gz)」をクリックしてダウンロードします。

次の画面が表示されるので、[ダウンロード]を指定し、上部の[保存]ボタンをクリックします。

ダウンロードが完了したら、コマンドラインで展開します。
ここで、ダウンロードしたファイルが 「~/ダウンロード」にある場合を示します。また、ファイル名(YaneuraOu-6.00.tar.gz)はバージョンによって異なるので、ダウンロード画面で確認したファイル名を指定します。

$ tar xvf ~/ダウンロード/YaneuraOu-6.00.tar.gz

やねうら王をビルドしよう

ここから、「やねうら王」をビルドします。

$ ls
Shogidokoro  Shogidokoro.zip  YaneuraOu-6.00
$ cd YaneuraOu-6.00/source/

Makefileの編集

エディタで「Makefile」を編集します。
「Makefile」とはソフトウェアをビルドする手順等が記述されているファイルです。
まず、”YANEURAOU_EDITION”の設定を変更します。
23行目あたりの”YANEURAOU_ENGINE_NNUE”が定義された行の先頭を”#”にしてコメントアウトします。
次に26行目あたりの”YANEURAOU_ENGINE_KPPT”が定義された行の先頭の”#”を削除して活かします。

YANEURAOU_EDITION = YANEURAOU_ENGINE_NNUE  ← 修正前
#YANEURAOU_EDITION = YANEURAOU_ENGINE_NNUE_KP256
#YANEURAOU_EDITION = YANEURAOU_ENGINE_NNUE_HALFKPE9
#YANEURAOU_EDITION = YANEURAOU_ENGINE_KPPT  ← 修正前

上が修正前、下が修正後です。

#YANEURAOU_EDITION = YANEURAOU_ENGINE_NNUE  ← 先頭に#を追加した
#YANEURAOU_EDITION = YANEURAOU_ENGINE_NNUE_KP256
#YANEURAOU_EDITION = YANEURAOU_ENGINE_NNUE_HALFKPE9
YANEURAOU_EDITION = YANEURAOU_ENGINE_KPPT  ← 先頭の#を削除した

次に、”TARGET_CPU”の設定を必要に応じて変更します。
厳密に最適化された設定をするためには、ご使用のCPUのアーキテクチャにあったものを選択する必要があります。一方で、手堅く動作させたいという場合は、”TARGET_CPU = SSE2″を選択すればよいでしょう。ここでは、”TARGET_CPU = SSE2″に設定する方法を説明します。
48行目あたりから以下のように記述されています。

#TARGET_CPU = AVX512VNNI
#TARGET_CPU = AVX512
TARGET_CPU = AVX2
#TARGET_CPU = SSE42
#TARGET_CPU = SSE41
#TARGET_CPU = SSSE3
#TARGET_CPU = SSE2
#TARGET_CPU = NO_SSE
#TARGET_CPU = OTHER
#TARGET_CPU = ZEN1
#TARGET_CPU = ZEN2

「TARGET_CPU = AVX2」と設定されている行がデフォルトです。行の先頭を”#”にしてコメントアウトします。
次に「TARGET_CPU = SSE2」と記述された行の先頭の”#”を削除して有効にします。

#TARGET_CPU = AVX512VNNI
#TARGET_CPU = AVX512
#TARGET_CPU = AVX2  ← コメントアウトされた
#TARGET_CPU = SSE42
#TARGET_CPU = SSE41
#TARGET_CPU = SSSE3
TARGET_CPU = SSE2  ← 有効化された
#TARGET_CPU = NO_SSE
#TARGET_CPU = OTHER
#TARGET_CPU = ZEN1
#TARGET_CPU = ZEN2

CPU拡張命令を調べるヒント

新しいCPUほど、AIなどの実行が早くなるような拡張命令がサポートされています。しかし、古めのCPUなのに、新しい拡張命令を使用するモードでやねうら王をビルドしてしまうと、実行できません。
手堅く動作させるには、上記で述べたとおり、「Makefile」の編集で、「TARGET_CPU = SSE2」とするのが確実でしょう。
お持ちのCPUがどこまで拡張命令をサポートしているかを調べるには、以下の方法があります。
例えば、「AVX2」に対応しているか調べるには、次のように実行します。

$ grep -i avx2 /proc/cpuinfo

「cpuinfo」はテキスト形式のファイルで、サポートされている拡張命令のキーワードが含まれています。上記では「grep」コマンドでキーワード「AVX2」が「cpuinfo」に存在しているかを調べ、マッチした行を出力しています。avx2という文字列にヒットしていれば、”TARGET_CPU = AVX2″の設定でOKでしょう。

「やねうら王」のビルド

「やねうら王」をビルドし、「将棋所」の所定のディレクトリにコピーします。

$ make
$ mkdir -p ~/shogi/Shogidokoro/Engine/YaneuraOu/bin/
$ cp YaneuraOu-by-gcc ~/shogi/Shogidokoro/Engine/YaneuraOu/bin/

「リゼロ評価関数 epoch 8」のセットアップ

リゼロ評価関数とは、AI将棋に自己対戦を繰り返し行わせて強くした結果、得た学習結果のようなものです。学習にあたって人間の棋譜は使用していないとされています。
このURLから、「リゼロ評価関数 epoch 8」をダウンロードしてインストールします。

$ cd ~/shogi/Shogidokoro/Engine/YaneuraOu/
$ mkdir rezero_epoch8/
$ cd rezero_epoch8/
$ unzip ~/ダウンロード/re_eval_from_zero_part4.zip
$ ls
epoch8
$ mv epoch8/ eval/
$ ln -s ../bin/YaneuraOu-by-gcc .
$ echo 'リゼロ評価関数 epoch 8' > engine_name.txt

やねうら王と対戦してみよう

起動方法は次のとおりです。

$ mono ~/shogi/Shogidokoro/Shogidokoro.exe

「将棋所」が起動された画面です。

AIエンジンの設定

メニューバーから[対局]>[エンジン管理]をクリックし、「エンジン管理」画面を表示します。

[追加]ボタンをクリックするとホームディレクトリが表示されるので、「~/shogi/Shogidokoro/Engine/YaneuraOu/rezero_epoch8」と移動し、「YaneuraOu-by-gcc」を選択して[Open]をクリックします。

[OK]をクリックします。

なぜか見切れていますが、エンジン「リゼロ評価関数 epoch 8」が登録されました。
[閉じる]をクリックします。

いよいよ対局!

メニューバーの[対局]>[対局]を選択します。

人間が先手の場合は、「後手/上手」の[人間]のチェックを[エンジン]に変更します。持ち時間等を変更し、[OK]をクリックするとゲームが始まります。

さいごに

壮絶な強さのAI将棋を楽しんでください。

下はコンピュータ同士で対戦させた様子です。

参考文献/URL

日経Linux 2021年3月号 特別付録「Linuxの遊び方大全集」p6「AIでコンピュータと対戦!将棋」を参考にしました。