ふかうら王の製作のためにdlshogiのソースコードをくまなく読んだので、Deep Learning型の将棋についてつらつらと書いてみる。
dlshogiとは
dlshogiは先月に開催された将棋ソフトの大会「電竜戦」で優勝したGCTのエンジン部分(探索部)でもある。つまりは、dlshogiは現在、世界最強の将棋ソフトと言っても過言ではないだろう。従来の将棋ソフトとはどこが異なるのだろうか。今後、Deep Learning系の将棋ソフトの導入を検討している人向けにざっと書いていく。
※ 今回書くのは、現在のdlshogiの話である。将来的に改良される可能性は大いにあるが、2020年の電竜戦では、この仕様であったということである。
CPUを使うソフトとGPUを使うソフト、どちらがコスパがいいの?
今回、電竜戦で優勝したGCTをGeForce RTX 2080で動かすとfloodgateでR3900程度のようである。RTX 3080でもR4000程度だろう。やねうら王(+水匠評価関数)の場合、4コアの5万円ぐらいのノーパソでもR4000は間違いなくいくのでそれからすると、現時点では、50万円ぐらいまでの予算で考えるならば、やねうら王のほうが圧倒的にコスパが良い。Deep Learning系の将棋ソフトの進歩は目覚ましいが、この関係が逆転するにはあと1、2年はかかりそうだ。
Deep Learning系の将棋ソフトの特徴は?
nps(1秒間の探索局面数)が、低い。従来のソフトと比べるとあまり局面を調べられない。それなのにわりと強いのだから驚きである。
数年前のコンピュータ将棋ソフトは、1秒間に何百万局面を読むことでようやく人間(トッププロ)を超えた。最新のやねうら王は、それよりは探索効率が良いが、それにしても人間(トッププロ)と同じ強さにするためには人間と桁違いに局面を読まなければならない。(同じ強さの人間と比較すると、やねうら王が読んでいる局面数は3,4桁多いと思う)
それに対して、Deep Learning系のソフトは、局面の評価の精度が格段に良いのであまり局面数を読まなくとも強いという特徴がある。
探索局面数で言うと、dlshogiでノード数(読む局面数)に制限を課して、1手につき10局面ぐらいしか読まない状態にしてもアマ三段ぐらいあると思う。
1手につきノード数1だとしてもおそらくアマ初段ぐらいあると思う。ノード数1ということは、開始局面に対して評価関数を呼び出しただけで(人間で言うと駒を動かしてすらいない。開始局面を眺めただけ)、1手も先を読んでいない。この状態でアマ初段ぐらいあるので、人間の(プロの)局面の評価精度におおよそ匹敵するのではないかと思う。
来年以降プロの研究では、序盤の研究にはdlshogiを用いて、終盤の検討には、やねうら王を用いてのような棲み分けが発生する可能性もある。
dlshogiをCPUで動かした場合、どれくらいの強さになるの?
CPUだとGPUを使う場合の1/10すら局面を読めない。私が開発機であるMicrosoft Surface Pro 6でやってみたところ、100nps程度しか出なかった。GeForce 2080Tiで25Knps(25,000nps)程度出るらしいので、実に1/200以下である。
この100npsしか出ていない状態で、他のソフトと戦わせてみたのだが、おそらくR3000程度。R3000であれば、プロ級には違いないので、将棋ファンが対局して遊ぶには十分な強さだとは思う。
検討用途で使うのであればもう少し強くないと…と言ったところだろうか。
詰将棋が読めない
「局面の評価の精度がいい」と言うと、ひと目見ただけで何十手もの詰将棋を詰ませちゃう、みたいな想像をされるかも知れないが、Deep Learning系の将棋ソフト、詰将棋はめちゃめちゃに弱い。
詰将棋というのは、大局観や感覚だけで何とかなるものではないのだろう。詰将棋は、一定数の局面を読まなければ詰むことが証明できない。この話をしだすと長くなるので、気になる人は「詰将棋 証明木」などでググっていただきたい。
なんにせよ、Deep Learning系の将棋ソフトは、3手詰めすら読めないことがある。そこでdlshogiでは、leaf node(探索の末端の局面)で、5手で詰むかをCPU側でチェックしている。5手で詰まないことが判明してからGPU側にその局面の評価をお願いするわけだ。
まあ、ほとんどの局面は5手も王手自体が続かなかったりするので5手詰めのチェックはそこまで大きなコストではないが、最近のGPUは性能がいいので、この5手詰めを7手詰めに変更すると、GPUに評価をお願いする局面の準備が間に合わなくなる。現状、5手がギリギリのところのようだ。
探索開始局面でのdf-pn
dlshogiはそれとは別に、探索の開始の時点で、探索開始局面でdf-pnによる詰将棋ルーチンを呼び出している。これは長手数の詰将棋を解くためのものだ。とは言っても、時間の制限があるのであまり長手数のものはこれでは解けない。気休め程度である。アルゴリズムについて興味のある人は、「df-pn 詰将棋」でググっていただきたい。
このdlshogiのdf-pnの詰将棋ルーチンは、やねうら王に搭載されているdf-pnの詰将棋ルーチン(tanuki-さん作)をdlshogiの作者の山岡さんが移植したもののようだ。やねうら王のdf-pnの詰将棋ルーチン、現状、千日手の扱いにバグがあるらしいのだけど(これのせいで長手数の詰将棋が解けないことがある)、修正が難しいので放置してある。そのうち私がなおそうと思ってはいるが、dlshogiでも同じバグがある。まあ、これが問題となるような、詰将棋が実戦で出てくることはあまりないだろうから、いまのところ大した問題ではなさそうではある。
やねうら王は何故df-pnの詰将棋を呼び出さないのか?
探索開始局面でdf-pnの詰将棋ルーチンを呼び出すようにすると長手数の詰将棋が解けるようになる。しかしそのための時間はゼロではない。以前調べた時は、やねうら王の場合は、df-pnの詰将棋ルーチンに時間を使わないほうが強かった。
まあ、詰む将棋はそもそも優勢なんだろうし、優勢である以上、やねうら王の場合、そのまま普通に指していれば勝てるだろうから、やねうら王では、探索開始局面での長手数の詰将棋が解けることにそれほどの価値はないのだろう。
序盤が強いの?終盤が強いの?
というわけで、Deep Learning系のソフト、終盤はむしろ従来の将棋ソフトより弱いのである。それに比べて、序盤の感覚は大変優れている。
あるハードウェアで実行しているdlshogiとやねうら王とが、互角の強さである時、大体の将棋において、dlshogiは序盤で優位に立ち、時に、中盤で逆転されたり、終盤で頓死したりするわけである。
20年ほど昔、将棋ソフトは、「序盤がアマ初段ぐらいで、終盤は県大会出場者にバトンタッチしている」みたいに評されることが多かった。将棋ソフトは全般的に強くなったけども、いまでも終盤で強い人にバトンタッチしている感は否めない。
それがdlshogiは、真逆で、「序盤はプロレベルで、終盤でアマ初段にバトンタッチしている」みたいな弱い人へのバトンタッチをしているような印象を受ける。それは人間の将棋にも似ていて、人間らしい弱さ、人間らしい強さと言えるかも知れない。
メモリの消費量が尋常ではない
従来の将棋ソフト、調べた局面は置換表(transposition tableと呼ばれる表)に保存していた。その局面の最善手とその時の探索の評価値(value)、評価関数を呼び出した時の値(eval)などぐらいで、1局面について、それほど大きなデータは保存していなかった(やねうら王の場合、1局面に対して10 bytesしかない)し、古くなった局面の情報には、上書きして使っていた。だから、置換表は、有限サイズであり、探索中に動的に増えたりはしなかった。USI_Hashで指定した分以上に消費することはなかった。
ところが、dlshogiでは、一度調べた局面の情報を一切捨てない。捨てないと言うか捨てられないと言うべきだろうか。dlshogiは、UCTアルゴリズムを用いているので、可能ならばいつまでも残っていて欲しいのである。UCTについては、説明が面倒なので、「UCT アルゴリズム」だとか「多腕バンディット問題」でググっていただきたい。
dlshogiやAobaZeroでは1局面につき2KB程度必要となる。1局面の平均合法手は100手であり、1局面のそれぞれの合法手に対して、その指し手へ遷移する確率などを保持するのに20[bytes]ほど要するので、100手×20[bytes] = 2KBという計算だ。
まあ、そんなわけで、メモリ使用量は探索中にすごい速度でどんどん増えていく。
どれくらいメモリを消費するの?
1局面2KBなので、1M(100万)局面を調べただけで2GB要する。
今回、GCTはAWSのGPU特化インスタンス(p4d.24xlarge)を借りていた。A100というGPUが8基搭載されているスゴイやつだ。このインスタンスで700knps(70万局面/秒)ほど出ていたそうである。GPUは1/3ぐらいしか使っていなかった。(CPU側でデータを用意するのが間に合っていなかった) だから、GPUに渡すデータを用意するのが間に合うなら2Mnps(200万局面/秒)ぐらい出るはずだ。つまり1秒間に4GBずつメモリを消費していく。
普通、いまの家庭用PCには16GB程度しか載ってないと思うけども、将棋ソフトが4秒思考しただけでそれが枯渇するわけだ。恐ろしや。
まあ、今回のGCTが借りたAWSのインスタンス(p4d.24xlarge)にはメモリが1152GBも載っているので大丈夫だとは思うが、今後GPUの性能が上がってくるとメモリが足りなくて局面を読めなくなる可能性もある。
dlshogi、今後、メモリ使用量を減らすような改良がなされるかも知れないが、そうするとnpsが低下する可能性が高く、その分だけ弱くなる。
我々はdlshogiのメモリ使用量をいまの1/10にする代わりに20%の速度ダウン(-R50ぐらい?)を許容できるのであろうか…。😅
GCTのダウンロードURL
今回、電竜戦で優勝したGCTは以下のところからダウンロードできる。本記事を見て興味を持った人は是非試してみてほしい。(セットアップはわりと難しいかも…)
世界将棋AI 電竜戦バージョン(「GCT電竜」同梱)
https://github.com/TadaoYamaoka/DeepLearningShogi/releases/tag/denryu2020
// CPUで動かすならばDNN_Batch_Sizeは8ぐらいが最適値
詰将棋におけるCPUとGPUの連携、気持ちのいい話でした。
現段階で将棋星人が攻めてきたら、序盤のdlshogiから終盤のやねうら王に切り替えるようなキメラAIを用意しなければなりませんかね? その切り替えの判断を人間がやるとしたらおもしろいですが(笑)
「やねうら王にとっては同じCPUで df-pn を呼び出すのはコストが割に合わないけど、dlshogi はGPUと並行して処理できるので問題にはならない」という理解で合っていますか?
実戦ではなく創作の詰将棋における、作為を嗅ぎつける感覚のようなものは、逆に Deep Learning の領域であるような気もします。
意義のある研究かどうかはわかりませんが、「この駒が意味を持つということは、相手玉をここまで呼んでからの逆王手の筋が出てくるはずで・・・」といった人間の思考。
> dlshogi はGPUと並行して処理できるので問題にはならない」という理解で合っていますか?
5手詰め呼び出したりするので、CPU、わりとカツカツなんですけどね。でもまあ、終盤弱いので、呼び出したほうが勝率上がるのでしょうね…。うーん、ほんまかいなという感じですけど。
// CPUはあまり空いてるわけではないですが、CPU側のメモリ帯域は従来の将棋ソフトよりは空いてるので、その差かもしれないです。従来の将棋ソフト、置換表やら、評価関数やらでメモリアクセスわりと頻繁にありますが、それがないので…。
メモリアクセスの話になると、AppleのM1系チップの設計が今後力を発揮しそうな気も・・・
そのころにGPUではなくCPU側の性能がどれくらい重要になってるか、わかんないですね。詰将棋ルーチンのためにCPUもハイスペックでないと駄目なのか、そうでもないのか…。
ストックフィッシュが云々とかディープラーニングが云々とかにこだわらず、CPUとかGPUとか、持ってる演算するものすべてを最大限に使い切るように割り振るハブのようなものが重要になってくるってことですか?
ハブと羽生を掛けてあるのか?50点ぐらいじゃな…。←採点マシーン
ちなみにCPUとGPUとでは特性が全く異なるのでこれらを対等に扱うと潜在能力を100%生かしきれないから、対等に扱うような羽生、もといハブはよろしくないと思うよ。
いや、そこで対等に扱わずに最大限に使い切るバランスの割り振りをするためのハイブリッドのモジュールみたいなパーツですよw
そんなものは、無い!
=== 完 ===
つまり藤井聡太二冠のつよつよPCにRTX3090か6900XTが追加される…?
追加されそうですねw
最近リリースされた「ふかうら王」はCPUだけでも動きますか?
動きますよ。GPUの1/100ぐらいしかnpsでませんけど…。
「ふかうら王」は例えばIntel Coreプロセッサーの
GPU非搭載モデルのCore i7-10700Fだけでも
動くのですか? 動くのなら「ふかうら王」は
GPUモード(opcl)版ではなくCPUモード版ですか?
勘違いしていました
Core i7-10700FだけではPCは起動しません
でした もしGPUモード(opcl)版だとしたら
遅すぎませんか?
OpenCLは使ってないです。DirectMLを使っています。CPUだけでも起動します。
『ASCII.jp:性能/消費電力比が優秀なGoogle TPU AIプロセッサーの昨今』を読むとTPUってものがレンタルできるみたいですが、次のコンピュータ将棋選手権でTPUを使う人は出てきますか?
1個のプロセッサ当たりの性能で言うと、A100には劣るでしょうから、大会で使っても勝てないでしょうね。学習や棋譜生成には使えるでしょうけども。
lc0(リーラチェスゼロ)のGPUモード版には
CUDA CUDNN DirectX 12 OpenCL の4種類が
公開されていますが「ふかうら王」DirectML版は
DirectX 12 と同類ですか? そしてDirectML版は
これから どれ位CUDA (TensorRT必須版)に棋力を
接近させることができますか?
> DirectML版はDirectX 12 と同類
DirectMLはbackendにDirectX 12が使われているようです。
> そしてDirectML版はこれから どれ位CUDA (TensorRT必須版)に
それはDirectML側の問題なので私の知るところではないです。
お試し学習様子見のために『竹部さゆりさんvsドゥーブルフロマージュ』みたいなのりで、やねさんが独自ミニゲーム作ってDeep Learning試行錯誤してほしいけど、ダメでしょうか
考えときますw
ふかうら王のエンジン設定にbookのon/offの項目が
見当たりません dlshogi(GCT)OnnxRuntime版から
コピペしたbookを使用出来ますか?
それとNodesLimit等の項目がありますが有効ですか?
ふかうら王の定跡関連はこれから実装するところです。NodesLimitは有効のはず。
PC将棋スレよりコピペします
no book 161×14 131×3 141×2 127×1
book使用 133×13 203×3 145×1 155×1 167×1 173×1
上記はdlshogi(GCT)OnnxRuntime版同士の対戦の手数内訳です 各20戦 GUIは対戦結果一覧が表示
される将棋所を使用 book使用は双方付属の同じbookを使用 全て先手勝利 手数が同じ対局は
内容も全く同じ nnue等の他の将棋エンジンは勿論DL版囲碁エンジンでも見たことのない同一手順が
大半を占める DL版将棋エンジンは乱数を使用しないのか それとも使用できないのか
以前行われていた将棋エンジン事前貸出のプロ棋士との対戦が存在していたらプロ棋士が先手番に
なれば勝つ可能性が高い
それGPUなしの環境でやってるんでしょうから、少ないスレッド数で、しかも同じタイミングでevalの結果が返ってくるなら再現性がかなり高くて当然かなと…。(多スレッドでevalにGPU使うなら、そこである程度バラけます)
PC将棋スレよりコピペします
A氏
dlshogiクローンの二番絞りがfloodgateで定跡搭載jkに
同一手順でやられまくってたな