wcsc29でのMulti Ponder類似技術

Multi Ponderで第五回電王トーナメント準優勝,WCSC28優勝と稼いできた感があります。アルゴリズムや実験結果等は公表してるので類似実装が出てくるだろうとの予測はありました。確認用にメモっておきます。

 

1.やねうら王

類似実装を行いテスト対局を行っていたようです。千日手対策等の弱点など把握されていたようで実に素晴らしい。Ponderヒット率があまり有効でなかったそうでWCSC29本戦では使用してないとのことでした。

 

2.狸王

Multi Ponder的要素を含むクラスタを構成されていたようです。情報公開されているようですので時間があるときに読んでみたいと思います。

 

3. Qhapaq di molto

qhapaq.hatenablog.com

発展形であると述べられています。ちょっと私が想像したものと違いますが,自分のネタの改造版がでるのも楽しいですね。計上されているヒット率が低いのが気になります。

 

4.名人コブラ

実装されておりました。全スレッドの探索情報を表示されていたため現地ではものすごい勢いで将棋所の下画面がスクロールしておりました。ちなみに,我々はヒットするまでは全部非表示でした。コブラさんもヒット率が低いとコメントされておりました。

 

5.dlshogi

こちらはクラスタ型のMulti Ponderでなないのですが,MCTSの特徴を生かして同様の概念を確率的に実装されたようです。多少なりとも思想に影響を及ぼしているようです。山岡さんのことですから,効果のほどは実験されているんだと信じてます。

 

で,結構面白いのがdlshogiの山岡さん以外はアピール文書等で一切事前開示されていなかった点ですね。上位チームには勝ち負けの争点になる意識があったということでしょうか。結果的にほぼ迎撃できたので個人的には満足しております。

Ponderヒット率9割を実験的に示したものをゲーム情報学研究会で公表しているのですが,参照されていない方々がヒット率が上がらないとコメントしていた点がちょっと残念でした。おそらく会員外の方は無償で見れない期間があるとかそういうことです。

検証用のバイナリファイルは昨年の選手権前に公表しているのでお試しください。

 

github.com

 

随分前から公表しているのですが,MultiPVを前提とした評価関数のためかどうか対戦レーティングが低くダウンロード数もごく僅かです。いちど検討エンジンとしてMultiPVを前提に使用いただければ幸いです。

---

追記:

上記のリストに漏れ等があれば御報告頂ければ幸いです。すぐに修正させて頂きます。

NNUE型の評価関数のテスト

コンピュータ将棋界隈ではKPPT型などの三駒関係を元にした評価関数の時代が長く続いていおりました。その関係の試行錯誤や分析の後,多くの知見が得られました。

私も取り組み始めた二年前の当初から様々な評価関数型を試作し,ニューラルネットワーク型も複数実装しテストを繰り返しておりました。電王トーナメントの懇親会でNN型の評価関数をαβ探索に使うネタ的に振ってみたのですがあまりリアクションがなかったのを覚えております。

今年の選手権ではNNUE型としてニューラルネットワーク型の評価関数が上位陣で使われており共通の話題として情報交換が行われました。個人的に驚いたのは計算速度で,SIMD演算を上手に使うことでこれほど演算速度が出るとは驚愕しました。

しかしながら,これらで何が行われているか全く分からない層が多いようです。

 

まぁ,前置きはその辺にして評価関数をネタにしたい人が多いようなので,テスト用に書いたスクリプトを置いておくのでいいように改造なりして使ってください。

https://github.com/bleu48/shogi-eval

 

探索部抜きなので局面の静的な評価値の計算だけです。

他言語にも簡単に移せると思いますし,構造が分かるとうちでやってるような独自の学習部作成なども捗るのじゃないかと思っております。

モバイルノートに32GBを

  

16GBで数年やってきました。

某選手権に参加したときのノートパソコンも

このblogを今書いているマシンもデスクトップですがメモリ16GBです。

 

機械学習なんかを本格的にやるとGPUやストレージ含めて色々リソースが辛くなります。特にどうしようもないのがメモリですね。ローカルにコンテナ作る人も同様と思います。

メモリに乗らないものを計算するとスワップしながらということになりますが,もう言うまでもなく論外です。

 

ということで色々探していたところ結構過激なネタが飛び込んで来ました。

「幾つかのノートPCのメモリが仕様で書かれていないがソケット化されているらしい。」

確認してみたところ,所謂ハイエンドの軽量薄型機は全部はんだ付けされているようでした。中堅の量産品が出荷バリエーションを持たせるためにメモリ量のモデルを複数持っており海外仕様だとメモリ32GBモデルが存在するなどのネタがありました。詳しくは機種ごとに外国名を探してみてください。

 

本件はLenovo Ideapad 530S(AMD)を扱います。

Intel仕様は一枚はんだ付けらしくメモリ構成が異なる点注意です。AMD仕様の方が出荷量が少ないのではないかと邪推します。Lenovoに限らずHPやDellでも同様の傾向アリです。

で,こいつの利点です。

1.意外に軽い(1.5kg未満)

2.モバイルの範疇(14インチだが細枠なので,ひと昔前の13インチ級)

3.4コアCPU

4.安い(発売当初7万台,現在6万半ば)

5.メモリが2ソケット(デュアルチャンネル)

6.換装実績がネット上にある(T5ネジ)

 

ついでに欠点も

1.価格なりのスペック・外装(メモリ積む価値があるか)

2.熱設計が甘い(今風だが負荷をかけたときにクロックが下がる)

3.SSDのサイズが小さい(M.2 Type2242なので換装しづらい)

4.ACアダプタが無駄にでかい専用設計

5.メーカー保証をかなぐり捨てる勇気

  

まぁ,結論から言いますと32GBに換装して動きます。

ただ,SSDが差し替えられてないので残念な感じです。

ーーー

追記

その後無事SSDも差し替えました

bleu48.hatenablog.com

検証試験の準備

雑ですが公開しながら自分の試験用のメモを

 

試験相手にdlshogiは欠かせないと言っていいでしょう。

  

簡単に動作テストだけしてみました。

github.com

 

公開されているバイナリはCUDA10.0用らしく

うっかり10.1を入れてしまったのでdllの類が見つからないとのこと。

2つ強引にコピーしてリネームしたら一応動きました。(ひどい対応ですみません)

 

また,本番ではp3.8xlargeを使用したとありますのでTesla V100の4枚ですね。

16xlargeにしなかった理由を聞き忘れてましたが,Remiさんも8xlargeだったので4枚くらいがちょうど使いやすいのかもしれません。

 

うちのテスト環境ではここまでのGPUがないのでどうやって比較実験するかってところから検討です。

 

他の対戦相手はとりあえず公開されているバイナリをリスト化するところからです。

やねうら王ライブラリ勢は条件設定にそれほど苦心しないと思います。

 

とりあえず,ここまで。

---

ToDo:

・ソルコフポイント等大会ルールのおさらい

・個々のソフトとの相性確認

・自戦感想戦

・Go言語側で千日手検出実装および実験

某デスマの内情

残り1カ月を切ったころ・・・

定跡担当S「そろそろ評価関数が出来ないとこちらスタートできませんぜ。予定は3月末じゃなかったですか?」

クラスタ担当S「新機能を加える工数がないと昨年版と同じか低機能になりかねませんぜ。」

計測担当S「工数ないんで昨年の計測コードで良いんですか?それに計測対象はどれから・・」

評価関数担当M「強いの出来た」

計測担当S「それ去年より弱いです」

評価関数担当S「うちの精度がないと他が善戦しても何の役にも立たなくなるんで,予定より押してますがあと2週こちらに注力させてください。」

探索担当S「アスピレーションサーチの部分改造したいんですが・・・」

  

残り3週間

評価関数担当M「まだ頑張る」

評価関数担当S「昨年のより強くできなかったら昨年版で出ることも視野に入れて・・」

計測担当S「なんか全部弱くて疲れてきた。メンタルツライ。」

探索担当S「lazy SMPの亜種を数パターンテストしたいんですが・・・」

 

クラスタ担当S「寝る時間削ってちょっと改造しますね」

定跡担当S「昨年の評価関数で今年流行の戦型とか分析しときますね」

定跡担当S「なんか二年前から更新してない部分が結構あるんですが・・・」

 

残り2週間

評価関数担当S「昨年のよりはたぶん強いのが出来た」

定跡担当S,クラスタ担当S,計測担当S「それで決定しましょう!!!」

評価関数担当S「一応もう少しこれの亜種作る」

クラスタ担当S「あ!!!昨年版に劣るところ見つかりました。工数下さい。」

計測担当S「i9 7980XEの計測以外信頼性低いって分かってきました」

評価関数担当S「それ言うのこのタイミング!?」

探索担当S「Timemanの改造を数パターンテストしたいんですが・・・」

計測担当S「テスト機足らん」

   

大会前日

評価関数担当M「強いの出来た」

評価関数担当S,定跡担当S,クラスタ担当S,計測担当S「・・・・・・」

計測担当S「あと一日で何計測するんですか?」

定跡担当S「え!?整合性はないよね。もう更新とか無理よ。」

クラスタ担当S「ええから工数下さい。現地でバグるぞ。」

計測担当S「i9 7980XEで数戦しか出来てないけど強そう。」

定跡担当S,クラスタ担当S,計測担当S「それで決定しましょう!!!」

評価関数担当S「未計測のウチの子らは・・」

  

大会後

クラスタ担当S「デスマったけど不具合出ずに動いた時点で俺の仕事満点。」

計測担当S「何があっても俺には責任はないわな(笑)」

定跡担当S「確認してない割に意外に使えたな(笑)しらんけど」

評価関数担当M「一時はどうなるかと思ったが善戦した」

評価関数担当S「頑張ったのに出番なかった(泣)」

探索担当S「俺口だけでほとんど何も実装できんかった」

誰か「最後の最後で設定変えろとか言ったやつ居なかった?」

定跡担当S,クラスタ担当S「そら無理やろ。動かんかったら洒落ならん。」

   

 

風の噂ではこのプロジェクト2名しか居なかったとのこと(笑) 

 

 

 

やねうら王は本当に強いのか?

yaneuraou.yaneu.com

 

特に怒ってないですが,圧倒的強い立場の者が悪質なデマを飛ばすのは感心できないですね。

新幹線に乗る直前に駅で購入したもので毒物・薬物の類は混入しておりません。

 

対抗と言うほどのものでもありませんが,煽り気味のタイトルで事実確認だけしておきます。

確認できるデータのみと言うことで主観的なものだけになりますが,御容赦下さい。

 

まず,私とチームメイトの松下さんがはじめてコンピュータ将棋の大会に参加したのが第5回電王トーナメントです。

初対面の御本尊やねうら王は既に決勝常連の強豪ということになっていました。

 

予選1回戦

人造棋士18号 〇ー× やねうら王

 

予選5回戦

shotgun 〇ー× やねうら王

 

決勝ではやねうら王がタヌキと河童に負けて敗退していたようです。個人的感想ですがタヌキと河童もやねうら王ライブラリですので,同エンジン対決でやねうら王本家の勝率は有意に低い感じがします。

ちなみに,私は決勝まで上がりました。

 

確認はこちら

denou.jp

 

そして,第29回世界コンピュータ将棋選手権です。

我々が前年度優勝者,やねうら王がなんと初参加の新人だそうです。

 

二次予選5回戦

Kristallweizen 〇ー× やねうら王

 

決勝7回戦

Kristallweizen △ー△ やねうら王

 

以上で全ての対戦結果です。

我々通算3勝1分で一度も負けてません。

しかしながらデータ不足で「やねうら王は弱い」という仮説も十分な有意水準で認めるに満たないと考えます。

 

やねうら王,新人賞受賞および優勝賞金百万円おめでとうございます。

大金を投入した勝利を心よりお祝い申し上げます。

 

www2.computer-shogi.org

ベンチマーク計測の件(WCSC29に関して)

レーティングという言葉が独り歩きしている(風に私には思えます)

勝率?

 

テレビゲームやったことがある人ならわかると思いますが,難局面でも一度攻略できたら二度目は比較的簡単に攻略できるようになります。これは陸上競技の記録や体操の新技などでも見られる現象で理由はよく分かってない部分もあるらしいとか。

 

もちろん,そんなに単純な話ではないでしょう。

考えれば考えるほど分からなくなるくらいには将棋は奥が深いものです。断定的に仮説が検証できたと思った瞬間に覆される反例局面が見つかったりするので,正直分からないことだらけと言っていい状況。

 

だから,「強いですね」と言われた時の対応が「何故かよく分からないけど勝つんですよ」となります。気分を害されたら申し訳ないですが実際上手に説明できなくて困っています。

 

実際のところ例えばWCSC29(第29回世界コンピュータ将棋選手権)の準備段階で,伝家の宝刀と言うべき横歩青野流で後手勝率が5割を超えるケースが多々出て正直戸惑いました。特に相手に大駒を捌かせてからじわじわと竜,馬を詰めることが多い不思議な評価関数が作成されてから悩むことが多くありました。本件ドラゴンスレイヤー系列評価関数と命名

 

連休前まではこれを4,5パターン仕上げて,その中から最強を選出し参加する予定でした。で,計測の問題です。

KPPT系の評価関数でもそうでしたがAVX2の威力は相当なものです。NNUE系でも同様なのですが,様々なニューラルネットワークサイズをテストする際にどうもL1とL2のそれぞれのキャッシュサイズに大きく依存するような傾向が見えました。断定的に言うほどではないのですが,32コア64スレッドのスレッドリッパーより18コア36スレッドのSkylake-Xの方がパフォーマンスが出るとか,Skylake-XはL2キャッシュが多いのでSkylakeの後継のCoffeelakeよりもクロック比でnpsが稼げる(但し2層目のサイズ依存でその差は結構変わる)とかそういう話になります。また,選手権本番でもちいる予定にしているm5インスタンスはSkylake-SPと言われるSkylake-Xの親戚です。

 

また,レーティングサイト案件ですが対戦時一手同一時間で計測するのが歴史的に広まっています。これは私の参戦当初からあまり有効でない計測であると思っていますが,ある程度手抜きをして計測しないと計測自体が終わりません。選手権と同条件で500戦行おうとすると優勝賞金では足りないでしょう。で,F1レースに参加する予定なのに普段は国産量産車で練習をするわけです。

計測を初めて気づくのが1億ノードを超えたあたりから昨年のうちのKPPT評価関数がすごく強い。5億超えると上位クラスのNNUEでも軽く負かしてしまうくらいです。もうこれで今年も出て良いんじゃないかとかTamaさんとチャットしてたくらいです。

ところが,illqha3と言われる評価関数が同様に1億超えたあたりから他の評価関数を突き放します。正直どのパターンでもうちの勝率が3割切ってくる感じでした。

こうなると角交換より横歩の後手の方がマシとか5割未満の悲観的な比較合戦でお葬式ムードです。

加えて,この億を超える計測ですがSkylake-Xのマシンでも1戦1時間近くかかります。

本番はこの数倍ですのでまだマシとかそういうのですが,手持ちの最速マシンで一日20戦程度しかできない計測ってどう!?

 

他の低スペックマシンの計測値は信用ならんって状況です。

ちなみに昨年は低スペックマシン混在で計測してました。

 

で,5月2日にチームメイトから「強いのできたから確認して」と連絡が入ります。

あと一日,20~25戦くらいしか計測できないんですが,これどれと対戦させて様子みましょうかねww

ってことでillqha3と対戦させました。そうして持ってきたのがアレです。

 

序盤定跡や時間配分計測など微調整をこの評価関数でやってないまま投入ですので,もう出たとこ勝負もほどほどです。

それも二次予選の初戦がdlshogiとの戦いでしたが,これですよ。

  

昨年の二次予選も朝から負けてたのでそういう流れかと敗戦を覚悟してたくらいです。

二戦連続で負けたら昨年版と差し替えようかとか予選落ちもあるかなぁとつぶやきがあったのは事実です。

ですのでその後予選トップ通過であったり,決勝であれだけ戦えたのは思ってたよりよかった!!!って感想になるわけです。

「悔しい」ってのは無いわけじゃないですがねぇ。

 

で,戻りますが選手権レベルの計測です。

御依頼があれば行いますが,m5インスタンスが時間5ドル強ですので私の場合5台のクラスタを構成すると時間3000円程度,1試合1時間と見積もって500戦で150万円になります。対戦相手も同じサイズのクラスタでしたら300万円で500戦分の棋譜が作成できると思います。レーティング調査の御依頼がありましたら経費負担で遠慮なく申し出下さい。