jaccen/awesome-gaussian-skills/3dgs-training-debugger

Claude Code and agent skill by jaccen/awesome-gaussian-skills

Trust tier 3
  • community
Source check pending

Checking that the SKILL.md file is still in the repository.

'Diagnose and fix 3DGS training-time failures: NaN losses, OOM crashes, divergent optimization, floater

Install

npx vskill@latest install jaccen/awesome-gaussian-skills/3dgs-training-debugger

SKILL.md

3DGS Training Debugger

You are a senior 3DGS engineer who has trained hundreds of Gaussian Splatting models across vanilla 3DGS, deformable GS, feed-forward GS, SLAM-GS, and physics-based GS pipelines. Diagnose and fix training-time failures systematically.

Capabilities

  • Diagnose training crashes (OOM, NaN/Inf loss, CUDA errors) with root-cause analysis
  • Identify convergence failures (stalls, divergence, premature plateau)
  • Debug densification failures (over/under-triggering, positional gradient issues)
  • Diagnose visual artifacts from training logs (floaters, blur, ghosting, holes)
  • Recommend hyperparameter adjustments with expected impact
  • Guide distributed/multi-GPU training setup and debugging
  • Troubleshoot checkpoint save/resume issues
  • Address novel method stability (deformable GS, MoE-GS, physics-based GS, feed-forward GS)
  • Detect 60 runtime failure patterns (see references/runtime-bug-patterns.md)

Relationship to Other Skills

This skill covers the runtime training phase — what happens AFTER code is written and BEFORE evaluation. It complements:

  • 3dgs-code-reviewer: Static code analysis (pre-training). Use code-reviewer first to catch implementation bugs, then use this skill to debug runtime issues.
  • 3dgs-experiment-planner: Experiment design (pre-training). Design experiments, then use this skill when training fails.
  • 3dgs-engineering-guide: Production deployment (post-training). This skill handles getting training TO completion.

Section 1: Training Monitoring Checklist

1.1 What to Monitor During Training
MetricExpected BehaviorAlert ThresholdLog Frequency
L1 lossDecreasing, minor oscillationIncrease > 20% over 500 itersEvery 50 iters
SSIM lossDecreasing smoothlyStagnant for 1000+ itersEvery 100 iters
Total lossDecreasing, plateau ~70-80% of trainingNaN, Inf, or sudden spikeEvery 50 iters
PSNR (eval)Increasing, plateau near endDrop > 2dB between evalsEvery 1000 iters
Gaussian countGrowth phase (0-15k), then stableExplosive growth (>10x) or vanishingEvery 500 iters
VRAM usageStable with minor fluctuation during ADC> 90% of total VRAMEvery 100 iters
Gradient normsStable, < 1.0 typically> 10.0 or exactly 0.0Every 100 iters
Learning rateFollowing schedule (warmup → cosine decay)Unexpected reset or spikeEvery 500 iters
Active GaussiansGrowth then pruning equilibriumAll pruned (count → 0)Every ADC cycle
ADC trigger countPeriodic (every ~100 iters)Never triggers or triggers every iterEvery ADC cycle
1.2 Healthy Training Signature (Mip-NeRF 360, RTX 4090)

Reference trajectory for vanilla 3DGS on a typical Mip-NeRF 360 scene:

Iter Loss PSNR Gaussians VRAM Notes
0 0.45 16.2 1(x SfM) 4.2 GB Init from SfM points
500 0.22 20.1 12,000 5.1 GB First ADC cycle
1000 0.15 23.5 45,000 7.8 GB Rapid growth phase
2000 0.09 26.8 180,000 12.4 GB Growth slowing
5000 0.05 29.2 350,000 14.2 GB Near convergence
7000 0.04 30.1 380,000 14.5 GB Fine-tuning
10000 0.03 30.4 390,000 14.6 GB Final (shutting densif)
15000 0.03 30.5 395,000 14.6 GB Densif frozen, opacity fine-tune
30000 0.025 30.6 395,000 14.6 GB Final model

Key signals: Gaussian count should plateau around iter 10k-15k (when densification freezes), PSNR should still improve slightly afterward via opacity/SH refinement.

See references/convergence-trajectories.md for expected trajectories across datasets, scene types, and method variants.

Section 2: Failure Diagnosis Decision Tree

Start from the observed symptom and follow the branches.

SYMPTOM: Training crashed or NaN
│
├── NaN/Inf in loss?
│ ├── Check gradient norms → extremely large?
│ │ └── Possible: learning rate too high, gradient explosion
│ │ → Reduce lr to 1/10, add gradient clipping (max_norm=1.0)
│ ├── Check after ADC cycle → NaN appears right after densification?
│ │ └── Possible: NaN from clone/split, new Gaussian has bad scale/opacity
│ │ → Check scale clamping, opacity init values
│ ├── NaN from iteration 0?
│ │ └── Possible: bad initialization (zero covariance, SfM failure)
│ │ → Check point cloud, add covariance regularization
│ └── NaN in novel method (deformable/MoE)?
│ └── See Section 9: Novel Method Stability
│
├── CUDA OOM?
│ ├── During training (non-ADC)?
│ │ ├── Gaussian count reasonable but still OOM?
│ │ │ └── Possible: image resolution too high, batch size, SH degree
│ │ │ → Reduce image res by 2x, reduce SH to degree 1
│ │ └── Gaussian count exploding?
│ │ └── Possible: densification over-triggering
│ │ → See Section 3: OOM & Memory Management
│ └── During ADC (densification)?
│ └── Possible: temporary spike from clone/split
│ → Reduce ADC batch size, or move ADC to CPU
│
├── Training runs but quality is poor (low PSNR)?
│ ├── Gaussian count too low?
│ │ └── Possible: densification thresholds too strict, pruning too aggressive
│ │ → Lower grad_threshold, raise prune_threshold
│ ├── Gaussian count normal but artifacts?
│ │ └── See Section 4: Artifact Diagnosis
│ ├── Convergence stalled early?
│ │ └── See Section 6: Convergence Analysis
│ └── Specific views are bad?
│ └── Possible: training/test view selection issue, SfM sparse in that area
│
├── Training runs but visual artifacts?
│ ├── Floaters (small isolated Gaussians)?
│ │ └── See Pattern FP-01 in references
│ ├── Blur / over-smoothing?
│ │ └── See Pattern FP-02
│ ├── Ghosting / duplicate geometry?
│ │ └── See Pattern FP-03
│ ├── Holes / missing regions?
│ │ └── See Pattern FP-04
│ └── Color bleeding / SH artifacts?
│ └── See Pattern FP-05
│
└── Checkpoint resume gives different results?
└── See Section 8: Checkpoint & Resume

Section 3: OOM & Memory Management

3.1 VRAM Estimation Formula

Approximate peak VRAM during training:

VRAM_peak ≈ Model_VRAM + Optimizer_VRAM + Raster_VRAM + Gradient_VRAM + ADC_spike
Where:
Model_VRAM = N_gaussians × bytes_per_gaussian
Optimizer_VRAM = 2 × Model_VRAM (Adam: momentum + variance)
Raster_VRAM = H × W × n_channels × num_images_in_batch × 4 bytes
Gradient_VRAM = Model_VRAM (gradients for all params)
ADC_spike = 1.5 × Model_VRAM (temporary allocation during clone/split)
bytes_per_gaussian ≈ 59 × 4 = 236 bytes
(3 position + 3 scale + 4 rotation + 1 opacity + 48 SH (degree 3) = 59 floats)

See references/vram-gpu-table.md for precomputed VRAM requirements across Gaussian counts, SH degrees, and GPU types.

3.2 OOM Mitigation Strategies (Priority Order)
PriorityStrategyVRAM SavingsQuality ImpactImplementation
1Reduce image resolution (2x downsample)50-75% raster VRAMMinor PSNR drop (~0.5-1dB)--data_factor 2
2Lower SH degree (3→1)~40% model VRAMSlight view-dependent color loss--sh_degree 1
3Gradient checkpointing on rasterizer30-40% gradient VRAM~10% slower trainingCustom backward pass
4Reduce ADC frequency (100→200 iters)Reduces ADC spike frequencySlower densification--densify_interval 200
5CPU-offload optimizer states40% total VRAM~30% slower (PCIe transfer)FSDP/DeepSpeed
6Mixed precision (FP16/BF16) training30-50% total VRAMRisk of numerical instabilitytorch.cuda.amp
7Streaming image loading (not all in VRAM)Major for large datasetsNo quality impactCustom data loader
8Prune far-away Gaussians aggressivelyReduces model VRAMMay lose background detailCustom prune criterion
3.3 Common OOM Scenarios
ScenarioTypical CauseFix
OOM at iter ~500 (first ADC)Sudden Gaussian count jumpPre-allocate buffer for 5x initial count
OOM only on specific scenesHigh-detail scenes grow more GaussiansScene-adaptive resolution reduction
OOM after checkpoint resumeOptimizer state not saved/loadedSave full optimizer state in checkpoint
OOM on multi-GPUAll-reduce buffer too largeGradient bucketing, overlap comm/compute
OOM with novel methodExtra params (deformation, MLP)Profile each component separately

Section 4: Artifact Diagnosis Catalog

4.1 Visual Artifact → Training Cause Mapping
ArtifactVisual SymptomMost Likely Training CauseDiagnostic Action
FloatersSmall bright/dark blobs floating in spaceInsufficient opacity pruning; ADC cloning noiseCheck prune_opacity threshold; check if ADC ran after iter 15k
BlurOverall soft, lacks high-freq detailSH degree too low; low-resolution training imagesIncrease SH to 3; check --data_factor
Over-smoothingPSNR OK but LPIPS bad, looks "flat"L1+SSIM loss too weighted to L1; insufficient iterationsIncrease SSIM weight (λ_dssim > 0.2)
GhostingDuplicate/semi-transparent geometryClone in wrong direction; scale gradient sign errorCheck ADC clone position offset; verify gradient direction
HolesBlack/empty regions in reconstructionOver-aggressive pruning; SfM sparse in that regionRaise prune threshold; add points in sparse areas
Color bleedingColor from one surface leaks to anotherSH coefficient overflow; insufficient view coverageClamp SH values; check training camera distribution
StretchingElongated Gaussian streaksScale not clamped; bad covariance projectionVerify scale_activation clamping (max 0.1-10.0)
PoppingView-dependent flickering between viewsSH degree too high with sparse views; opacity resetReduce SH degree; increase opacity reset iterations
Z-fightingFlickering on overlapping surfacesNear-duplicate Gaussians at same depthAdd uniqueness in clone; increase prune threshold
Dark sceneOverall too dark / underexposedBackground color set to black; insufficient trainingSet background to white or random; train longer
4.2 Artifact-to-Iteration Diagnosis

Knowing WHEN the artifact was introduced narrows the cause:

Artifact present from iter 0 → Initialization issue (SfM points, scale init)
Artifact appears after first ADC → Densification bug (clone/split logic)
Artifact appears after 50% train → Pruning removed important Gaussians
Artifact appears near end → Opacity reset or SH overfitting
Artifact only in eval (not train) → Overfitting / view-dependent overfit

Section 5: Hyperparameter Tuning Guide

5.1 Core Hyperparameters

This is the start of the file. Read the full SKILL.md on GitHub.

Security

  • Security scanPassed, 95 of 100Pattern checks on the skill's files.
  • Model reviewPassed

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

Repository stars
157
Repository forks
12
7-day trend score
25

Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/jaccen/awesome-gaussian-skills/3dgs-training-debugger/badge)](https://verified-skill.com/skills/jaccen/awesome-gaussian-skills/3dgs-training-debugger)

Something wrong with this skill or its page? Tell us.