The checkpoint input_scale was a calibration value that doesn't match
runtime input magnitudes. This caused all block scales to saturate at
float8_e4m3fn max (448.0), producing garbage output.
Fix: use quantize_to_nvfp4 (computes global_scale from input amax) and
assemble_scales_2d_side (per-expert split, matches working layertest).
This breaks cudagraph (has .max() and .tolist() in forward). Will
re-enable cudagraph later with a warmup-based caching approach.