| { |
| "scenarios": [ |
| { |
| "key": "bit_flip", |
| "title": "bit flip (silent data corruption)", |
| "blurb": "One flipped exponent bit in one gradient element. Adam normalises the update away, so the loss curve usually never reacts at all.", |
| "truth": 372, |
| "bytes": 609898 |
| }, |
| { |
| "key": "lr_spike_loud", |
| "title": "learning-rate spike (loud)", |
| "blurb": "The easy case, included on purpose: the loss spikes, so watching the curve works here too.", |
| "truth": 372, |
| "bytes": 610213 |
| }, |
| { |
| "key": "lr_spike_subtle", |
| "title": "learning-rate drift (subtle)", |
| "blurb": "A sustained 4x learning rate. The loss degrades gradually, so 'when did it start?' is genuinely hard by eye.", |
| "truth": 372, |
| "bytes": 608000 |
| }, |
| { |
| "key": "overflow", |
| "title": "fp8-range overflow", |
| "blurb": "Gradients pushed outside an emulated fp8 range produce Inf, which propagates into the optimizer state.", |
| "truth": 372, |
| "bytes": 461278 |
| }, |
| { |
| "key": "data_poison", |
| "title": "data poisoning (12% of each batch)", |
| "blurb": "A small contamination, inside the loss curve's own noise band.", |
| "truth": 372, |
| "bytes": 607198 |
| }, |
| { |
| "key": "clean", |
| "title": "healthy run (no fault)", |
| "blurb": "A control. A good detector must report nothing here.", |
| "truth": null, |
| "bytes": 609191 |
| } |
| ], |
| "n_metrics": 124, |
| "metrics": [ |
| "loss", |
| "grad_norm", |
| "update_norm", |
| "param_norm", |
| "grad_max_abs", |
| "update_max_abs", |
| "param_max_abs", |
| "nonfinite_grad", |
| "nonfinite_param", |
| "sign_flip_rate", |
| "cos_grad_prev", |
| "update_param_ratio", |
| "grad_mean", |
| "grad_var", |
| "grad_absmean", |
| "grad_norm_tensor_max", |
| "grad_norm_tensor_min", |
| "grad_rms", |
| "loss_delta", |
| "update_norm_tensor_max", |
| "group:all:mean", |
| "group:all:var", |
| "group:all:max_abs", |
| "group:all:grad_l2", |
| "group:all:update_l2", |
| "group:all:sign_flip", |
| "group:all:nonfinite", |
| "group:all:upd_param_ratio", |
| "group:embed:mean", |
| "group:embed:var", |
| "group:embed:max_abs", |
| "group:embed:grad_l2", |
| "group:embed:update_l2", |
| "group:embed:sign_flip", |
| "group:embed:nonfinite", |
| "group:embed:upd_param_ratio", |
| "group:attn_qkv:mean", |
| "group:attn_qkv:var", |
| "group:attn_qkv:max_abs", |
| "group:attn_qkv:grad_l2", |
| "group:attn_qkv:update_l2", |
| "group:attn_qkv:sign_flip", |
| "group:attn_qkv:nonfinite", |
| "group:attn_qkv:upd_param_ratio", |
| "group:attn_out:mean", |
| "group:attn_out:var", |
| "group:attn_out:max_abs", |
| "group:attn_out:grad_l2", |
| "group:attn_out:update_l2", |
| "group:attn_out:sign_flip", |
| "group:attn_out:nonfinite", |
| "group:attn_out:upd_param_ratio", |
| "group:mlp_in:mean", |
| "group:mlp_in:var", |
| "group:mlp_in:max_abs", |
| "group:mlp_in:grad_l2", |
| "group:mlp_in:update_l2", |
| "group:mlp_in:sign_flip", |
| "group:mlp_in:nonfinite", |
| "group:mlp_in:upd_param_ratio", |
| "group:mlp_out:mean", |
| "group:mlp_out:var", |
| "group:mlp_out:max_abs", |
| "group:mlp_out:grad_l2", |
| "group:mlp_out:update_l2", |
| "group:mlp_out:sign_flip", |
| "group:mlp_out:nonfinite", |
| "group:mlp_out:upd_param_ratio", |
| "group:norm:mean", |
| "group:norm:var", |
| "group:norm:max_abs", |
| "group:norm:grad_l2", |
| "group:norm:update_l2", |
| "group:norm:sign_flip", |
| "group:norm:nonfinite", |
| "group:norm:upd_param_ratio", |
| "group:head:mean", |
| "group:head:var", |
| "group:head:max_abs", |
| "group:head:grad_l2", |
| "group:head:update_l2", |
| "group:head:sign_flip", |
| "group:head:nonfinite", |
| "group:head:upd_param_ratio", |
| "hist_grad:0", |
| "hist_grad:1", |
| "hist_grad:2", |
| "hist_grad:3", |
| "hist_grad:4", |
| "hist_grad:5", |
| "hist_grad:6", |
| "hist_grad:7", |
| "hist_grad:8", |
| "hist_grad:9", |
| "hist_grad:10", |
| "hist_grad:11", |
| "hist_grad:12", |
| "hist_grad:13", |
| "hist_grad:14", |
| "hist_grad:15", |
| "hist_update:0", |
| "hist_update:1", |
| "hist_update:2", |
| "hist_update:3", |
| "hist_update:4", |
| "hist_update:5", |
| "hist_update:6", |
| "hist_update:7", |
| "hist_update:8", |
| "hist_update:9", |
| "hist_update:10", |
| "hist_update:11", |
| "hist_update:12", |
| "hist_update:13", |
| "hist_update:14", |
| "hist_update:15", |
| "qnorm:0", |
| "qnorm:1", |
| "qnorm:2", |
| "qnorm:3", |
| "qnorm:4", |
| "qnorm:5", |
| "qnorm:6", |
| "qnorm:7" |
| ], |
| "bytes_per_step": 452, |
| "win": 32, |
| "preset": "nano", |
| "steps": 600, |
| "exclude": [ |
| "lr", |
| "step_wall_ms", |
| "batch_id_mean", |
| "batch_uniq_frac" |
| ] |
| } |