Skip to content

世代ループ

ManakaZero は自己対局系列です。gen0 はランダム重みから始まり、各世代で対局生成・学習・測定を行い、設定した昇格判定を通った場合だけ次の親へ昇格します。

実装は crates/manaka-{selfplay,train,loop,usi} にあります。

1世代の流れ

  1. 自己対局 — 現在の親モデルで対局を生成する。
  2. 学習 — 最近のリプレイ窓からサンプリングし、通常は CUDA で子モデルを学習する。
  3. 親との昇格判定 — 子モデルと親モデルを SPRT で比較する。
  4. 外部基準 — 固定相手と比較し、系列全体のずれを検出する。
  5. 昇格 — 条件を通った場合だけ親を置き換える。

状態は 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-usi

watch は 台帳・進捗ファイルを読み、世代・段階・ノード使用率・学習・対局測定の進捗を表示します。ループ自体は操作しません。

異常時の扱い

昇格失敗が続く場合、無限に再試行するのではなくアーキテクチャや学習手順を確認します。設定回数を超えて失敗した場合は停滞レポートを出して停止できます。

固定外部基準は重要です。子モデルが親には勝っても、固定相手に対して弱くなる場合があります。昇格や診断を内部対局だけに依存させません。

OpenBench連携

各世代を ManakaZero @genN として登録できます。ワーカー側は接尾辞から静的な ManakaZero コマンドを解決し、その世代の EvalFile を渡します。

SPRT・ラダー・ワーカー後処理の詳細は 棋力測定 を参照してください。