TadaoYamaokaの開発日記

個人開発しているスマホアプリや将棋AIの開発ネタを中心に書いていきます。

dlshogi

dlshogiを使って棋譜から棋力を推定する

たややんさんが実施していた棋譜から棋力を推定する方法をdlshogiを使って検証してみた。棋譜から棋力を推定する手法を検証しており、水匠の評価値をシグモイド関数で疑似的な勝率に変換した上で平均損失を計測する+計測する局面の勝率の閾値を設定するとい…

Unityで将棋アプリの開発 その10(AIの戦型指定)

作成している将棋アプリにAIの戦型指定を実装した。 実装方法 先日実装した定跡の戦型予想を使って、指定した戦型が定跡の候補手に含まれる場合、その手の採用率と戦型の確率に応じて、次の手を選択する。 そうすることで、指定した戦型になるように誘導でき…

Unityで将棋アプリの開発 その9(定跡と戦型予想)

作成している将棋アプリに定跡検索と戦型予想を実装した。定跡ボタン(ノートのアイコン)を押すと、現在の局面の定跡の候補手と、各手を指した後にどの戦型になるかの確率を表示する。候補手は、出現率と勝率も合わせて表示する。 定跡の元データ 定跡の元…

Unityで将棋アプリの開発 その8(ヒントの実装)

作成している将棋アプリに、ヒント機能を実装した。ヒントボタン(電球アイコン)を押すと、下の図のように候補手の上位3つを矢印で表示する。 複数候補手表示 下側のテキストボックスには候補手を10まで表示する(表示領域は5行までだがスクロールできる)。 テ…

Unityで将棋アプリの開発 その7(待ったの実装)

作成中の将棋アプリに、ボタンを追加して、「待った」ができるようにした。 UIデザイン 頻度の高い機能をゲーム画面から直接押せるボタンとして、それ以外はメニューを開いてから選べるようにする。 「待った」「ヒント」「定跡」を直接押せるボタンとして、…

Unityで将棋アプリの開発 その6(駒音)

前回駒のアニメーション処理ができるようになったので、合わせて駒音も鳴らすようにした。 駒音の素材 商用でも利用可能な駒音の素材を探したところ、素材を配布しているサイトがあったので、使わせてもらうことにした。 音素材: 「駒」のカテゴリー | ノタ…

Unityで将棋アプリの開発 その5(形勢グラフ)

AIの探索結果を形勢グラフに表示するようにした。プレイアウト数が64なので誤差は大きいが、リアルタイムで確認できることで初級者には形成判断の練習になればよいと思っている。強さのレベルの調整のために接待dlshogiの機能を、実装したいと考えているので…

Unityで将棋アプリの開発 その4(駒のアニメーション)

前回Androidの実機で確認しているときに、着手時に駒をアニメーションさせると、AIが思考中の待ち時間を感じにくくなることに気付いた。 効果を確認するために、駒のアニメーションを実装した。Unityは、フレームごとの処理をオブジェクトのUpdateに記述する…

Unityで将棋アプリの開発 その3(Android対応)

前回、WindowsでOnnxRuntimeで探索を動かせるようになったので、Androidでも動くようにした。後で書くが、Unity Barracudaでもコルーチンを使うことでメインスレッドで非同期処理ができるようになったので、OnnxRuntimeは必須ではなくなった。OnnxRuntimeをA…

低レーティング帯での探索ノード数と強さの関係

以前に、R4000以上でのdlshogiの思考時間と強さの関係について調べた。今回は、低レーティング帯で、dlshogiの探索ノード数と強さの関係について調査した。 調査方法 floodgateに、探索ノード数を変えて放流し、レーティングを調べた。 基本はバッチサイズ1…

Unityで将棋アプリの開発 その2(AIと対局)

先日から作り始めた将棋アプリをAIと対局できるようにした。 とりあえず指せるようにしただけで、形勢グラフなどはできていない。 Unity Barracuda使えなかった 事前に調査したUnity Barracudaだったが、メインスレッドでしか使えないという致命的な欠点があ…

Unityで将棋アプリの開発

先日試していたUnity Barracudaでのdlshogiのモデルを使用した探索が、Androidでもそこそこの強さになりそうなので、Android上でGUIで動かせるようにしたいと思っている。接待dlshogiの機能を実装して、将棋の練習に使えるアプリにしたい。 また、1手に数秒…

Unity Barracudaでdlshogiのモデルを推論する その4(探索)

前回、Androidでのモデルの推論速度を調べた。 今回は、MCTSで探索を行った際の探索速度を調べた。前回、推論をバッチにしても同じデータ数を処理する時間がほとんど変わらないことが分かったため、MCTSの探索もバッチで並列化を行わないように実装した。 ま…

Unity Barracudaでdlshogiのモデルを推論する その3(Android)

Unity Barracudaによるdlshogiのモデルの推論をAndroidで試してみた。 Android対応 プロジェクト設定でプラットフォームをAndroidにするだけで、測定用コードは前回実装したをそのまま使用した。測定端末には、Pixel5を使用した。 モデルサイズ 15ブロック22…

Unity Barracudaでdlshogiのモデルを推論する その2(推論速度)

前回、Unity Barracudaでdlshogiのモデルを推論できることを確認した。今回は、dlshogiで使用しているTensorRTと、推論速度を比較した。モデルは、15ブロック224フィルタのdlshogiのモデルを使用した。 前回の記事で書いた通り、そのままではBarracudaでdlsh…

Unity Barracudaでdlshogiのモデルを推論する

Unity Barracudaは、Unity用のマルチプラットフォームに対応した推論パッケージである。ONNXのモデルをロードでき、WindowsでもAndroidでもiOSでも(WeGLでも?)同じコードでディープラーニングモデルの推論ができる。Barracudaで、dlshogiのモデルが扱える…

dlshogiにおける思考時間と強さの関係 追試2

前回、dlshogiにおける思考時間と強さの関係を調べた。 今回は、水匠5の思考時間と強さの関係を調べた。同一系統のソフト間では、レーティング差が大きくでるため、基準ソフトを思考時間1秒のdlshogiとした。 測定条件 水匠5は8スレッドで、思考時間4秒と32…

dlshogiにおける思考時間と強さの関係 追試

以前に、dlshogiにおける思考時間と強さの関係を調べたことがあった。 tadaoyamaoka.hatenablog.com tadaoyamaoka.hatenablog.com思考時間と強さは対数の関係にあり、思考時間を2倍にすると水匠2(1000万ノード固定)を基準に、平均でR+84伸びるという結果だっ…

KL情報量を利用した時間制御

先日の記事で、dlshogiの手数ごとのポリシーと訪問回数のKL情報量を調査した。KL情報量が高い局面は、探索がより重要になる局面と考えられるため、KL情報量を時間制御に使用することを考えた。 現状の時間制御 現状のdlshogiは、以下の式で1手にかける時間を…

手数ごとのポリシーと訪問回数のKL情報量

山下さんがAobaZeroのKL情報量を調べていて、気になったのでdlshogiでも調べてみた。 KL情報量は、2つの確率分布の差異を測る指標である。 ニューラルネットワークで予測したポリシーと、MCTSで探索した結果のルートノードでの訪問回数のKL情報量を測ること…

将棋AI実験ノート:入力特徴量の転送量削減

以前にCUDAマルチストリームに対応した際、8GPUだと、CPU-GPU間の帯域がボトルネックとなり、NPSが上がらない課題があることがわかった。 対策として、FP16で転送することを検討し、NPSが平均で18.4%向上することを確認した。 GPU数とNPS GPU数とNPSの関係を…

千日手を予測する

昨年11月に行われた第2回電竜戦では、A級リーグでは先手勝率が70%と高かったことがコンピュータ将棋関係者の間で話題になった。 また、戦型は相掛かりが多かった。 角換わりは後手が千日手を狙いやすく、有利な先手で後手に千日手にされないように定跡で角換…

入力特徴量作成の速度改善

年末にDiscordのやりとりで、dlshogiの入力特徴量作成で、各マスの利きを求めるために、各マス×手番ごとにattackersToを呼び出すのは無駄と、やねうら氏からご指摘をいただいた。 その通りなので、改善を行った。 改善したコード 各マスの利きをattackersTo…

Qugiyのビット演算を試す その3

先日、飛車と角の利きのビット演算を実装し、NPSが平均1%程度向上することが確認できたので、今回は強さを測定した。 強さの測定 dlshogi互角局面集を使用して、GPU A100x2、GPUごと3スレッド、水匠5は30スレッドで、測定した。 # PLAYER : RATING ERROR POI…

Qugiyのビット演算を試す その2

昨日、香車の利きと、飛車の縦方向の利き、歩の駒打ちについて、Qugiyのアピール文章のビット演算を実装して、速度を測定を行ったが効果がないことがわかった。今回は、飛車と角の利きのビット演算を実装して、測定を行った。 飛車と角の利き 変更前 ZEN2を…

CUDAマルチストリーム対応

先日、CUDAのメモリの非同期転送に対応したことを記事にした。 その際に、マルチストリームに対応することで、転送だけではなく演算処理も並列化できることを書いた。その後、マルチストリームの実装を行い、2GPUでは、初期局面でNPSが36%向上することを確認…

dlshogiの序盤にランダム性を加える

dlshogi同士で、平手開始局面から対局すると毎回ほとんど同じ棋譜になる。 以前の調査では、先手勝率が65.7%と偏った結果になった。また、最新のモデルでは先手で角換わりになるため、角換わりに偏った勝率になる。そのため、平手開始局面からの計測した勝率…

dlshogiとGCTの比較

第2回世界将棋AI電竜戦の大会後に、優勝したGCT電竜と準優勝したdlshogiで互角局面集を使用して勝率を測定した。 dlshogi互角局面集 5分2秒加算 dlshogi互角局面集を使用して、5分2秒加算で対局した結果は以下の通り。 dlshogiとGCTは、2GPU、GPUあたり3スレ…

メモリの非同期転送対応

Mizarさんからプルリクエストを頂き、CPUGPU間のメモリの非同期転送に対応した。 TensorRT: 転送・推論を非同期に行う by mizar · Pull Request #67 · TadaoYamaoka/DeepLearningShogi · GitHubこれは第2回世界将棋AI電竜戦のふかうら王に実装されていた改善…

第2回世界将棋AI 電竜戦 結果報告その2

後々のためにデータを整理しておきたいので、dlshogiとGCTの各種統計情報を調べた。 探索の統計 NPS、思考時間、探索ノード数、探索深さ、詰み手数の統計は以下の通り。 dlshogi 1日目 予選リーグ nps time nodes depth mate count 940 940 940 940 58 mean …