世代ループ
ManakaZero は自己対局系列です。gen0 はランダム重みから始まり、各世代で対局生成・学習・測定を行い、設定した昇格判定を通った場合だけ次の親へ昇格します。
実装は crates/manaka-{selfplay,train,loop,usi} にあります。
1世代の流れ
- 自己対局 — 現在の親モデルで対局を生成する。
- 学習 — 最近のリプレイ窓からサンプリングし、通常は CUDA で子モデルを学習する。
- 親との昇格判定 — 子モデルと親モデルを SPRT で比較する。
- 外部基準 — 固定相手と比較し、系列全体のずれを検出する。
- 昇格 — 条件を通った場合だけ親を置き換える。
状態は runs/manaka/ 以下の台帳に保存するため、中断後も再開できます。
データ形式
- 重み:
MNW1 - 自己対局記録:
MNR1 - 局面はアーキテクチャ固有特徴量ではなく圧縮局面として保存するため、構造変更後も古い自己対局データを再利用できる。
学習は最新世代だけでなく、最近の リプレイ窓を混ぜて使います。
探索
Manaka は PUCT 探索を使います。通常対局と自己対局の探索量は別設定であり、一方から他方を推測しないでください。1 手詰めと千日手はルール側の高速処理で扱います。
現在の探索速度は ベンチマーク を参照してください。
実行
sh
cargo build --release -p manaka-train --features cuda
cargo build --release -p manaka-selfplay -p manaka-usi -p manaka-loop
build/target/release/manaka-loop probe
build/target/release/manaka-loop run
build/target/release/manaka-loop run --local
build/target/release/manaka-loop watchクラスタ向け静的バイナリ:
sh
cargo build --release --target x86_64-unknown-linux-musl \
-p manaka-selfplay -p manaka-usiwatch は 台帳・進捗ファイルを読み、世代・段階・ノード使用率・学習・対局測定の進捗を表示します。ループ自体は操作しません。
異常時の扱い
昇格失敗が続く場合、無限に再試行するのではなくアーキテクチャや学習手順を確認します。設定回数を超えて失敗した場合は停滞レポートを出して停止できます。
固定外部基準は重要です。子モデルが親には勝っても、固定相手に対して弱くなる場合があります。昇格や診断を内部対局だけに依存させません。
OpenBench連携
各世代を ManakaZero @genN として登録できます。ワーカー側は接尾辞から静的な ManakaZero コマンドを解決し、その世代の EvalFile を渡します。
SPRT・ラダー・ワーカー後処理の詳細は 棋力測定 を参照してください。