TadaoYamaokaの日記

山岡忠夫Homeで公開しているプログラムの開発ネタを中心に書いていきます。

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

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

【書評」ディープラーニング 学習する機械 ヤン・ルカン、人工知能を語る

このブログは無味乾燥な実験結果ばかり書いているが、たまには書評も書いてみる。最近読み終わった本で、「ディープラーニング 学習する機械 ヤン・ルカン、人工知能を語る」がとても面白かったので紹介する。 実は人文書 タイトルだけみると理系の工学系の…

千日手を予測する

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

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

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

書籍のpython-dlshogi2のバグについて 続き

先日の記事で報告した、書籍「強い将棋ソフトの創りかた」の第5章のソースコードのmake_move_labelの移動方向の判定に誤りがあった点について、GitHubのソースコードを修正して、再学習したモデルファイルをプッシュしました。make_move_labelで移動方向の判…

書籍のpython-dlshogi2のバグについて

書籍「強い将棋ソフトの創りかた」の第5章のpython-dlshogi2に精度に影響のあるバグがあったので報告します。 誤り箇所 p.109 リスト5.2のfeatures.pyのmake_move_labelの移動方向を判定する処理は、以下のように定義されています。 python-dlshogi2/feature…

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

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

【書籍】強い将棋ソフトの創りかた

先月、このブログでお知らせしていた書籍「強い将棋ソフトの創りかた」が12/20に発売されました。book.mynavi.jp 応援Tweetしてもらいました。来週発売になる『強い将棋ソフトの創り方』のレビュー記事をブログに書きました。Pythonで1000行程度書くだけで昨…

ジョイスティック入力の可視化ツール

久しぶりに格闘ゲームをプレイしたらコマンドがぜんぜん入らない。 スーパーファミコンでスト2をプレイしてた頃は、一人で2P対戦をしてコマンドの練習した思い出がある。今ではPCがあるので、入力中のコマンドを可視化して、コマンドが失敗した原因をつかめ…

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

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

Qugiyのビット演算を試す

やねうら王の方で、Qugiyのビット演算の取り込みがされているので、dlshogiも追随したいと思う。ひとまず実装が簡単な香車の利きと、飛車の縦方向の利き、歩の駒打ちについて対応を行い、速度の測定を行った。 香車の利き 変更前 dlshogiはAperyのコードを流…

CUDAマルチストリーム対応

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

EfficientZeroを試す

NeurIPS 2021で提案されたEfficientZeroを試してみた。EfficientZeroは、MuZeroのようなモデルベースの強化学習の手法で、サンプル効率が非常に高いことが特徴になっている。DQNでは、5億フレーム(約38日間のリアルゲーム時間)が必要だったが、EfficientZero…

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

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

WSL2+WSLgでOpenAI Gymを動かす

以前に、WSLでOpenAI Gymを動かす記事を書いた。 その際は、Windows側にX Window Serverの「VcXsrv」をインストールして行ったが、Windows 11では、WSLgがX Window Serverの役割を果たすので、Windows側のセットアップなしにLinuxのGUIを扱えるようになった…

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 …

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

11/20(土)、21(日)に開催された第2回世界将棋AI電竜戦に参加しました。チームdlshogiとして、dlshogi、GCT電竜、python-dlshogi2という3つのソフトでエントリしました。 大会の結果 GCT電竜が優勝、dlshogiが準優勝、python-dlshogi2がC級優勝という結果に…

【書籍の宣伝】強い将棋ソフトの創りかた

12/20に、マイナビ出版から書籍を出します(GCT電竜の加納さんとの共著です)。前著の「将棋AIで学ぶディープラーニング」の古くなった内容を改めて、加えて、第2回世界将棋AIにも参加しているGCT電竜を超える強い将棋AIを創る方法を解説しています(GCT電竜…

第2回世界将棋AI 電竜戦 1日目結果報告

本日、第2回世界将棋AI 電竜戦の予選リーグがありました。 予選リーグの結果 全46チーム参加で、上位10チームが明日のA級リーグで総当たりで優勝を争います。 11位~28位はB級リーグ、それ以外はC級リーグになります。私はdlshogiと、チームとしてGCT電竜と…

floodgateの序盤3手の統計

序盤3手の戦型と先手勝率について話題になっているので、floodgateの棋譜から統計を調べてみた。相居飛車の序盤は3手で分岐して、4つの主要な戦型になります。(手順前後はありますが)その上で評価値からmin-maxを取ると赤矢印、つまり相掛かりが最善になる…

Windows11+WSL2+Dockerでdlshogiを動かす 続き

昨日、Windows11でCUDA on WSLを試したが、なぜかWindows上でdlshogiのNPSが低下する問題が発生した。WindowsのCUDAのバージョンが古かったため、新しいバージョンで試してみた。 CUDAインストール TensorRTの最新版(8.2.0.6)に対応した、CUDAの最新版(11.4)…

Windows11+WSL2+Dockerでdlshogiを動かす

学習用のPCをWindows11にアップグレードしたので、CUDA on WSLを試してみた。 ドライバインストール CUDA on WSLに対応したドライバをインストールする。 GPU in Windows Subsystem for Linux (WSL) | NVIDIA Developer ※2021/11/1 追記 CUDA 11.4に付属する…

dlshogiのmateの読み筋表示 続き

昨日の記事で、dlshogiを詰みの読み筋表示に対応させたことを書いた。 その際、王手の合法手に不成を生成していないことで、手順が10手以上長くなる局面があることがわかった。 探索速度が低下しないのであれば、不成を生成することを検討したい。そこで、不…

dlshogiのmateの読み筋表示

dlshogiは、モンテカルロ木探索とは別に、詰み専用のアルゴリズム(df-pn)で長手数の詰み探索を行っている。 df-pnで詰みが見つかった場合、すぐにその手を返している。df-pnは、詰みがあるかどうかを見つけるアルゴリズムのため、見つかる手順が最短手順とは…

dlshogiの評価値のスケール調整

dlshogiは、開始局面から170点という比較的大きな評価値を出力する。 これは適切でないため、今回調整を行うことにした。 勝率から評価値への変換 dlshogiの内部では、局面の価値は、評価値を使わず勝率で扱っているが、GUIソフトには評価値として返す必要が…

接待dlshogi

接待水匠にインスパイアされて接待dlshogiを作ってみた。何番煎じだというネタですが、接待将棋プログラムが一応動くようになりました!https://t.co/BLvfTF2rOeMultiPVで思考し、手番から見た評価値が100以上の指し手のうち、最も100に近いものを選択する単…

将棋AIの実験ノート:活性化関数Mishを試す

以前にdlshogiのモデルで活性化関数をReLUからSwishにした場合の比較を行った。今回は、活性化関数Mishを試した。 Mish Mishは、 で表される活性化関数である。論文によると、6層CNNのCIFAR-10の訓練で、Swishの正解率を上回ると報告されている。 [1908.0868…

dlshogiの学習時の自己対局での先手勝率

少し前にdlshogiの先手勝率について調べた。 今回は、dlshogiの学習時の自己対局での先手勝率について調べた。 開始局面 現在、dlshogiの自己対局は、floodgateの16手目までの出現頻度が99パーセンタイル以上の局面を初期局面集として、そこからさらに16手MC…