クラスタ並列始動
ここんとこずっと、ひたすらクラスタ並列の開発をしてきましたが、まあいろいろ問題は抱えながらも何とかかんとか動きだしています。
クラスタ並列と言う以上、1ノード(マシン)上のスレッド並列より強くならないとやった意味がないわけなんですが、実はこの「複数ノードを1ノードよりも強くする」という一見当たり前のことがなかなか達成できずにだいぶ長いこと苦しんでました。つい最近ようやく1ノードに勝てるようになったところ。去年の大会版も、いやー実はクラスタにしたことによってほとんど強くなってなかったんですよね。去年の好成績の原動力は単体ボナッセの改良の方が大きかったです。
先週末の自己対戦で、クラスタ並列の4ノード版が1ノードのbonasseに 65-35 で勝ち越し。いつものCGOSテーブルによるとレーティングで+105くらいでしょうか。まあ同じ系列のソフトどうしの対戦だと、わずかなマシン能力の差が大きく勝率に出ることが多いので、実際のR向上は105まではいかないかもしれませんが。
実験条件は、
クラスタ側)マスター:PhenomII X4マシン上の1コア
スレーブ:980Xマシン上の4コア使用。各コアが別プロセスで
1ノードとして動く。思考エンジンはbonasse v1.2。
相手)bonasse v1.2そのもの。980X上の1コア
各プロセスはCPU固定してます(pthread_setaffinity_np()使用)。同じコアの裏表のスレッドを使わないように。マスターの計算量はスレーブに比べればわずかで、クラスタ側(のスレーブ)の1個と相手側は、CPU的には完全に同じです。対戦は1手4秒。時間が短すぎると並列の効果が出づらいので、時間との兼ね合いで対局数稼げてかつ並列効果もそこそこ出るということでこうしてます。時間もっと長くするとどうなるかは興味あるところですが、まだやってません。
なお今年の大会ではスレーブの思考エンジンは替える予定ですが、今回は比較の目的で条件を合わせるためスレーブにはbonasseを使用してます。クラスタ並列アルゴリズムのキモはマスター側で、スレーブは割と簡単に取替え可能です。
今のボンクラーズではスレーブどうしの通信はまったくなく(マスター/スレーブ間のみ)、またスレーブ間のデータ共有もないので、同じマシン上に複数スレーブがあることによるメリットはありません。マスター/スレーブ間通信は100Mbイーサを介したMPI。つまり、純然たる「クラスタ並列」構成です。
スレッド並列で1コア->4コアにすると勝率は65%よりははるかによくなるので、この数字は「物足りないのでは?」と思われるかもしれません。いやそんなことないですよ、という言い訳として、他のソフトでのクラスタ並列実績とちょっと比較してみましょう。
1)GPS将棋
クラスタといってぱっと思い浮かぶのは去年の大会の300コアGPSですが、実はクラスタによってどれだけ強くなったのか、定量的な数字を知らないんですよね。どっかにあるんでしょうか?ただ、激指や習甦、ボンクラーズ等に比べて圧倒的に強いという感じではなかったし、またfloodgateのレーティングのそれらしい名前を見ても、おそらくハイエンドの8コアマシン上の(スレッド並列のみの)GPSと、300コアのクラスタGPSを比べたとき、まったくの推測ですがR100も上がっていないのではないかという気もするんですが、どうなんでしょう?(どなたか数字持ってましたら指摘歓迎)
2)あから
あからと次の文殊は合議であっていわゆるクラスタ並列とはちょっと違いますが、まあ他にクラスタ並列のソフトがほとんどないこともあり、クラスタマシンの利用効率という意味で比較してみます。あからの情報もあまり持ってないんですが、ここ に「勝率 あから73% ボナ62%」というのがあります。この正確な意味もわからないですが、仮にある特定の相手に対する勝率がこうだったとすると、これまたCGOSテーブルによると62%はR+85、73%はR+170くらい。ということは、あからはボナ単体に比べてR+85くらい、ということになりそうです。コア数もいろいろ複雑のようですが、まあ4つのソフトの合議なので単純に4ノードいる、と解釈しておきましょう。つまり「4ノードでR+85」と思っておけばたぶん当たらずといえども遠からずかと思います。
3)文殊
ここ に情報がありますが、「6ノードx4コアの文殊が、4コアのボナンザに勝率56%」です。(リンク先には「6割程度」となってますが、たしかどっかで56%と聞いた覚えがあります。)これは「6ノードでR+45」ですね。
ちなみに合議について独断的な意見を述べておくと、更にノード数を増やしたときを考えると、合議では4ソフトの合議を6つや8つに増やしてもそう強くなるとは思えないですが、クラスタ並列の方は順調に伸びていくでしょう。まあどこかで飽和はするでしょうが、少なくとも10ノードくらいまでは台数につれて強くなっていくと期待されます。ですのでノード数が増えていくとクラスタ並列と合議の差は広がっていくものと思われます。
4)Rybka
チェスの方ですが、09年のComputer Olympiardの記事 で「52コア構成のクラスタで、4コアRybkaに対してR+213」とあります。ただこのクラスタには8コアマシンも含まれており、4->8コアにするだけでR50-70程度は上がるはずですので、「8コア->52コア(6.5倍)でR+150くらい」ではないかと思います。
私の知る範囲で、トップレベルの将棋 or チェスソフトがクラスタ並列で強くなった例としてはこのくらいしかありません。論文等ではもっと景気のいい数字も報告されてはいますが、それらは大抵比較対象が元々弱いソフトです。強いソフトと比較しないと意味ないんですよ。
強いソフト(の、クラスタ並列でない版)は必ず、「前の方の探索で得られた知見を活用して、後の方での探索の効率を向上させる」ということをしています。ハッシュ然りヒストリ然りキラー然り。以前の探索結果をそのまま利用することもあるし、手の順序づけの参考として使う、探索深さの制御に使う、といった用途もあります。並列処理というのはその「前の方」と「後の方」を同時並行に行うため、前の結果を後で利用する、ということが難しい。それでもスレッド並列ならば、スレッド間ではメモリが共有できますので、あるコアでの結果がほぼすぐ後で別のコアでも参照できるようになります(たとえばハッシュ共有など)。しかしクラスタ間ではこれができない。この点が、クラスタ並列を難しくしている最大の理由です。
裏返して言うと、比較元のソフトがそういう(前の結果を後で使う)工夫をあまりしていない、単純なαβ探索しかしていないようなものなら、並列化によって効果を出すのはおそらく簡単でしょう。だから、元々強いソフトを並列化で更に強くする、でないと意味ないですよ、ということです。
…というわけで、現状の「4ノードでR+105」というのはまあそこそこいい数字なんじゃないかな、と思っております。もちろんまだ向上の余地はあると思うので、これからもいろいろと続けていきますけれども。
* * *
話は変わりますが4/9のオープン戦、当初参加予定になかったんですが、さる方面からお誘いをつぶやかれてまして、現状出る方向で考えております。他の開発者の皆さん、もし気が向きましたら4/9ネットでお目にかかりませう。
「将棋プロセサ」カテゴリの記事
- ボンクラーズの開発過程について書いた記事が掲載されました(2019.03.07)
- 「浅い評価値を深い評価値に近づける学習法」誕生の背景(2016.10.06)
- 塚田九段の対ボンクラーズ練習棋譜を公開します(2013.09.07)
- Puella α ソース公開(2013.08.28)
- クラスタ並列の解説記事を公開します(2013.08.22)
コメント