電竜戦振り返り(1日目)
2020年11月21日〜22日にかけて世界将棋AI電竜戦が行われています。将棋電王トーナメント以来の冬の陣ということで私も「deqshi」、「Qhapaq overfit adventure」として参加をしています。本稿ではソフト開発の裏話を紹介したいと思います。
なお、1日目予選を経て、deqshiは15位、qhapaqは8位となり、それぞれ決勝戦はbリーグ、aリーグで戦うこととなります。先日の対局を見ていただいた方、応援してくれた方に改めてお礼申し上げます。
【deqshiの開発でひたすらスタックする】
deqshiのコンセプトはdlshogiとやねうら王を利用して、その双方より強いエンジンを作ることです。ソフトの合議自体はこれまでも多く研究されていますが、それらの研究では合議に使うソフトの相対的な強さは使うハードによらずほぼ同じ、すなわち、安価な家庭用PCで検証した結果を、本番系のクラスタにも使いまわすことが出来ました。
ところが、dlshogiとやねうら王は用いるハードが異なる(GPU or CPU)ため、どちらが強いかは個々人が用意できる環境に大きく依存します。私のゲームノートPCはGPUが貧弱であるため、dlshogiよりもやねうら王のほうが強いですが、本番環境ではGPU側はV100を8台使うのに対し、CPU側は20スレッドであり、この環境なら恐らく互角〜dlshogiやや有利程度であると思われます。
そこで今回のクラスタではdlshogiかやねうら王の強い方を主軸にして、もう片方のエンジンにはそれをサポートする情報を与えるという設計にし、pr文章に記載したようなペナルティつき楽観合議を用いることにしました。これなら計算環境が変わってもパラメタを調整するだけで同じクラスタを使いまわすことが出来ます。本大会についてはこの計算条件ならdlshogiのほうが恐らく強いと思ったのと、折角だから深層学習を前に押し出そうということで、dlshogiを主軸に添え、やねうら王に適宜修正させる戦略としました。
また、過去の対局でdlshogiは序盤がやねうら王よりも強い一方で、終盤に頓死などをして逆転負けを喫することが多かったので、ある程度評価値が有利になったら、やねうら王に代打をさせるルーチンも追加しました。dlshogiによる序盤のお膳立てがあればローカルの2スレのやねうら王でも4スレ、8スレのやねうら王倒せていた(テスト対局ではほぼ逆転負けされなかった)し、dlshogiに対しても遅れを取ることはなかった(リレー形式側の勝率は55%ぐらい)のですが本番では......
deqshiの開発はdlshogiの山岡さんと共同で行いました。山岡さんのブログでも大会前日に夜遅くまでデバッグしていたと言及されていますが、クラスタのバグは勿論、細やかな開発環境の違いにも右往左往(例えば、私は対局を将棋所でしているのに対し、山岡さんは自作スクリプトでやってるとか)しており、本当に生きた心地がしない開発でした。
でも楽しかったです。デスマに付き合ってくれた山岡さんには改めてお礼申し上げます。
【突貫でqhapaqを作る】
qhapaqのコンセプトは飛車を振るになりました。正直deqshiの開発のデスマ化により凝ったコンセプトを用意できなかった面も大きいです。評価関数自体は水匠に対して振り飛車で勝率45%、各種互角局面で55%程度勝てるものが用意できていたのですが、deqshiのデスマでクラスタなどを用意する余裕がなく、チームメンバのマシンを借りることとなり、多分勝てんやろと思ったため、振り飛車を応援することにしました(takeshi賞もあるし)
決勝リーグで対策をされる可能性もあるので、細かい仕様はまだ伏せておきます。
【連続対局をしくじる】
当日はどうしても外せない用事が昼にはいっていたため、qhapaqを連続対局設定にしていましたが、見事に失敗して2試合ほど不戦敗になってしまいました。対戦相手の方々にお詫びすると同時に、お力添えいただいた方々にお礼申し上げます。
deqshiは山岡さんに操縦してもらっていたため無事でした。クラスタがクラッシュしないかヒヤヒヤしていましたが、連続対局含めて機能していたようです。
【deqshi vs みずうら王】
今回のクラスタの調整では、ほぼすべての局面でdlshogiの指し手が採択されました。これ自体は想定の範囲内の挙動でした。deqshi内のやねうら王は計算力、定跡の品質差が著しく、やねうらミラーとして勝つのは絶望的に見えたし、dlshogiは練習試合で後手番から中盤にまくり返すことに成功していたからです。
しかし、本番のみずうら王はやね師匠の定跡も加わってか大変強く、チャンスらしいチャンスがないまま負けてしまいました。Grampus戦についても同様です。
本当はdlshogiがやねうら王に勝ちやすい定跡を整備したり、もう少し序盤にやねうら王の意見を取り入れたかったのですが、そこまで用意する余裕がありませんでした。
【振り飛車qhapaq強い】
一方のqhapaqは対局失敗以外は絶好調でした。チームメンバの計算機と雑に流した計算機が滅茶苦茶強かったのです。
本日は2つのEPYC 7452で戦います。スリッパ?知りませんな。90万したらしいです。提供は @toku51n
— Yuki (@yuk__to) 2020年11月20日
スリッパ以上にご家庭向きではない計算機が投入されており(将棋ソフトへの適性という意味では恐らくスリッパに劣るのだが)、無事に動いた試合はまさかの全勝でした。
【同門対決】
deqshiもqhapaqも2敗で迎えた9試合目はまさかのdeqshi vs qhapaqの同門対決。予選突破のボーダーラインは恐らく8-2であったため、負けた方は予選敗退が決定となります。双方にとっての天王山、その結果がこちらとなります。
qhapaqの逆転勝ち。とはいえ、試合としては完全にdeqshiのペースでした。図の88銀に対して同玉が悪手で、評価値が1000程度ひっくり返ってしまったのですが、同玉はqhapaqの読み筋でもありました。すなわち
qhapaq「同玉されても負けただと思うがヤケクソじゃー!」
qhapaq「あれ、よく見たら勝ちだった」
ということです。最後は完全に振り飛車の神が微笑んだ形になりました。この他にもnozomi戦やAmaetadine戦も相当危険な橋を渡っていたと思います。が、最終的には不戦敗以外全勝だったので、なんだかんだで振り飛車強いのかもしれません。
【大会のお礼と感想】
まずは大会を企画してくださった皆様、視聴してくださった皆様、寄付やシステム開発で大会を支えてくださった皆様にお礼申し上げます。また、連続対局への失敗やマッチメイクシステムについて色々文句を言ったことをお詫び申し上げます。
参加者として感想を述べると、1人で2チーム以上参加できるルールはとても快適でした。これのお陰でdlshogiとの共同開発とqhapaqの開発を両立することが出来たので、非情に助かりました(1人1チームと言われたら多分deqshi単体になった....かな)。
個人的には持ち時間のルールも良かったと思います。適度にドキドキできる一方で、割と余裕を持って試合回数をこなせるので見ていて楽しかったです。
マッチメイクの方法についてはwcscの手法によせたほうが良いと思います。大会の目的が強さの格付けであるとするのであれば、今回のマッチメイクは残念ながら、明確に失敗していたと思います。例えば、上位陣が直接対決をせず、きふわらべクローンと戦い続けた結果、勝てども勝てども勝ち星の差が埋まらないという事態はwcsc型のマッチングでは起こらない現象です。
もっとも、電竜戦は予行練習も数行っていたし、内部でテスト計算もするなど事前検査はかなり真剣にやっており、本番にガチ参加者(ときふわらべクローン)が大量参加したという超想定外の挙動に対するバグみたいなものであったと考えています。運営の経営手腕の問題ではないと思うし、考えようによっては誰が勝つかわからないドキドキ感が割り増したと言えなくもありません。
それでは本日もよろしくお願いします。