将棋AI開発その1~Floodgateに放流まで~

今回は前回の続きで学習済みデータを用いてFloodgateに放流させました。

 

Floodgateとは

Floodgateは将棋AI同士が自動で対局を行うオンライン将棋サーバーです。

主に将棋AIの開発や研究者によって利用されており、AIを実戦環境に投入して強さを客観的に評価できる場として知られています。

 

Floodgateの特徴は以下の通りである。

  • 将棋AI同士が 24時間自動で対局 する

  • 対局結果に基づき レーティングが付与 される

  • 対局ごとに CSA形式の棋譜 が生成される

  • 人が操作する必要がなく、放置運用が可能

そのためFloodgateは、
「学習した将棋AIがどの程度実戦で戦えるのか」
「実戦でどのような局面に弱いのか」
を確認するための 実戦評価環境 として非常に有用である。

 

Floodgateへの接続方法

FloodgateはCSAプロトコルを使用してるため、USI対応の将棋エンジンをそのまま接続することはできません。

 

そこで本開発では、USIエンジンとCSAサーバーを橋渡しするツールとして

usiToCsa.rbを使用しました。

 

usiToCsa.rb

という役割を持っています。

これにより、

自作したdlshogiベースの将棋AIをFloodgate上で対局させることが可能になりました。

 

Floodgate接続用スクリプトの作成

Floodgateへの接続は、コマンドを毎回手入力するのではなくシェルスクリプト化して行った。

 

このスクリプトの役割は以下の通りである。

  • USIエンジン(dlshogi_onnxruntime)を起動

  • Floodgateサーバに接続

  • 対局を1局処理する

実行すると、

  • 「Wait for a game start…」と表示され

  • 対局が開始

  • 対局終了後にプロセスが終了する

という挙動になる。

この段階で、
自作将棋AIがFloodgate上で対局できること を確認できた。

 

直面した問題:1局でプロセスが終了する

実際に接続してみると、
1局の対局が終わるたびにプログラムが終了してしまい、
連続して対局を行うことができない という問題が発生した。

このままでは、

  • 常に手動で再接続する必要がある

  • 放置運用ができない

  • 大量の棋譜を集めるのが難しい

という課題があった。

Floodgateを「実戦棋譜収集の場」として使うためには、
連続して対局を回し続けられる仕組み が必要だった。

 

連続放流のためのrunnerスクリプト作成

この問題を解決するため、
接続スクリプトをループ実行する runner スクリプト を作成した。

仕組みは単純で、

  • 1局終了したら

  • 数秒待機し

  • 再度 Floodgate に接続する

という処理を無限ループで行う。

この runner を使うことで、

  • 対局 → 終了 → 再接続

  • 放置したまま連続対局

が可能になりました。。

結果として、
自作将棋AIを 常時Floodgateに放流し続ける状態 を実現できた。

f:id:SaitoHinata:20260202175846j:image

 

Floodgate上での動作確認と対局履歴

連続放流が始まると、
FloodgateのWebページ上で以下を確認できるようになった。

  • 自分のエンジンIDが表示される

  • 対戦相手・勝敗・対局時間が記録される

  • 各対局に対応する CSA形式棋譜 へのリンクが表示される

これにより、

  • 実戦環境で自作将棋AIが動作していること

  • 対局が継続的に行われていること

を視覚的に確認できた。

 

棋譜取得の現状と運用方針

 

Floodgateでは、
対局ごとに CSA形式の棋譜 が生成される。

ただし、
接続に使用している usiToCsa.rb では
棋譜を自動保存する仕組みが用意されていない。

そのため現時点では、

  • FloodgateのWebページから

  • CSA棋譜を手動で保存

という方法を採用している。

現在は 連続放流を優先 し、
棋譜の保存については、
後からまとめて取得する方法を検討する方針 の予定。

 

まとめと今後の予定

 

本記事では、

  • 学習した将棋AIを実戦用に整備し

  • Floodgateに接続

  • 連続放流を可能にする仕組みを構築した

ところまでをまとめた。

これにより、

  • 自作将棋AIを実戦環境に投入できた

  • 実戦対局を自動で回し続けられる状態になった

  • 再学習に利用可能な棋譜を取得できる環境が整った

今後は、

  • Floodgateで蓄積したCSA棋譜を一括取得し

  • dlshogiの学習データへ変換

  • 再学習による棋力向上を検証する

という流れを進めていく予定である。

 

 

専門学生が「強い将棋ソフトの創りかた」をもとに将棋AI開発

本記事は環境構築からonnx変換・実行まで一連の流れを実体験をもとに記録しており、同じように将棋AI開発に挑戦する人の参考になることを目的とします。

はじめに

この度、はてなブログにて技術ブログを書こうと思います。

私は現在、情報系の専門学校に通っており、昔から将棋が好きで、AIにも興味があったので卒業制作で将棋AIを創ろうと思いました。

制作にあたってこちらの本を参考に将棋AI開発を行いました。

強い将棋ソフトの創りかた

book.mynavi.jp

今回は卒業制作のゴールは実際に動く将棋AIを創ることです。

本では、Google Colabを使用してますが自分は一から環境構築を行い実装まで行いました。

その卒業制作の内容を今回この記事にまとめたいと思います。

 

この記事でやること

  • Ubuntu(WSL2)+ GPU環境でdlshogiを動かす
  • 棋譜データから学習する
  • 学習したモデルをONNXに変換する
  • 将棋所で対局できることを確認する

 

開発環境

OS:Windows

学習環境:Ubuntu(WSL2)

GPU:RTX3050

学習用:

 Python 3.8

 PyTorch 1.13.1

ONNX変換用:

 Python 3.8

 PyTorch 1.9.0

フレームワーク:dlshogi

 

学習とONNX変換で環境を分けている理由についてdlsyogiでの学習には新しめのPyTorchが必要でしたが、将棋所で動かすONNXモデルは古いopsetに対応した形式である必要がありました。

そのため、学習用とONNX変換用でPython/PyTorchの環境を分けています。

 

データと学習

今回使用した棋譜データは本に記載のあったShogiAIBookDataから学習しました。

ShogiAIBookDataのなかにある棋譜

になります。

 

学習は、本の著者でありdlshogi開発者の山岡忠夫さんのGitHubにある

DeepLearningShogiをクローンし、dlshogiの学習スクリプトを使って、棋譜データ(hcpe形式)から学習を行いました。

GPU(RTX3050)を使用し、WSL2上で学習を回してます。

学習が完了するとmodel_xxx(ONNX化に使う)が出力されます。

少量のデータでテスト学習させてる様子

github.com

ONNX変換

なぜONNXにする理由は、

dlshogiで学習したモデルはPyTorch依存の形式のため、そのままでは将棋所で使用できないです。将棋所で動かすために、推論用の共通形式であるONNXに変換しています。

 

学習と変換で環境を分けた理由は、

当初は学習とONNX変換を同じ環境で行おうとしていましたが、新しいPyTorchで作成したONNXは将棋所で動作しませんでした。

調べたところopsetの制約が原因だったため、ONNX変換専用に古いPyTorch環境を用意しています。

 

将棋所での対局

今回学習したONNXを実際に対局で動かすための実行エンジンとしてdlshogi-denryu20021を使用しました。

 

学習した作成したONNXモデルをdlshogi-denryu2021のフォルダに配置し、将棋所からエンジンとして登録しました。

その結果、将棋所で自作モデルを使った対局が可能になりました。

苦労した点

学習したモデルをONNXに変換したものの、将棋所で読み込むと起動時にエラーが出て動作しませんでした。原因を調べると、ONNXのopsetバージョンがdlshogi-denryu2021の対応範囲と合っていなかったことがわかりました。学習用とは別に、PyTorch1.9の環境を用意してopset9のonnxを作成することで解決しました。

 

当初はWindows環境で学習を行おうとしましたが、学習が途中で止まったり、GPUがうまく使えないことがありました。そこでWSL2上にUbuntu環境を構築し直したところ、安定してGPU学習が行えるようになりました。

現在できてること・今後やりたいこと

現在は、dlshogiで学習した自作モデルをonnxに変換し、将棋所上で実際に対局できるところまで確認できました。

 

今後は、自分で用意した棋譜データを使った学習や、学習設定を工夫することで、より強い将棋AIを目指していきたいと思います。

まとめ

dlshogiを使って、将棋AIの学習から実行まで一通り体験できました。

より強い将棋AIを目指していく過程を記録として今後も書いていこうと思いますのでよろしくお願いします。