File size: 7,665 Bytes
7e782ef | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 | # Performance report
Measurements were collected on one NVIDIA GB10 (SM 12.1) with CUDA 13.0,
PyTorch 2.13.0+cu130, Triton 3.7.1, comfy-kitchen 0.2.27, and SageAttention
2.2.0. The production workload is 864x480, 124 frames, 24 fps, 20 denoising
steps, and 20,423 sequence rows.
## Profile-guided lever order
The original one-evaluation profile at 20,393 rows totaled 12.294 s and
16,624 CUDA launches. Work proceeded in descending measured cost: attention,
NVFP4 activation preparation, dynamic `abs+amax`, SwiGLU, segmented
modulation, RMS/AdaLN preparation, and residual-gate transitions.
SageAttention quality routing, exact modulation fusion, and token-major NHD
layout reduced the profiled evaluation to 8.968 s, a 27.1% reduction. On the
20,423-row serving workload, the warm production ladder moved from 9.21
s/step with stock dynamic preparation to 8.47 s/step with native SwiGLU,
8.24 s/step with direct QKV/out/FC1 preparation, and 8.01 s/step with the
staged exact AdaLN producer. That last 20-step run measured 186.66 s executor
time versus 191.6 s for the direct-auto baseline.
## Latest exact operator gates
These are isolated CUDA-event or one-shot producer measurements. Projections
multiply the observed per-path delta by the exact eligible call count; they
are not end-to-end render deltas.
| Lever at 20,423 rows | Reference -> candidate | Projected opportunity | State |
|---|---:|---:|---|
| Dynamic RMS+AdaLN -> NVFP4 v2 | 4.231872 -> 2.339328 ms | 3.785 s / render | promoted |
| Attention gate -> dynamic RMS+AdaLN -> FC1 | 5.186528 -> 4.477152 ms | 0.709 s / render | promoted |
| Q RMSNorm+rot96 RoPE -> Sage Q INT8 | 7.417600 -> 6.193312 ms | 1.224 s / render | promoted |
| One-pass supplied-scale RMS+AdaLN | 2.339328 -> 1.604224 ms | 1.470 s / render | accepted in final static run |
| Gate -> supplied-scale RMS+AdaLN -> FC1 | 4.354976 -> 3.840608 ms | 0.514 s / render | accepted in final static run |
| Cross-block final gate -> next QKV | qualified producers reused | 0.512 s / render (projection) | warm FixedRef A/B +1.7 s; default **HOLD** |
The Q release gate was intentionally one-shot: no warmup and no timing loop.
It completed in 2.8 seconds and passed exact Q INT8, Q scale, transformed K,
BF16 attention output, output-amax marker, dynamic/supplied consumer triplet,
and tensor version-delta checks on default and non-default streams. The sealed
receipt is `labs/q_rms_rope_int8/release_qualification_s20423.json`.
The static gate ran once with zero warmup and one repetition. It completed in
1.231 seconds, advanced the residual version once, and produced byte-exact
residual, rstd, packed E2M1, and E4M3 scales. The compact result is
`labs/gate_rms_adaln_nvfp4_static/gate_static_20423.json`.
The cross-block estimate combines 47 static transitions at 0.514368 ms saved
and two dynamic transitions at 0.709376 ms saved: 25.594 ms/evaluation, or
0.511881 s across 20 evaluations. That figure remains a **kernel projection**.
A paired full-FixedRef executor A/B on the same warm dynamic stack did **not**
show a 0.51 s end-to-end win.
| Live cross-block check (2026-08-12) | Result |
|---|---|
| 2-step sampler-only smoke | success; 50.1 s wall / 46.8 s executor |
| 20-step FixedRef auto (after smoke) | success; executor 182.8 s |
| 20-step FixedRef stock (warm twin) | success; executor 179.1 s |
| 20-step FixedRef auto (warm rematch) | success; executor 180.8 s |
| Warm pair delta (auto − stock) | **+1.7 s** (executor, includes VAE/MP4) |
| Stack | sage2-quality, exact, SwiGLU/RMS/Q auto, cache off, **dynamic** NVFP4 |
| Static FixedRef attempt | refused: architecture fingerprint mismatch vs live `model.py` |
| Serving default | still `stock` / HOLD |
Receipts: `labs/crossblock_gate_qkv/live_chef_20260812.json`,
`labs/crossblock_gate_qkv/live_ab_20260812.json`. The +1.7 s executor
delta is not a kernel regression proof and is not compared to the accepted
static FixedRef 213.0 s. Do not promote the serving default.
## Static activation boundary
Static source and binaries are integrated. The final path-neutral receipt is
`labs/nvfp4_static/final_rebind_receipt.json`: decision GO, source
`d7b196cc...`, architecture `b5808954...`, artifact `b3b4aee7...`, 196 layers,
3,920 calls, and max observed ratio 0.917149. The required dynamic exclusions
are:
```text
blocks.10.attn.qkv_proj
blocks.11.attn.qkv_proj
blocks.22.mlp.fc2
blocks.46.mlp.fc2
```
## Final exact acceptance render
The final 864x480, 124-frame, six-reference fixed-reference workload run used 20 denoising
steps and source `d7b196cc...`. It completed successfully:
| Metric | Result |
|---|---:|
| Sampler | 147.0 s total / 7.35 s per step |
| Executor | 213.0 s |
| Wall | 213.8 s |
| Static routing | 196 layers applied; 4 required dynamic fallbacks |
This is a measured acceptance result, not an isolated projection. Executor
time includes non-sampler work and is not compared to warm ladder rows. The
receipt is `docs/final_acceptance_receipt.json`; the MP4 itself is excluded.
## Accepted-stack profile (2026-08-12)
One warm DiT evaluation on the live accepted stack (sage2-quality, exact
modulation, SwiGLU/RMS/Q auto, cross-block **stock**, dynamic NVFP4).
Sampler-only 3-step, profiler wait=2 / active=1. Measured sequence **20,393**
rows (not the 20,423-row isolated-gate shape). Compact receipt:
`benchmarks/profiles/accepted_stack_20260812.json`. Chrome trace stays
outside Git.
| Rank | Kernel / boundary | Self CUDA / eval | Notes |
|---|---|---:|---|
| 1 | Sage INT8/FP8 attn + output-amax | 3.316 s | forbidden to reopen Sage3 |
| 2 | CUTLASS NVFP4 GEMM (4 linears) | 2.396 s | kitchen `scaled_mm`; FC1 993 ms |
| 3 | Command Buffer Full | 1.625 s | launch/sync; torch.compile forbidden |
| 4 | Q RMS-RoPE INT8 | 315 ms | already promoted |
| 5 | SwiGLU amax + NVFP4 pack | 283 + 261 ms | **largest remaining owned kernel** |
| 6 | TransposePadPermute | 150 ms | compact-K/V forbidden |
| 7 | RMS/AdaLN + gate producers | 147 + 143 + 132 ms | already promoted / cross-block HOLD |
Largest remaining *attackable* measured boundary was the dynamic SwiGLU
two-pass (amax then pack). A one-SwiGLU store+pack producer was implemented
in `labs/swiglu_nvfp4/native_cuda/` (`swiglu_nvfp4_dynamic_oneshot`). At
20,423 x 28,672 it is **byte-exact** vs the two-pass producer and vs eager
kitchen (packed FP4, E4M3, global scale) but **slower**: 11.969 ms vs
10.660 ms. Writing/rereading the 558 MiB BF16 activation costs more than
recomputing SiLU. Receipt:
`labs/swiglu_nvfp4/native_cuda/gate_oneshot_20423.json`. Serving is
unchanged. Next owned identity is not this workspace path. Do not reopen
Sage3, torch.compile, cuDNN SDPA, K-smooth, compact-K, or CTA Q=256.
The five-attribute bridge includes the exact plan-owned pre/post hook IDs. Any
extra local, backward, or global hook; stale scale object; partial bridge;
replacement; patch; dtype/shape/device mismatch; or identity mismatch rejects
the static producer before mutation. Failures after mutation propagate and do
not replay stock work.
## Correctness policy
- Native NVFP4 gates require zero packed-byte and block-scale mismatches and
exact scalar-scale bits.
- Q promotion requires exact attention and consumer parity on two streams,
not only producer-local equality.
- Static scales require source/checkpoint/workload binding and held-out
validation; a kernel byte gate alone does not validate a calibration.
- Cold runs, calibration runs, changed seeds used to invalidate caches, and
changed reference sizes are labeled and never mixed into clean deltas.
- Full renders are reserved for final acceptance after seconds-scale gates.
|