Upgrade to Pro — share decks privately, control downloads, hide ads and more …

M1 Macと将棋AIとUSI

mganeko
December 29, 2022

M1 Macと将棋AIとUSI

社内のLTイベント用のスライドです

mganeko

December 29, 2022
Tweet

More Decks by mganeko

Other Decks in Technology

Transcript

  1. M1 Macと将棋AIとUSI
    えるLT Vol.28
    がねこまさし / @massie_g

    View Slide

  2. やりたいこと:将棋AIで形勢判断
    ABEMA TVより

    View Slide

  3. 将棋GUIアプリ と 将棋AIソフト
    ShogiGUI (Win)
    http://shogigui.siganus.com/
    将棋丸 - ブラウザ将棋 (Chrome)
    https://shogimaru.com/
    Electron将棋 Electron(Win/Mac)
    https://sunfish-shogi.github.io/electron-shogi/
    将棋GUI
    やねうら王
    https://github.com/yaneurao/Ya
    neuraOu
    水匠5
    https://drive.google.com/drive/folders/19Al6
    9YMkJ_cXSBhtn8df9yfxhn8QFCYo
    将棋所(Win/Mac)
    http://shogidokoro.starfree.jp/
    dlshogi
    https://github.com/TadaoYamaoka/Dee
    pLearningShogi
    将棋AI
    連携

    View Slide

  4. 今回:Electron将棋 + やねうら王
    ShogiGUI (Win)
    http://shogigui.siganus.com/
    将棋丸 - ブラウザ将棋 (Chrome)
    https://shogimaru.com/
    Electron将棋 Electron(Win/Mac)
    https://sunfish-shogi.github.io/electron-shogi/
    将棋GUI
    やねうら王
    https://github.com/yaneurao/Ya
    neuraOu
    水匠5
    https://drive.google.com/drive/folders/19Al6
    9YMkJ_cXSBhtn8df9yfxhn8QFCYo
    将棋所(Win/Mac)
    http://shogidokoro.starfree.jp/
    dlshogi
    https://github.com/TadaoYamaoka/Dee
    pLearningShogi
    将棋AI
    連携

    View Slide

  5. オマケ: Electronとは
    ● https://www.electronjs.org/ja/docs/latest
    ● Electron は、JavaScript、HTML、CSS によるデスクトップアプリケーションを構築
    するフレームワーク
    ○ Electron は Chromium (ChromeのOSS版) と Node.js をバイナリに組み込んでいる
    ○ 単一の JavaScript コードベースを維持しつつ、ネイテイブ開発できる
    ○ Windows、macOS、Linux で動作するクロスプラットフォームアプリを作成できる
    ● 旧 Atom Shell
    ○ GitHubが開発、管理
    ● 主なアプリケーション
    ○ VS Code
    ○ Slack (Desktop版)
    ○ Discord (Desktop版)

    View Slide

  6. セットアップの流れ
    ● Electron将棋をインストール
    ○ ダウンロード、インストール
    ○ 起動→セキュリティで許可→再度起動
    ● やねうら王をインストール
    ○ バイナリをダウンロード、解凍、お好きなフォルダーにコピー
    ○ 定跡ファイルをダウンロード、解凍、やねうら王のフォルダー
    にコピー
    ○ ターミナルから実行→セキュリティで許可→再度実行
    ● Electron将棋とやねうら王を連携
    ○ バイナリのパスを指定
    ○ 定跡ファイルのフォルダと、ファイル名を指定
    やねうら王
    評価関数
    モジュール
    定跡
    ファイル
    Electron将棋

    View Slide

  7. 参考:M1 MacにElectron将棋をインストール(将棋GUI)
    ● 使い方
    ○ https://github.com/sunfish-shogi/electron-shogi/wiki/%E4%BD%BF%E3%81%84%E6%96%B9
    ● Electron将棋 のサイトからバイナリをダウンロード
    ○ サイト https://sunfish-shogi.github.io/electron-shogi/
    ○ 安定版バイナリ https://github.com/sunfish-shogi/electron-shogi/releases/tag/v1.2.1
    ■ release-v1.2.1-mac.zip をダウンロード(2022.12現在)
    ● インストール
    ○ zip を解凍し、.dmg をダブルクリック (ElectronShogi-1.2.1.dmg 022.12現在)
    ○ ElectronShogi.app をApplicationsフォルダー( or 適切なフォルダー)ドロップ
    ● 起動
    ○ ElectronShogi.app アイコンをダブルクリック
    ○ セキュリティに引っかかるので、 [システム環境設定]-[セキュリティ]で実行を許可
    ○ 再度アイコンをダブルクリックして起動

    View Slide

  8. 参考:M1 Macにやねうら王をインストール(将棋AI)
    ● やねうら王 のサイト https://github.com/yaneurao/YaneuraOu/releases
    ○ M1 Mac版のビルド済みバイナリは無し
    ○ 参考:M1 Macbook Air でやねうら王を動かしてみた
    ■ https://shogi.zukeran.org/2022/01/24/yaneuraoh-on-m1-macbook-air/
    ● M1 mac 用バイナリのインストール
    ○ Mac用のKristallweizenバイナリ(2021年クリスマス版)※ちょっと古い
    ○ https://github.com/bleu48/YaneuraOu/releases/tag/v7.00
    ■ Kristallweizen_M1Mac.zip をダウンロード
    ○ 解凍してできたフォルダー (Kristallweizen_M1Mac)を、適切な場所にコピー
    ● 定石ファイルを準備
    ○ 100テラショック定跡
    ■ https://github.com/yaneurao/YaneuraOu/releases/tag/BOOK-100T-Shock
    ■ 100T-shock-book.zip をダウンロード、解凍
    ○ やねうら王のフォルダーの配下に booksフォルダーを作成
    ○ booksフォルダーに、解凍した 定跡ファイル(user_book1.db)をコピー
    ● やねうら王を起動
    ○ ターミナルからバイナリ( YanauraOu-by-gcc) を起動
    ■ セキュリティに引っかかるので、 [システム環境設定]-[セキュリティ]で実行を許可
    ○ 再度ターミナルから起動
    ■ isready + [ENTER] と入力 → info〜と表示され、最後に "readyok" と表示されればOK
    ■ quit + [ENTER] で止める

    View Slide

  9. Electron将棋の画面

    View Slide

  10. Electron将棋とやねうら王を連携
    ● Electron将棋の [設定] - [エンジン設定] メニュー
    でダイアログを表示
    ● 下部の[追加]ボタンをクリック
    ○ 将棋AIのバイナリ(YanauraOu-by-gcc)を指定
    ● ダイアログに戻ったら、[設定]ボタンをクリック
    ○ エンジン設定で、BookDirを指定 「book」
    ○ BookFileで定跡ファイルを指定「user_book1.db」
    ○ [OK] でダイアログに戻る
    ● [保存して閉じる]ボタンをクリック

    View Slide

  11. 棋譜を解析
    ● 棋譜(将棋の手順)を準備
    ○ 将棋DB2からKIF形式を
    コピー
    ○ https://shogidb2.com
    ● Electron将棋に取り込む
    ○ [編集]-[棋譜・局面貼り
    付け]
    ● [解析]ボタンで解析スタート
    ○ 評価値や期待勝率を切
    り替えられる
    手数----指手---------消費時間--
    1 2六歩(27) (00:00/00:00:00)
    2 8四歩(83) (00:00/00:00:00)
    3 2五歩(26) (00:00/00:00:00)
    4 8五歩(84) (00:00/00:00:00)
    5 7六歩(77) (00:00/00:00:00)
    6 3二金(41) (00:00/00:00:00)
    7 7七角(88) (00:00/00:00:00)
    8 3四歩(33) (00:00/00:00:00)
    KIF形式

    View Slide

  12. 将棋GUIと将棋AIの連携:USIプロトコル
    やねうら王
    評価関数
    モジュール
    定跡ファイル
    Electron将棋
    USI(Universal Shogi Interface)
    プロトコル
    標準入出力経由のテキスト形式

    View Slide

  13. USIプロトコル
    ● “USI(Universal Shogi Interface)”プ
    ロトコル
    ○ http://shogidokoro.starfree.jp/usi.html
    ● GUIとエンジン間の通信のやり取り
    は、標準入出力を通してテキストのコ
    マンドで行われます。
    ● エンジンは常に(たとえ思考中であっ
    ても)コマンドの受信ができる必要が
    あります。
    ● エンジンがコマンドの行を送信する場
    合、最後に必ず改行コード(
    \n)
    https://engineerblog.mynavi.jp/technology/shogi-ai/ より
    (ちょっとATコマンドっぽい?)

    View Slide

  14. 将棋AI同士の対戦
    将棋GUI
    将棋AI 将棋AI
    USI
    USI
    USI
    USIは対称なプロトコルではないので、
    直接やりとりはできない
    USIプロトコルを使って、 AI同士を仲立ちす

    ● 標準入出力を使うので、同じマシン
    上で動かす必要あり
    ● ※TCP/IP経由のCSAプロトコルもあ
    るらしい

    View Slide

  15. 実際にやってみた(同じ将棋AI同士の対戦)
    将棋GUI
    将棋AI
    やねうら王 V7.0
    将棋AI
    やねうら王 V7.0
    USI
    標準入出力
    USI
    標準入出力
    Electron将棋
    同一マシン(M1 Mac)

    View Slide

  16. 結果:千日手(同じ手順を繰り返す→引き分け)

    View Slide

  17. 勝敗がついたケースもあり:先手の勝ち

    View Slide

  18. リモートマシン上のAIと対戦させたい
    将棋AI
    やねうら王 V7.0
    将棋AI
    やねうら王 V7.0
    USI
    標準入出力
    USI
    標準入出力
    将棋GUI
    Electron将棋
    メインマシン(M1 Mac) リモートマシン
    TCP/IP

    View Slide

  19. リモートマシン上のAIと対戦: ssh で実現
    将棋AI
    やねうら王 V7.0
    将棋AI
    やねうら王 V7.0
    USI
    標準入出力
    将棋GUI
    Electron将棋
    メインマシン(M1 Mac) リモートマシン(Intel Mac)
    シェル
    スクリプト
    ssh
    (鍵接続)
    ssh(TCP/IP)
    USI
    標準入出力

    View Slide

  20. まとめ
    ● 最近の将棋ソフトは、GUI部分とAI部分が分離されている
    ● 間をつなぐインターフェイスは共通化されている
    ○ USIプロトコル、(CSAプロトコル)
    ● M1 Macでも将棋AI動いた
    ○ Intel Mac, Windows 10でも同様な手順で動かせた
    ○ Intel Mac版/Windows版は、CPUの世代により拡張命令が異なる
    ■ それぞれに最適化されたバイナリが配布されている
    ● USI over SSH で M1 Mac ←→ Intel Mac 対戦もできた
    ○ ビバ! UNIX思想 & 標準入出力(& SSH)

    View Slide