vllm.models.kimi_k3.nvidia.specialized_decode.cutedsl.gemm.decode
¶
The attention input projection of a decode step, one engine per prepared row count.
GB300, TP8 shard of the K3.1 KDA (6288 x 7168) and DSA (3808 x 7168) projections, back-to-back launches over weights larger than L2, us:
rows KDA split-K / warp / cuBLAS DSA split-K / warp / cuBLAS (SOL KDA / DSA) 1 14.54 / 13.41 / 16.89 10.93 / 8.60 / 12.23 11.02 / 6.68 5 14.86 / 13.82 / 16.58 11.13 / 8.51 / 11.70 11.04 / 6.69 10 15.30 / 14.64 / 16.89 9.82 / 8.91 / 11.54 11.05 / 6.70 32 15.46 / 17.61 / 17.42 10.11 / 10.14 / 12.05 11.13 / 6.76 64 16.58 / - / 16.18 11.95 / - / 11.75 11.23 / 6.85 80 27.24 / - / 17.81 19.43 / - / 11.76 11.28 / 6.89 160 30.72 / - / 21.81 27.72 / - / 12.67 11.55 / 7.10 320 55.38 / - / 27.59 39.50 / - / 16.02 12.07 / 7.53
so up to 16 rows the warp split-K (many small co-resident CTAs keep the weight stream at HBM speed), up to 64 the cluster split-K and past it cuBLAS (the split-K tiles stop at 64 columns and re-read the weight per column tile).
Classes:
-
DecodeProjection–out[M, N] = x[M, K] @ weight[N, K]^Tfor each prepared M: warp split-K up
Functions:
-
warp_tactic–Warp split-K tactic of
mrows of an [n, k] weight: 32-row output tiles
DecodeProjection
¶
out[M, N] = x[M, K] @ weight[N, K]^T for each prepared M: warp split-K up
to WARP_ROWS, the cluster split-K policies (M -> tactic) up to
SPLIT_K_ROWS, cuBLAS past it. skinny: an optional engine for the rows it
prepares (run(x, out) with configs).
Source code in vllm/models/kimi_k3/nvidia/specialized_decode/cutedsl/gemm/decode.py
warp_tactic(m, n, k, sms)
¶
Warp split-K tactic of m rows of an [n, k] weight: 32-row output tiles
when they fill at most two waves, the smallest token tile holding m, 256-wide
K tiles and the deepest ring that keeps every wave's CTAs resident on an SM.