top of page

lazy smpによるレート向上について(2)

以前のブログの記事でlazy smpにより実際対応しているソフトはCPUコア数以上のスレッド数に設定すると強くなるため、各ソフトについて4スレと8スレの両方でレーティングを計測し始めたことについて書きました。現在の段階でlazy smp対応ソフトについて各ソフトのレート差を取ると、多少の誤差はあれ、50~100程度のレート向上効果が見られます。今のところこれはそれぞれのソフトの8スレ版を4スレ版と独立に対局させることにより得られてきました。

lazy smpによりどの程度レートが上がるのかはNPSの向上率からほぼ見積もれるのではないかと考え始めました。以前、やねうら王開発者の磯崎氏がブログで<Bonanzaの場合思考時間が倍になるとレートが150程度上がる>と書かれていましたが、lazy smpによりNPSが1.5倍程度上がったとすると、それは思考時間が1.5倍になることを意味しているはずで、その分だけレートが上がるのではないかと思います。磯崎氏が書かれていることをNPS増加と結び付けて数式にすると

(レートの変分)=500*Log_10(NPS 増加率)

という公式になります。4割から6割NPSが向上する場合レートの向上はそれぞれ、

500*Log(1.4)=73,

500*Log(1.6)=102

となりますので、ちょっと多めではありますが今の各ソフトのレートの上昇をほぼ表しているように思われます。私の実感としては上位ソフトの場合は星の潰し合いによるレーティングの圧縮効果があるので、比例係数は400程度まで落ちていると考えるとおおよそ今出ている数字を説明しているように思われます。もしこの見積もりが成立するのであれば、今後8スレを別々に計算する必要はなくNPSの向上率を計測すればレーティング向上の見積もりは対局を行わせる必要もなく計算で示せるものではないでしょうか。

この考え方は、私の今直面している別の問題、つまりBonanza6より低いレートのソフトは数が比較的少なくレーティングもとびとびで対局させると大差になることが多く、統計誤差が大きくなって正確なレーティングの比較ができていないことに、について解決を与えるような気がしています。つまり、上位のソフトを短時間の考慮時間で投入すれば、あたかもそのスポットに新しいソフトがあるように見えるのではないでしょうか。

問題は、NPSの増加をどのようにして見積もることができるのか、という問題です。以前のブログの記事で1.4~1.6倍と書いたのはあくまで対局中に表示されるNPSを目測で計算したもので正確に計算する方法を私はよく知りません。チェスのサイトではレートを測るときに各PCに対して基準となるソフトのNPSを計算し、同じ対局時間になるように持ち時間の調整をするそうなのですが、NPSを計測するソフトがおそらく存在するのではないかと思います。どなたか、そのようなソフトを作成してもらえないかと考える次第です。(ちなみに私はほとんどプログラムできません)

 

追記 16/06/19 以上のような記事を書いたところ、Usapyon2開発者の池泰弘氏より早速コメントをいただきました。このブログの設定でコメント欄がtwitterからくると読めるし、単にこのサイトに来られると読めないという現象が起こっているようなので簡単にまとめると、

(1)まず、Usapyon2におけるNPSの調べ方はコマンドプロンプト上で

usapyon2.exe bench 256 1 9

などとすればよいということ。ここで256は使用するメモリー(MB), 1はスレッド数で私の場合は1~8を選択する、最後に9というのは探索深さを表していて9あたりが最適であるということでした。

ちなみに私のPCではUsapyon2に対してコマンドを実行すると次のようになりました。(ちなみにUsapyon2AVX2でもほとんど値は同じでした)

1 Nodes/second : 390367 2 Nodes/second : 536199 3 Nodes/second : 847608 4 Nodes/second : 1184909 5 Nodes/second : 1343231 6 Nodes/second : 1357424 7 Nodes/second : 1593132 8 Nodes/second : 1874397

4コア対8コアで約60%増になっていてそれは私の目測とほぼ一致しています。これらの値はコマンドを入力した時点で多少上下していて、この点について質問したところ「厳密に言うと、乱数は入っていないので、スレッド数1ならほぼ一定の値が出ると思うのですが、スレッドを2つ以上にした場合、投機的な探索がうまく行ったかどうか、別スレッドでの探索が完了したタイミングがメインスレッドより前だったか後だったか等で変わり得ます。」という回答をしていただきました。

(2)次にこのブログで主張している「レートを上げているのは思考時間であって、lazy smpは並行計算の効率化でnpsを上げ、結果的に思考時間を実質増やしているためレートが上げているのだ」という点については以下のような大変興味参考になる返答をいただきました。たいへんわかりやすいサマリーで、どこかでもっと長い解説を書かれることを期待しております。

「lazy SMPは並列化をある意味かなりサボった方法で、私も採用してはいるのですが、単純に思考時間が実質的に増加する…とは、明確には言えない感じです。この辺、実装による差異が生じやすいと思います。私の場合はStockFish7を真似て実装しているので、オリジナルの方法に近い&将棋ではなく、チェスに特化している可能性もある、という状況です。npsは(ロックなどをほとんどしない為)普通の並列化より高くなる傾向が強いのですが、では、それで普通の並列化より強くなるかと言うとこれも結構実装に依存してしまいます。普通の並列化だと、おそらく、4コアなら8スレッドにしてもほとんど差異は出ないかと思いますが、lazy SMPだと話が変わってきます。lazy SMPは、先に投機的に深い探索を行い、置換表を埋めておくことで、メインスレッドの探索が早く終わるようになるという効果があります。また、lazy SMPではロックがほとんどない事、スレッド間で同期を取る必要がない事等、npsを伸ばすことにかなり特化していることになります。ただ、先に述べたように「投機的に実行」しているため、無駄な探索も起き得ます。そのため、単純に『npsが増えた』≒『実質的な持ち時間が増えた』と明確には言えない、というのが私の意見です。ただし、近似としては、npsの増加≒『実質的な持ち時間が増えた』と見做しても問題はほぼないだろうとは思います。

長くなってしまいましたが以上です。」

この件について「書かれていることを私なりに解釈すると、投機的に先読みをしていくので当たると正当なNPSになるが外れると低くなってしまう、ということでしょうか。」という質問を発したところ

「npsとしては、うまく行った場合は(ある意味)正当なnps、うまく行かなかった場合には『無駄に大きい』npsが出るという感じになる…ハズです。」

という回答をされました。結局、lazy smpでNPSが伸びてもそれがそのまま勝率に結びつくかはプログラマーの腕による部分がある、ということでしょうか。lazy smpの場合、NPSのみを指標にできるかどうか、もう少し数値的なことも含めて調べてみる価値がありそうです。

特集記事
最新記事
アーカイブ
タグから検索
まだタグはありません。
ソーシャルメディア
  • Facebook Basic Square
  • Twitter Basic Square
  • Google+ Basic Square
bottom of page