Skip to content

GpuTrainer に forward-only モードを追加し --eval-only の device memory を削減 - #408

Merged
SH11235 merged 2 commits into
mainfrom
feat/gpu-trainer-forward-only
Sep 5, 2026
Merged

SH11235 merged 2 commits into
mainfrom
feat/gpu-trainer-forward-only

Conversation

@SH11235

@SH11235 SH11235 commented Sep 5, 2026

Copy link
Copy Markdown
Owner

概要

GpuTrainer に forward-only モードを追加する。forward + loss (validate) しか使わない --eval-only が学習構成と同じ optimizer state (m / v / slow)・全 *_grad・backward workspace を確保しており、大 batch の評価が 12GB 級 GPU で out of memory になっていた。GPU リスコア基盤 (PSV pool の 1-node 静的評価リラベル) の土台でもある。

変更内容

  • GpuTrainer::new_forward_only: optimizer state / grad / backward 専用 workspace (activation-grad・inverse-index scratch・sorted-grad・f16 backward halves) を 0-byte で確保する (tf32 off の dcombined_from_l1_sorted と同じ dead-allocation 回避手法)。struct 形状と forward / loss 経路の数値は不変
  • forward-only では step / save_raw_checkpoint を明示エラーで拒否
  • load_layerstack_weights / load_raw_checkpoint は forward-only 時に optimizer state の確保・upload を行わない (weight のみ載せる)。特に --init-from が m/v/grad をフル長で再確保して省メモリを無効化する経路を塞いだ
  • --eval-only は forward-only trainer で構築する

実測 (RTX 3080 Ti, 12GB)

前回 OOM だった構成 (--eval-only --batch-size 65536 × LayerStack 3072x16x32 halfka-hm-merged) が完走:

  • VRAM max 4622 MiB / 12288 MiB (2s 間隔サンプリング)
  • wall 5.74s @ 1,048,576 局面 (eval-only の held-out load 律速を含む end-to-end)

再現:

nnue-train --eval-only \
  --test-data /path/to/teacher.psv --test-positions 1048576 --batch-size 65536 \
  layerstack --init-from /path/to/ls-3072x16x32.bin \
  --ft-out 3072 --l1 16 --l2 32 --num-buckets 9 \
  --bucket-mode progress8kpabs --progress-coeff /path/to/progress.bin

テスト

  • forward_only_validate_matches_training_trainer: 同一重み・同一 batch で学習 trainer の validate と bit 一致 (loss + net_output)、step / save_raw_checkpoint の拒否
  • forward_only_resumes_raw_checkpoint_for_validate: 学習 trainer が書いた .ckpt からの resume validate が bit 一致 (--eval-only --resume 経路)
  • forward_only_init_from_quantised_bin_matches_training_trainer: 量子化 .bin (量子化往復込み) を --init-from 相当で読んだ validate が bit 一致 (--eval-only --init-from 経路)

既知の未カバー分岐: forward-only の bit 一致検証は FP32 / HalfKP / base 構成のみで、--ft-fp16(-out) / threat / FT factorizer / PSQT / stack-shared-delta との組合せは 0-byte 化の対象ではあるが GPU テスト未カバー (これらの構成を forward-only で使う場合は追加検証が要る)。

検証記録

  • sh11235 (ubuntu-3080ti) で bash scripts/local-ci.sh フル PASS ×2 回 (aa29b99 時点 / 470f8ad 時点、GPU テスト含む全 step)
  • Windows 側: cargo fmt --check / cargo clippy --workspace --all-targets -- -D warnings / CPU テスト green
  • 独立レビュー (Codex): APPROVE (low 3 件 = メッセージ整形・コメント正確化・.bin init-from テスト追加、対応済み)

🤖 Generated with Claude Code

SH11235 and others added 2 commits September 6, 2026 03:30
…mory を削減

forward + loss (validate) しか使わない --eval-only が学習構成と同じ
optimizer state (m/v/slow)・全 *_grad・backward workspace を確保しており、
大 batch の評価が 12GB 級 GPU で out of memory になっていた。

- GpuTrainer::new_forward_only を追加: optimizer state / grad / backward
  専用 workspace (activation-grad・inverse-index scratch・sorted-grad) を
  0-byte で確保する (tf32 off の dcombined_from_l1_sorted と同じ手法)
- forward-only では step / save_raw_checkpoint を明示エラーで拒否し、
  load_layerstack_weights / load_raw_checkpoint は optimizer state の
  確保・upload を行わない (weight のみ載せる)
- --eval-only は forward-only trainer で構築する
- テスト: 同一重み・同一 batch で学習 trainer の validate と bit 一致、
  学習 trainer が書いた ckpt からの resume validate の bit 一致、
  step / save_raw_checkpoint の拒否

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- 量子化 .bin を --init-from 相当で読み込んだ forward-only trainer の validate が
  学習 trainer と bit 一致することを GPU テストで固定 (--eval-only --init-from の
  本命経路。量子化往復を含む実 .bin を save_checkpoint で生成して使う)
- step 拒否エラーメッセージ内の連続空白を除去
- new_forward_only の削減量コメントを正確化 (m/v/slow/grad の companion 4 本、
  --fp16-opt-state 時は f32 換算 3 本分)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 5, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-09-05T19:08:32.384628Z 470f8ad PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@SH11235
SH11235 merged commit 1180068 into main Sep 5, 2026
1 check passed
@SH11235
SH11235 deleted the feat/gpu-trainer-forward-only branch September 5, 2026 19:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant