NNUEの頭打ち

  

ちょっと疲れが出たのか連休寝倒してました。

もうちょい早めに反応すべきでしたが,電竜戦TSEC後にいくつかNNUE型の評価関数が公開されて計測されているようです。

 

Kristallweizenが2019年の選手権ですから2年以上前なのですが,一応誤差範囲で最強の群に入っているようです。

以前も書きましたが定跡併用を前提としているため序盤データ入ってないので序盤酷いと思います。定跡掘りにも適さない不思議な評価関数です。

 

と考えるとNNUEも頭打ちですかねぇ。

うちでも相当色々やってあれが当時の限界でした。

 

他チームが強くできていればモチベーションになると思っていたので少し残念です。

ネタは色々あるので路線の違う遊びを絡めて色々考案中。

とりあえず夏バテからの復帰を目指します。

将棋の興行

以前も書いたかもしれないが,相撲好きの知人と話したことがある。

将棋の興行は相撲と似てるんだろうかと。

私の答えはむしろプロレスの方じゃないかというものだ。

 

組織運営が現役棋士

スポンサー回りも現役棋士

中継の解説も現役棋士

地方イベントでも受付に若手棋士

(そう言えば矢掛のイベントでは私の到着時が休憩時間だったので受付に人がおらず糸谷八段にスケジュールを尋ねたのを覚えております)

 

ほらフットワークの軽さはプロレス級でしょう。

相撲で現役力士が場所中他の取り組みにコメント出すなんて無いじゃないですか。

 

現役力士が部屋を移ったりしませんが,棋士は稀ですが所属支部を変えます。

子弟の争いごとも概ね生命線にならないし,なんなら盤外戦の様子をメディアに流して煽ることすらやります。

組織に許可申請することなく個人でプロモーション活動もします。

ほら,プロレスっぽいでしょう。

 

昭和の時代では対局中に世間話をしてたくらいですし,比較的最近も解説者が興行のためには若手を過剰に持ち上げ褒めるような風潮もあります。

鬼の住処を説明する際でも勝ち星を譲る話題が出てきたりします。

棋理より勝負師志向な棋士が多いのも当然です。

 

タッグマッチとかが無かったんですがABEMAさんのお陰でチーム戦的な興行もいけそうだという雰囲気です。

囲碁はペア碁流行らそうという風潮のようですが将棋もいけるかもしれません。

 

まぁ,何の話かと言うと興行のフットワークが軽いってことで

2017年の王将戦以来のタイトル戦が岡山に来るらしいです。

2021年11月に倉敷市玉島で竜王戦です。ええ,将棋界第一位棋戦ですよ。

 

 

スクラッチ勢の行方

先々週に終わりましたが今年の電竜戦TSECの予選が行われました。

コブラさんが大量投入した上に勝ち星を集めるスクリプトを用意していたようで決勝に残られました。ルールの穴を堂々と予算をかけて突いてくる辺りが持ち味だなと感心するばかりで,運営としては今後対策を考えます。

ついでの宣伝ですが決勝は今週末17,18日です。

阿部健次郎七段のライブ解説を準備しております。

B級対局を含めると膨大な対局がありますのでご期待ください。

 

golan.sakura.ne.jp

 

また,別件で話題になったのがスクラッチ勢です。

うちの地ビール含めてスクラッチ勢は少数派になってしまいましたが,コンピュータ将棋の世界でスクラッチは結構楽しい領域です。

何もないところから自分ですべてのコードを書き下ろして対戦が出来た時の感動はなかなか味わえません。

 

ところが,当然ながら過去の叡智の塊と言える強豪ライブラリには当然勝てません。

floodgateにおいても近頃レーティング計測すら難しい状況です。

まず,レート基準が2016年世界選手権準優勝の技巧2です。

クラッチで勝つのは相当な難易度です。

floodgateではレーティング付ソフトに一勝でも上げなければレーティングが付かないことになっています。

 

低位でどのくらいまでレートが付くか確認してみました。

go_test10cが地ビールの最新型で一応2223とレートを付けてもらえるくらいです。

やねうら王の駒得のみ評価関数Lv2でも2357と数字はついています。Lv2ですと持ち駒と盤面の駒に差をつけた程度ですので非常に簡単な評価関数ですが探索部がやねうら王ですので大変高速です。探索深さ20とか出ます。

他にもAobaZeroの一手につき10局面評価,二番絞りの一手につき3局面評価などが似たような辺りですがレート計測可能な領域です。これらは本当に先を読めていませんが深層学習で序盤の定跡が上手にトレースされています。上記やねうら王と両極と言っていいでしょう。

 

LesserKaiに勝てるようになってからfloodgateに放り込みましょうというのが今までのコンピュータ将棋の入門でしたが,ギリギリ勝つ程度ではレート計測対象にもならないことが様々な実験で分かりました。

最後に,最下位にLesserKaiが二ついますが一つは私が改造した物,もう一つはオリジナルの作者である池さんの改造した物ですがこれがラッキーもあってギリギリレートが付いた感じです。普通なら数日放置してもつかないくらいです。もちろん無改造のLesserKaiはレート計測不能です。スクラッチ勢用に適当なサンドバッグを作成しようとしている段階です。

 

ちなみにYSSが2500付近におりますし,過去にGPSfishもこの付近だったと思います。これらも相当なノウハウの塊で,フルスクラッチでこれらを目標にするのは結構大変です。

f:id:the48:20210712173717j:plain

 

クラッチと申しましたが,既存のソフトを写経するようなものであれば同じ強さが得られますのでそういうのもアリかと思います。スクラッチになるかどうかの判断はお任せします。

---

7/15:追記

ちょっと長くなりますが追記で続けます。

f:id:the48:20210715110543p:plain

なのはさんから提案がありました。なのはmini,なのはnanoはどうかとのことでした。さっそく放り込んだ結果が以上です。2016年正月なので私が参入する前のものということで当時の感覚が分かりませんがYSSより強いようです。ただ,1スレッドだとAobaZeroの方が強いってのが結構時代だなって感じはしますね。

なのはは実はざっとソースを読んだことがあって,盤面の利き情報を保持する工夫をしていて結構難解な構造だった記憶があります。それにしては実に高速化も施されており可読性が高ければ非常に素晴らしいベース素材だなぁと思っています。バージョンは当然古くなりますがStockfish由来の探索部なので,これに対してフルスクラッチで勝とうとするのは相当な難易度に思います。サンドバッグ的には高過ぎという感じでしょうか。

上記のように別件でcshogiの追加機能の動作テストをしたのですが,やりそうでやらないLesserKaiとのガチマッチに勝ちました。そういえば人間で勝てるんですよね。段位者の方は自身を自作AIの対戦相手にするのもいいのかもしれません。 

私レベルでこんなもんですから,特別高段者でなくても暇があれば生身の人間でもfloodgateのレートは付きそうです。

cshogiもdlshogiだ

前回dlshogiがPyPIに登録されてインストールが楽になった件を書いた。

 

bleu48.hatenablog.com

 

ところが,5日ほど前に以下のようなコミットがあって,更にバージョン番号確定してPyPIに上がっている。

 

github.com

 

完全に機能被りである。

個人的には欲しい機能であったので勝手に実装していたものがあったが,当然汎用ライブラリに積むものじゃないのでプルリク送ったところで蹴られると思っていた。

何がしたいのか若干不明であったが,これはdlshogi内部の方がそのうち省略されるんだろうと勝手に予測している。

 

本件でcshogiだけでdlshogi互換のNNの推論を呼びやすくして実験が行いやすくなる。

と思ったら,電竜戦TSECにpython-dlshogi2がエントリーとある。

chainerおよびpython-shogi実装のpython-dlshogi,tensorflowおよびcshogi実装のdlshogi-zeroに続くPythonによるエンジンのようである。恐らくcshogiで入力特徴量を準備してonnxruntimeで推論を行うんじゃないかと予想しておく。カジュアルにV100使っちゃうの強いな。

 

golan.sakura.ne.jp

 

そう言えばこの形の実装は個人的には囲碁で一回試している。UEC杯にCUDA実装が間に合わなかったときの保険および事前小実験ツールである。

それ故,経験上ボトルネックPythonであることは間違いないがどのくらいパフォーマンスが出るのか楽しみである。ちなみに,うちでは数十分の一レベルまで落ちていた。

 

dlshogiがPyPIに登録された

諸々の事情で二週間遅れで弄ってみた。

 

tadaoyamaoka.hatenablog.com

 

dlshogiの環境構築は初心者には結構難しい。

今回そのうち一番面倒なboostを扱う部分が不要になるので大きな変更である。

 

私のところは以前からWindowsメインなので何度か書いてるがざっくり一から説明しておこう。

  1. Visual Studioを入れる。コミュニティ版で良い。開発しない人は要らないかも。どうせ使うならCUDAより先に入れて置かないと二度手間になる。オプションとしてはC++だけビルドできればいい。
  2. CUDAを入れる。PyTorchで学習させるなら今は11.1かな。これは推論だけの人も必須。
  3. PyTorchを入れる。LTS版が出ているのでこれでいいんじゃないかな。今3GBくらい容量あるのよね。
  4. そしてpip install dlshogi

 

これでpython -m dlshogi.trainのコマンドだけで学習が可能になる。

教師データやテストデータが必要だがこれもどこかから流用するならさほど問題でもない。手元で生成するなら自己対戦ルーチンをVisual Studioでビルドすることになるがこれはさほどトラブルもなく実行できるだろう。

 

で,ちょっとやってみたところ私が使っている学習器は随分前に独自に切り分けていたので概ね似たような挙動をすることは確認できたが,全く同じ動作になっているかは確認していない。ロスの値が相当違うので差異を要確認といったところだ。

独自に作っている深層学習モデルは持ち込めるようなのでモデル設定ファイルと教師データがあれば学習できると言うくらいには簡易化できたことになる。

個人的にはcppshogi.pydだけコピペで持ってくるようなことをしていたので大差でもないが新しく環境を構築する人には朗報だろう。

 

ただ,教師データがhcpe3フォーマットに対応した部分で読み込みに時間がかかるようになったみたいで今のところ利点ばかりでもない。

非GPU勢DL組

新ジャンルです。

 

以前よりfloodgateに幾つか放り込んであります。

AobaZeroの4スレ。

  

秒10ノードは相当つらいです。floodgateで平均20秒級と考えてもp200相当です。

AobaZeroの場合探索スレッドが4つになってそれぞれのモデルを担当CPUが演算することでこの程度に遅くなります。

比較的早い段階で対応を咎められてfrenzy_humanに4敗してますね。

学習時の欠点があってもp200程度では修正できないみたいです。

p800でも修正出来ていないそうでfrenzy_humanはp800にも勝たれています。

 

次に以下の群ですが,これらはdlshogiおよび二番絞りのモデルをFukauraOu(dlshogiクローン)のMKLビルドで走らせたものです。CPUビルドは全CPUを使ってしまうのでMKLで使用スレッドを絞っています。探索スレッド1,評価バッチサイズ1です。

dlshogi_wcsc31_4t

dlshogi_wcsc31_1t

nibanshibori_wcsc31_1t

 

最初に走らせたのはdlshogi_wcsc31_4tでした。旧世代の4コアのCPUで10ブロックのモデルが100nps程度出ます。10秒でp800を超えるのでAobaZero_p800や3300の技巧辺りとどうなるかを確認する感じで投入しました。

結果楽勝でしたね。

 

ということで,1スレッドしか使わないものを投入中です。

dlshogi_wcsc31_1tが50nps程度,nibanshibori_wcsc31_1tは11nps程度です。

二番絞りが同じ40ブロックのAobaZero_4t級ですね。

使用スレッド数の差がありますが,この辺りは演算の最適化の問題なのでOnnxruntimeかIntel-MKLが優秀なのでしょう。

 

floodgateの底辺レートが今は3000前後なんですよね。

この辺りを盛り上げて参ります。

人間も高段者なら偶に勝てたりするんでしょうか?

---

追記:

現在二番絞りが11nps程度でレート3000超を確認。秒10局面程度なら並の人間に近い数字と言われており結構驚異的な数字かと。

それよりも驚きが50nps程度のdlshogiが技巧に全勝ペースです。この技巧はRyzenの1スレと聞いてまして700knps程度だそうです。面白いのはこのレートより下のAobaZeroと互角でKristallweizenには負け越しって辺りでしょうか。

何か面白げな現象が起こっている可能性があります。

f:id:the48:20210513084022p:plain

 追記2:

撤退時の記録だけ残しておきます

f:id:the48:20210515090838p:plain

 

持ち時間の差?

先日の世界選手権でNNUE勢が上位を占めました。

GCTが電竜戦を制したところでDL勢の天下になるとの予想は覆されたことになりますが,この原因が持ち時間にあるとの話が選手権の中継中にありました。

他に原因を求めづらいからの仮説ですが,きちんと検証する必要があるでしょう。

 

問題を整理しておきます。

第1回電竜戦:2020年11月開催

持ち時間10分,2秒加算のフィッシャールール

コンピュータ将棋界初DL勢GCT優勝(マシンはA100 x8)

elmoおよび白ビール不在,W@nderERがi7でエントリー

ただし,BURNING_BRIDGES,みずうら王,GrampusなどがThreadripper 3990X

  

第31回世界選手権:2021年5月開催

持ち時間15分,5秒加算のフィッシャールール

NNUE勢elmo優勝(マシンは恐らくc5.metal,48コア96スレッド)

電竜戦で居なかったPAL,elmo,白ビール,Ryfamate,大将軍,Qugiyなどが決勝進出

電竜戦上位のGrampus,BURNING_BRIDGESが不在

 

ちなみに現行のfloodgateが持ち時間5分,10秒加算のフィッシャールールです。

こちらは大変ありがたいことにA100 x8のGCTやc5.metalのDaigorillaが投入されており参考になります。

選手権ではDaigorillaが上位でしたがfloodgateでは相当拮抗しております。

そして電竜戦ではGCTの圧勝でした。

 

f:id:the48:20210508083627p:plain

 

持ち時間は単純比較しづらいのですが昨今の平均値でざっくり180手で終局と仮定すれば,選手権1350秒,floodgate1200秒,電竜戦780秒となります。

二倍に満たない幅でこれだけの過渡現象がみられるのは非常に貴重なことかと思われます。

ちなみに表中の二番絞りは決勝で使う予定だったオプションBです。

 

また,floodgateを見る限り上位陣が以前のマシンスペックの差で殴り合うというより相性的なもので勝敗がつくケースも多くなっているように見受けられます。これも過渡期の現象でしょう。

 

持ち時間短い方がDL勢に優位なんでしょうか?持ち時間長い方がスケールするとか言う話がAlphaZeroの方でありましたが,矛盾しますね。

さて,これらの大きな要因はどこにあるでしょうか?

観戦される方は第2回電竜戦へのelmo,PALの参加が注目ポイントかと思います。