棋力測定
速度や検証損失だけでは棋力は分かりません。openbench はローカル・クラスタのワーカーで対局を行い、SPRT(逐次確率比検定)で差を判定します。基盤本体は別リポジトリ rshogi/openbench にあります。
エンジンとワーカーの契約
usi-arena は stderr に機械可読な 1 行を出します。
[arena] metric games=4 wins=3 losses=1 draws=0 plies_mean=103.8 arena_score=0.7500 …ワーカーは wins、losses、draws を読みます。score だけでは 3 結果の統計に必要な情報が足りません。エンジンのコマンド、配置先、クラスタ割り当ては tideborn/tools/openbench/ 以下で管理します。
バイナリを更新したら、同時に remote.toml の配置先も更新してください。 古いバイナリを参照すると、全対局が即座に失敗しやすくなります。
基準ラダー
内部対局の Elo はプロジェクト全体と一緒にずれることがあります。そのため、外部基準として YaneuraOu の固定評価器を複数の探索ノード数で登録します。例: YaneuraOu KP256 @10k。
隣接する段は、統計を取りやすい程度に近づけます。climb calibrate はノード数の幾何平均を使って不足段を追加します。
climb calibrate remote "YaneuraOu KP256 @"
climb calibrate remote "YaneuraOu KP256 @" --dry-run
climb calibrate remote "YaneuraOu KP256 @" --climb 100 --floor 100000--climb ELO は、基準側の探索を 2 倍にしても指定 Elo 差を超えなくなるまで上へ延長します。無人実行では有限の --ceiling を指定してください。
挑戦者を測る
弱い段から順に、各段で 1 回の SPRT を行います。
climb start local "DLManaka v0 @32" --min-nodes 1000 --games-per-job 32
climb start remote "YaneuraOu Material Lv1 @1m" --min-nodes 1000accepted— 次の段へ進む。rejected— その段を超えられなかったので終了。inconclusive— この用途では終了。
弱い段から始めるのは意図的です。強すぎる相手に 500–0 で負けても「どこか下」としか分かりません。既に不要と分かっている段は --min-nodes で飛ばします。
| フラグ | 既定値 | 意味 |
|---|---|---|
--min-nodes | 0 | 最初に試す段 |
--elo0 / --elo1 | 0 / 10 | SPRT の仮説 |
--max-games | 1024 | 1 段あたりの上限対局数 |
--games-per-job | 16 | 1 ワーカージョブあたりのペア数 |
監視と停止
climb watch
climb list
climb stop --with-reap
climb reapダッシュボードにはノード容量、実行中テスト、ローカルの climb 実行が表示されます。▒ は対局中で未報告という意味で、停止ではありません。
テスト停止は新規ジョブ配布を止めるだけで、既に対局中のコンテナは止まりません。--with-reap を使うか、その後に climb reap を実行してください。すべて明示的に止める場合:
uv run python tideborn/tools/openbench/stop.py \
--config tideborn/tools/openbench/config.tomlジョブ規模
現在の想定値:
- サーバー → ワーカー: 128 ペア/ジョブ、同時実行は最大 256 ペア。
- ワーカー → ノード: 32 ペア単位、1 ノード最大 128 ペア。
1 ペアはエンジンスレッドを 2 本使います。大きくしすぎてもローカル待ちが増えるだけで、ジョブ全対局が終わるまで報告できないため結果が遅れます。
運用上の制約
- ローカル用 climb とクラスタ用 climb を同時に動かさない。 サーバーのジョブキューが共有されており、現状は他側のジョブを取得して捨てる可能性があります。
- 登録エンジン名は
config.tomlの[engines]に完全一致するか、@nodesを除いた名前で解決できる必要があります。 - 手書き API 呼び出しを作る前に
/openapi.jsonを取り直す。/api接頭辞が必要です。 - 内部直接対局だけでなく、外部基準と検証指標を優先する。信頼区間が 0 をまたぐ小さな Elo 差は根拠にしない。