Skip to content

推論 ​

DLManaka の推論は、局面をネットワークへ入力し、方策と価値を得る処理です。USI エンジン dl-manaka-usi の go は Gumbel AlphaZero MCTS を実行し、その中で推論を繰り返します。PolicyOnly=true では探索を省略し、1 回の評価で最も高い合法手を返します。

学習チェックポイントを ONNX へ書き出し、Rust 側で読み込みます。

sh
uv sync --extra cu129
uv run python -m tideborn.tools.export_onnx \
    --checkpoint runs/ckpt/rtx4070ti/step-000005000.pt \
    --out runs/export/rtx4070ti.onnx
cargo build --release -p dl-manaka-usi
./build/target/release/dl-manaka-usi --model runs/export/rtx4070ti.onnx

モデルは環境変数 DLMANAKA_MODEL でも指定できます。DLMANAKA_DEVICE=cpu|cuda で実行デバイスを固定できます。既定は CUDA が使えれば CUDA、使えなければ CPU です。

推論は Rust 側に置きます。 局面表現・合法手生成・エンコードが既に Rust にあるため、推論だけ Python に戻すと盤面実装が二重になります。重みは ONNX で渡し、ort(ONNX Runtime)で読みます。

ort には CoreML EP もあるため、Apple silicon へ移る場合も同じ ONNX 経路を使えます。

ONNX の検証 ​

書き出した ONNX は必ず元の PyTorch と照合します。export_onnx.py は同じ入力を両方へ通し、数値差だけでなく argmax が一致することも確認します。失敗した場合は不完全な .onnx を削除します。

方策ラベルから着手を直接逆算はしません。各合法手を列挙し、そのラベルの方策値を比較します。encoding.rs のテストで、同一局面の合法手ラベルが衝突しないことを確認しています。

encode_planes の出力を pack_planes に通してはいけません。packbits はシャード保存用の圧縮であり、推論入力には不要です。

5,000ステップの重みでは、教師データの検証局面 256 件に対する合法手マスク付き最善手一致率が 40.6% で、学習ログの 検証 top1 0.41 と一致しました。マスクを外すと 0.4% まで落ちるため、合法手マスクも機能しています。

テスト ​

sh
uv run ruff check . && uv run ruff format --check .
uv run mypy
uv run pytest -m "not gpu"
cargo test --workspace

dl-manaka-core の推論テストには .onnx が必要なため、既定では無効です。

sh
DLMANAKA_TEST_MODEL=$PWD/runs/export/rtx4070ti.onnx cargo test -p dl-manaka-core -- --ignored

GPU 必須テストには gpu マークがあり、CI では除外します。それ以外は合成データで学習経路を一通り実行します。