推論
DLManaka の推論は、局面をネットワークへ入力し、方策と価値を得る処理です。USI エンジン dl-manaka-usi の go は Gumbel AlphaZero MCTS を実行し、その中で推論を繰り返します。PolicyOnly=true では探索を省略し、1 回の評価で最も高い合法手を返します。
学習チェックポイントを ONNX へ書き出し、Rust 側で読み込みます。
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% まで落ちるため、合法手マスクも機能しています。
テスト
uv run ruff check . && uv run ruff format --check .
uv run mypy
uv run pytest -m "not gpu"
cargo test --workspacedl-manaka-core の推論テストには .onnx が必要なため、既定では無効です。
DLMANAKA_TEST_MODEL=$PWD/runs/export/rtx4070ti.onnx cargo test -p dl-manaka-core -- --ignoredGPU 必須テストには gpu マークがあり、CI では除外します。それ以外は合成データで学習経路を一通り実行します。