TadaoYamaokaの日記

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

dlshogi

【dlshogi】Multi PV対応版の実行ファイル公開

dlshogiのMulti PV対応版の実行ファイルを公開します。 Release Multi PV対応版 · TadaoYamaoka/DeepLearningShogi · GitHub実行ファイルのみの公開ですので、世界将棋AI 電竜戦バージョン(「GCT電竜」同梱)に上書きしてください。また、探索部の改良によ…

将棋AIの進捗 その53(MultiPVの実装)

Qhapaqさんからのプルリクエストをもらっておきながら対応していなかったMultiPVに遅ればせながら対応しました。 MultiPVを使わない際の速度には一切影響しない形で実装したかったので、リファクタリングしてから取り込もうと思いつつ、探索部の改良を行って…

将棋AIの進捗 その52(探索部の改良)

ここ数週間、探索部の細かい改良をしては測定していた。 小さなレーティング差を計測するには多くの対局数が必要になるので、一つの改良の確認に時間がかかるのがつらいところである。 1手1秒と1手3秒で結果が異なることもあるため、長時間思考で強くしたい…

将棋AIの進捗 その51(floatの桁落ち)

dlshogiの現在の実装では、長時間思考して探索ノード数が大きくなった場合に、ノードにバックアップされる価値の合計がfloat型になっているため、誤差が許容できないという指摘をやねうらお氏から頂いた。floatに[0,1]の価値の値を足し合わせていく場合に、…

将棋AIの進捗 その50(メモリ使用量削減)

dlshogiは、1ノードにつき平均2KBのメモリを消費する(局面の平均合法手を80とした場合)。 通常GPU 1枚で探索した場合、NVIDIA RTX 3090で最大4.5万NPS程度なので、5分探索したとすると、探索ノード数は1350万ノードで、約27GBのメモリを消費する。複数枚GP…

将棋AIの進捗 その49(並列化の課題)

dlshogiでは、複数GPUを使用して並列化した場合に、ノードの衝突が発生しやすくなりNPSが1/3近くになる場合がある。例として、電竜戦でA100×8使用した時、以下の局面でNPSが初期局面に対して1/3近くなっていた。 局面 NPS 初期局面 342985 position startpos…

dlshogiが序盤に先手を過剰に評価することがある問題

ほぼ個人的なメモです。電竜戦で、dlshogiで作成した定跡で序盤に先手の評価値が異常に高い局面が登録されていた。例)7手目の評価値が238と高い 定跡作成時は、5000万ノード探索を行っており、探索ノード数が増えた場合に発生することが分かった。 当該局面…

AobaZeroの棋譜の加工

GCTでは、AobaZeroの棋譜を、事前学習に使用し、また、dlshogiの強化学習データに混ぜて使用している。 アンサンブル効果の仮説 dlshogiの強化学習データと混ぜて使用したという部分が強さに影響しているのではないかという仮説を立てている。dlshogiは、デ…

GCT、dlshogi、二番絞りの比較

電竜戦の決勝リーグに進んだ、dlshogiを使用している3ソフト(GCT, dlshogi, 二番絞りプレミアム生)の比較を行った。 「二番絞りプレミアム生」(以下、二番絞り)は、48先生からモデルファイルを提供いただいて、探索部には最新のdlshogiを使用して測定した…

GCTの学習に使用したデータセットとノートブックを公開します

GCTの学習に使用したデータセットと、Google Colabのノートブックを公開します。colab.research.google.com データセットについて データセットには、以下を含みます。 floodgateの棋譜からhcpe形式に変換したもの elmo_for_learnで生成したデータ AobaZero…

「GCT電竜」とdlshogi(NVIDIA GPU非搭載PC対応版)の公開

「GCT電竜」とdlshogi(NVIDIA GPU非搭載PC対応版)を公開します。 ダウンロード Release 世界将棋AI 電竜戦バージョン(「GCT電竜」同梱) · TadaoYamaoka/DeepLearningShogi · GitHubNVIDIA GPUに対応したTensorRT版と、NVIDIA GPU非搭載のWindows PCでも動…

【電竜戦】チームdlshogiのGCTが決勝リーグで優勝しました

本日開催されたコンピュータ将棋の大会「電竜戦」で、チームdlshogiのGCTが決勝リーグで優勝しました!コンピュータ将棋の大会でディープラーニングを使用したソフトが優勝するのは初です。 2017年からdlshogiの開発を始めてやっと優勝までたどり着きました…

【電竜戦】dlshogiライブラリ使用の3ソフトが2日目決勝リーグに進出します

本日、コンピュータ将棋のオンライン大会「電竜戦」の1日目が開催されました。私が開発しているdlshogiは、56チーム中10位で、2日目のA級リーグ(決勝)に進出します。 他にもdlshogiライブラリを使用しているソフトが合計で3チーム決勝リーグ進出します!第…

dlshogiをAWSのNVIDIA A100インスタンスで動かす

AWSのEC2に、NVIDIA A100のインスタンスが追加されたので、dlshogiでどれくらNPSが向上するか測定してみた。個人としてはAWSを使っていなかったので、AWSのアカウントを作成して、vCPUの上限緩和申請するところから行った。 P4dインスタンスは、vCPUが96なの…

dlshogiのINT8対応

前回の記事にも書いたが、dlshogiは、V100のTensorCoreがINT8に対応していないため、INT8対応を行っていなかった。 しかし、AWSのG4インスタンスでは、NVIDIA T4 Tensor Core GPUが利用できるため、INT8に対応することにした。 また、今後クラウドでA100が提…

電竜戦(予行演習3)の結果報告

昨日開催された電竜戦(予行演習3)にdlshogiも参加し、結果は34チーム中4位でした。 第1回コンピュータ将棋オンライン 電竜戦予行演習3 勝敗表 DL勢同士の対局 CrazyShogi CrazyShogiのとの対局は、危なげなく勝ちました。 第1回電竜戦 棋譜中継(単一棋譜) Ao…

将棋AIの実験ノート:Mask-AttentionでAIの着目点を可視化する

深層強化学習でAIが着目している箇所を可視化するという以下の論文の手法(Mask-Attention)を、将棋AIでも試してみたい。 http://mprg.jp/data/MPRG/F_group/F20200610_itaya.pdf Mask-Attention 方策ヘッドに、位置情報をAttentionとして乗算する。 Attent…

dlshogiにおける思考時間と強さの関係 更新

先日記事にしたdlshogiにおける思考時間と強さの関係について、思考時間8秒、16秒の結果と、水匠2のスレッド数を8にした場合の結果が測定できたので記事にする。測定条件は前回と同じである。 dlshogi vs 水匠2(1000万ノード固定)の測定結果 思考時間(秒) 勝…

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

先日試したSwishについて、推論速度がどれくら低下するのかと、精度が上がった代わりに速度が低下した場合に強さにどう影響するのかが気になったので調べてみた。 精度 先日は、8サイクル分学習した時点の結果を記したが、今回は16サイクル分学習したモデル…

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

画像認識で高い精度を達成しているEfficientNetで使われている活性化関数Swishが将棋AIでも効果があるか試してみた。EfficientNetでは、残差ブロックにMBConvというアーキテクチャが使用されており、その中の活性化関数にSwishが使用されている。 MBConvにつ…

dlshogiのautomatic mixed precision対応

48先生から頂いたautomatic mixed precision対応のプルリクに対応しました。 Pytorch 1.6 の Automatic Mixed Precision対応 by bleu48 · Pull Request #18 · TadaoYamaoka/DeepLearningShogi · GitHubautomatic mixed precisionは、PyTorch 1.6で追加された…

dlshogiのgo nodes対応

少し前にQhapaqさんからもらったプルリクに対応しました。 add go protocol by qhapaq-49 · Pull Request #17 · TadaoYamaoka/DeepLearningShogi · GitHubgo byoyomiで、探索を打ち切らずに時間いっぱいまで探索するようになりました。 go nodesで、固定ノー…

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

MCTSと思考時間と強さの関係について、dlshogiのデータが知りたいという要望があったので測定してみた。 測定条件 対戦相手は、最新のやねうら王をUbuntu 18.04のclangでビルドしたもの+水匠2の評価関数で、1000万ノード固定とする。dlshogiは、最新のソース…

dlshogiのdf-pnのテスト方法

dlshogiのdf-pnだけを動かす手順を書いておきます。 テスト局面追加 testプロジェクトのtest.cppの 「// DfPnテスト」と書いてあるところのmain()の vector<string> sfens = { // 詰み "9/9/+N8/p1p4p1/6p1p/1P7/3k3PP/2+p5L/6+rGK w R2B2G3Sgs3n3l9p 1", "1n1g3+Pl/</string>…

df-pnの関連記事

TLでdf-pnの話が上がっていたので、以前書いた記事のリンクをまとめておきます。局面ループ周りの処理はガチで発狂するレベルで面倒でdf-pnが凄いと言い張ってる人が本当にこの問題を解決できてるのかを少し疑うレベルで面倒なんすよね orz— Ryoto_SawadaQha…

dlshogiでMagic Bitboardを有効にする

やねうら王が飛車と角の利きに、PEXTの代わりにMagic Bitboardを使用することで、Threadripperで高速化できたとのことなので、dlshogiでも高速化できるか試してみた。dlshogiは合法手生成にAperyのソースを使用しており、AperyはMagic Bitboardを実装してい…

dlshogiの学習則

dlshogiを改造して遊びたい方のために、dlshogiの学習則についてちゃんと書いてなかったので書いておく。主に、学習部のソースtrain_rl_policy_with_value_using_hcpe_bootstrap.pyの解説になっている。 AlphaZeroの学習則 AlphaZeroの学習則は、 となってい…

将棋AIの進捗 その48(NPS改善)

ノード再利用の方式見直しを行った後、強くなっているかApery(WCSC28)と1手3秒100局で確認を行った。結果、勝利は62%で、変更前は69%だったので、強くなっていないことがわかった。 考察 理由としては、以下が考えられる。 Ponderなしの秒読みではノード再利…

将棋AIの進捗 その48(PV表示対応)

Qhapaqさんからプルリクをいただいたので、dlshogiをPV表示に対応しました。プルリクにはなかったのですが、USIオプション「PV_Interval」を追加しました。 「0」にするとPV表示なし、0以上にすると、設定したms間隔でPVを表示します。masterブランチに反映…

将棋AIの進捗 その47(Linuxのマルチスレッド排他処理)

昨日の記事で、dlshogiのゲーム木の管理をロックレス方式に見直しを行った。Windowsでは、ノード単位の排他制御をmutexを用いずに、atomic_flag (TAS機能)で実現することで10%NPSが向上したが、Linuxで測定すると800NPSくらいしかでないという悲惨な結果にな…