- 対象ロジックは
train_network.pyのGradNormGuardian/GradNormGuardianConfigと、引数定義はlibrary/sdxl_train_util.py。 - 判定タイミングは
accelerator.backward(loss)の直後。check_gradients_and_skip_update()が呼ばれ、Trueならその step はoptimizer.step()を実行せずにスキップ(global_stepは進む)。skipped_stepsが進捗/ログに記録される。 - 勾配ノルムは **GradScaler による unscale 前の値(スケール適用済み)**で計算。スケール変動に対する補正は行わない。
- 移動平均窓は
moving_avg_window=200。窓が満たされるまでの暫定しきい値はinitial_threshold=200000固定。 - 動的しきい値は
mean + 2.5 * std。skip_grad_norm_maxがあれば上限キャップ。ただし 窓が埋まるまではキャップを無視し、常にinitial_thresholdが使われる。 - NaN/Inf の扱い:
nan_to_window/inf_to_windowが有効だと NaN/Inf を窓に入れる。窓が NaN/Inf で満たされるとthresholdが NaN になり比較が常にFalse→ その間はスキップ無効(意図的な“ブレーキ解除”)。skip_nan_immediate/skip_inf_immediateがTrueだと NaN/Inf の step は即スキップ(GradScaler のfound_infが働きにくい)。
- ログ(
--grad_norm_log)はgradient_logs+<output_name>.txtに CSV 出力。ThreshOffは0=通常、1=しきい値が NaN で無効。--grad_cosine_logで追加列。
-
プリセット選択式の導入
- 新オプション:
--grad_norm_mode {stable,stable_no_threshoff,gamble}。 stableは現行「基本設定」(--skip_grad_norm --grad_norm_log --grad_cosine_log --skip_grad_norm_max 200000 --nan_to_window --inf_to_window --no-skip_nan_immediate --no-skip_inf_immediate)。stable_no_threshoffはstable派生で、--nan_to_window --inf_to_windowを使わずThreshOff区間を抑制する設定(--skip_grad_norm --grad_norm_log --grad_cosine_log --skip_grad_norm_max 200000 --no-skip_nan_immediate --no-skip_inf_immediate)。gambleは現行「博打設定」(--skip_grad_norm --grad_norm_log --grad_cosine_log)。- 既存オプションは 後方互換のため残すが、プリセット指定時は否定フラグのみ上書き可にする。
- 新オプション:
-
設定組み立ての共通化
train_network.py側の大量のgetattr(args, ...)をヘルパー関数へ集約。- プリセット適用 → 明示オプション上書き →
GradNormGuardianConfig生成、の順で単一路線化。
-
ログ出力の維持
--grad_norm_logの CSV 形式を維持し、ThreshOffは0/1のみで運用する。- 新プリセット導入後も
gradient_logs+<output_name>.txtの列構成・出力頻度は不変にする。
-
未使用オプションの削除
--nan_inf_until_step、--auto_cap_release、--idle_free_phaseを ソースとドキュメントから削除。- 関連する内部フラグや補助パラメータ(
cap_release_*など)も併せて削除し、現行の判定結果を崩さない範囲で簡素化する。
-
ドキュメント更新
docs/skip_grad_norm_README-ja.mdとREADME.mdのプリセット記述を 新オプション表記へ置換。- 既存オプションは「上級者向けの手動調整」として併記し、優先順位ルールを明記。
-
検証方針
- 既存 2 プリセットで スキップ判定が完全一致することを確認。
grad_norm_logの出力列/頻度が変わらないことを差分比較(ログの行数・ヘッダ)。