From fcbb1eaf662ef236439381c068bd067689b5ce85 Mon Sep 17 00:00:00 2001 From: longcheng-nv <243710427+longcheng-nv@users.noreply.github.com> Date: Wed, 16 Sep 2026 12:35:25 +0000 Subject: [PATCH 01/33] [None][doc] Explain GVR V2 self-sampling and multi-threshold Top-K Signed-off-by: longcheng-nv <243710427+longcheng-nv@users.noreply.github.com> --- docs/source/blogs/media/gvr_v2/README.md | 87 + docs/source/blogs/media/gvr_v2/algorithm.svg | 676 +++++ docs/source/blogs/media/gvr_v2/evolution.svg | 394 +++ .../blogs/media/gvr_v2/flash_timings.csv.gz | Bin 0 -> 60729 bytes docs/source/blogs/media/gvr_v2/latency.svg | 2322 +++++++++++++++++ .../source/blogs/media/gvr_v2/plot_results.py | 788 ++++++ .../blogs/media/gvr_v2/pro_timings.csv.gz | Bin 0 -> 78761 bytes .../source/blogs/media/gvr_v2/provenance.json | 46 + docs/source/blogs/media/gvr_v2/roofline.svg | 1999 ++++++++++++++ docs/source/blogs/media/gvr_v2/sglang_map.svg | 1665 ++++++++++++ docs/source/blogs/media/gvr_v2/speedup.svg | 722 +++++ docs/source/blogs/media/gvr_v2/summary.json | 328 +++ .../media/gvr_v2/temporal_comparison.csv.gz | Bin 0 -> 81185 bytes .../blogs/media/gvr_v2/v32_timings.csv.gz | Bin 0 -> 136826 bytes ...ampling_Exact_TopK_for_Sparse_Attention.md | 338 +++ 15 files changed, 9365 insertions(+) create mode 100644 docs/source/blogs/media/gvr_v2/README.md create mode 100644 docs/source/blogs/media/gvr_v2/algorithm.svg create mode 100644 docs/source/blogs/media/gvr_v2/evolution.svg create mode 100644 docs/source/blogs/media/gvr_v2/flash_timings.csv.gz create mode 100644 docs/source/blogs/media/gvr_v2/latency.svg create mode 100644 docs/source/blogs/media/gvr_v2/plot_results.py create mode 100644 docs/source/blogs/media/gvr_v2/pro_timings.csv.gz create mode 100644 docs/source/blogs/media/gvr_v2/provenance.json create mode 100644 docs/source/blogs/media/gvr_v2/roofline.svg create mode 100644 docs/source/blogs/media/gvr_v2/sglang_map.svg create mode 100644 docs/source/blogs/media/gvr_v2/speedup.svg create mode 100644 docs/source/blogs/media/gvr_v2/summary.json create mode 100644 docs/source/blogs/media/gvr_v2/temporal_comparison.csv.gz create mode 100644 docs/source/blogs/media/gvr_v2/v32_timings.csv.gz create mode 100644 docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md diff --git a/docs/source/blogs/media/gvr_v2/README.md b/docs/source/blogs/media/gvr_v2/README.md new file mode 100644 index 000000000000..376d1fcf0c8e --- /dev/null +++ b/docs/source/blogs/media/gvr_v2/README.md @@ -0,0 +1,87 @@ +--- +orphan: true +--- + + + +# GVR V2: Benchmark Methodology and Figure Reproduction + +This companion to [GVR V2: Faster Exact Top-K with Self-Sampling and Multi-Thresholding](../../tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md) contains the observations and definitions needed to reproduce the article's figures. The article focuses on the algorithm and its performance; this document records the measurement boundaries. + +## Regenerate the Figures + +With NumPy and Matplotlib installed, run from the repository root: + +```bash +python docs/source/blogs/media/gvr_v2/plot_results.py +``` + +The script regenerates `summary.json` and six SVGs: `speedup.svg`, `evolution.svg`, `algorithm.svg`, `sglang_map.svg`, `latency.svg`, and `roofline.svg`. It requires no GPU. The algorithm diagrams are schematic; every performance panel uses the bundled timing observations. + +## Published Data + +| File | Contents | +| :--- | :--- | +| [flash_timings.csv.gz](flash_timings.csv.gz) | 2,079 DeepSeek-V4 Flash cases | +| [pro_timings.csv.gz](pro_timings.csv.gz) | 2,970 DeepSeek-V4 Pro cases | +| [v32_timings.csv.gz](v32_timings.csv.gz) | 4,697 DeepSeek-V3.2 cases | +| [temporal_comparison.csv.gz](temporal_comparison.csv.gz) | Two temporal GVR observations for each of the same 9,746 cases | +| [provenance.json](provenance.json) | Published-file checksums, implementation labels, pairing, and roofline constants | +| [summary.json](summary.json) | Recomputed statistics | +| [plot_results.py](plot_results.py) | Figure generation | + +The CSVs begin with a copyright comment. `cell`, `model`, `isl_bucket`, and `layer` identify a workload. `batch`, `n`, and `k` specify its dimensions. Columns ending in `_us` contain case-level mean kernel durations in microseconds. Join the temporal supplement by `(cell, batch)`. Blank entries indicate missing or unsupported measurements, never zero latency. + +The files contain kernel timings and workload dimensions. They do not contain input scores, prompt contents, or individual timing repetitions. They reproduce the published statistics and charts; repeating the GPU experiment requires suitable score inputs and a benchmark harness. + +## Measurement and Comparison Scope + +Measurements use NVIDIA B200, FP32 indexer scores, and batch sizes from 1 to 1,024. Each case has 10 warmup calls, five warm-L2 repetitions, and 10 cold-L2 repetitions. The article reports mean GPU kernel duration from the cold repetitions. A 512 MB cache eviction runs outside the timed region. Compilation, input preparation, allocation during setup, and Python launch overhead are excluded; required device kernels remain timed. + +The primary reference is the hint-free GVR V2 `run_varlen` implementation. DeepSelect FP32 and HPC-ops were measured in the same process as that reference. Radix CUDA, SGLang, FlashInfer, and the temporal GVR implementations use matched observations from separate runs. These comparisons describe the bundled implementations and workloads; they are not a current-release, equal-interface benchmark of entire serving frameworks. + +| Implementation | Relevant comparison contract | +| :--- | :--- | +| GVR V2 | FP32 scores, valid row lengths, unordered INT32 indices | +| SGLang Top-K v2 | Main comparison includes plan + transform; transformation-only results are separate | +| FlashInfer 0.6.14 | Native `top_k` returns FP32 values and INT64 indices and scans a padded row | +| TensorRT-LLM radix CUDA | Production dispatcher, including short-row insertion and long-row split-work paths | +| DeepSelect v1.0.0 | Unsorted INT32 indices only; FP32 K=2048 emphasizes correctness coverage | +| HPC-ops FP32 | K=512 or 2048, with recommended workspace; K=1024 is unsupported | + +The public baseline revisions for DeepSelect and HPC-ops are [8e70df71d2](https://github.com/deepseek-ai/DeepSelect/tree/8e70df71d2) and [2a2e265624](https://github.com/Tencent/hpc-ops/tree/2a2e265624). Complete build revisions for the historical SGLang and radix observations are unavailable in the timing export. + +SGLang planning can be amortized across layers in a serving integration. FlashInfer's additional outputs and padded-row scan remain part of its timed native API. DeepSelect and HPC-ops receive preallocated output or workspace. The BF16 comparison uses its own paired `gvr_bf16_run_us` reference and preconverted BF16 input for DeepSelect; conversion time is excluded. Each dtype is checked against its own `torch.topk` result, so BF16 speed does not establish preservation of FP32 Top-K membership. + +## Temporal GVR and Algorithm Evolution + +The temporal R0 and tiered implementations correspond to public [PR #16457](https://github.com/NVIDIA/TensorRT-LLM/pull/16457) and [PR #16877](https://github.com/NVIDIA/TensorRT-LLM/pull/16877). They already include improvements beyond original scalar-search V1, including a threshold ladder and execution specialization. The original scalar-search implementation has no measurement on this grid. The temporal comparisons span full implementations, including scheduling and integration; they are not an isolated self-sampling ablation. + +Figure 2 computes each implementation's speedup directly from its paired radix times. The geometric means are 2.586546× for temporal R0, 3.471858× for tiered temporal GVR, and 4.929143× for V2. Direct temporal/V2 time ratios are 1.905685× and 1.419742×. `summary.json` records these under `evolution_vs_radix` and `temporal_vs_v2`. Historical R0 observations for V3.2 lack explicit N/K metadata; workload identity supplies the join for those records. + +## Aggregation and Coverage + +Speedup is the geometric mean of per-case `baseline_us / gvr_v2_us` ratios. Every case has equal weight. A win is a ratio above one; minima and percentiles also use individual ratios. No slower case is discarded. + +Figure 1 intersects all supported implementations within each model: 2,079 Flash, 2,970 Pro, and 4,466 V3.2 cases. V2 is fixed at 1.00; shorter bars mean less time. Pro omits unsupported HPC-ops. These values are recorded under `comparison_common_cases`. The article's overall and per-model tables use each baseline's full paired coverage. + +SGLang and FlashInfer lack V3.2 layers 0–2 and cover 9,515 cases in total. HPC-ops covers 6,776 Flash/V3.2 cases. GVR, radix, and DeepSelect cover all 9,746 cases. Missing coverage is never filled with estimated timings. + +The latency and roofline curves use arithmetic-mean durations over matching layers at each row-length/batch point: 21 layers for Flash, 30 for Pro, and 58 for V3.2. All layers at each plotted point have the same valid width. The SGLang heatmap instead geometrically averages per-layer speedups at each shape. A shape average can hide individual regressions. + +Correctness compares selected value multisets with `torch.topk`, allowing tied indices to differ. The capture-grid checks do not establish NaN ordering parity or a universal tie order. The linked implementation PRs additionally cover padding, variable lengths, exceptional values, and graph replay. + +## Roofline Definitions + +The logical work is `W = B*N` abstract comparisons and the minimum traffic is `Q = 4*B*(N+K)` bytes. Operational intensity is `I = W/Q`; measured useful throughput is `P = B*N/(time_us*1e6)` Tcompare/s. Every kernel uses this same normalization. Extra outputs, padding, staging, repeated scans, and synchronization remain in measured time but do not enlarge the ideal work or minimum-traffic terms. The plotted throughput is not a hardware instruction rate or measured DRAM bandwidth. + +The full model is `min(R, BW*I)`. The theoretical parameters are `R=37.224960 Tcompare/s` and `BW=8 TB/s`; calibrated parameters are `R=37.047490 Tcompare/s` and `BW=6.912116 TB/s`. Their knees are 4.65312 and approximately 5.35979 compare/byte, above Top-K's ideal `[0.125, 0.25)` intensity range. The semantic comparison convention counts two binary comparisons per FMNMX3 result; it is not FP32 FLOPS. + +The zoom panels fix B=1024 and use linear axes. They show a throughput-oriented slice rather than a fitted upper envelope. Figure 5 also shows B=1, and the SGLang heatmap covers all 11 batches. The illustrative Flash fractions of the calibrated roof are minimum time divided by measured mean kernel time: approximately 69% for V2, 40% for SGLang, and 17% for radix CUDA. The read-dominated roof is optimistic; mixed read/write behavior and additional kernel work can lower achievable throughput. + +## Serving Results + +Decode TPOT results come from public [PR #18410](https://github.com/NVIDIA/TensorRT-LLM/pull/18410); prefill results come from public [PR #18702](https://github.com/NVIDIA/TensorRT-LLM/pull/18702). These are separate serving experiments, not transformations of the operator speedups. The 2.9–4.5% throughput increase isolates adding V2 prefill to a deployment already using V2 decode. It is not the throughput gain of replacing radix in both phases. diff --git a/docs/source/blogs/media/gvr_v2/algorithm.svg b/docs/source/blogs/media/gvr_v2/algorithm.svg new file mode 100644 index 000000000000..374f56997e8f --- /dev/null +++ b/docs/source/blogs/media/gvr_v2/algorithm.svg @@ -0,0 +1,676 @@ + + + + + + + + Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. SPDX-License-Identifier: Apache-2.0 + image/svg+xml + + + Matplotlib v3.10.8, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 SELF-SAMPLE + + + Place the bracket near the current tail + + + 2 MULTI-THRESHOLD + + + Get many exact counts from one classification + + + 3 REFINE + + + Finish only the uncertain boundary + + + Current row: sparse, regularly spaced vector loads + + + Sample histogram ≈ current score distribution + + + T_floor + + + T + + + T_K + + + Ranks ≈ 2AS/N, AS/N, KS/N + → safety floor, admission threshold, upper anchor + + + + + + + Every valid score is examined + + + Exact histogram → suffix counts at all bin boundaries + + + T + + + H + + + + + + + 73 in crossing bin + + + 980 + above + + + 256 verification bins (shown schematically) + One bin assignment per survivor, then an on-chip scan + + + + + + + 980 certain winners + + + Select 44 of 73 boundary candidates + + + 1,024 exact output indices + + + + + + + + + + + If the sample misses: lower the admission threshold or invoke exact recovery. An incomplete candidate buffer never proves correctness. + + + + + + + + + diff --git a/docs/source/blogs/media/gvr_v2/evolution.svg b/docs/source/blogs/media/gvr_v2/evolution.svg new file mode 100644 index 000000000000..f1294b9d97c3 --- /dev/null +++ b/docs/source/blogs/media/gvr_v2/evolution.svg @@ -0,0 +1,394 @@ + + + + + + + + Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. SPDX-License-Identifier: Apache-2.0 + image/svg+xml + + + Matplotlib v3.10.8, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Original GVR V1: temporal warm start + scalar threshold search + + + Previous indices + → current-score gather + + + Guess T → full-row count + → adjust T if needed + + + Collect candidates + → exact refinement + + + Two dependent reads; threshold quality follows temporal overlap. + + + GVR V2 streaming: self-sampling + multi-thresholding + + + Coalesced current-row + sample → tail bracket + + + Full-row classification + → many exact counts + + + Emit certain winners + → refine crossing bin + + + + + + + + + + + + + + + + + + + Current-row information; no previous-step Top-K state. + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 1 + + + + + + + + + + + + + 2 + + + + + + + + + + + + + 3 + + + + + + + + + + + + + 4 + + + + + + + + + + + + + 5 + + + + Speedup over radix CUDA + + + + + + + + + + + + + + Temporal R0 + + + + + + + + + + Temporal tiered + + + + + + + + + + GVR V2 + + + + + + + + + + + + + + + + + + + + 2.59× + + + 3.47× + + + 4.93× + + + Measured evolution + + + + From temporal prediction to current-row calibration + + + R0 already introduced a hint-derived threshold ladder. V2 combines that direction with current-row sampling and execution specialization. + + + Bars compare the temporal R0, temporal tiered, and self-sampling V2 implementations. + + + + + + + + + + + diff --git a/docs/source/blogs/media/gvr_v2/flash_timings.csv.gz b/docs/source/blogs/media/gvr_v2/flash_timings.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..da15de185348ad36ae9e32932741eab42e8b6f80 GIT binary patch literal 60729 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

BCa)*r;MbtMoIj$wKIosMT)aVwVUs{)?Sf& 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

5_1X;i3-vMu}P)DPB+MyV$udPL^~N}f|og_0o4 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 literal 0 HcmV?d00001 diff --git a/docs/source/blogs/media/gvr_v2/latency.svg b/docs/source/blogs/media/gvr_v2/latency.svg new file mode 100644 index 000000000000..5f9b22a102ff --- /dev/null +++ b/docs/source/blogs/media/gvr_v2/latency.svg @@ -0,0 +1,2322 @@ + + + + + + + + Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. SPDX-License-Identifier: Apache-2.0 + image/svg+xml + + + Matplotlib v3.10.8, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1K + + + + + + + + + + + + + 4K + + + + + + + + + + + + + 16K + + + + + + + + + + + + + 64K + + + + + + + + + + + + + 256K + + + + Valid indexer row length N + + + + + + + + + + + + + + + + + 10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Mean kernel time (µs) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DeepSeek-V4 Flash · K=512 | B=1 + + + + + + + + + + + + + + + + + + 1K + + + + + + + + + + + + + 4K + + + + + + + + + + + + + 16K + + + + + + + + + + + + + 64K + + + + + + + + + + + + + 256K + + + + Valid indexer row length N + + + + + + + + + + + + + + 10 + + + + + + + + + + + + + 100 + + + + + + + + + + + + + 1000 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Mean kernel time (µs) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DeepSeek-V4 Flash · K=512 | B=1024 + + + + + + + + + + + + + + + + + + 1K + + + + + + + + + + + + + 4K + + + + + + + + + + + + + 16K + + + + + + + + + + + + + 64K + + + + + + + + + + + + + 256K + + + + Valid indexer row length N + + + + + + + + + + + + + + 10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Mean kernel time (µs) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DeepSeek-V4 Pro · K=1024 | B=1 + + + + + + + + + + + + + + + + + + 1K + + + + + + + + + + + + + 4K + + + + + + + + + + + + + 16K + + + + + + + + + + + + + 64K + + + + + + + + + + + + + 256K + + + + Valid indexer row length N + + + + + + + + + + + + + + 10 + + + + + + + + + + + + + 100 + + + + + + + + + + + + + 1000 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Mean kernel time (µs) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DeepSeek-V4 Pro · K=1024 | B=1024 + + + + + + + + + + + + + + + + + + 4K + + + + + + + + + + + + + 16K + + + + + + + + + + + + + 64K + + + + + + + + + + + + + 256K + + + + Valid indexer row length N + + + + + + + + + + + + + + 10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Mean kernel time (µs) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DeepSeek-V3.2 · K=2048 | B=1 + + + + + + + + + + + + + + + + + + 4K + + + + + + + + + + + + + 16K + + + + + + + + + + + + + 64K + + + + + + + + + + + + + 256K + + + + Valid indexer row length N + + + + + + + + + + + + + + 100 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Mean kernel time (µs) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DeepSeek-V3.2 · K=2048 | B=1024 + + + + Latency across row lengths and batch sizes + + + + + + + GVR V2 + + + + + + SGLang v2 (plan + transform) + + + + + + FlashInfer 0.6.14 + + + + + + TensorRT-LLM radix CUDA + + + + + + DeepSelect FP32 + + + + + + HPC-ops FP32 + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/source/blogs/media/gvr_v2/plot_results.py b/docs/source/blogs/media/gvr_v2/plot_results.py new file mode 100644 index 000000000000..3b41d09c9f30 --- /dev/null +++ b/docs/source/blogs/media/gvr_v2/plot_results.py @@ -0,0 +1,788 @@ +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 +"""Regenerate the blog's figures and statistics from the bundled timing data. + +Requires matplotlib and numpy. Run from any directory; outputs stay beside this file. +""" + +import csv +import gzip +import json +from pathlib import Path +from statistics import geometric_mean, mean, median + +import matplotlib + +matplotlib.use("Agg") +import matplotlib.pyplot as plt +import numpy as np +from matplotlib.colors import TwoSlopeNorm +from matplotlib.lines import Line2D +from matplotlib.patches import FancyBboxPatch, Rectangle +from matplotlib.ticker import FuncFormatter + +ROOT = Path(__file__).resolve().parent +COPYRIGHT = ( + "Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. SPDX-License-Identifier: Apache-2.0" +) +ARMS = ["sglang", "flashinfer", "radix_cuda", "deepselect", "hpc_ops"] +MODELS = { + "flash": "DeepSeek-V4 Flash · K=512", + "pro": "DeepSeek-V4 Pro · K=1024", + "v32": "DeepSeek-V3.2 · K=2048", +} +LABELS = { + "gvr_v2": "GVR V2", + "sglang": "SGLang v2 (plan + transform)", + "flashinfer": "FlashInfer 0.6.14", + "radix_cuda": "TensorRT-LLM radix CUDA", + "deepselect": "DeepSelect FP32", + "hpc_ops": "HPC-ops FP32", +} +COLORS = { + "gvr_v2": "#579600", + "temporal_r0": "#7395ab", + "temporal_tiered": "#386781", + "sglang": "#7557a6", + "flashinfer": "#007e91", + "radix_cuda": "#64748b", + "deepselect": "#d97416", + "hpc_ops": "#bd426b", +} +CROSS_CAMPAIGN = {"sglang", "flashinfer", "radix_cuda"} +REACHABLE_BW = 6.912116 +TEMPORAL = ["temporal_r0", "temporal_tiered"] +COMPARISON_ARMS = ["gvr_v2", *TEMPORAL, *ARMS] + + +def _load() -> list[dict]: + rows = [] + for path in sorted(ROOT.glob("*_timings.csv.gz")): + with gzip.open(path, "rt") as handle: + for row in csv.DictReader(line for line in handle if not line.startswith("#")): + for name in ("batch", "n", "k", "layer"): + row[name] = int(row[name]) + for name in list(row): + if name.endswith("_us"): + row[name] = float(row[name]) if row[name] else None + rows.append(row) + if len(rows) != 9746 or len({(r["cell"], r["batch"]) for r in rows}) != 9746: + raise ValueError("Expected exactly 9,746 unique cases") + with gzip.open(ROOT / "temporal_comparison.csv.gz", "rt") as handle: + historical = list(csv.DictReader(line for line in handle if not line.startswith("#"))) + lookup = {(r["cell"], int(r["batch"])): r for r in historical} + if len(lookup) != len(rows) or len(historical) != len(rows): + raise ValueError("Temporal observations must cover the same 9,746 unique cases") + for row in rows: + old = lookup[(row["cell"], row["batch"])] + for arm in TEMPORAL: + row[arm + "_us"] = float(old[arm + "_us"]) + return rows + + +def _stats(rows: list[dict], arm: str, reference: str = "gvr_v2") -> dict: + valid = [r for r in rows if r[arm + "_us"] is not None] + ratios = [r[arm + "_us"] / r[reference + "_us"] for r in valid] + if not valid: + return {"cases": 0} + return { + "cases": len(valid), + "geomean": geometric_mean(ratios), + "minimum": min(ratios), + "p5": float(np.percentile(ratios, 5)), + "p95": float(np.percentile(ratios, 95)), + "wins": sum(x > 1 for x in ratios), + "win_percent": 100 * mean(x > 1 for x in ratios), + "baseline_median_us": median(r[arm + "_us"] for r in valid), + "gvr_median_us": median(r[reference + "_us"] for r in valid), + } + + +def _save(fig: plt.Figure, name: str) -> None: + path = ROOT / (name + ".svg") + fig.savefig( + path, + bbox_inches="tight", + metadata={"Date": None, "Description": COPYRIGHT}, + ) + path.write_text("\n".join(line.rstrip() for line in path.read_text().splitlines()) + "\n") + plt.close(fig) + + +def _comparison(rows: list[dict]) -> dict: + """Normalize every bar to V2 over one common case set per model.""" + result = {} + for model in MODELS: + matched = _matching(rows, model) + result[model] = { + "cases": len(matched), + "layers": len({r["layer"] for r in matched}), + "latency_relative_to_v2": { + arm: _stats(matched, arm)["geomean"] + for arm in COMPARISON_ARMS + if not (model == "pro" and arm == "hpc_ops") + }, + } + return result + + +def _overview(rows: list[dict]) -> None: + data = _comparison(rows) + fig, axes = plt.subplots(1, 3, figsize=(14, 6.3), sharey=True) + fig.subplots_adjust(left=0.185, right=0.97, bottom=0.23, top=0.78, wspace=0.14) + labels = [ + "GVR V2", + "Temporal GVR · R0", + "Temporal GVR · tiered", + "SGLang v2", + "FlashInfer", + "TRT-LLM radix CUDA", + "DeepSelect FP32", + "HPC-ops FP32", + ] + positions = [8.1, 6.8, 5.8, 4.5, 3.5, 2.5, 1.5, 0.5] + for ax, (model, title) in zip(axes, MODELS.items()): + panel = data[model] + ax.axhspan(7.55, 8.65, color="#edf5df", zorder=0) + ax.axvline(1, color="#579600", alpha=0.55, linewidth=1, linestyle=(0, (2, 3))) + for y, arm in zip(positions, COMPARISON_ARMS): + value = panel["latency_relative_to_v2"].get(arm) + if value is None: + ax.text(0.15, y, "Not supported", fontsize=10, color="#88939f", va="center") + continue + ax.barh(y, value, height=0.63, color=COLORS[arm], zorder=3) + ax.text( + value + 0.10, + y, + f"{value:.2f}×", + va="center", + fontsize=10.5, + weight="bold" if arm == "gvr_v2" else "normal", + color="#447a00" if arm == "gvr_v2" else "#334155", + ) + name, kval = title.split(" · ") + ax.set_title(name, loc="left", fontsize=12.5, weight="bold", pad=28) + ax.text( + 0, + 1.025, + kval, + transform=ax.transAxes, + fontsize=9.5, + color="#52616f", + ) + ax.set(xlim=(0, 5.95), ylim=(-0.1, 8.7), xticks=[0, 1, 2, 3, 4, 5]) + ax.xaxis.set_major_formatter(FuncFormatter(lambda value, _: f"{value:g}×")) + ax.set_yticks(positions, labels, fontsize=10.5) + ax.tick_params(axis="both", length=0, pad=8) + ax.spines["left"].set_visible(False) + ax.spines["bottom"].set_color("#d5dce3") + ax.set_axisbelow(True) + ax.grid(axis="x", color="#e9edf1", linewidth=0.7) + axes[0].get_yticklabels()[0].set(color="#447a00", weight="bold") + fig.text( + 0.035, + 0.935, + "One view of the competition — and the GVR evolution", + fontsize=20, + weight="bold", + color="#17202b", + ) + fig.text( + 0.035, + 0.875, + "Geometric-mean kernel time relative to GVR V2 · shorter is faster · B200 / FP32", + fontsize=11, + color="#52616f", + ) + fig.text( + 0.185, + 0.13, + "Same workloads within each panel. GVR V2 = 1.00×.", + fontsize=10, + color="#334155", + ) + fig.text( + 0.035, + 0.067, + "Temporal GVR: R0 threshold ladder and tiered execution. V2: current-row self-sampling.", + fontsize=9, + color="#52616f", + ) + fig.text( + 0.035, + 0.032, + "SGLang includes plan + transform. HPC-ops supports K=512 and K=2048.", + fontsize=9, + color="#52616f", + ) + _save(fig, "speedup") + + +def _box( + ax: plt.Axes, + xy: tuple[float, float], + size: tuple[float, float], + text: str, + color: str = "#edf5df", + fontsize: float = 11, +) -> None: + ax.add_patch( + FancyBboxPatch( + xy, + *size, + boxstyle="round,pad=0.08,rounding_size=0.08", + facecolor=color, + edgecolor="#ccd5dd", + linewidth=0.8, + ) + ) + ax.text( + xy[0] + size[0] / 2, + xy[1] + size[1] / 2, + text, + ha="center", + va="center", + fontsize=fontsize, + color="#17202b", + linespacing=1.5, + ) + + +def _evolution(rows: list[dict]) -> None: + fig = plt.figure(figsize=(14, 5.6)) + ax = fig.add_axes((0.02, 0.16, 0.61, 0.69)) + ax.set(xlim=(0, 10), ylim=(0, 6)) + ax.axis("off") + ax.text( + 0.2, + 5.55, + "Original GVR V1: temporal warm start + scalar threshold search", + fontsize=11, + weight="bold", + color="#7557a6", + ) + for x, label in [ + (0.2, "Previous indices\n→ current-score gather"), + (3.6, "Guess T → full-row count\n→ adjust T if needed"), + (7.0, "Collect candidates\n→ exact refinement"), + ]: + _box(ax, (x, 3.8), (2.8, 1.2), label, "#f2eef9", 10) + ax.text( + 0.2, + 3.25, + "Two dependent reads; threshold quality follows temporal overlap.", + fontsize=10, + color="#475569", + ) + ax.text( + 0.2, + 2.55, + "GVR V2 streaming: self-sampling + multi-thresholding", + fontsize=11, + weight="bold", + color="#447a00", + ) + for x, label in [ + (0.2, "Coalesced current-row\nsample → tail bracket"), + (3.6, "Full-row classification\n→ many exact counts"), + (7.0, "Emit certain winners\n→ refine crossing bin"), + ]: + _box(ax, (x, 0.8), (2.8, 1.2), label, fontsize=10) + for y in (4.4, 1.4): + for x in (3.02, 6.42): + ax.annotate( + "", + (x + 0.5, y), + (x, y), + arrowprops={"arrowstyle": "->", "color": "#64748b", "lw": 1.5}, + ) + ax.text( + 0.2, + 0.23, + "Current-row information; no previous-step Top-K state.", + fontsize=10, + color="#447a00", + ) + bars = fig.add_axes((0.76, 0.25, 0.21, 0.5)) + arms = [*TEMPORAL, "gvr_v2"] + for i, arm in enumerate(arms): + ratios = [r["radix_cuda_us"] / r[arm + "_us"] for r in rows] + value = geometric_mean(ratios) + bars.barh(i, value, height=0.52, color=["#baa6d3", "#7557a6", "#579600"][i]) + bars.text(value + 0.1, i, f"{value:.2f}×", va="center", weight="bold", fontsize=12) + bars.set_yticks( + range(3), + ["Temporal R0", "Temporal tiered", "GVR V2"], + fontsize=10, + ) + bars.invert_yaxis() + bars.set_xlim(0, 6) + bars.set_xticks([0, 1, 2, 3, 4, 5]) + bars.set_xlabel("Speedup over radix CUDA", fontsize=10) + bars.set_title("Measured evolution", fontsize=12, loc="left", weight="bold", pad=18) + bars.grid(axis="x", alpha=0.12) + bars.set_axisbelow(True) + fig.suptitle( + "From temporal prediction to current-row calibration", + x=0.03, + ha="left", + fontsize=20, + weight="bold", + y=0.98, + ) + fig.text( + 0.035, + 0.06, + "R0 already introduced a hint-derived threshold ladder. " + "V2 combines that direction with current-row sampling and execution specialization.", + fontsize=10, + color="#475569", + ) + fig.text( + 0.035, + 0.005, + "Bars compare the temporal R0, temporal tiered, and self-sampling V2 implementations.", + fontsize=9, + color="#475569", + ) + _save(fig, "evolution") + + +def _algorithm() -> None: + fig, ax = plt.subplots(figsize=(14, 6.8)) + ax.set(xlim=(0, 14), ylim=(0, 7)) + ax.axis("off") + headings = [ + (0.2, "1 SELF-SAMPLE", "Place the bracket near the current tail"), + (4.9, "2 MULTI-THRESHOLD", "Get many exact counts from one classification"), + (9.65, "3 REFINE", "Finish only the uncertain boundary"), + ] + for x, heading, subtitle in headings: + ax.text(x, 6.5, heading, fontsize=14, weight="bold", color="#447a00") + ax.text(x, 6.04, subtitle, fontsize=9.3, color="#475569") + ax.text(0.2, 5.5, "Current row: sparse, regularly spaced vector loads", fontsize=9) + for i in range(32): + sampled = i % 8 < 2 + ax.add_patch( + Rectangle( + (0.2 + i * 0.126, 4.85), 0.112, 0.36, facecolor="#76b900" if sampled else "#dfe5eb" + ) + ) + ax.text(0.2, 4.46, "Sample histogram ≈ current score distribution", fontsize=9) + sample = [1, 3, 5, 8, 11, 14, 12, 9, 6, 3, 2, 1] + for i, h in enumerate(sample): + ax.add_patch(Rectangle((0.25 + i * 0.32, 2.7), 0.28, h * 0.085, facecolor="#a7c976")) + for x, label, y in [(2.37, "T_floor", 2.16), (2.69, "T", 2.45), (3.33, "T_K", 2.16)]: + ax.plot([x, x], [2.66, 3.9], color="#7557a6", linestyle="--", linewidth=1) + ax.text(x, y, label, ha="center", fontsize=10, color="#7557a6") + ax.text( + 0.2, + 1.45, + "Ranks ≈ 2AS/N, AS/N, KS/N\n→ safety floor, admission threshold, upper anchor", + fontsize=9.3, + linespacing=1.5, + ) + ax.annotate( + "", (4.7, 3.6), (4.2, 3.6), arrowprops={"arrowstyle": "->", "lw": 2, "color": "#64748b"} + ) + _box(ax, (4.95, 4.8), (4.05, 0.65), "Every valid score is examined", "#e9eff5", 11) + ax.text(4.9, 4.25, "Exact histogram → suffix counts at all bin boundaries", fontsize=9) + counts = [1000, 700, 400, 250, 150, 100, 80, 73, 380, 330, 270] + for i, count in enumerate(counts): + color = "#f5b642" if i == 7 else ("#579600" if i > 7 else "#cbd5e1") + ax.add_patch(Rectangle((5.0 + i * 0.36, 2.7), 0.31, 0.18 + count / 800, facecolor=color)) + ax.text(5.0, 2.35, "T", fontsize=10) + ax.text(8.9, 2.35, "H", fontsize=10) + ax.annotate( + "73 in crossing bin", + (7.7, 3.02), + (6.0, 3.65), + fontsize=9, + arrowprops={"arrowstyle": "->", "color": "#8c661c"}, + color="#8c661c", + ) + ax.text(8.43, 3.82, "980\nabove", fontsize=10, ha="center", color="#447a00") + ax.text( + 4.9, + 1.45, + "256 verification bins (shown schematically)\nOne bin assignment per survivor, then an on-chip scan", + fontsize=9.3, + linespacing=1.5, + ) + ax.annotate( + "", (9.5, 3.6), (9.05, 3.6), arrowprops={"arrowstyle": "->", "lw": 2, "color": "#64748b"} + ) + _box(ax, (9.75, 4.45), (3.75, 0.85), "980 certain winners", fontsize=13) + _box(ax, (9.75, 3.0), (3.75, 0.85), "Select 44 of 73 boundary candidates", "#fff3d9", 10.5) + _box(ax, (9.75, 1.55), (3.75, 0.85), "1,024 exact output indices", fontsize=12) + for y in (4.05, 2.6): + ax.annotate( + "", + (11.6, y - 0.1), + (11.6, y + 0.25), + arrowprops={"arrowstyle": "->", "color": "#64748b"}, + ) + _box( + ax, + (0.25, 0.12), + (13.2, 0.64), + "If the sample misses: lower the admission threshold or invoke exact recovery. " + "An incomplete candidate buffer never proves correctness.", + "#f1f4f7", + 10, + ) + fig.subplots_adjust(left=0.01, right=0.99, bottom=0.03, top=0.98) + _save(fig, "algorithm") + + +def _matching(rows: list[dict], model: str) -> list[dict]: + required = ["gvr_v2", *ARMS] if model != "pro" else ["gvr_v2", *ARMS[:-1]] + return [ + r for r in rows if r["model"] == model and all(r[a + "_us"] is not None for a in required) + ] + + +def _line_data(rows: list[dict], arm: str, batch: int) -> tuple[list[float], list[float]]: + selected = [r for r in rows if r["batch"] == batch] + buckets = sorted({r["isl_bucket"] for r in selected}, key=lambda x: int(x[:-1])) + groups = [[r for r in selected if r["isl_bucket"] == bucket] for bucket in buckets] + return ( + [median(r["n"] for r in group) for group in groups], + [mean(r[arm + "_us"] for r in group) for group in groups], + ) + + +def _legend(fig: plt.Figure) -> None: + handles = [ + Line2D( + [0], + [0], + color=COLORS[a], + linewidth=2.5, + linestyle="--" if a in CROSS_CAMPAIGN else "-", + label=LABELS[a], + ) + for a in ["gvr_v2", *ARMS] + ] + fig.legend( + handles=handles, + loc="lower center", + ncol=3, + frameon=False, + bbox_to_anchor=(0.5, 0.01), + fontsize=10, + ) + + +def _latency(rows: list[dict]) -> None: + fig, axes = plt.subplots(3, 2, figsize=(13, 11)) + for i, (model, title) in enumerate(MODELS.items()): + matched = _matching(rows, model) + for j, batch in enumerate((1, 1024)): + ax = axes[i, j] + for arm in ["gvr_v2", *ARMS]: + if model == "pro" and arm == "hpc_ops": + continue + x, y = _line_data(matched, arm, batch) + ax.plot( + x, + y, + marker="o", + markersize=3, + color=COLORS[arm], + linewidth=2.3 if arm == "gvr_v2" else 1.6, + linestyle="--" if arm in CROSS_CAMPAIGN else "-", + ) + ax.set_xscale("log", base=2) + ax.set_yscale("log") + ax.set_xticks( + [2**n for n in ((10, 12, 14, 16, 18) if model != "v32" else (12, 14, 16, 18))] + ) + ax.xaxis.set_major_formatter(FuncFormatter(lambda value, _: f"{value / 1024:g}K")) + ax.yaxis.set_major_formatter(FuncFormatter(lambda value, _: f"{value:g}")) + ax.set_title(f"{title} | B={batch}", fontsize=12, loc="left") + ax.set_ylabel("Mean kernel time (µs)") + ax.set_xlabel("Valid indexer row length N") + ax.grid(which="major", alpha=0.18) + fig.suptitle("Latency across row lengths and batch sizes", fontsize=18, weight="bold", y=0.995) + fig.subplots_adjust(hspace=0.52, wspace=0.2, bottom=0.14, top=0.94) + _legend(fig) + _save(fig, "latency") + + +def _roofline(rows: list[dict]) -> None: + model_data = json.loads((ROOT / "provenance.json").read_text())["roofline_model"] + bw = model_data["measured_bandwidth_tb_s"] + compare = model_data["measured_compare_t_s"] + fig = plt.figure(figsize=(14, 9.4), facecolor="white") + top = fig.add_axes((0.075, 0.61, 0.875, 0.245)) + intensity = np.geomspace(0.05, 24, 400) + top.axvspan(0.125, 0.25, color="#edf5df", zorder=0) + top.plot( + intensity, + np.minimum( + model_data["theoretical_bandwidth_tb_s"] * intensity, + model_data["theoretical_compare_t_s"], + ), + color="#94a3b8", + linestyle=(0, (5, 3)), + linewidth=1.8, + ) + top.plot(intensity, np.minimum(bw * intensity, compare), color="#273746", linewidth=2.4) + top.plot([0.125, 0.25], [bw * 0.125, bw * 0.25], color=COLORS["gvr_v2"], linewidth=5) + top.annotate( + "Ideal Top-K band\n0.125–0.25 compare/byte", + xy=(0.18, bw * 0.18), + xytext=(0.055, 12), + fontsize=10.5, + color="#447a00", + arrowprops={"arrowstyle": "->", "color": "#579600", "connectionstyle": "arc3,rad=.15"}, + ) + top.text(0.85, 2.0, "Bandwidth slope\n6.912 TB/s × intensity", fontsize=10.5, color="#334155") + top.annotate( + "Compare ceiling\n37.047 Tcompare/s", + xy=(12, compare), + xytext=(7, 4.5), + fontsize=10.5, + color="#334155", + arrowprops={"arrowstyle": "->", "color": "#64748b"}, + ) + top.plot(compare / bw, compare, "o", color="#273746", markersize=5) + top.text(5.0, 63, "Knee: 5.36", fontsize=10, ha="center", color="#52616f") + top.set(xscale="log", yscale="log", xlim=(0.05, 24), ylim=(0.2, 100)) + top.set_xticks([0.125, 0.25, 1, 4, 16], ["0.125", "0.25", "1", "4", "16"]) + top.set_yticks([1, 10, 100], ["1", "10", "100"]) + top.minorticks_off() + top.set_xlabel("Operational intensity · compare/byte", fontsize=10.5, labelpad=8) + top.set_ylabel("Tcompare/s", fontsize=10.5) + top.grid(axis="y", color="#e9edf1", linewidth=0.7) + top.tick_params(length=0, pad=7) + for spine in ("left", "bottom"): + top.spines[spine].set_color("#d5dce3") + top.legend( + handles=[ + Line2D([0], [0], color="#273746", lw=2.4, label="Measured calibration"), + Line2D( + [0], + [0], + color="#94a3b8", + lw=1.8, + linestyle=(0, (5, 3)), + label="Theoretical reference", + ), + ], + loc="upper left", + bbox_to_anchor=(0.015, 1.21), + ncol=2, + fontsize=9.5, + frameon=False, + ) + for i, (model, title) in enumerate(MODELS.items()): + ax = fig.add_axes((0.075 + i * 0.305, 0.205, 0.26, 0.23)) + matched = _matching(rows, model) + k = matched[0]["k"] + xroof = np.linspace(0.125, 0.25, 100) + ax.fill_between(xroof, xroof * bw, 1.95, color="#f2f5f7", zorder=0) + ax.plot(xroof, xroof * bw, color="#273746", linestyle=(0, (2, 2)), linewidth=1.5) + for arm in [*ARMS, "gvr_v2"]: + if model == "pro" and arm == "hpc_ops": + continue + widths, times = _line_data(matched, arm, 1024) + x = [n / (4 * (n + k)) for n in widths] + y = [1024 * n / (us * 1e6) for n, us in zip(widths, times)] + ax.plot( + x, + y, + color=COLORS[arm], + linewidth=2.8 if arm == "gvr_v2" else 1.5, + linestyle="--" if arm in CROSS_CAMPAIGN else "-", + marker="o" if arm == "gvr_v2" else ".", + markersize=4.5, + alpha=1 if arm == "gvr_v2" else 0.8, + zorder=5 if arm == "gvr_v2" else 3, + ) + ax.set(xlim=(0.123, 0.253), ylim=(0, 1.95)) + ax.set_xticks([0.125, 0.175, 0.225, 0.25], [".125", ".175", ".225", ".250"]) + ax.set_yticks([0, 0.5, 1, 1.5], ["0", "0.5", "1.0", "1.5"]) + ax.set_xlabel("Intensity (compare/byte)", fontsize=10, labelpad=8) + ax.set_title(title, fontsize=11, loc="left", pad=12, weight="bold") + if i == 0: + ax.set_ylabel("Work throughput (Tcompare/s)", fontsize=10) + ax.text(0.133, 1.73, "Calibrated roof", fontsize=9, color="#52616f") + ax.grid(axis="y", color="#e9edf1", linewidth=0.7) + ax.tick_params(length=0, labelsize=9, pad=7) + for spine in ("left", "bottom"): + ax.spines[spine].set_color("#d5dce3") + fig.text( + 0.035, + 0.96, + "Top-K lives on the bandwidth slope", + fontsize=21, + weight="bold", + color="#17202b", + ) + fig.text( + 0.035, + 0.92, + "A. The full B200 roofline · Top-K intensity stays far below the compute knee", + fontsize=11.5, + color="#52616f", + ) + fig.text( + 0.075, + 0.515, + "B. Zoom in: how close do measured kernels get?", + fontsize=13, + weight="bold", + color="#17202b", + ) + fig.text( + 0.075, + 0.482, + "B = 1024 · identical layers per model · higher is faster", + fontsize=10.5, + color="#52616f", + ) + handles = [ + Line2D( + [0], + [0], + color=COLORS[a], + linewidth=2.5, + linestyle="--" if a in CROSS_CAMPAIGN else "-", + label=LABELS[a], + ) + for a in ["gvr_v2", *ARMS] + ] + fig.legend( + handles=handles, + loc="lower center", + ncol=3, + frameon=False, + bbox_to_anchor=(0.53, 0.077), + fontsize=10, + ) + fig.text( + 0.075, + 0.046, + "Shared ideal work: BN comparisons. Minimum traffic: 4B(N + K) bytes. " + "Extra passes and output work remain in measured time.", + fontsize=9, + color="#52616f", + ) + fig.text( + 0.075, + 0.018, + "Line styles distinguish benchmark runs. Work throughput uses the same logical task for every kernel.", + fontsize=9, + color="#52616f", + ) + _save(fig, "roofline") + + +def _speedup_map(rows: list[dict]) -> None: + fig, axes = plt.subplots(1, 3, figsize=(14, 5.8)) + batches = sorted({r["batch"] for r in rows}) + for ax, (model, title) in zip(axes, MODELS.items()): + selected = [r for r in rows if r["model"] == model and r["sglang_us"] is not None] + buckets = sorted({r["isl_bucket"] for r in selected}, key=lambda s: int(s[:-1])) + values = [] + widths = [] + for bucket in buckets: + group = [r for r in selected if r["isl_bucket"] == bucket] + widths.append(median(r["n"] for r in group) / 1024) + values.append( + [ + geometric_mean( + r["sglang_us"] / r["gvr_v2_us"] for r in group if r["batch"] == b + ) + for b in batches + ] + ) + data = np.asarray(values) + graphic = ax.imshow( + data, aspect="auto", cmap="BrBG", norm=TwoSlopeNorm(vmin=0.8, vcenter=1, vmax=5) + ) + for y in range(len(buckets)): + for x in range(len(batches)): + ax.text( + x, + y, + f"{data[y, x]:.1f}", + ha="center", + va="center", + fontsize=7.1, + color="white" if data[y, x] > 3.3 else "#17202b", + ) + ax.set_xticks(range(len(batches)), batches, rotation=60, fontsize=9) + ax.set_yticks(range(len(widths)), [f"{n:.0f}K" for n in widths], fontsize=9) + ax.set_xlabel("Batch size B") + ax.set_ylabel("Valid row length N (rounded)") + ax.set_title(title, loc="left", fontsize=11, pad=12) + fig.suptitle( + "GVR V2 vs SGLang: gains across the full length–batch grid", + fontsize=18, + x=0.035, + ha="left", + weight="bold", + y=1.02, + ) + fig.subplots_adjust(left=0.06, right=0.99, top=0.87, bottom=0.34, wspace=0.27) + cax = fig.add_axes((0.34, 0.09, 0.32, 0.026)) + bar = fig.colorbar(graphic, cax=cax, orientation="horizontal", ticks=[0.8, 1, 2, 3, 4, 5]) + bar.set_label("SGLang time / GVR V2 time · geometric mean across layers", fontsize=9) + fig.text( + 0.06, + 0.17, + "SGLang plan + transform · 1.0× is parity · each tile averages the layer-level speedups at that shape.", + fontsize=9, + ) + _save(fig, "sglang_map") + + +def main() -> None: + """Validate the frozen dataset, then regenerate statistics and six figures.""" + plt.rcParams.update( + { + "font.family": "DejaVu Sans", + "font.size": 11, + "svg.fonttype": "none", + "svg.hashsalt": "gvr-v2-blog", + "axes.spines.top": False, + "axes.spines.right": False, + } + ) + rows = _load() + summary = { + "copyright": COPYRIGHT, + "overall": {a: _stats(rows, a) for a in ARMS}, + "comparison_common_cases": _comparison(rows), + "by_model": { + m: {a: _stats([r for r in rows if r["model"] == m], a) for a in ARMS} for m in MODELS + }, + "sglang_transform_only": _stats(rows, "sglang_transform"), + "deepselect_bf16": _stats(rows, "deepselect_bf16", "gvr_bf16_run"), + "temporal_vs_v2": {a: _stats(rows, a) for a in TEMPORAL}, + "evolution_vs_radix": { + a: { + "geomean": geometric_mean(r["radix_cuda_us"] / r[a + "_us"] for r in rows), + "wins_percent": 100 * mean(r["radix_cuda_us"] > r[a + "_us"] for r in rows), + } + for a in [*TEMPORAL, "gvr_v2"] + }, + } + (ROOT / "summary.json").write_text(json.dumps(summary, indent=2) + "\n") + for name, result in summary["overall"].items(): + print( + name, f"{result['geomean']:.6f}×", result["cases"], f"wins {result['win_percent']:.3f}%" + ) + _overview(rows) + _evolution(rows) + _algorithm() + _speedup_map(rows) + _latency(rows) + _roofline(rows) + + +if __name__ == "__main__": + main() diff --git a/docs/source/blogs/media/gvr_v2/pro_timings.csv.gz b/docs/source/blogs/media/gvr_v2/pro_timings.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..14100f2776a13832794f72e42ff0bb419cb56ad3 GIT binary patch literal 78761 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 + + + + + + + Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. SPDX-License-Identifier: Apache-2.0 + image/svg+xml + + + Matplotlib v3.10.8, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + 0.125 + + + + + + 0.25 + + + + + + 1 + + + + + + 4 + + + + + + 16 + + + + Operational intensity · compare/byte + + + + + + + + + + 1 + + + + + + + + + 10 + + + + + + + + + 100 + + + + Tcompare/s + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Ideal Top-K band + 0.125–0.25 compare/byte + + + Bandwidth slope + 6.912 TB/s × intensity + + + + + + + Compare ceiling + 37.047 Tcompare/s + + + Knee: 5.36 + + + + + + + Measured calibration + + + + + + Theoretical reference + + + + + + + + + + + + + + + + + + + + .125 + + + + + + .175 + + + + + + .225 + + + + + + .250 + + + + Intensity (compare/byte) + + + + + + + + + + 0 + + + + + + + + + 0.5 + + + + + + + + + 1.0 + + + + + + + + + 1.5 + + + + Work throughput (Tcompare/s) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Calibrated roof + + + DeepSeek-V4 Flash · K=512 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + .125 + + + + + + .175 + + + + + + .225 + + + + + + .250 + + + + Intensity (compare/byte) + + + + + + + + + + 0 + + + + + + + + + 0.5 + + + + + + + + + 1.0 + + + + + + + + + 1.5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DeepSeek-V4 Pro · K=1024 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + .125 + + + + + + .175 + + + + + + .225 + + + + + + .250 + + + + Intensity (compare/byte) + + + + + + + + + + 0 + + + + + + + + + 0.5 + + + + + + + + + 1.0 + + + + + + + + + 1.5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DeepSeek-V3.2 · K=2048 + + + + + + + + + + + + + + + + Top-K lives on the bandwidth slope + + + A. The full B200 roofline · Top-K intensity stays far below the compute knee + + + B. Zoom in: how close do measured kernels get? + + + B = 1024 · identical layers per model · higher is faster + + + Shared ideal work: BN comparisons. Minimum traffic: 4B(N + K) bytes. Extra passes and output work remain in measured time. + + + Line styles distinguish benchmark runs. Work throughput uses the same logical task for every kernel. + + + + + + + GVR V2 + + + + + + SGLang v2 (plan + transform) + + + + + + FlashInfer 0.6.14 + + + + + + TensorRT-LLM radix CUDA + + + + + + DeepSelect FP32 + + + + + + HPC-ops FP32 + + + + + + + + + + + + + + + + + + diff --git a/docs/source/blogs/media/gvr_v2/sglang_map.svg b/docs/source/blogs/media/gvr_v2/sglang_map.svg new file mode 100644 index 000000000000..a99d46f3ef90 --- /dev/null +++ b/docs/source/blogs/media/gvr_v2/sglang_map.svg @@ -0,0 +1,1665 @@ + + + + + + + + Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. SPDX-License-Identifier: Apache-2.0 + image/svg+xml + + + Matplotlib v3.10.8, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + + + + + + + + + 2 + + + + + + + + + + 4 + + + + + + + + + + 8 + + + + + + + + + + 16 + + + + + + + + + + 32 + + + + + + + + + + 64 + + + + + + + + + + 128 + + + + + + + + + + 256 + + + + + + + + + + 512 + + + + + + + + + + 1024 + + + + Batch size B + + + + + + + + + + + + + + 1K + + + + + + + + + + 2K + + + + + + + + + + 4K + + + + + + + + + + 8K + + + + + + + + + + 16K + + + + + + + + + + 32K + + + + + + + + + + 64K + + + + + + + + + + 128K + + + + + + + + + + 256K + + + + Valid row length N (rounded) + + + + + + + + + + 1.9 + + + 1.8 + + + 1.8 + + + 1.8 + + + 1.9 + + + 1.9 + + + 1.9 + + + 1.8 + + + 1.9 + + + 2.4 + + + 2.9 + + + 1.9 + + + 1.8 + + + 1.8 + + + 1.8 + + + 1.9 + + + 1.8 + + + 1.8 + + + 1.7 + + + 1.7 + + + 2.0 + + + 2.1 + + + 1.7 + + + 1.7 + + + 1.7 + + + 1.6 + + + 1.7 + + + 1.7 + + + 1.7 + + + 1.6 + + + 1.6 + + + 1.7 + + + 1.8 + + + 1.4 + + + 1.4 + + + 1.4 + + + 1.4 + + + 1.5 + + + 1.5 + + + 1.4 + + + 1.4 + + + 1.2 + + + 1.5 + + + 1.4 + + + 1.7 + + + 1.7 + + + 1.7 + + + 1.7 + + + 1.7 + + + 1.7 + + + 1.6 + + + 1.5 + + + 1.4 + + + 1.7 + + + 1.6 + + + 1.8 + + + 1.8 + + + 1.8 + + + 1.7 + + + 2.1 + + + 2.0 + + + 1.8 + + + 1.4 + + + 1.4 + + + 1.6 + + + 1.5 + + + 1.9 + + + 1.8 + + + 1.8 + + + 1.8 + + + 1.8 + + + 2.7 + + + 2.2 + + + 1.8 + + + 1.5 + + + 1.6 + + + 1.5 + + + 1.8 + + + 1.8 + + + 1.8 + + + 1.7 + + + 1.4 + + + 4.2 + + + 2.6 + + + 1.9 + + + 1.7 + + + 1.6 + + + 1.7 + + + 2.0 + + + 1.9 + + + 1.8 + + + 1.7 + + + 1.6 + + + 4.5 + + + 4.5 + + + 2.3 + + + 1.7 + + + 1.6 + + + 1.9 + + + DeepSeek-V4 Flash · K=512 + + + + + + + + + + + + + + + + + + 1 + + + + + + + + + + 2 + + + + + + + + + + 4 + + + + + + + + + + 8 + + + + + + + + + + 16 + + + + + + + + + + 32 + + + + + + + + + + 64 + + + + + + + + + + 128 + + + + + + + + + + 256 + + + + + + + + + + 512 + + + + + + + + + + 1024 + + + + Batch size B + + + + + + + + + + + 1K + + + + + + + + + + 2K + + + + + + + + + + 4K + + + + + + + + + + 8K + + + + + + + + + + 16K + + + + + + + + + + 32K + + + + + + + + + + 64K + + + + + + + + + + 128K + + + + + + + + + + 256K + + + + Valid row length N (rounded) + + + + + + + + + + 1.9 + + + 1.9 + + + 1.9 + + + 1.9 + + + 1.9 + + + 1.9 + + + 1.9 + + + 1.8 + + + 1.7 + + + 2.1 + + + 2.6 + + + 1.9 + + + 1.8 + + + 1.8 + + + 1.8 + + + 1.8 + + + 1.8 + + + 1.8 + + + 1.7 + + + 1.6 + + + 1.9 + + + 2.0 + + + 1.7 + + + 1.7 + + + 1.7 + + + 1.7 + + + 1.7 + + + 1.7 + + + 1.7 + + + 1.6 + + + 1.6 + + + 1.8 + + + 1.9 + + + 1.5 + + + 1.4 + + + 1.4 + + + 1.4 + + + 1.5 + + + 1.5 + + + 1.5 + + + 1.4 + + + 1.2 + + + 1.4 + + + 1.3 + + + 1.7 + + + 1.7 + + + 1.7 + + + 1.7 + + + 1.7 + + + 1.7 + + + 1.6 + + + 1.5 + + + 1.5 + + + 1.7 + + + 1.5 + + + 1.9 + + + 1.9 + + + 1.9 + + + 1.8 + + + 2.1 + + + 2.0 + + + 1.8 + + + 1.3 + + + 1.4 + + + 1.6 + + + 1.5 + + + 1.9 + + + 1.9 + + + 1.9 + + + 1.8 + + + 1.9 + + + 2.7 + + + 2.2 + + + 1.6 + + + 1.5 + + + 1.6 + + + 1.4 + + + 1.7 + + + 1.8 + + + 1.8 + + + 1.7 + + + 1.3 + + + 3.6 + + + 2.7 + + + 1.8 + + + 1.5 + + + 1.4 + + + 1.5 + + + 2.0 + + + 1.9 + + + 1.7 + + + 1.6 + + + 1.6 + + + 4.1 + + + 4.7 + + + 2.3 + + + 1.6 + + + 1.5 + + + 1.7 + + + DeepSeek-V4 Pro · K=1024 + + + + + + + + + + + + + + + + + + 1 + + + + + + + + + + 2 + + + + + + + + + + 4 + + + + + + + + + + 8 + + + + + + + + + + 16 + + + + + + + + + + 32 + + + + + + + + + + 64 + + + + + + + + + + 128 + + + + + + + + + + 256 + + + + + + + + + + 512 + + + + + + + + + + 1024 + + + + Batch size B + + + + + + + + + + + 4K + + + + + + + + + + 8K + + + + + + + + + + 16K + + + + + + + + + + 32K + + + + + + + + + + 64K + + + + + + + + + + 128K + + + + + + + + + + 160K + + + + Valid row length N (rounded) + + + + + + + + + + 1.5 + + + 1.5 + + + 1.5 + + + 1.5 + + + 1.5 + + + 1.5 + + + 1.5 + + + 1.4 + + + 1.3 + + + 1.4 + + + 1.3 + + + 1.6 + + + 1.6 + + + 1.6 + + + 1.6 + + + 1.6 + + + 1.6 + + + 1.5 + + + 1.5 + + + 1.4 + + + 1.3 + + + 1.2 + + + 1.4 + + + 1.4 + + + 1.3 + + + 1.3 + + + 1.4 + + + 1.3 + + + 1.3 + + + 1.3 + + + 1.4 + + + 1.6 + + + 1.4 + + + 1.3 + + + 1.3 + + + 1.3 + + + 1.3 + + + 1.6 + + + 1.5 + + + 1.4 + + + 1.3 + + + 1.4 + + + 1.5 + + + 1.5 + + + 1.4 + + + 1.4 + + + 1.4 + + + 1.4 + + + 1.4 + + + 2.0 + + + 1.8 + + + 1.6 + + + 1.5 + + + 1.6 + + + 1.5 + + + 1.8 + + + 1.7 + + + 1.7 + + + 1.5 + + + 1.5 + + + 3.8 + + + 2.0 + + + 1.8 + + + 1.7 + + + 1.6 + + + 1.7 + + + 1.8 + + + 1.7 + + + 1.6 + + + 1.5 + + + 1.5 + + + 3.5 + + + 2.1 + + + 2.0 + + + 1.7 + + + 1.7 + + + 1.7 + + + DeepSeek-V3.2 · K=2048 + + + + + + + + + + + + + + + + 0.8 + + + + + + + + + + 1.0 + + + + + + + + + + 2.0 + + + + + + + + + + 3.0 + + + + + + + + + + 4.0 + + + + + + + + + + 5.0 + + + + SGLang time / GVR V2 time · geometric mean across layers + + + + + + + + + + GVR V2 vs SGLang: gains across the full length–batch grid + + + SGLang plan + transform · 1.0× is parity · each tile averages the layer-level speedups at that shape. + + + + + + + + + + + + + + diff --git a/docs/source/blogs/media/gvr_v2/speedup.svg b/docs/source/blogs/media/gvr_v2/speedup.svg new file mode 100644 index 000000000000..08214343d73a --- /dev/null +++ b/docs/source/blogs/media/gvr_v2/speedup.svg @@ -0,0 +1,722 @@ + + + + + + + + Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. SPDX-License-Identifier: Apache-2.0 + image/svg+xml + + + Matplotlib v3.10.8, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GVR V2 + + + + + + Temporal GVR · R0 + + + + + + Temporal GVR · tiered + + + + + + SGLang v2 + + + + + + FlashInfer + + + + + + TRT-LLM radix CUDA + + + + + + DeepSelect FP32 + + + + + + HPC-ops FP32 + + + + + + + + + + + + + + 1.00× + + + + + + 2.03× + + + + + + 1.48× + + + + + + 1.78× + + + + + + 2.12× + + + + + + 4.74× + + + + + + 1.98× + + + + + + 2.30× + + + K=512 + + + DeepSeek-V4 Flash + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1.00× + + + + + + 2.09× + + + + + + 1.50× + + + + + + 1.76× + + + + + + 2.14× + + + + + + 4.73× + + + + + + 2.07× + + + Not supported + + + K=1024 + + + DeepSeek-V4 Pro + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1.00× + + + + + + 1.75× + + + + + + 1.34× + + + + + + 1.55× + + + + + + 1.89× + + + + + + 5.15× + + + + + + 2.79× + + + + + + 1.30× + + + K=2048 + + + DeepSeek-V3.2 + + + + One view of the competition — and the GVR evolution + + + Geometric-mean kernel time relative to GVR V2 · shorter is faster · B200 / FP32 + + + Same workloads within each panel. GVR V2 = 1.00×. + + + Temporal GVR: R0 threshold ladder and tiered execution. V2: current-row self-sampling. + + + SGLang includes plan + transform. HPC-ops supports K=512 and K=2048. + + + + + + + + + + + + + + diff --git a/docs/source/blogs/media/gvr_v2/summary.json b/docs/source/blogs/media/gvr_v2/summary.json new file mode 100644 index 000000000000..26237e6e0361 --- /dev/null +++ b/docs/source/blogs/media/gvr_v2/summary.json @@ -0,0 +1,328 @@ +{ + "copyright": "Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. SPDX-License-Identifier: Apache-2.0", + "overall": { + "sglang": { + "cases": 9515, + "geomean": 1.659919912625496, + "minimum": 0.9452784089288601, + "p5": 1.284137593467646, + "p95": 2.294301211085517, + "wins": 9506, + "win_percent": 99.90541250656858, + "baseline_median_us": 14.365, + "gvr_median_us": 9.626 + }, + "flashinfer": { + "cases": 9515, + "geomean": 2.0126556370686415, + "minimum": 1.2048796877826886, + "p5": 1.4221216647629091, + "p95": 3.1066784765052313, + "wins": 9515, + "win_percent": 100, + "baseline_median_us": 16.902, + "gvr_median_us": 9.626 + }, + "radix_cuda": { + "cases": 9746, + "geomean": 4.92914283450788, + "minimum": 1.34452479338843, + "p5": 1.7330116321841083, + "p95": 9.409458499113798, + "wins": 9746, + "win_percent": 100, + "baseline_median_us": 46.3535, + "gvr_median_us": 9.651 + }, + "deepselect": { + "cases": 9746, + "geomean": 2.365726126886252, + "minimum": 0.8387043554773427, + "p5": 1.1323672895555466, + "p95": 5.269908377259912, + "wins": 9707, + "win_percent": 99.59983583008413, + "baseline_median_us": 26.854, + "gvr_median_us": 9.651 + }, + "hpc_ops": { + "cases": 6776, + "geomean": 1.5503113358686176, + "minimum": 0.707073853570024, + "p5": 1.0617866160873248, + "p95": 3.411471833093196, + "wins": 6666, + "win_percent": 98.37662337662337, + "baseline_median_us": 15.2865, + "gvr_median_us": 10.058 + } + }, + "comparison_common_cases": { + "flash": { + "cases": 2079, + "layers": 21, + "latency_relative_to_v2": { + "gvr_v2": 1.0, + "temporal_r0": 2.0293725740894857, + "temporal_tiered": 1.4841922688442863, + "sglang": 1.7813879012416804, + "flashinfer": 2.1168284413867866, + "radix_cuda": 4.738848498350794, + "deepselect": 1.9762668821010982, + "hpc_ops": 2.3022651105074425 + } + }, + "pro": { + "cases": 2970, + "layers": 30, + "latency_relative_to_v2": { + "gvr_v2": 1.0, + "temporal_r0": 2.092569227440768, + "temporal_tiered": 1.4982771524645222, + "sglang": 1.7583326591453858, + "flashinfer": 2.1380735012445657, + "radix_cuda": 4.730141753655872, + "deepselect": 2.0652926786843926 + } + }, + "v32": { + "cases": 4466, + "layers": 58, + "latency_relative_to_v2": { + "gvr_v2": 1.0, + "temporal_r0": 1.7452692400246128, + "temporal_tiered": 1.343629605500426, + "sglang": 1.5458744575710972, + "flashinfer": 1.8884614097529644, + "radix_cuda": 5.14935336398433, + "deepselect": 2.7938491864507595, + "hpc_ops": 1.3017841898865732 + } + } + }, + "by_model": { + "flash": { + "sglang": { + "cases": 2079, + "geomean": 1.7813879012416804, + "minimum": 0.9634314231629667, + "p5": 1.3783206714743743, + "p95": 2.633179873020246, + "wins": 2078, + "win_percent": 99.95189995189995, + "baseline_median_us": 11.911, + "gvr_median_us": 6.586 + }, + "flashinfer": { + "cases": 2079, + "geomean": 2.1168284413867866, + "minimum": 1.327138186198589, + "p5": 1.741738976670898, + "p95": 2.9409341645629477, + "wins": 2079, + "win_percent": 100, + "baseline_median_us": 15.267, + "gvr_median_us": 6.586 + }, + "radix_cuda": { + "cases": 2079, + "geomean": 4.738848498350794, + "minimum": 1.4393757503001199, + "p5": 1.6352899884566188, + "p95": 11.130091581813774, + "wins": 2079, + "win_percent": 100, + "baseline_median_us": 39.606, + "gvr_median_us": 6.586 + }, + "deepselect": { + "cases": 2079, + "geomean": 1.9762668821010982, + "minimum": 0.8387043554773427, + "p5": 1.2575985736118185, + "p95": 3.530044018339831, + "wins": 2057, + "win_percent": 98.94179894179894, + "baseline_median_us": 16.634, + "gvr_median_us": 6.586 + }, + "hpc_ops": { + "cases": 2079, + "geomean": 2.3022651105074425, + "minimum": 1.092841163310962, + "p5": 1.5165886364171397, + "p95": 5.3384128691328945, + "wins": 2079, + "win_percent": 100, + "baseline_median_us": 16.144, + "gvr_median_us": 6.586 + } + }, + "pro": { + "sglang": { + "cases": 2970, + "geomean": 1.7583326591453858, + "minimum": 0.9452784089288601, + "p5": 1.3523156478223413, + "p95": 2.6234948351553213, + "wins": 2963, + "win_percent": 99.76430976430977, + "baseline_median_us": 12.790500000000002, + "gvr_median_us": 7.0035 + }, + "flashinfer": { + "cases": 2970, + "geomean": 2.1380735012445657, + "minimum": 1.2048796877826886, + "p5": 1.7583690358151742, + "p95": 2.989261325105112, + "wins": 2970, + "win_percent": 100, + "baseline_median_us": 15.795, + "gvr_median_us": 7.0035 + }, + "radix_cuda": { + "cases": 2970, + "geomean": 4.730141753655872, + "minimum": 1.34452479338843, + "p5": 1.6644194770141632, + "p95": 10.492732386881801, + "wins": 2970, + "win_percent": 100, + "baseline_median_us": 42.3375, + "gvr_median_us": 7.0035 + }, + "deepselect": { + "cases": 2970, + "geomean": 2.0652926786843926, + "minimum": 0.8633132859486058, + "p5": 1.300981064323937, + "p95": 3.7401871934801103, + "wins": 2953, + "win_percent": 99.42760942760943, + "baseline_median_us": 18.569499999999998, + "gvr_median_us": 7.0035 + }, + "hpc_ops": { + "cases": 0 + } + }, + "v32": { + "sglang": { + "cases": 4466, + "geomean": 1.5458744575710972, + "minimum": 0.995505617977528, + "p5": 1.2471306665615176, + "p95": 2.0331705513657594, + "wins": 4465, + "win_percent": 99.97760859829825, + "baseline_median_us": 17.1005, + "gvr_median_us": 10.7935 + }, + "flashinfer": { + "cases": 4466, + "geomean": 1.8884614097529644, + "minimum": 1.2740702479338843, + "p5": 1.3864284809219347, + "p95": 3.336226127023025, + "wins": 4466, + "win_percent": 100, + "baseline_median_us": 18.2675, + "gvr_median_us": 10.7935 + }, + "radix_cuda": { + "cases": 4697, + "geomean": 5.1482115783067535, + "minimum": 2.146239180122966, + "p5": 3.609013753424199, + "p95": 8.883631207549637, + "wins": 4697, + "win_percent": 100, + "baseline_median_us": 49.974, + "gvr_median_us": 10.787 + }, + "deepselect": { + "cases": 4697, + "geomean": 2.791499963621508, + "minimum": 1.0073976656255137, + "p5": 1.1201868693909796, + "p95": 6.159466538766953, + "wins": 4697, + "win_percent": 100, + "baseline_median_us": 45.325, + "gvr_median_us": 10.787 + }, + "hpc_ops": { + "cases": 4697, + "geomean": 1.301380953511156, + "minimum": 0.707073853570024, + "p5": 1.040466706447916, + "p95": 1.6382505329224384, + "wins": 4587, + "win_percent": 97.65807962529274, + "baseline_median_us": 14.95, + "gvr_median_us": 10.787 + } + } + }, + "sglang_transform_only": { + "cases": 9515, + "geomean": 1.4216305273775935, + "minimum": 0.8034761658922732, + "p5": 1.0769350221910845, + "p95": 2.127197724856214, + "wins": 9399, + "win_percent": 98.78087230688386, + "baseline_median_us": 12.397, + "gvr_median_us": 9.626 + }, + "deepselect_bf16": { + "cases": 9746, + "geomean": 1.4046594964449852, + "minimum": 0.5546046749265552, + "p5": 0.9265655269109043, + "p95": 2.7501870173571765, + "wins": 8384, + "win_percent": 86.02503591216909, + "baseline_median_us": 14.144, + "gvr_median_us": 9.661 + }, + "temporal_vs_v2": { + "temporal_r0": { + "cases": 9746, + "geomean": 1.9056854507699208, + "minimum": 0.9918327259569409, + "p5": 1.3440862636763187, + "p95": 2.8577032051156213, + "wins": 9745, + "win_percent": 99.98973938025857, + "baseline_median_us": 16.9455, + "gvr_median_us": 9.651 + }, + "temporal_tiered": { + "cases": 9746, + "geomean": 1.4197420853024663, + "minimum": 0.6822172253667951, + "p5": 1.042921280424682, + "p95": 2.1030143856993346, + "wins": 9525, + "win_percent": 97.73240303714344, + "baseline_median_us": 12.232, + "gvr_median_us": 9.651 + } + }, + "evolution_vs_radix": { + "temporal_r0": { + "geomean": 2.5865458712068374, + "wins_percent": 88.7235789041658 + }, + "temporal_tiered": { + "geomean": 3.4718579420414657, + "wins_percent": 98.38908270059513 + }, + "gvr_v2": { + "geomean": 4.92914283450788, + "wins_percent": 100 + } + } +} diff --git a/docs/source/blogs/media/gvr_v2/temporal_comparison.csv.gz b/docs/source/blogs/media/gvr_v2/temporal_comparison.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..e20a2a0ebe7afe08f46d16827224d967d74b37f4 GIT binary patch literal 81185 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 literal 0 HcmV?d00001 diff --git a/docs/source/blogs/media/gvr_v2/v32_timings.csv.gz b/docs/source/blogs/media/gvr_v2/v32_timings.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..cdb3c026f6a73bbedd152fcc464449c4201ef4df GIT binary patch literal 136826 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%0AVw7Yv%UCIrW4x~`_l*j=rk9Bbjtk$62_zT@td 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

nN^tQe~axmoW|1dAL{dMx-87e5zF!#@}!7a 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

=m!@Q0fHqnR-reE3sy4 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%0D9gxx9( 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 M2mG=*c?0wY06^oUlK=n! literal 0 HcmV?d00001 diff --git a/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md b/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md new file mode 100644 index 000000000000..b3b2ea890aea --- /dev/null +++ b/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md @@ -0,0 +1,338 @@ + + +# GVR V2: Faster Exact Top-K with Self-Sampling and Multi-Thresholding + +By NVIDIA TensorRT-LLM Team + +## Introduction + +Selecting 1,024 INT32 indices from 131,072 FP32 scores writes just **4 KiB of output**, yet one complete read of the scores moves **512 KiB**. Every additional full-row pass pays that input cost again. For a sparse-attention indexer, finding the Top-K boundary can therefore cost far more than emitting the winners. + +GVR V2 makes each full-row pass more useful. **Self-sampling estimates where the current row's Top-K boundary lies; multi-thresholding derives many exact population counts from one classification pass.** Together, they concentrate exact refinement on the small group of scores still competing for the final slots. + +On B200, this design delivers **4.93× geometric-mean speedup over TensorRT-LLM radix CUDA and 1.66× over SGLang v2**, with **2.01× over FlashInfer, 2.37× over DeepSelect FP32, and 1.55× over HPC-ops FP32**. The workloads span DeepSeek-V3.2, DeepSeek-V4 Flash, and DeepSeek-V4 Pro indexers. The SGLang result includes planning; the transform-only comparison is **1.42×**. + +![Three horizontal bar-chart panels compare GVR V2, temporal GVR R0 and tiered versions, SGLang, FlashInfer, radix CUDA, DeepSelect FP32, and HPC-ops FP32 on common cases per model. GVR V2 is 1.00; shorter bars mean less kernel time.](../media/gvr_v2/speedup.svg) + +*Figure 1. Kernel time relative to GVR V2, geometrically averaged over the same workloads within each model; shorter is faster. The temporal bars show the R0 and tiered implementations. SGLang includes planning; HPC-ops does not support Pro.* + +[The original GVR blog](blog21_Temporal_Correlation_Meets_Sparse_Attention.md) described a temporal shortcut: the previous decode step's selected indices predict the next step's winners. V2 makes the row itself the source of the guess. This removes a dependent gather and the need to carry Top-K state across decode steps, while preserving the **Guess–Verify–Refine** exactness contract. It also makes the design useful for prefill, where a previous decode selection does not exist. + +## Table of Contents + +- [From GVR V1 to V2: Two Costs to Remove](#from-gvr-v1-to-v2-two-costs-to-remove) +- [Self-Sampling: Calibrate the Search to This Row](#self-sampling-calibrate-the-search-to-this-row) +- [Multi-Thresholding: Make Each Full-Row Pass Count](#multi-thresholding-make-each-full-row-pass-count) +- [Why the Two Ideas Work Together](#why-the-two-ideas-work-together) +- [Mapping Selection to Blackwell](#mapping-selection-to-blackwell) +- [Performance Against Five Baselines](#performance-against-five-baselines) +- [The Roofline Model: Fewer Passes, More Useful Work](#the-roofline-model-fewer-passes-more-useful-work) +- [Decode and Prefill in TensorRT-LLM](#decode-and-prefill-in-tensorrt-llm) +- [Further Reading](#further-reading) +- [Conclusion](#conclusion) + +## From GVR V1 to V2: Two Costs to Remove + +Original GVR V1 gathers the current scores at the previous step's Top-K indices, estimates a bracket from their minimum, maximum, and mean, then uses a secant-style search on the monotone count function + +$$ +C(T)=\sum_{i=0}^{N-1}\mathbf{1}[x_i\ge T]. +$$ + +It seeks an admission threshold with enough survivors to contain Top-K, but few enough to fit its candidate capacity. A good temporal prediction makes that search short. Two costs remain: loading the old indices before the score addresses are known, and scanning the row again when another threshold must be tested. The first is a memory dependency; the second multiplies traffic as $N$ grows. + +V2 addresses both. Its streaming paths read regularly spaced, coalesced samples of the current row to choose a useful bracket. They then classify the full row into bins whose cumulative counts evaluate many thresholds together. The algorithm spends a small amount of work learning where to look, then obtains much more information from each expensive full-row pass. + +V1 also used a histogram during local refinement after candidate collection. The distinction is where that information becomes available: V2 makes multi-threshold population information central to verification, so it can pass an already identified crossing to refinement. + +| Algorithm question | Original GVR V1 | Streaming GVR V2 | +| :--- | :--- | :--- | +| Where does the guess come from? | Current scores gathered through previous-step indices | A coalesced sample of the current row | +| What guides admission? | Hint statistics and scalar secant-style count queries | Sample-derived primary threshold, lower safety floor, and upper anchor | +| What does verification learn? | A count for the trial threshold | Exact bin populations and counts at many boundaries | +| Where is the remaining uncertainty? | The admitted candidate set | The crossing bin containing rank $K$ | +| What state crosses decode steps? | Per-layer prior indices | No Top-K prior | +| How does a bad guess affect the result? | More verification/refinement work | Lower admission or exact recovery; membership remains exact | + +![GVR V1 and V2 data-flow comparison beside measured progression from temporal R0 to tiered temporal GVR and self-sampling GVR V2.](../media/gvr_v2/evolution.svg) + +*Figure 2. Original V1 uses temporal hints and scalar threshold search. The later temporal R0 and tiered implementations introduce broader verification and execution specialization; V2 combines these advances with current-row self-sampling. Bars show speedup over radix CUDA.* + +Temporal R0 and tiered GVR achieve **2.59× and 3.47×** speedup over radix CUDA; V2 reaches **4.93×**. V2 is **1.91× faster than temporal R0** and **1.42× faster than tiered temporal GVR**, combining current-row sampling, multi-threshold verification, and specialized execution paths. + +## Self-Sampling: Calibrate the Search to This Row + +The first job is to place the search near the upper tail of this row's score distribution. V2 takes a small, deterministic sample distributed across the row and uses its ranks to estimate thresholds for the full population. The sample supplies a starting region; the later full-row verification decides whether that region contains enough candidates. + +In the `main` family, a sample unit is two adjacent `float4` vectors: eight scores loaded together. The clustered streaming family uses four vectors, or sixteen scores. Sample units are regularly spaced across the valid interval. Their addresses follow from the row layout, so sampling does not wait for previous-step indices. Sampling can still miss an unusual tail; its role is to reduce work, not to decide output membership. + +Let $S$ be the sample size and $A\ge K$ the desired full-row candidate population. A **256-bin sample histogram** approximates the score distribution. Descending sample ranks + +$$ +r_A\approx\frac{AS}{N},\qquad r_K\approx\frac{KS}{N},\qquad r_{2A}\approx\frac{2AS}{N} +$$ + +provide three anchors: + +- **Primary threshold $T$:** aim for roughly $A$ survivors, leaving room around the desired $K$ winners. +- **Upper anchor $T_K$:** estimate the neighborhood of rank $K$; together with $T$, it defines the upper classification bound $H$ (`HIC` in the implementation). +- **Lower floor $T_{\mathrm{floor}}$:** admit a larger population if the first estimate is too aggressive (`TSH` in the implementation). + +The concrete sample budget, safety margin in $A$, rank rounding, and capacity clamps depend on the launch family. The algorithm does not assume independent random samples or a known analytical distribution. Its useful property is that the bracket is calibrated from the same row whose boundary will be verified. + +![Self-sampling chooses a bracket, multi-threshold verification obtains exact bin counts, and refinement emits 980 certain winners plus 44 of 73 boundary candidates for K=1024.](../media/gvr_v2/algorithm.svg) + +*Figure 3. Two histograms serve different purposes: the sample histogram estimates a useful region; the verification histogram contains exact populations from the complete valid row or its complete admitted candidates. The pictured bin heights and 980/73/44 example are illustrative. Register-resident shortcuts are described below.* + +## Multi-Thresholding: Make Each Full-Row Pass Count + +A scalar verification pass answers one question: how many scores exceed $T$? Multi-thresholding obtains a family of answers from the same classification work. + +Conceptually, divide the bracket $[T,H]$ into $M$ ordered bins, with boundaries $t_0,\ldots,t_M$, and let $h_j$ be the exact population of bin $j$. A descending cumulative scan yields + +$$ +C(t_j)=\sum_{\ell=j}^{M-1}h_\ell. +$$ + +The streaming verification histogram has 256 bins. Each survivor is assigned to a bin once; a small on-chip cumulative scan then exposes counts at all its boundaries. **One classification contributes to an entire family of threshold counts.** The expensive score reads are shared, and the remaining scan touches only the bin counters. Verification can locate where the population crosses $K$ without issuing another full-row query for each trial threshold. + +Values above $H$ saturate into the top bin and remain candidates. Full-row accounting establishes whether enough survivors exist. The implementation may build the histogram during streaming, merge shard histograms through distributed shared memory, or reconstruct it from a complete bounded staging slab. Those execution choices preserve the same logical result: exact populations must cover the admitted set before its crossing is trusted. + +### Turn a Threshold Search into a Boundary Problem + +Scanning bins from high scores to low identifies the crossing bin $j^{\ast}$ with + +$$ +a=\sum_{\ell\gt j^{\ast}}h_\ell\lt K,\qquad a+h_{j^{\ast}}\ge K. +$$ + +Every score in a higher bin is a certain winner. Every score in a lower bin is unnecessary. Only $K-a$ winners must be chosen from the crossing bin's $m=h_{j^{\ast}}$ candidates: + +$$ +\mathrm{TopK}(x)=\lbrace \text{all positions in higher bins}\rbrace +\quad\cup\quad \mathrm{Top}_{K-a}(\text{crossing bin}). +$$ + +For $K=1024$, suppose 980 scores lie above the crossing bin and 73 lie inside it. Emit the 980 directly and select the best **44 of those 73**. The remaining ranking problem has shrunk from the full row to a narrow boundary population. If the entire crossing bin is needed, it can be emitted directly. Small crossings use direct ranking; larger ones use exact order-preserving FP32 key refinement. + +The histogram discretizes the search region, not the selected scores. Exact comparisons within the crossing bin resolve its coarse boundaries, including ties. Thus fewer passes do not require approximate Top-K membership. + +### Two Kinds of Thresholds, Two Different Jobs + +The **sample-derived admission ladder** ($T$, a lower floor, and a conservative sentinel) repairs a poor initial guess. The **verification bin boundaries** answer many exact population queries within an admitted region. They work at different levels and should not be confused. + +For non-split streaming, too few survivors can trigger another full-row scan at a valid lower floor and then at the sentinel. Split-row streaming can stage down to the lower floor within its scan and use exact recovery if necessary. Candidate overflow cannot be treated as a successful partial selection: the kernel re-scans or falls back to exact key-space selection over a complete candidate set or the whole row. + +## Why the Two Ideas Work Together + +The two ideas address successive sources of work. Self-sampling gives the histogram a useful region to resolve. Multi-threshold verification locates the exact crossing within that region. Refinement ranks only the candidates whose membership is still undecided. The expensive global operation gets progressively more information before the algorithm commits to more work. + +A good sample without broad verification could still pay for repeated full-row threshold tests. A histogram without a useful bracket could put too many scores into the crossing bin and leave expensive refinement. **V2 uses the sample to focus the bins, and the exact bin counts to make the sample safe.** Its performance objective is to avoid repeated expensive passes over $N$, while keeping most remaining work within a much smaller candidate region. + +This is an optimization of work, not a fixed one-pass guarantee. Difficult distributions, staging overflow, and unusable brackets may require extra scans. Exactness includes those paths: [PR #18625](https://github.com/NVIDIA/TensorRT-LLM/pull/18625) fixes register-family infinite-width brackets by using exact whole-row key selection, preserving `+inf` among the winners. + +The output contract is an exact selected **value multiset** with valid unique indices. Equal-valued candidates are interchangeable; index order need not match `torch.topk`. Short rows return all valid local indices followed by `-1` padding. NaN ordering remains implementation-specific. Guess quality controls the amount of work; complete counts and exact refinement control membership. + +## Mapping Selection to Blackwell + +A single scheduling policy cannot serve both one short row and thousands of long rows efficiently. GVR V2 uses four kernel families, implemented in CuTe DSL: + +| Family | Where the scores or candidates live | Why it helps | +| :--- | :--- | :--- | +| `reg` | A row resides in one thread block's registers | Avoids repeated global loads when the row fits | +| `reg_clus` | Register slices across cooperating blocks | Exposes more parallelism for medium rows at small batch sizes | +| `clus` | Streaming shards; histograms and candidates shared within a hardware cluster | Merges through distributed shared memory | +| `main` | Streaming scan with bounded candidate staging | Covers the remaining shapes, including long rows and large batches | + +A thread block is also called a cooperative thread array, or CTA. Blackwell thread-block clusters let cooperating CTAs exchange data through distributed shared memory. This reduces the need to materialize intermediate results in global memory for eligible shapes. + +Register families bypass sparse sampling but retain exact histogram crossing and refinement. In the normal case, the first $K$ current-row values establish the initial bracket; near the short-row regime, a whole-row bracket is used. Full-row classification and exact crossing refinement still determine the output. The `main` family can assign multiple CTAs to a row when a small batch would otherwise leave much of the GPU idle. + +This explains the two sources of performance improvement: a better starting threshold reduces selection work, and a suitable kernel family reduces the cost of executing that work. Neither eliminates the obligation to examine all valid scores. + +## Performance Against Five Baselines + +### The Gains Extend Beyond an Average + +Figure 1 puts the GVR evolution and library baselines on the same scale. Across the three models, tiered temporal GVR takes **1.34–1.50×** V2's time, SGLang takes **1.55–1.78×**, and radix CUDA takes **4.73–5.15×**. The comparison also reveals model-dependent behavior: HPC-ops is closer on V3.2 than on Flash, while DeepSelect's FP32 V3.2 route leaves a larger gap. + +GVR V2 is faster in every tested radix and FlashInfer comparison and in **99.91%** of SGLang comparisons. Figure 4 shows how the advantage changes with row length and batch size. + +![Three heatmaps of GVR V2 speedup over SGLang for every captured row-length bucket and all eleven batch sizes, averaged geometrically across layers.](../media/gvr_v2/sglang_map.svg) + +*Figure 4. SGLang plan + transform time divided by GVR V2 time, geometrically averaged across layers at each shape. A value of 1.0 means equal performance. Row lengths are rounded in the axis labels.* + +Long rows at intermediate batch sizes show particularly strong gains: **V4 Pro reaches 4.67× at $N=262{,}127$, $B=64$**. This is the strongest shape-average result in the grid; most regions are around 1.3–2.0×. + +Two details determine how these gains carry into an application: the actual row-length and batch distribution, and the work each API returns. The next sections make both explicit. + +### Benchmark Setup + +The benchmarks use FP32 indexer scores from the three models below on NVIDIA B200, with batch sizes from 1 to 1,024. Results report cold-L2 GPU kernel time, excluding compilation, input preparation, and Python overhead. Speedups are geometric means over matched workloads. + +| Model | $K$ | Indexer compression | Valid row lengths $N$ | +| :--- | ---: | ---: | :--- | +| DeepSeek-V4 Flash | 512 | 4 | 1,027–262,127 | +| DeepSeek-V4 Pro | 1,024 | 4 | 1,027–262,127 | +| DeepSeek-V3.2 | 2,048 | 1 | 4,111–163,775 | + +**$N$ is the indexer row width, not the original prompt length.** A roughly 512K-token V4 context yields a roughly 128K-wide indexer row because of 4× compression. + +### Overall and Per-Model Results + +| Baseline | Geomean speedup | Minimum speedup | GVR V2 faster | +| :--- | ---: | ---: | ---: | +| SGLang v2, plan + transform | **1.66×** | 0.95× | 99.91% | +| FlashInfer 0.6.14 `top_k` | **2.01×** | 1.20× | 100.00% | +| TensorRT-LLM radix CUDA dispatch | **4.93×** | 1.34× | 100.00% | +| DeepSelect v1.0.0 FP32 | **2.37×** | 0.84× | 99.60% | +| HPC-ops FP32 | **1.55×** | 0.71× | 98.38% | + +The minimum column exposes individual regressions that a geometric mean can hide. GVR V2 wins every recorded radix and FlashInfer pair, while SGLang, DeepSelect, and HPC-ops retain individual winning cases. + +| Baseline | V4 Flash, $K=512$ | V4 Pro, $K=1024$ | V3.2, $K=2048$ | +| :--- | ---: | ---: | ---: | +| SGLang v2, plan + transform | 1.78× | 1.76× | 1.55× | +| FlashInfer 0.6.14 | 2.12× | 2.14× | 1.89× | +| TensorRT-LLM radix CUDA | 4.74× | 4.73× | 5.15× | +| DeepSelect FP32 | 1.98× | 2.07× | 2.79× | +| HPC-ops FP32 | 2.30× | Unsupported | 1.30× | + +*Each model column uses the workloads supported by that baseline.* + +### What Explains the Differences + +**SGLang.** The **1.66×** comparison includes both planning and transformation. Serving integrations can amortize planning across layers; against transformation alone, V2 achieves **1.42×** geometric-mean speedup and wins **98.78%** of comparisons. + +**FlashInfer.** Its `top_k` API returns FP32 values and INT64 indices, while GVR V2 returns INT32 indices only. The **2.01×** result includes that additional output work and FlashInfer's scan of the padded row. + +**TensorRT-LLM radix CUDA.** The baseline uses the production dispatcher, including short-row insertion and long-row split-work paths. V2's **4.93×** advantage is consistent with reducing full-row selection passes and matching execution to the workload. + +**DeepSelect.** The FP32 comparison requests unsorted INT32 indices. Its $K=2048$ path emphasizes correctness coverage, which helps explain the larger **2.79×** gap on V3.2. BF16 is another important operating point, discussed below. + +**HPC-ops.** FP32 support covers $K \in \lbrace 512,2048\rbrace$. V2's advantage is **2.30×** on Flash and **1.30×** on V3.2, with an overall **1.55×** speedup. HPC-ops retains individual wins on V3.2; Pro is unsupported. + +### Latency Across Row Length and Batch Size + +![Cold kernel latency for all six implementations versus valid row length, with separate panels for three models and batch sizes 1 and 1024.](../media/gvr_v2/latency.svg) + +*Figure 5. Mean cold kernel time across matching layers. Each row is a model; the columns contrast batch sizes 1 and 1,024. Solid and dashed lines distinguish benchmark runs. Both axes are logarithmic; 1K means 1,024.* + +At $B=1$, keeping a short row in registers and exposing parallelism within a longer row matter more than saturating HBM. At $B=1024$, streaming throughput becomes more visible. The different shapes of these curves are why a single average cannot identify every useful operating region. + +For a concrete large-batch slice, the following times are at $B=1024$ and $N\approx131{,}072$, averaged over the same layers as Figure 5: + +| Model | GVR V2 | SGLang | FlashInfer | Radix CUDA | DeepSelect FP32 | HPC-ops FP32 | +| :--- | ---: | ---: | ---: | ---: | ---: | ---: | +| V4 Flash | **113.1 µs** | 196.8 µs | 275.4 µs | 461.3 µs | 190.5 µs | 199.2 µs | +| V4 Pro | **132.8 µs** | 199.1 µs | 298.3 µs | 477.7 µs | 209.1 µs | — | +| V3.2 | **124.0 µs** | 211.0 µs | 388.8 µs | 496.6 µs | 419.6 µs | 159.7 µs | + +The contrast between single-row latency and large-batch throughput reflects the importance of selecting the right execution family. + +### BF16 Changes the Comparison + +With BF16 input, DeepSelect becomes more competitive. GVR V2, still consuming FP32 scores, achieves **1.40×** geometric-mean speedup and wins **86.03%** of comparisons. DeepSelect wins in long-row, large-batch regions, particularly V4 rows around 131K–262K with batches of 256–1024; the minimum GVR speedup is **0.55×**. + +BF16 halves the score-read bytes, but rounding can change Top-K membership. Each kernel is checked against its own input dtype. Conversion time is excluded, so this comparison applies when BF16 scores are already available. + +## The Roofline Model: Fewer Passes, More Useful Work + +The bar chart shows how much time GVR V2 saves. The roofline asks how much of that time is fundamentally needed to move the input and output. It connects the algorithm's goal—fewer full-row passes—to a hardware limit. + +### Locate Top-K on the Hardware Roof + +For FP32 input and INT32 index-only output, define the ideal work and minimum traffic as + +$$ +W=BN,\qquad Q_{\min}=4B(N+K)\ \text{bytes},\qquad +I=\frac{W}{Q_{\min}}=\frac{N}{4(N+K)}. +$$ + +Here one unit of work is one **abstract comparison per input score**. This is a common normalization for every implementation, not its measured instruction count. Since $1\le K\le N$, ideal Top-K intensity stays within **$0.125\le I\lt 0.25$ compare/byte**. + +The theoretical and calibrated B200 roofs, in Tcompare/s, are + +$$ +P_{\mathrm{theory}}(I)=\min(37.225,8I),\qquad +P_{\mathrm{calibrated}}(I)=\min(37.047,6.912I). +$$ + +The calibrated limits are **6.912 TB/s** sustained read bandwidth and **37.047 Tcompare/s** semantic comparison throughput. They meet at **5.36 compare/byte**, more than 21 times the maximum ideal Top-K intensity. The entire workload band sits on the bandwidth slope in Figure 6A. + +![A clean two-level roofline: the full B200 hardware model highlights Top-K's narrow bandwidth-limited band; three linear-scale zoom panels compare GVR V2 and five baselines at batch 1024, with GVR V2 highlighted in green.](../media/gvr_v2/roofline.svg) + +*Figure 6.* A: the full theoretical and calibrated roofs. B: the Top-K band at $B=1024$, plotting useful throughput $P=BN/t$ against intensity $I=N/[4(N+K)]$ on linear axes. Green highlights V2; the dotted line is the calibrated bandwidth roof. All kernels share the same minimum-traffic model $Q_{\min}$, while extra reads and output work remain in measured time. + +### Compare Useful Work at the Same Intensity + +At fixed $N$ and $K$, every implementation has the same horizontal position. A faster kernel moves **upward**, toward the bandwidth roof. Figure 6B fixes the batch at 1,024 so the curves expose throughput with substantial parallel work available; Figure 5 retains the contrasting single-row view, and Figure 4 covers all 11 batch sizes. The linear vertical scale makes the remaining distance to the roof directly visible. + +For the Flash slice in Figure 5, $B=1024$, $N=131{,}075$, and $K=512$ give an optimistic minimum time of **78.0 µs**. GVR V2 takes **113.1 µs**, reaching about **69%** of the calibrated roof under this shared-work normalization. SGLang takes 196.8 µs, or about **40%** of that roof; radix CUDA takes 461.3 µs, or about **17%**. All three solve the same logical selection problem. Their different vertical positions reflect how much elapsed time they spend beyond its minimum traffic requirement. + +### Interpret the Remaining Gap + +The full ideal bound is $T_{\mathrm{roof}}=\max(Q_{\min}/\mathrm{BW},W/R_{\mathrm{compare}})$. Within the Top-K band, traffic dominates. Sampling, histogram updates, candidate staging, exact refinement, and synchronization account for work beyond the ideal minimum. The read-dominated roof is optimistic, especially when $K/N$ is large; the plotted throughput describes useful selection work rather than measured DRAM traffic. + +## Decode and Prefill in TensorRT-LLM + +### Stable Launches, Dynamic Row Lengths + +CUDA Graph replay needs a stable launch configuration even as requests grow. The host chooses a kernel family and launch envelope before capture. At execution time, each row reads its actual length from device-resident metadata, including its multi-token prediction offset and compression ratio. + +Two details matter for correctness and integration. [PR #18683](https://github.com/NVIDIA/TensorRT-LLM/pull/18683) keeps the physical row-width bound separate from the routing bound and ensures warmup populates launchers for exact row counts. [PR #18446](https://github.com/NVIDIA/TensorRT-LLM/pull/18446) makes dispatch configuration-based and limits previous-step prior allocation and updates to the temporal engine. The device-side prior-seeding change in [PR #18646](https://github.com/NVIDIA/TensorRT-LLM/pull/18646) benefits that retained temporal path; V2 does not need prior seeding. + +### The Same Approach Extends to Prefill + +[PR #18702](https://github.com/NVIDIA/TensorRT-LLM/pull/18702) applies the streaming engine to each prefill row's valid interval `[start, end)`. Output indices are relative to `start`, and short windows retain identity indices with `-1` padding. There is no previous token's selection to initialize. + +In B200 profiles, V2 makes prefill Top-K **1.84–2.61×** faster than radix CUDA. Adding V2 prefill to a deployment already using V2 decode improves serving throughput by **2.9–4.5%** on long-input workloads. This is the incremental benefit of the prefill change. + +For decode, [PR #18410](https://github.com/NVIDIA/TensorRT-LLM/pull/18410) reports **6–19% lower time per output token** on 8×B200 with TP8/EP8 and batch/concurrency 1. The serving benefit depends on Top-K's share of total execution time; the kernel comparisons above do not measure competing serving stacks. + +### Enable GVR V2 + +On a TensorRT-LLM revision containing the linked integration PRs, save the following as `gvr_v2.yaml`: + +```yaml +sparse_attention_config: + algorithm: deepseek_v4 + enable_heuristic_topk: true + use_self_sampling_topk: true +``` + +Use `algorithm: dsa` for DeepSeek-V3.2. The checkpoint supplies the model's Top-K width. For example: + +```bash +trtllm-serve deepseek-ai/DeepSeek-V4-Flash \ + --config gvr_v2.yaml --tp_size 8 --ep_size 8 +``` + +`enable_heuristic_topk` defaults to `false`. Once it is enabled, `use_self_sampling_topk` defaults to `true`; the second field is explicit here for clarity. Supported prefill layers follow the same V2 selection. Setting `use_self_sampling_topk: false` selects temporal GVR for decode, whose prefill path remains radix. + +V2 requires CUTLASS DSL, datacenter Blackwell SM100/SM103, $K\in\lbrace 512,1024,2048\rbrace$, and supported indexer compression ratios 1 or 4. The fast path expects FP32 scores with unit inner stride, a row stride divisible by four floats, and a 16-byte-aligned base. Unsupported layouts use exact native fallback selection. The retired `TRTLLM_GVR_SELF_SAMPLING` environment variable is no longer the enablement mechanism, and `use_cute_dsl_topk` is not required to select V2. + +## Further Reading + +[Benchmark methodology and figure reproduction](../media/gvr_v2/README.md) are available separately. + +Implementation milestones: + +- [PR #17821: original self-sampling decode integration](https://github.com/NVIDIA/TensorRT-LLM/pull/17821). +- [PR #18410: current-row brackets and hint-free production API](https://github.com/NVIDIA/TensorRT-LLM/pull/18410). +- [PR #18625: exact handling of positive infinity in register families](https://github.com/NVIDIA/TensorRT-LLM/pull/18625). +- [PR #18646: device-side prior seeding for the temporal path](https://github.com/NVIDIA/TensorRT-LLM/pull/18646). +- [PR #18683: physical envelopes and exact-row warmup](https://github.com/NVIDIA/TensorRT-LLM/pull/18683). +- [PR #18446: configuration-based dispatch and prior-state removal for V2](https://github.com/NVIDIA/TensorRT-LLM/pull/18446). +- [PR #18702: self-sampling prefill](https://github.com/NVIDIA/TensorRT-LLM/pull/18702). + +For the surrounding model pipeline, see [Sparse Attention in TensorRT-LLM](blog17_Sparse_Attention_in_TensorRT-LLM.md) and [DeepSeek-V4 on NVIDIA Blackwell](blog26_DeepSeek_V4_on_NVIDIA_Blackwell_Model_Specific_and_Agentic_Workload_Optimizations_in_TensorRT-LLM.md). + +## Conclusion + +GVR V2 reduces the cost of finding the boundary before optimizing the work left at that boundary. **Self-sampling** places the search near the current row's tail. **Multi-thresholding** turns a classification pass into many exact population counts. The crossing bin then isolates the candidates that still need ranking. This removes the previous-step Top-K state and dependent gather of temporal GVR while preserving exact membership through verification and recovery. + +The B200 results connect that algorithmic change to practical kernels: 4.93× over radix CUDA, 1.66× over SGLang including planning, and broad gains over FlashInfer, DeepSelect FP32, and HPC-ops FP32 on their paired case sets. The roofline makes the objective concrete: move useful selection throughput closer to the bandwidth roof by spending less time revisiting the row. Register, streaming, and cluster specializations make this design work across launch sizes, while the shared exactness contract carries it from decode into prefill. From 329cc14011bf6864bc0765945d51937d75f5739b Mon Sep 17 00:00:00 2001 From: longcheng-nv <243710427+longcheng-nv@users.noreply.github.com> Date: Wed, 16 Sep 2026 12:53:59 +0000 Subject: [PATCH 02/33] [None][doc] Add DeepSelect FP32 speedup heatmap to GVR V2 blog Signed-off-by: longcheng-nv <243710427+longcheng-nv@users.noreply.github.com> --- docs/source/blogs/media/gvr_v2/README.md | 6 +- .../blogs/media/gvr_v2/deepselect_map.svg | 1665 +++++++++++++++++ .../source/blogs/media/gvr_v2/plot_results.py | 31 +- docs/source/blogs/media/gvr_v2/sglang_map.svg | 38 +- ...ampling_Exact_TopK_for_Sparse_Attention.md | 22 +- 5 files changed, 1719 insertions(+), 43 deletions(-) create mode 100644 docs/source/blogs/media/gvr_v2/deepselect_map.svg diff --git a/docs/source/blogs/media/gvr_v2/README.md b/docs/source/blogs/media/gvr_v2/README.md index 376d1fcf0c8e..a3a8148b6d86 100644 --- a/docs/source/blogs/media/gvr_v2/README.md +++ b/docs/source/blogs/media/gvr_v2/README.md @@ -19,7 +19,7 @@ With NumPy and Matplotlib installed, run from the repository root: python docs/source/blogs/media/gvr_v2/plot_results.py ``` -The script regenerates `summary.json` and six SVGs: `speedup.svg`, `evolution.svg`, `algorithm.svg`, `sglang_map.svg`, `latency.svg`, and `roofline.svg`. It requires no GPU. The algorithm diagrams are schematic; every performance panel uses the bundled timing observations. +The script regenerates `summary.json` and seven SVGs: `speedup.svg`, `evolution.svg`, `algorithm.svg`, `sglang_map.svg`, `deepselect_map.svg`, `latency.svg`, and `roofline.svg`. It requires no GPU. The algorithm diagrams are schematic; every performance panel uses the bundled timing observations. ## Published Data @@ -70,7 +70,7 @@ Figure 1 intersects all supported implementations within each model: 2,079 Flash SGLang and FlashInfer lack V3.2 layers 0–2 and cover 9,515 cases in total. HPC-ops covers 6,776 Flash/V3.2 cases. GVR, radix, and DeepSelect cover all 9,746 cases. Missing coverage is never filled with estimated timings. -The latency and roofline curves use arithmetic-mean durations over matching layers at each row-length/batch point: 21 layers for Flash, 30 for Pro, and 58 for V3.2. All layers at each plotted point have the same valid width. The SGLang heatmap instead geometrically averages per-layer speedups at each shape. A shape average can hide individual regressions. +The latency and roofline curves use arithmetic-mean durations over matching layers at each row-length/batch point: 21 layers for Flash, 30 for Pro, and 58 for V3.2. All layers at each plotted point have the same valid width. The SGLang and DeepSelect FP32 heatmaps (Figures 4 and 5) instead geometrically average per-layer speedups at each shape, using each baseline's full paired coverage. DeepSelect therefore includes all 61 V3.2 layers; SGLang includes 58. Both maps share a 0.8–8.0 scale with parity at 1.0, and cell labels round to one decimal place. A shape average can hide individual regressions. Correctness compares selected value multisets with `torch.topk`, allowing tied indices to differ. The capture-grid checks do not establish NaN ordering parity or a universal tie order. The linked implementation PRs additionally cover padding, variable lengths, exceptional values, and graph replay. @@ -80,7 +80,7 @@ The logical work is `W = B*N` abstract comparisons and the minimum traffic is `Q The full model is `min(R, BW*I)`. The theoretical parameters are `R=37.224960 Tcompare/s` and `BW=8 TB/s`; calibrated parameters are `R=37.047490 Tcompare/s` and `BW=6.912116 TB/s`. Their knees are 4.65312 and approximately 5.35979 compare/byte, above Top-K's ideal `[0.125, 0.25)` intensity range. The semantic comparison convention counts two binary comparisons per FMNMX3 result; it is not FP32 FLOPS. -The zoom panels fix B=1024 and use linear axes. They show a throughput-oriented slice rather than a fitted upper envelope. Figure 5 also shows B=1, and the SGLang heatmap covers all 11 batches. The illustrative Flash fractions of the calibrated roof are minimum time divided by measured mean kernel time: approximately 69% for V2, 40% for SGLang, and 17% for radix CUDA. The read-dominated roof is optimistic; mixed read/write behavior and additional kernel work can lower achievable throughput. +The zoom panels fix B=1024 and use linear axes. They show a throughput-oriented slice rather than a fitted upper envelope. Figure 6 also shows B=1, and both heatmaps cover all 11 batches. The illustrative Flash fractions of the calibrated roof are minimum time divided by measured mean kernel time: approximately 69% for V2, 40% for SGLang, and 17% for radix CUDA. The read-dominated roof is optimistic; mixed read/write behavior and additional kernel work can lower achievable throughput. ## Serving Results diff --git a/docs/source/blogs/media/gvr_v2/deepselect_map.svg b/docs/source/blogs/media/gvr_v2/deepselect_map.svg new file mode 100644 index 000000000000..099f63c24df4 --- /dev/null +++ b/docs/source/blogs/media/gvr_v2/deepselect_map.svg @@ -0,0 +1,1665 @@ + + + + + + + + Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. SPDX-License-Identifier: Apache-2.0 + image/svg+xml + + + Matplotlib v3.10.8, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + + + + + + + + + 2 + + + + + + + + + + 4 + + + + + + + + + + 8 + + + + + + + + + + 16 + + + + + + + + + + 32 + + + + + + + + + + 64 + + + + + + + + + + 128 + + + + + + + + + + 256 + + + + + + + + + + 512 + + + + + + + + + + 1024 + + + + Batch size B + + + + + + + + + + + + + + 1K + + + + + + + + + + 2K + + + + + + + + + + 4K + + + + + + + + + + 8K + + + + + + + + + + 16K + + + + + + + + + + 32K + + + + + + + + + + 64K + + + + + + + + + + 128K + + + + + + + + + + 256K + + + + Valid row length N (rounded) + + + + + + + + + + 1.4 + + + 1.4 + + + 1.4 + + + 1.4 + + + 1.4 + + + 1.4 + + + 1.4 + + + 1.4 + + + 2.2 + + + 3.2 + + + 4.2 + + + 1.5 + + + 1.5 + + + 1.4 + + + 1.4 + + + 1.4 + + + 1.4 + + + 1.4 + + + 1.4 + + + 2.0 + + + 2.8 + + + 3.2 + + + 1.4 + + + 1.4 + + + 1.3 + + + 1.3 + + + 1.3 + + + 1.3 + + + 1.3 + + + 1.3 + + + 1.9 + + + 2.4 + + + 2.7 + + + 1.7 + + + 1.7 + + + 1.7 + + + 1.7 + + + 1.7 + + + 1.7 + + + 1.6 + + + 1.6 + + + 2.1 + + + 3.0 + + + 3.2 + + + 1.9 + + + 1.9 + + + 1.9 + + + 1.9 + + + 1.9 + + + 1.9 + + + 1.8 + + + 1.7 + + + 2.3 + + + 3.1 + + + 3.0 + + + 2.6 + + + 2.5 + + + 2.5 + + + 2.4 + + + 2.3 + + + 2.2 + + + 2.0 + + + 1.6 + + + 2.2 + + + 2.7 + + + 2.6 + + + 3.2 + + + 3.1 + + + 3.1 + + + 2.9 + + + 2.6 + + + 2.5 + + + 2.0 + + + 1.6 + + + 1.9 + + + 2.1 + + + 2.1 + + + 3.6 + + + 3.6 + + + 3.5 + + + 3.3 + + + 2.3 + + + 2.5 + + + 2.2 + + + 1.4 + + + 1.5 + + + 1.6 + + + 1.7 + + + 3.8 + + + 3.6 + + + 3.3 + + + 3.0 + + + 2.6 + + + 2.6 + + + 1.6 + + + 1.0 + + + 1.1 + + + 1.1 + + + 1.2 + + + DeepSeek-V4 Flash · K=512 + + + + + + + + + + + + + + + + + + 1 + + + + + + + + + + 2 + + + + + + + + + + 4 + + + + + + + + + + 8 + + + + + + + + + + 16 + + + + + + + + + + 32 + + + + + + + + + + 64 + + + + + + + + + + 128 + + + + + + + + + + 256 + + + + + + + + + + 512 + + + + + + + + + + 1024 + + + + Batch size B + + + + + + + + + + + 1K + + + + + + + + + + 2K + + + + + + + + + + 4K + + + + + + + + + + 8K + + + + + + + + + + 16K + + + + + + + + + + 32K + + + + + + + + + + 64K + + + + + + + + + + 128K + + + + + + + + + + 256K + + + + Valid row length N (rounded) + + + + + + + + + + 1.4 + + + 1.4 + + + 1.4 + + + 1.4 + + + 1.4 + + + 1.4 + + + 1.4 + + + 1.4 + + + 1.9 + + + 2.8 + + + 3.8 + + + 1.5 + + + 1.5 + + + 1.5 + + + 1.4 + + + 1.4 + + + 1.4 + + + 1.4 + + + 1.4 + + + 2.0 + + + 2.6 + + + 3.1 + + + 1.4 + + + 1.4 + + + 1.4 + + + 1.4 + + + 1.4 + + + 1.4 + + + 1.4 + + + 1.3 + + + 1.9 + + + 2.5 + + + 2.9 + + + 1.8 + + + 1.8 + + + 1.8 + + + 1.8 + + + 1.8 + + + 1.8 + + + 1.8 + + + 1.7 + + + 2.1 + + + 2.9 + + + 3.0 + + + 2.1 + + + 2.1 + + + 2.1 + + + 2.1 + + + 2.1 + + + 2.0 + + + 2.0 + + + 1.9 + + + 2.5 + + + 3.2 + + + 3.1 + + + 2.8 + + + 2.9 + + + 2.8 + + + 2.7 + + + 2.7 + + + 2.5 + + + 2.3 + + + 1.6 + + + 2.4 + + + 2.9 + + + 2.9 + + + 3.3 + + + 3.3 + + + 3.3 + + + 3.2 + + + 2.9 + + + 2.7 + + + 2.2 + + + 1.6 + + + 2.0 + + + 2.3 + + + 2.3 + + + 3.7 + + + 3.7 + + + 3.7 + + + 3.5 + + + 2.4 + + + 2.3 + + + 2.3 + + + 1.4 + + + 1.4 + + + 1.6 + + + 1.6 + + + 4.3 + + + 4.1 + + + 3.8 + + + 3.4 + + + 2.9 + + + 2.7 + + + 1.9 + + + 1.1 + + + 1.1 + + + 1.2 + + + 1.2 + + + DeepSeek-V4 Pro · K=1024 + + + + + + + + + + + + + + + + + + 1 + + + + + + + + + + 2 + + + + + + + + + + 4 + + + + + + + + + + 8 + + + + + + + + + + 16 + + + + + + + + + + 32 + + + + + + + + + + 64 + + + + + + + + + + 128 + + + + + + + + + + 256 + + + + + + + + + + 512 + + + + + + + + + + 1024 + + + + Batch size B + + + + + + + + + + + 4K + + + + + + + + + + 8K + + + + + + + + + + 16K + + + + + + + + + + 32K + + + + + + + + + + 64K + + + + + + + + + + 128K + + + + + + + + + + 160K + + + + Valid row length N (rounded) + + + + + + + + + + 1.1 + + + 1.1 + + + 1.1 + + + 1.1 + + + 1.1 + + + 1.1 + + + 1.1 + + + 1.1 + + + 1.4 + + + 1.7 + + + 1.7 + + + 2.2 + + + 2.2 + + + 2.2 + + + 2.2 + + + 2.2 + + + 2.2 + + + 2.1 + + + 2.1 + + + 2.7 + + + 3.0 + + + 3.0 + + + 2.0 + + + 2.0 + + + 2.0 + + + 1.9 + + + 1.9 + + + 1.8 + + + 1.8 + + + 1.7 + + + 2.8 + + + 3.4 + + + 3.3 + + + 4.8 + + + 4.7 + + + 4.4 + + + 4.3 + + + 4.0 + + + 3.5 + + + 3.3 + + + 3.0 + + + 4.2 + + + 4.5 + + + 4.3 + + + 5.4 + + + 5.3 + + + 5.1 + + + 4.9 + + + 4.3 + + + 3.8 + + + 3.3 + + + 2.9 + + + 3.7 + + + 4.0 + + + 3.9 + + + 7.7 + + + 7.3 + + + 6.9 + + + 6.1 + + + 5.2 + + + 4.5 + + + 3.5 + + + 2.8 + + + 3.2 + + + 3.4 + + + 3.4 + + + 4.8 + + + 4.5 + + + 4.0 + + + 3.7 + + + 3.1 + + + 2.6 + + + 2.1 + + + 1.6 + + + 1.8 + + + 1.9 + + + 1.9 + + + DeepSeek-V3.2 · K=2048 + + + + + + + + + + + + + + + + 0.8 + + + + + + + + + + 1.0 + + + + + + + + + + 2.0 + + + + + + + + + + 4.0 + + + + + + + + + + 6.0 + + + + + + + + + + 8.0 + + + + DeepSelect FP32 time / GVR V2 time · geometric mean across layers + + + + + + + + + + GVR V2 vs DeepSelect FP32: gains across the full length–batch grid + + + DeepSelect FP32 · unsorted indices · 1.0× is parity · shared color scale across both baseline maps. + + + + + + + + + + + + + + diff --git a/docs/source/blogs/media/gvr_v2/plot_results.py b/docs/source/blogs/media/gvr_v2/plot_results.py index 3b41d09c9f30..c24413c47ad4 100644 --- a/docs/source/blogs/media/gvr_v2/plot_results.py +++ b/docs/source/blogs/media/gvr_v2/plot_results.py @@ -680,11 +680,13 @@ def _roofline(rows: list[dict]) -> None: _save(fig, "roofline") -def _speedup_map(rows: list[dict]) -> None: +def _speedup_map(rows: list[dict], arm: str, label: str, scope: str) -> None: fig, axes = plt.subplots(1, 3, figsize=(14, 5.8)) batches = sorted({r["batch"] for r in rows}) + norm = TwoSlopeNorm(vmin=0.8, vcenter=1, vmax=8) + cmap = plt.get_cmap("BrBG") for ax, (model, title) in zip(axes, MODELS.items()): - selected = [r for r in rows if r["model"] == model and r["sglang_us"] is not None] + selected = [r for r in rows if r["model"] == model and r[arm + "_us"] is not None] buckets = sorted({r["isl_bucket"] for r in selected}, key=lambda s: int(s[:-1])) values = [] widths = [] @@ -694,17 +696,17 @@ def _speedup_map(rows: list[dict]) -> None: values.append( [ geometric_mean( - r["sglang_us"] / r["gvr_v2_us"] for r in group if r["batch"] == b + r[arm + "_us"] / r["gvr_v2_us"] for r in group if r["batch"] == b ) for b in batches ] ) data = np.asarray(values) - graphic = ax.imshow( - data, aspect="auto", cmap="BrBG", norm=TwoSlopeNorm(vmin=0.8, vcenter=1, vmax=5) - ) + graphic = ax.imshow(data, aspect="auto", cmap=cmap, norm=norm) for y in range(len(buckets)): for x in range(len(batches)): + red, green, blue, _ = cmap(norm(data[y, x])) + brightness = 0.299 * red + 0.587 * green + 0.114 * blue ax.text( x, y, @@ -712,7 +714,7 @@ def _speedup_map(rows: list[dict]) -> None: ha="center", va="center", fontsize=7.1, - color="white" if data[y, x] > 3.3 else "#17202b", + color="white" if brightness < 0.5 else "#17202b", ) ax.set_xticks(range(len(batches)), batches, rotation=60, fontsize=9) ax.set_yticks(range(len(widths)), [f"{n:.0f}K" for n in widths], fontsize=9) @@ -720,7 +722,7 @@ def _speedup_map(rows: list[dict]) -> None: ax.set_ylabel("Valid row length N (rounded)") ax.set_title(title, loc="left", fontsize=11, pad=12) fig.suptitle( - "GVR V2 vs SGLang: gains across the full length–batch grid", + f"GVR V2 vs {label}: gains across the full length–batch grid", fontsize=18, x=0.035, ha="left", @@ -729,19 +731,19 @@ def _speedup_map(rows: list[dict]) -> None: ) fig.subplots_adjust(left=0.06, right=0.99, top=0.87, bottom=0.34, wspace=0.27) cax = fig.add_axes((0.34, 0.09, 0.32, 0.026)) - bar = fig.colorbar(graphic, cax=cax, orientation="horizontal", ticks=[0.8, 1, 2, 3, 4, 5]) - bar.set_label("SGLang time / GVR V2 time · geometric mean across layers", fontsize=9) + bar = fig.colorbar(graphic, cax=cax, orientation="horizontal", ticks=[0.8, 1, 2, 4, 6, 8]) + bar.set_label(f"{label} time / GVR V2 time · geometric mean across layers", fontsize=9) fig.text( 0.06, 0.17, - "SGLang plan + transform · 1.0× is parity · each tile averages the layer-level speedups at that shape.", + f"{scope} · 1.0× is parity · shared color scale across both baseline maps.", fontsize=9, ) - _save(fig, "sglang_map") + _save(fig, arm + "_map") def main() -> None: - """Validate the frozen dataset, then regenerate statistics and six figures.""" + """Validate the frozen dataset, then regenerate statistics and seven figures.""" plt.rcParams.update( { "font.family": "DejaVu Sans", @@ -779,7 +781,8 @@ def main() -> None: _overview(rows) _evolution(rows) _algorithm() - _speedup_map(rows) + _speedup_map(rows, "sglang", "SGLang", "SGLang plan + transform") + _speedup_map(rows, "deepselect", "DeepSelect FP32", "DeepSelect FP32 · unsorted indices") _latency(rows) _roofline(rows) diff --git a/docs/source/blogs/media/gvr_v2/sglang_map.svg b/docs/source/blogs/media/gvr_v2/sglang_map.svg index a99d46f3ef90..dbd44bf08af0 100644 --- a/docs/source/blogs/media/gvr_v2/sglang_map.svg +++ b/docs/source/blogs/media/gvr_v2/sglang_map.svg @@ -39,7 +39,7 @@ z +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" id="imageb790c39157" transform="scale(1 -1) translate(0 -221.76)" x="51.926719" y="-69.408" width="264.96" height="221.76"/> @@ -518,7 +518,7 @@ L 316.740278 291.168 1.4 - 4.2 + 4.2 2.6 @@ -551,10 +551,10 @@ L 316.740278 291.168 1.6 - 4.5 + 4.5 - 4.5 + 4.5 2.3 @@ -583,7 +583,7 @@ z +iVBORw0KGgoAAAANSUhEUgAAAXAAAAE0CAYAAAA10GhFAAAF9klEQVR4nO3WMY4dRRhG0b973jBYECAsIUREQkDAHojIWBE7YGGkRKyADAOpGezpJhgQyBlR9ZXOWcGn7qqr2n767ZdzFttXD/jb/b5+yW3bVk+YmZl91u/4/scfVk+YmZmfX/26esJ89/U3qyfMzMyn772/esLcXeCOPB7H6gkzc512AvA/CThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRN0edg2/kuNcveDZi7v15+Lzly9XT5iZmW+/+HL1hPnodr96wszM3G3b6gmXcL+tvx8zXuAAWQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhB1ezrP1Rv4j2Ou8T9+f/O0esJ89fEnqyfMzMzLhxerJ8x7u7fWP67QrLttWz1hZrzAAbIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGibqsHzMwc57l6wmXs27Z6wszMPJ7H6gnz2YsPV0+YmZmHbf0754P9Eld13l7grj7N+g3H+gkz4wUOkCXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhB1u98u0PBt9QDedX93gXNxEfsFzucfx7F6wsxc41u8Pc/VE+Z+u8CHGC9wgCwBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScICo28Ou4VzTca5e8GzfVi+Y2ecCI2bmCr24wre4bes3zHiBA2QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANE3R6PY/WG2bfVC54d5+oF13HM+o+xz0UOxvpPcZk78vj0tHrC/HmBZj2dFzgU4wUOkCXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRtzfnsXrDbOfqBbzrCr/kuMSKa9hnWz1hZmZu2/odVzgV66v5zAscIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCDq9vY8V2+Y27atnsA7rnAuvC7+tf5vPNtn/V19fTytnjCvHl+vnjAz7ghAloADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QNRf2FJZsdq38qMAAAAASUVORK5CYII=" id="image29b2706fbe" transform="scale(1 -1) translate(0 -221.76)" x="388.239939" y="-69.408" width="264.96" height="221.76"/> @@ -1052,7 +1052,7 @@ L 653.053498 291.168 1.3 - 3.6 + 3.6 2.7 @@ -1085,10 +1085,10 @@ L 653.053498 291.168 1.6 - 4.1 + 4.1 - 4.7 + 4.7 2.3 @@ -1117,7 +1117,7 @@ z +iVBORw0KGgoAAAANSUhEUgAAAXAAAAE0CAYAAAA10GhFAAAFc0lEQVR4nO3WMa4kNRhG0d/VzaCXkpGxFtbLhpgUEYEYETEjPbqIECGayL7SOSv45HJdeX3847d7Nnuua/eEmZl5rrV7wjwO2DAz89p+K2Z++uXn3RNmZubH73/YPWGuQ+7F2/XYPWGu2X8WrzngB5mZM8oJwFcTcIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4h67h4wM/Oae/eEmZl5P2DGmrV7wszMXAfM+PT58+4JMzPzXPvfOd+sAz7IzFwH3M8T7ubcJ4zwAgfIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIWr/++enePYL/XLN2TzjG7+9fdk+YmZlv1/53zodr/4YZ9/Nfj3XGOZxxKwD4agIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUc/nWrs3cKC/Xn/vnjDfPT/snjAzM9fs/0eu/RNmZuZ1714w834fMOIQXuAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUc/dAzjT2/XYPWGuWbsnHGOtM87idb92T5h77t0T5jrk7XvGCgC+moADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThA1PPL67V7Axxtzdo94Rgfrv1n8bYeuyfMY+0/hxkvcIAsAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScICo52Ot3RuA/3HNGf/pCTve73v3hFmHdNMLHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCDqHzuVLxeEa+cFAAAAAElFTkSuQmCC" id="imagea861b11e27" transform="scale(1 -1) translate(0 -221.76)" x="724.553159" y="-69.408" width="264.96" height="221.76"/> @@ -1500,7 +1500,7 @@ L 989.366719 291.168 1.5 - 3.8 + 3.8 2.0 @@ -1533,7 +1533,7 @@ L 989.366719 291.168 1.5 - 3.5 + 3.5 2.1 @@ -1589,31 +1589,31 @@ iVBORw0KGgoAAAANSUhEUgAAAcAAAAAPCAYAAABz7B+mAAABa0lEQVR4nO3VSXLDIBCF4Qdy7pPD+P43 - + - 2.0 + 2.0 - + - 3.0 + 4.0 - + - 4.0 + 6.0 @@ -1623,7 +1623,7 @@ iVBORw0KGgoAAAANSUhEUgAAAcAAAAAPCAYAAABz7B+mAAABa0lEQVR4nO3VSXLDIBCF4Qdy7pPD+P43 - 5.0 + 8.0 @@ -1648,7 +1648,7 @@ z GVR V2 vs SGLang: gains across the full length–batch grid - SGLang plan + transform · 1.0× is parity · each tile averages the layer-level speedups at that shape. + SGLang plan + transform · 1.0× is parity · shared color scale across both baseline maps. diff --git a/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md b/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md index b3b2ea890aea..1ba419583aa4 100644 --- a/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md +++ b/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md @@ -163,10 +163,18 @@ GVR V2 is faster in every tested radix and FlashInfer comparison and in **99.91% ![Three heatmaps of GVR V2 speedup over SGLang for every captured row-length bucket and all eleven batch sizes, averaged geometrically across layers.](../media/gvr_v2/sglang_map.svg) -*Figure 4. SGLang plan + transform time divided by GVR V2 time, geometrically averaged across layers at each shape. A value of 1.0 means equal performance. Row lengths are rounded in the axis labels.* +*Figure 4. SGLang plan + transform time divided by GVR V2 time, geometrically averaged across layers at each shape. A value of 1.0 means equal performance. Figures 4 and 5 share the same color scale; row lengths are rounded in the axis labels.* Long rows at intermediate batch sizes show particularly strong gains: **V4 Pro reaches 4.67× at $N=262{,}127$, $B=64$**. This is the strongest shape-average result in the grid; most regions are around 1.3–2.0×. +DeepSelect FP32 shows a different pattern: V2's strongest gains move toward long rows at small batch sizes, especially for V3.2. + +![Three heatmaps of GVR V2 speedup over DeepSelect FP32 across row lengths and all eleven batch sizes, using the same color scale as the SGLang comparison.](../media/gvr_v2/deepselect_map.svg) + +*Figure 5. DeepSelect FP32 time divided by GVR V2 time, geometrically averaged across layers at each shape. The layout and color scale match Figure 4: values above 1.0 favor V2, and darker teal indicates a larger gain. Cell labels round to one decimal place.* + +For **V3.2, the gain reaches 7.66× around 128K scores at batch size 1** and stays above 6× at that row length through batch size 8. Flash and Pro also show broad gains, with peaks of **4.23×** and **4.34×**. The narrowest margin appears for the longest Flash rows at batch size 128, where the shape average is approximately parity (0.996×). The map shows where the FP32 advantage concentrates; the separate BF16 comparison below addresses DeepSelect's faster reduced-precision path. + Two details determine how these gains carry into an application: the actual row-length and batch distribution, and the work each API returns. The next sections make both explicit. ### Benchmark Setup @@ -219,11 +227,11 @@ The minimum column exposes individual regressions that a geometric mean can hide ![Cold kernel latency for all six implementations versus valid row length, with separate panels for three models and batch sizes 1 and 1024.](../media/gvr_v2/latency.svg) -*Figure 5. Mean cold kernel time across matching layers. Each row is a model; the columns contrast batch sizes 1 and 1,024. Solid and dashed lines distinguish benchmark runs. Both axes are logarithmic; 1K means 1,024.* +*Figure 6. Mean cold kernel time across matching layers. Each row is a model; the columns contrast batch sizes 1 and 1,024. Solid and dashed lines distinguish benchmark runs. Both axes are logarithmic; 1K means 1,024.* At $B=1$, keeping a short row in registers and exposing parallelism within a longer row matter more than saturating HBM. At $B=1024$, streaming throughput becomes more visible. The different shapes of these curves are why a single average cannot identify every useful operating region. -For a concrete large-batch slice, the following times are at $B=1024$ and $N\approx131{,}072$, averaged over the same layers as Figure 5: +For a concrete large-batch slice, the following times are at $B=1024$ and $N\approx131{,}072$, averaged over the same layers as Figure 6: | Model | GVR V2 | SGLang | FlashInfer | Radix CUDA | DeepSelect FP32 | HPC-ops FP32 | | :--- | ---: | ---: | ---: | ---: | ---: | ---: | @@ -261,17 +269,17 @@ P_{\mathrm{theory}}(I)=\min(37.225,8I),\qquad P_{\mathrm{calibrated}}(I)=\min(37.047,6.912I). $$ -The calibrated limits are **6.912 TB/s** sustained read bandwidth and **37.047 Tcompare/s** semantic comparison throughput. They meet at **5.36 compare/byte**, more than 21 times the maximum ideal Top-K intensity. The entire workload band sits on the bandwidth slope in Figure 6A. +The calibrated limits are **6.912 TB/s** sustained read bandwidth and **37.047 Tcompare/s** semantic comparison throughput. They meet at **5.36 compare/byte**, more than 21 times the maximum ideal Top-K intensity. The entire workload band sits on the bandwidth slope in Figure 7A. ![A clean two-level roofline: the full B200 hardware model highlights Top-K's narrow bandwidth-limited band; three linear-scale zoom panels compare GVR V2 and five baselines at batch 1024, with GVR V2 highlighted in green.](../media/gvr_v2/roofline.svg) -*Figure 6.* A: the full theoretical and calibrated roofs. B: the Top-K band at $B=1024$, plotting useful throughput $P=BN/t$ against intensity $I=N/[4(N+K)]$ on linear axes. Green highlights V2; the dotted line is the calibrated bandwidth roof. All kernels share the same minimum-traffic model $Q_{\min}$, while extra reads and output work remain in measured time. +*Figure 7.* A: the full theoretical and calibrated roofs. B: the Top-K band at $B=1024$, plotting useful throughput $P=BN/t$ against intensity $I=N/[4(N+K)]$ on linear axes. Green highlights V2; the dotted line is the calibrated bandwidth roof. All kernels share the same minimum-traffic model $Q_{\min}$, while extra reads and output work remain in measured time. ### Compare Useful Work at the Same Intensity -At fixed $N$ and $K$, every implementation has the same horizontal position. A faster kernel moves **upward**, toward the bandwidth roof. Figure 6B fixes the batch at 1,024 so the curves expose throughput with substantial parallel work available; Figure 5 retains the contrasting single-row view, and Figure 4 covers all 11 batch sizes. The linear vertical scale makes the remaining distance to the roof directly visible. +At fixed $N$ and $K$, every implementation has the same horizontal position. A faster kernel moves **upward**, toward the bandwidth roof. Figure 7B fixes the batch at 1,024 so the curves expose throughput with substantial parallel work available; Figure 6 retains the contrasting single-row view, and Figures 4 and 5 cover all 11 batch sizes. The linear vertical scale makes the remaining distance to the roof directly visible. -For the Flash slice in Figure 5, $B=1024$, $N=131{,}075$, and $K=512$ give an optimistic minimum time of **78.0 µs**. GVR V2 takes **113.1 µs**, reaching about **69%** of the calibrated roof under this shared-work normalization. SGLang takes 196.8 µs, or about **40%** of that roof; radix CUDA takes 461.3 µs, or about **17%**. All three solve the same logical selection problem. Their different vertical positions reflect how much elapsed time they spend beyond its minimum traffic requirement. +For the Flash slice in Figure 6, $B=1024$, $N=131{,}075$, and $K=512$ give an optimistic minimum time of **78.0 µs**. GVR V2 takes **113.1 µs**, reaching about **69%** of the calibrated roof under this shared-work normalization. SGLang takes 196.8 µs, or about **40%** of that roof; radix CUDA takes 461.3 µs, or about **17%**. All three solve the same logical selection problem. Their different vertical positions reflect how much elapsed time they spend beyond its minimum traffic requirement. ### Interpret the Remaining Gap From c747dc3138e78df4c89da2b6c098f19414e69985 Mon Sep 17 00:00:00 2001 From: longcheng-nv <243710427+longcheng-nv@users.noreply.github.com> Date: Wed, 16 Sep 2026 12:56:43 +0000 Subject: [PATCH 03/33] [None][doc] Keep GVR V2 blog focused on FP32 comparisons Signed-off-by: longcheng-nv <243710427+longcheng-nv@users.noreply.github.com> --- ...V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md b/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md index 1ba419583aa4..916a967991da 100644 --- a/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md +++ b/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md @@ -173,7 +173,7 @@ DeepSelect FP32 shows a different pattern: V2's strongest gains move toward long *Figure 5. DeepSelect FP32 time divided by GVR V2 time, geometrically averaged across layers at each shape. The layout and color scale match Figure 4: values above 1.0 favor V2, and darker teal indicates a larger gain. Cell labels round to one decimal place.* -For **V3.2, the gain reaches 7.66× around 128K scores at batch size 1** and stays above 6× at that row length through batch size 8. Flash and Pro also show broad gains, with peaks of **4.23×** and **4.34×**. The narrowest margin appears for the longest Flash rows at batch size 128, where the shape average is approximately parity (0.996×). The map shows where the FP32 advantage concentrates; the separate BF16 comparison below addresses DeepSelect's faster reduced-precision path. +For **V3.2, the gain reaches 7.66× around 128K scores at batch size 1** and stays above 6× at that row length through batch size 8. Flash and Pro also show broad gains, with peaks of **4.23×** and **4.34×**. The narrowest margin appears for the longest Flash rows at batch size 128, where the shape average is approximately parity (0.996×). Two details determine how these gains carry into an application: the actual row-length and batch distribution, and the work each API returns. The next sections make both explicit. @@ -219,7 +219,7 @@ The minimum column exposes individual regressions that a geometric mean can hide **TensorRT-LLM radix CUDA.** The baseline uses the production dispatcher, including short-row insertion and long-row split-work paths. V2's **4.93×** advantage is consistent with reducing full-row selection passes and matching execution to the workload. -**DeepSelect.** The FP32 comparison requests unsorted INT32 indices. Its $K=2048$ path emphasizes correctness coverage, which helps explain the larger **2.79×** gap on V3.2. BF16 is another important operating point, discussed below. +**DeepSelect.** The FP32 comparison requests unsorted INT32 indices. Its $K=2048$ path emphasizes correctness coverage, which helps explain the larger **2.79×** gap on V3.2. **HPC-ops.** FP32 support covers $K \in \lbrace 512,2048\rbrace$. V2's advantage is **2.30×** on Flash and **1.30×** on V3.2, with an overall **1.55×** speedup. HPC-ops retains individual wins on V3.2; Pro is unsupported. @@ -241,12 +241,6 @@ For a concrete large-batch slice, the following times are at $B=1024$ and $N\app The contrast between single-row latency and large-batch throughput reflects the importance of selecting the right execution family. -### BF16 Changes the Comparison - -With BF16 input, DeepSelect becomes more competitive. GVR V2, still consuming FP32 scores, achieves **1.40×** geometric-mean speedup and wins **86.03%** of comparisons. DeepSelect wins in long-row, large-batch regions, particularly V4 rows around 131K–262K with batches of 256–1024; the minimum GVR speedup is **0.55×**. - -BF16 halves the score-read bytes, but rounding can change Top-K membership. Each kernel is checked against its own input dtype. Conversion time is excluded, so this comparison applies when BF16 scores are already available. - ## The Roofline Model: Fewer Passes, More Useful Work The bar chart shows how much time GVR V2 saves. The roofline asks how much of that time is fundamentally needed to move the input and output. It connects the algorithm's goal—fewer full-row passes—to a hardware limit. From 02fbcf8479d9a4c4ddc68f100618c9d34ced37df Mon Sep 17 00:00:00 2001 From: longcheng-nv <243710427+longcheng-nv@users.noreply.github.com> Date: Wed, 16 Sep 2026 13:05:33 +0000 Subject: [PATCH 04/33] [None][doc] Compare average and peak reach of GVR V2 Pareto curves Signed-off-by: longcheng-nv <243710427+longcheng-nv@users.noreply.github.com> --- docs/source/blogs/media/gvr_v2/README.md | 6 +- .../source/blogs/media/gvr_v2/plot_results.py | 35 ++++++- docs/source/blogs/media/gvr_v2/roofline.svg | 2 +- docs/source/blogs/media/gvr_v2/summary.json | 98 +++++++++++++++++++ ...ampling_Exact_TopK_for_Sparse_Attention.md | 23 ++++- 5 files changed, 156 insertions(+), 8 deletions(-) diff --git a/docs/source/blogs/media/gvr_v2/README.md b/docs/source/blogs/media/gvr_v2/README.md index a3a8148b6d86..64e086bab437 100644 --- a/docs/source/blogs/media/gvr_v2/README.md +++ b/docs/source/blogs/media/gvr_v2/README.md @@ -80,7 +80,11 @@ The logical work is `W = B*N` abstract comparisons and the minimum traffic is `Q The full model is `min(R, BW*I)`. The theoretical parameters are `R=37.224960 Tcompare/s` and `BW=8 TB/s`; calibrated parameters are `R=37.047490 Tcompare/s` and `BW=6.912116 TB/s`. Their knees are 4.65312 and approximately 5.35979 compare/byte, above Top-K's ideal `[0.125, 0.25)` intensity range. The semantic comparison convention counts two binary comparisons per FMNMX3 result; it is not FP32 FLOPS. -The zoom panels fix B=1024 and use linear axes. They show a throughput-oriented slice rather than a fitted upper envelope. Figure 6 also shows B=1, and both heatmaps cover all 11 batches. The illustrative Flash fractions of the calibrated roof are minimum time divided by measured mean kernel time: approximately 69% for V2, 40% for SGLang, and 17% for radix CUDA. The read-dominated roof is optimistic; mixed read/write behavior and additional kernel work can lower achievable throughput. +Figure 7B uses linear axes at B=1024. In this article, a Pareto curve denotes each operator's plotted intensity–throughput curve at that fixed batch. Figure 6 also shows B=1, and both heatmaps cover all 11 batches. + +Reachable rate is `100 * P / min(R, BW*I)` percent, using the calibrated roof. Compute each point from the arithmetic-mean duration across the same matched layers used in Figure 7B. The average reachable rate is the unweighted arithmetic mean of these point-level percentages, and the peak is their maximum. Flash and Pro each contribute nine intensity points; V3.2 contributes seven. The average is not weighted by row length or serving frequency. Unsupported HPC-ops Pro results remain absent. `summary.json` records the point counts and average/peak percentages under `roofline_reachable_rate`. + +The read-dominated roof is optimistic; mixed read/write behavior and additional kernel work can lower achievable throughput. Reachable rate describes useful selection work relative to this model, not measured DRAM bandwidth utilization. ## Serving Results diff --git a/docs/source/blogs/media/gvr_v2/plot_results.py b/docs/source/blogs/media/gvr_v2/plot_results.py index c24413c47ad4..4239272bbc22 100644 --- a/docs/source/blogs/media/gvr_v2/plot_results.py +++ b/docs/source/blogs/media/gvr_v2/plot_results.py @@ -510,6 +510,38 @@ def _latency(rows: list[dict]) -> None: _save(fig, "latency") +def _roofline_reachable_rates(rows: list[dict]) -> dict: + calibration = json.loads((ROOT / "provenance.json").read_text())["roofline_model"] + by_model = {} + for model in MODELS: + matched = _matching(rows, model) + k = matched[0]["k"] + by_model[model] = {} + for arm in ["gvr_v2", *ARMS]: + if model == "pro" and arm == "hpc_ops": + continue + widths, times = _line_data(matched, arm, 1024) + rates = [] + for n, us in zip(widths, times): + intensity = n / (4 * (n + k)) + roof = min( + calibration["measured_compare_t_s"], + calibration["measured_bandwidth_tb_s"] * intensity, + ) + rates.append(100 * (1024 * n / (us * 1e6)) / roof) + by_model[model][arm] = { + "points": len(rates), + "average_percent": mean(rates), + "peak_percent": max(rates), + } + return { + "batch": 1024, + "reference": "Calibrated roof at each plotted intensity", + "aggregation": "Arithmetic mean and maximum of plotted-point reachable rates", + "by_model": by_model, + } + + def _roofline(rows: list[dict]) -> None: model_data = json.loads((ROOT / "provenance.json").read_text())["roofline_model"] bw = model_data["measured_bandwidth_tb_s"] @@ -631,7 +663,7 @@ def _roofline(rows: list[dict]) -> None: fig.text( 0.075, 0.515, - "B. Zoom in: how close do measured kernels get?", + "B. Pareto curves across intensities", fontsize=13, weight="bold", color="#17202b", @@ -765,6 +797,7 @@ def main() -> None: "sglang_transform_only": _stats(rows, "sglang_transform"), "deepselect_bf16": _stats(rows, "deepselect_bf16", "gvr_bf16_run"), "temporal_vs_v2": {a: _stats(rows, a) for a in TEMPORAL}, + "roofline_reachable_rate": _roofline_reachable_rates(rows), "evolution_vs_radix": { a: { "geomean": geometric_mean(r["radix_cuda_us"] / r[a + "_us"] for r in rows), diff --git a/docs/source/blogs/media/gvr_v2/roofline.svg b/docs/source/blogs/media/gvr_v2/roofline.svg index 5980e13c6942..3839e5027a6b 100644 --- a/docs/source/blogs/media/gvr_v2/roofline.svg +++ b/docs/source/blogs/media/gvr_v2/roofline.svg @@ -1914,7 +1914,7 @@ L 914.04562 445.469797 A. The full B200 roofline · Top-K intensity stays far below the compute knee - B. Zoom in: how close do measured kernels get? + B. Pareto curves across intensities B = 1024 · identical layers per model · higher is faster diff --git a/docs/source/blogs/media/gvr_v2/summary.json b/docs/source/blogs/media/gvr_v2/summary.json index 26237e6e0361..f4a9f33d63b4 100644 --- a/docs/source/blogs/media/gvr_v2/summary.json +++ b/docs/source/blogs/media/gvr_v2/summary.json @@ -311,6 +311,104 @@ "gvr_median_us": 9.651 } }, + "roofline_reachable_rate": { + "batch": 1024, + "reference": "Calibrated roof at each plotted intensity", + "aggregation": "Arithmetic mean and maximum of plotted-point reachable rates", + "by_model": { + "flash": { + "gvr_v2": { + "points": 9, + "average_percent": 41.59262449083251, + "peak_percent": 77.98454391932714 + }, + "sglang": { + "points": 9, + "average_percent": 24.722370525640997, + "peak_percent": 41.20468486380641 + }, + "flashinfer": { + "points": 9, + "average_percent": 17.530384259598836, + "peak_percent": 31.973142176533667 + }, + "radix_cuda": { + "points": 9, + "average_percent": 7.73037106360671, + "peak_percent": 16.904373664943286 + }, + "deepselect": { + "points": 9, + "average_percent": 21.163519529351618, + "peak_percent": 64.37510759356354 + }, + "hpc_ops": { + "points": 9, + "average_percent": 23.01430056542999, + "peak_percent": 40.99358662670424 + } + }, + "pro": { + "gvr_v2": { + "points": 9, + "average_percent": 39.0022042727297, + "peak_percent": 68.41314746484473 + }, + "sglang": { + "points": 9, + "average_percent": 24.712160489392073, + "peak_percent": 41.256004328890995 + }, + "flashinfer": { + "points": 9, + "average_percent": 15.824095934200326, + "peak_percent": 31.904758031346407 + }, + "radix_cuda": { + "points": 9, + "average_percent": 7.832445928048165, + "peak_percent": 16.38668927402192 + }, + "deepselect": { + "points": 9, + "average_percent": 19.2699960099983, + "peak_percent": 56.36077032065703 + } + }, + "v32": { + "gvr_v2": { + "points": 7, + "average_percent": 41.297662352832006, + "peak_percent": 65.08393175529055 + }, + "sglang": { + "points": 7, + "average_percent": 27.070908293403967, + "peak_percent": 37.95389274750273 + }, + "flashinfer": { + "points": 7, + "average_percent": 15.121383923634395, + "peak_percent": 20.294356158047773 + }, + "radix_cuda": { + "points": 7, + "average_percent": 8.288326206074565, + "peak_percent": 17.77349626674448 + }, + "deepselect": { + "points": 7, + "average_percent": 14.419005752929042, + "peak_percent": 34.77047716555635 + }, + "hpc_ops": { + "points": 7, + "average_percent": 31.59216128492162, + "peak_percent": 53.07637384676913 + } + } + } + }, "evolution_vs_radix": { "temporal_r0": { "geomean": 2.5865458712068374, diff --git a/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md b/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md index 916a967991da..09c2adb25c80 100644 --- a/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md +++ b/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md @@ -265,15 +265,28 @@ $$ The calibrated limits are **6.912 TB/s** sustained read bandwidth and **37.047 Tcompare/s** semantic comparison throughput. They meet at **5.36 compare/byte**, more than 21 times the maximum ideal Top-K intensity. The entire workload band sits on the bandwidth slope in Figure 7A. -![A clean two-level roofline: the full B200 hardware model highlights Top-K's narrow bandwidth-limited band; three linear-scale zoom panels compare GVR V2 and five baselines at batch 1024, with GVR V2 highlighted in green.](../media/gvr_v2/roofline.svg) +![A clean two-level roofline: the full B200 hardware model highlights Top-K's narrow bandwidth-limited band; three linear-scale Pareto curve panels compare GVR V2 and five baselines at batch 1024, with GVR V2 highlighted in green.](../media/gvr_v2/roofline.svg) -*Figure 7.* A: the full theoretical and calibrated roofs. B: the Top-K band at $B=1024$, plotting useful throughput $P=BN/t$ against intensity $I=N/[4(N+K)]$ on linear axes. Green highlights V2; the dotted line is the calibrated bandwidth roof. All kernels share the same minimum-traffic model $Q_{\min}$, while extra reads and output work remain in measured time. +*Figure 7.* A: the full theoretical and calibrated roofs. B: Pareto curves in the Top-K band at $B=1024$, plotting useful throughput $P=BN/t$ against intensity $I=N/[4(N+K)]$ on linear axes. Green highlights V2; the dotted line is the calibrated bandwidth roof. All kernels share the same minimum-traffic model $Q_{\min}$, while extra reads and output work remain in measured time. -### Compare Useful Work at the Same Intensity +### Compare Pareto Curves and Reachable Rates -At fixed $N$ and $K$, every implementation has the same horizontal position. A faster kernel moves **upward**, toward the bandwidth roof. Figure 7B fixes the batch at 1,024 so the curves expose throughput with substantial parallel work available; Figure 6 retains the contrasting single-row view, and Figures 4 and 5 cover all 11 batch sizes. The linear vertical scale makes the remaining distance to the roof directly visible. +Each operator's **Pareto curve** in Figure 7B traces useful throughput across intensities at $B=1024$. At fixed $N$ and $K$, every implementation has the same horizontal position; a faster kernel moves **upward**, toward the calibrated roof. Figure 6 retains the contrasting single-row view, and Figures 4 and 5 cover all 11 batch sizes. -For the Flash slice in Figure 6, $B=1024$, $N=131{,}075$, and $K=512$ give an optimistic minimum time of **78.0 µs**. GVR V2 takes **113.1 µs**, reaching about **69%** of the calibrated roof under this shared-work normalization. SGLang takes 196.8 µs, or about **40%** of that roof; radix CUDA takes 461.3 µs, or about **17%**. All three solve the same logical selection problem. Their different vertical positions reflect how much elapsed time they spend beyond its minimum traffic requirement. +The **reachable rate** is $P(I)/P_{\mathrm{calibrated}}(I)$, expressed as a percentage. The table compares **average / peak reachable rate** along each Pareto curve. The average weights the plotted intensity points equally; the peak is their maximum. Both use the same layer-averaged timings as Figure 7B. + +| Operator | V4 Flash | V4 Pro | V3.2 | +| :--- | ---: | ---: | ---: | +| **GVR V2** | **41.6% / 78.0%** | **39.0% / 68.4%** | **41.3% / 65.1%** | +| SGLang, plan + transform | 24.7% / 41.2% | 24.7% / 41.3% | 27.1% / 38.0% | +| FlashInfer | 17.5% / 32.0% | 15.8% / 31.9% | 15.1% / 20.3% | +| TensorRT-LLM radix CUDA | 7.7% / 16.9% | 7.8% / 16.4% | 8.3% / 17.8% | +| DeepSelect FP32 | 21.2% / 64.4% | 19.3% / 56.4% | 14.4% / 34.8% | +| HPC-ops FP32 | 23.0% / 41.0% | — | 31.6% / 53.1% | + +*Each cell shows average / peak. HPC-ops does not support the Pro configuration.* + +GVR V2 leads both measures on all three models: its average reachable rate is **39.0–41.6%**, with peaks of **65.1–78.0%**. The nearest baseline varies by model. On V3.2, HPC-ops reaches **31.6% / 53.1%**, compared with V2's **41.3% / 65.1%**. On Flash, DeepSelect reaches a **64.4%** peak but averages **21.2%**, while SGLang averages **24.7%**. Reporting both measures captures the best operating point and the performance sustained across the curve. ### Interpret the Remaining Gap From 73620c28db5c1d7b2408876e51e1b32166ba93b2 Mon Sep 17 00:00:00 2001 From: longcheng-nv <243710427+longcheng-nv@users.noreply.github.com> Date: Wed, 16 Sep 2026 13:23:06 +0000 Subject: [PATCH 05/33] [None][doc] Explain shared GVR V2 kernel integration for decode and prefill Signed-off-by: longcheng-nv <243710427+longcheng-nv@users.noreply.github.com> --- ...Sampling_Exact_TopK_for_Sparse_Attention.md | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md b/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md index 09c2adb25c80..3a1c1b06dfcc 100644 --- a/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md +++ b/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md @@ -294,15 +294,25 @@ The full ideal bound is $T_{\mathrm{roof}}=\max(Q_{\min}/\mathrm{BW},W/R_{\mathr ## Decode and Prefill in TensorRT-LLM +### One Selection Core, Two Row Interfaces + +TensorRT-LLM integrates GVR V2 around a **shared selection core with phase-specific row adapters**. The `TopK` module connects the sparse-attention indexer to the selected engine and writes INT32 indices into the caller's output buffer. The same configuration selects self-sampling for supported decode and prefill paths, giving both phases a common exact-selection contract. + +The adapters express each phase's work as a valid score interval. Decode's `run_varlen` derives each row's length from device-resident KV lengths, the multi-token prediction offset, and the indexer's compression ratio. Prefill's `run_prefill` receives `[start, end)` intervals already expressed in compressed score columns and returns indices relative to `start`. Both preserve identity indices for short rows and fill unused output slots with `-1`. + +The kernel reuse is concrete: prefill specializes the **same `GvrMainKernel` streaming implementation used by decode**. A compile-time window mode adapts row addressing, masks values outside the valid interval, and translates the selected indices into the local output frame. The self-sampling, multi-threshold counting, candidate collection, and exact refinement remain in the shared implementation. Prefill uses one thread block per row, while decode retains its register and cluster specializations for other workload shapes. This keeps the selection logic shared while allowing each phase to use an appropriate execution plan. [PR #18702](https://github.com/NVIDIA/TensorRT-LLM/pull/18702) introduces this reuse. + +Self-sampling also simplifies the lifecycle around that core. Each invocation builds its bracket from the current scores, so the V2 path needs no previous-step selection buffer, prefill-to-decode prior seeding, or post-decode prior write-back. The integration allocates and updates that state only for the temporal engine. This lets the same selection design serve both a newly computed prefill window and a growing decode row. [PR #18446](https://github.com/NVIDIA/TensorRT-LLM/pull/18446) makes the dispatch and state ownership consistent. + ### Stable Launches, Dynamic Row Lengths -CUDA Graph replay needs a stable launch configuration even as requests grow. The host chooses a kernel family and launch envelope before capture. At execution time, each row reads its actual length from device-resident metadata, including its multi-token prediction offset and compression ratio. +CUDA Graph replay needs a stable launch configuration even as requests grow. The host chooses a kernel family and launch envelope before capture. During decode, each row reads its actual length from device-resident metadata, including its multi-token prediction offset and compression ratio. -Two details matter for correctness and integration. [PR #18683](https://github.com/NVIDIA/TensorRT-LLM/pull/18683) keeps the physical row-width bound separate from the routing bound and ensures warmup populates launchers for exact row counts. [PR #18446](https://github.com/NVIDIA/TensorRT-LLM/pull/18446) makes dispatch configuration-based and limits previous-step prior allocation and updates to the temporal engine. The device-side prior-seeding change in [PR #18646](https://github.com/NVIDIA/TensorRT-LLM/pull/18646) benefits that retained temporal path; V2 does not need prior seeding. +The framework separates the physical row-width bound used for safe memory access from the routing bound used to choose an execution plan. Warmup prepares the decode launchers for exact row counts and the prefill launchers for a bounded set of row-count tiers and width buckets. Decode and prefill specializations have distinct compilation-cache keys, even though they share the streaming implementation. [PR #18683](https://github.com/NVIDIA/TensorRT-LLM/pull/18683) and [PR #18702](https://github.com/NVIDIA/TensorRT-LLM/pull/18702) establish these launch and warmup rules. -### The Same Approach Extends to Prefill +The `TopK` boundary also checks whether the score layout supports the fast path. Unsupported layouts use exact native selection; a prefill specialization missing during graph capture falls back to radix without compiling inside capture. Configuration, warmup, and fallback therefore support the same selection contract as the shared kernel. -[PR #18702](https://github.com/NVIDIA/TensorRT-LLM/pull/18702) applies the streaming engine to each prefill row's valid interval `[start, end)`. Output indices are relative to `start`, and short windows retain identity indices with `-1` padding. There is no previous token's selection to initialize. +### Serving Gains from the Shared Engine In B200 profiles, V2 makes prefill Top-K **1.84–2.61×** faster than radix CUDA. Adding V2 prefill to a deployment already using V2 decode improves serving throughput by **2.9–4.5%** on long-input workloads. This is the incremental benefit of the prefill change. From a891ef12a48e0a2f96c2834ae19ffee395d8f912 Mon Sep 17 00:00:00 2001 From: longcheng-nv <243710427+longcheng-nv@users.noreply.github.com> Date: Wed, 16 Sep 2026 14:50:06 +0000 Subject: [PATCH 06/33] [None][doc] Clarify GVR V2 narrative with recovery and integration diagrams Signed-off-by: longcheng-nv <243710427+longcheng-nv@users.noreply.github.com> --- docs/source/blogs/media/gvr_v2/README.md | 25 +- docs/source/blogs/media/gvr_v2/algorithm.svg | 890 ++++++++++-------- .../source/blogs/media/gvr_v2/integration.svg | 292 ++++++ .../source/blogs/media/gvr_v2/plot_results.py | 164 +++- ...ampling_Exact_TopK_for_Sparse_Attention.md | 123 +-- 5 files changed, 1008 insertions(+), 486 deletions(-) create mode 100644 docs/source/blogs/media/gvr_v2/integration.svg diff --git a/docs/source/blogs/media/gvr_v2/README.md b/docs/source/blogs/media/gvr_v2/README.md index 64e086bab437..0813f0fdbced 100644 --- a/docs/source/blogs/media/gvr_v2/README.md +++ b/docs/source/blogs/media/gvr_v2/README.md @@ -19,7 +19,7 @@ With NumPy and Matplotlib installed, run from the repository root: python docs/source/blogs/media/gvr_v2/plot_results.py ``` -The script regenerates `summary.json` and seven SVGs: `speedup.svg`, `evolution.svg`, `algorithm.svg`, `sglang_map.svg`, `deepselect_map.svg`, `latency.svg`, and `roofline.svg`. It requires no GPU. The algorithm diagrams are schematic; every performance panel uses the bundled timing observations. +The script regenerates `summary.json` and eight SVGs: `speedup.svg`, `evolution.svg`, `algorithm.svg`, `sglang_map.svg`, `deepselect_map.svg`, `latency.svg`, `roofline.svg`, and `integration.svg`. It requires no GPU. The algorithm diagrams are schematic; every performance panel uses the bundled timing observations. ## Published Data @@ -74,6 +74,29 @@ The latency and roofline curves use arithmetic-mean durations over matching laye Correctness compares selected value multisets with `torch.topk`, allowing tied indices to differ. The capture-grid checks do not establish NaN ordering parity or a universal tie order. The linked implementation PRs additionally cover padding, variable lengths, exceptional values, and graph replay. +## Additional Numerical Views + +The article uses Figure 1 for the model-level comparison. The following table retains each baseline's full paired coverage; Figure 1 instead uses the common intersection within each model. + +| Baseline | V4 Flash, $K=512$ | V4 Pro, $K=1024$ | V3.2, $K=2048$ | +| :--- | ---: | ---: | ---: | +| SGLang v2, plan + transform | 1.78× | 1.76× | 1.55× | +| FlashInfer 0.6.14 | 2.12× | 2.14× | 1.89× | +| TensorRT-LLM radix CUDA | 4.74× | 4.73× | 5.15× | +| DeepSelect FP32 | 1.98× | 2.07× | 2.79× | +| HPC-ops FP32 | 2.30× | Unsupported | 1.30× | + +*Each model column uses the workloads supported by that baseline.* + +For a concrete large-batch slice, the following times are at $B=1024$ and $N\approx131{,}072$, averaged over the same layers as Figure 6: + +| Model | GVR V2 | SGLang | FlashInfer | Radix CUDA | DeepSelect FP32 | HPC-ops FP32 | +| :--- | ---: | ---: | ---: | ---: | ---: | ---: | +| V4 Flash | **113.1 µs** | 196.8 µs | 275.4 µs | 461.3 µs | 190.5 µs | 199.2 µs | +| V4 Pro | **132.8 µs** | 199.1 µs | 298.3 µs | 477.7 µs | 209.1 µs | — | +| V3.2 | **124.0 µs** | 211.0 µs | 388.8 µs | 496.6 µs | 419.6 µs | 159.7 µs | + + ## Roofline Definitions The logical work is `W = B*N` abstract comparisons and the minimum traffic is `Q = 4*B*(N+K)` bytes. Operational intensity is `I = W/Q`; measured useful throughput is `P = B*N/(time_us*1e6)` Tcompare/s. Every kernel uses this same normalization. Extra outputs, padding, staging, repeated scans, and synchronization remain in measured time but do not enlarge the ideal work or minimum-traffic terms. The plotted throughput is not a hardware instruction rate or measured DRAM bandwidth. diff --git a/docs/source/blogs/media/gvr_v2/algorithm.svg b/docs/source/blogs/media/gvr_v2/algorithm.svg index 374f56997e8f..b5d0a5e14063 100644 --- a/docs/source/blogs/media/gvr_v2/algorithm.svg +++ b/docs/source/blogs/media/gvr_v2/algorithm.svg @@ -1,7 +1,7 @@ - + @@ -21,8 +21,8 @@ - - +" clip-path="url(#pd21065112f)" style="fill: #76b900"/> - +" clip-path="url(#pd21065112f)" style="fill: #76b900"/> - +" clip-path="url(#pd21065112f)" style="fill: #dfe5eb"/> - +" clip-path="url(#pd21065112f)" style="fill: #dfe5eb"/> - +" clip-path="url(#pd21065112f)" style="fill: #dfe5eb"/> - +" clip-path="url(#pd21065112f)" style="fill: #dfe5eb"/> - +" clip-path="url(#pd21065112f)" style="fill: #dfe5eb"/> - +" clip-path="url(#pd21065112f)" style="fill: #dfe5eb"/> - +" clip-path="url(#pd21065112f)" style="fill: #76b900"/> - +" clip-path="url(#pd21065112f)" style="fill: #76b900"/> - +" clip-path="url(#pd21065112f)" style="fill: #dfe5eb"/> - +" clip-path="url(#pd21065112f)" style="fill: #dfe5eb"/> - +" clip-path="url(#pd21065112f)" style="fill: #dfe5eb"/> - +" clip-path="url(#pd21065112f)" style="fill: #dfe5eb"/> - +" clip-path="url(#pd21065112f)" style="fill: #dfe5eb"/> - +" clip-path="url(#pd21065112f)" style="fill: #dfe5eb"/> - +" clip-path="url(#pd21065112f)" style="fill: #76b900"/> - +" clip-path="url(#pd21065112f)" style="fill: #76b900"/> - +" clip-path="url(#pd21065112f)" style="fill: #dfe5eb"/> - +" clip-path="url(#pd21065112f)" style="fill: #dfe5eb"/> - +" clip-path="url(#pd21065112f)" style="fill: #dfe5eb"/> - +" clip-path="url(#pd21065112f)" style="fill: #dfe5eb"/> - +" clip-path="url(#pd21065112f)" style="fill: #dfe5eb"/> - +" clip-path="url(#pd21065112f)" style="fill: #dfe5eb"/> - +" clip-path="url(#pd21065112f)" style="fill: #76b900"/> - +" clip-path="url(#pd21065112f)" style="fill: #76b900"/> - +" clip-path="url(#pd21065112f)" style="fill: #dfe5eb"/> - +" clip-path="url(#pd21065112f)" style="fill: #dfe5eb"/> - +" clip-path="url(#pd21065112f)" style="fill: #dfe5eb"/> - +" clip-path="url(#pd21065112f)" style="fill: #dfe5eb"/> - +" clip-path="url(#pd21065112f)" style="fill: #dfe5eb"/> - +" clip-path="url(#pd21065112f)" style="fill: #dfe5eb"/> - +" clip-path="url(#pd21065112f)" style="fill: #a7c976"/> - +" clip-path="url(#pd21065112f)" style="fill: #a7c976"/> - +" clip-path="url(#pd21065112f)" style="fill: #a7c976"/> - +" clip-path="url(#pd21065112f)" style="fill: #a7c976"/> - +" clip-path="url(#pd21065112f)" style="fill: #a7c976"/> - +" clip-path="url(#pd21065112f)" style="fill: #a7c976"/> - +" clip-path="url(#pd21065112f)" style="fill: #a7c976"/> - +" clip-path="url(#pd21065112f)" style="fill: #a7c976"/> - +" clip-path="url(#pd21065112f)" style="fill: #a7c976"/> - +" clip-path="url(#pd21065112f)" style="fill: #a7c976"/> - +" clip-path="url(#pd21065112f)" style="fill: #a7c976"/> - +" clip-path="url(#pd21065112f)" style="fill: #a7c976"/> - + - +" clip-path="url(#pd21065112f)" style="fill: #cbd5e1"/> - +" clip-path="url(#pd21065112f)" style="fill: #cbd5e1"/> - +" clip-path="url(#pd21065112f)" style="fill: #cbd5e1"/> - +" clip-path="url(#pd21065112f)" style="fill: #cbd5e1"/> - +" clip-path="url(#pd21065112f)" style="fill: #cbd5e1"/> - +" clip-path="url(#pd21065112f)" style="fill: #cbd5e1"/> - +" clip-path="url(#pd21065112f)" style="fill: #cbd5e1"/> - +" clip-path="url(#pd21065112f)" style="fill: #f5b642"/> - +" clip-path="url(#pd21065112f)" style="fill: #579600"/> - +" clip-path="url(#pd21065112f)" style="fill: #579600"/> - +" clip-path="url(#pd21065112f)" style="fill: #579600"/> - + - + - - - - + - + - + - + - 1 SELF-SAMPLE + 1 SELF-SAMPLE - Place the bracket near the current tail + Place the bracket near the current tail - 2 MULTI-THRESHOLD + 2 MULTI-THRESHOLD - Get many exact counts from one classification + Get many exact counts from one classification - 3 REFINE + 3 REFINE - Finish only the uncertain boundary + Finish only the uncertain boundary - Current row: sparse, regularly spaced vector loads + Current row: sparse, regularly spaced vector loads - Sample histogram ≈ current score distribution + Sample histogram ≈ current score distribution - T_floor + T_floor - T + T - T_K + T_K - Ranks ≈ 2AS/N, AS/N, KS/N - → safety floor, admission threshold, upper anchor + Ranks ≈ 2AS/N, AS/N, KS/N + → safety floor, admission threshold, upper anchor - - + - - Every valid score is examined + Every valid score is examined - Exact histogram → suffix counts at all bin boundaries + Exact histogram → suffix counts at all bin boundaries - T + T - H + H - - + - - 73 in crossing bin + 73 in crossing bin - 980 - above + 980 + above - 256 verification bins (shown schematically) - One bin assignment per survivor, then an on-chip scan + 256 verification bins (shown schematically) + One bin assignment per survivor, then an on-chip scan - - + - - 980 certain winners + 980 certain winners - Select 44 of 73 boundary candidates + Select 44 of 73 boundary candidates - 1,024 exact output indices + 1,024 exact output indices - - + - - - + - + + + + + + + + + + + + + + - If the sample misses: lower the admission threshold or invoke exact recovery. An incomplete candidate buffer never proves correctness. + EXACTNESS CHECKS BEFORE OUTPUT + + + Full-row coverage · valid bracket · complete candidates + + + Enough survivors + Refine the crossing → exact Top-K + + + + + + + Too few survivors + Lower admission and verify again + + + + + + + Overflow or unusable bracket + Exact complete-set / whole-row recovery + + + + - - + + + + + diff --git a/docs/source/blogs/media/gvr_v2/integration.svg b/docs/source/blogs/media/gvr_v2/integration.svg new file mode 100644 index 000000000000..16e7b3fb0701 --- /dev/null +++ b/docs/source/blogs/media/gvr_v2/integration.svg @@ -0,0 +1,292 @@ + + + + + + + + Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. SPDX-License-Identifier: Apache-2.0 + image/svg+xml + + + Matplotlib v3.10.8, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + One selection core, two row interfaces + + + Sparse-attention indexer → TopK dispatcher + One self-sampling configuration for both phases + + + DECODE · run_varlen + KV lengths + MTP offset + compression → valid prefix + Routing: streaming, register, or cluster families + + + + + + + + + + + PREFILL · run_prefill + Compressed-column window [start, end) + Local indices · one thread block per row + + + + + + + + + + + + + + streaming route + + + + + + compile-time window mode + + + Shared streaming implementation · GvrMainKernel + + + Self-sample + + + + + + + Multi-threshold + exact counts + + + + + + + Collect + refine + + + + + + + Exact indices + + + Prefill specializes addressing, masks, and index origin; selection logic is shared. + + + Caller-owned INT32 output · no previous-step Top-K prior for V2 + + + + + + + Runtime support: layout gates · precompiled launchers · exact native fallback + + + + + + + + + diff --git a/docs/source/blogs/media/gvr_v2/plot_results.py b/docs/source/blogs/media/gvr_v2/plot_results.py index 4239272bbc22..a4c497d7eae8 100644 --- a/docs/source/blogs/media/gvr_v2/plot_results.py +++ b/docs/source/blogs/media/gvr_v2/plot_results.py @@ -349,7 +349,7 @@ def _evolution(rows: list[dict]) -> None: def _algorithm() -> None: - fig, ax = plt.subplots(figsize=(14, 6.8)) + fig, ax = plt.subplots(figsize=(14, 9)) ax.set(xlim=(0, 14), ylim=(0, 7)) ax.axis("off") headings = [ @@ -422,19 +422,164 @@ def _algorithm() -> None: (11.6, y + 0.25), arrowprops={"arrowstyle": "->", "color": "#64748b"}, ) + fig.subplots_adjust(left=0.01, right=0.99, bottom=0.27, top=0.98) + guard = fig.add_axes((0.025, 0.03, 0.95, 0.26)) + guard.set(xlim=(0, 14), ylim=(0, 3)) + guard.axis("off") + guard.text( + 0.05, 2.8, "EXACTNESS CHECKS BEFORE OUTPUT", fontsize=12, weight="bold", color="#334155" + ) _box( - ax, - (0.25, 0.12), - (13.2, 0.64), - "If the sample misses: lower the admission threshold or invoke exact recovery. " - "An incomplete candidate buffer never proves correctness.", + guard, + (3.2, 1.96), + (7.6, 0.44), + "Full-row coverage · valid bracket · complete candidates", "#f1f4f7", - 10, + 11, ) - fig.subplots_adjust(left=0.01, right=0.99, bottom=0.03, top=0.98) + paths = [ + (0.15, "Enough survivors\nRefine the crossing → exact Top-K", "#edf5df"), + (4.85, "Too few survivors\nLower admission and verify again", "#fff3d9"), + (9.55, "Overflow or unusable bracket\nExact complete-set / whole-row recovery", "#e9eff5"), + ] + for x, label, color in paths: + _box(guard, (x, 0.24), (4.15, 0.98), label, color, 10) + guard.annotate( + "", + (x + 2.075, 1.34), + (7, 1.86), + arrowprops={"arrowstyle": "->", "color": "#64748b", "lw": 1.4}, + ) _save(fig, "algorithm") +def _integration() -> None: + fig, ax = plt.subplots(figsize=(14, 8.4)) + ax.set(xlim=(0, 14), ylim=(0, 9)) + ax.axis("off") + ax.text( + 0.3, + 8.65, + "One selection core, two row interfaces", + fontsize=21, + weight="bold", + color="#17202b", + ) + _box( + ax, + (0.75, 7.35), + (12.5, 0.82), + "Sparse-attention indexer → TopK dispatcher\nOne self-sampling configuration for both phases", + "#e9eff5", + 12, + ) + adapters = [ + ( + 0.75, + "DECODE · run_varlen\nKV lengths + MTP offset + compression → valid prefix\n" + "Routing: streaming, register, or cluster families", + "#edf5df", + ), + ( + 7.45, + "PREFILL · run_prefill\nCompressed-column window [start, end)\n" + "Local indices · one thread block per row", + "#e9eff5", + ), + ] + for x, label, color in adapters: + _box(ax, (x, 5.1), (5.8, 1.38), label, color, 11.5) + ax.annotate( + "", + (x + 2.9, 6.6), + (7, 7.23), + arrowprops={"arrowstyle": "->", "color": "#64748b", "lw": 1.5}, + ) + ax.annotate( + "", + (x + 2.9, 4.34), + (x + 2.9, 4.98), + arrowprops={"arrowstyle": "->", "color": "#64748b", "lw": 1.5}, + ) + ax.text( + 3.65, + 4.62, + "streaming route", + ha="center", + fontsize=9, + color="#447a00", + backgroundcolor="white", + ) + ax.text( + 10.35, + 4.62, + "compile-time window mode", + ha="center", + fontsize=9, + color="#52616f", + backgroundcolor="white", + ) + ax.add_patch( + FancyBboxPatch( + (0.75, 2.03), + 12.5, + 2.15, + boxstyle="round,pad=0.08,rounding_size=0.08", + facecolor="#f5f9ee", + edgecolor="#99bb6c", + linewidth=1.3, + ) + ) + ax.text( + 7, + 3.73, + "Shared streaming implementation · GvrMainKernel", + ha="center", + fontsize=14, + weight="bold", + color="#447a00", + ) + stages = ["Self-sample", "Multi-threshold\nexact counts", "Collect + refine", "Exact indices"] + for i, label in enumerate(stages): + x = 1.03 + i * 3.08 + _box(ax, (x, 2.49), (2.55, 0.7), label, "#ffffff", 11) + if i < 3: + ax.annotate( + "", + (x + 2.95, 2.84), + (x + 2.68, 2.84), + arrowprops={"arrowstyle": "->", "color": "#64748b", "lw": 1.4}, + ) + ax.text( + 7, + 2.14, + "Prefill specializes addressing, masks, and index origin; selection logic is shared.", + ha="center", + fontsize=10, + color="#52616f", + ) + _box( + ax, + (0.75, 0.72), + (12.5, 0.66), + "Caller-owned INT32 output · no previous-step Top-K prior for V2", + "#edf5df", + 12, + ) + ax.annotate( + "", (7, 1.5), (7, 1.91), arrowprops={"arrowstyle": "->", "color": "#64748b", "lw": 1.5} + ) + ax.text( + 0.75, + 0.1, + "Runtime support: layout gates · precompiled launchers · exact native fallback", + fontsize=10.5, + color="#52616f", + ) + fig.subplots_adjust(left=0.015, right=0.985, bottom=0.025, top=0.99) + _save(fig, "integration") + + def _matching(rows: list[dict], model: str) -> list[dict]: required = ["gvr_v2", *ARMS] if model != "pro" else ["gvr_v2", *ARMS[:-1]] return [ @@ -775,7 +920,7 @@ def _speedup_map(rows: list[dict], arm: str, label: str, scope: str) -> None: def main() -> None: - """Validate the frozen dataset, then regenerate statistics and seven figures.""" + """Validate the frozen dataset, then regenerate statistics and eight figures.""" plt.rcParams.update( { "font.family": "DejaVu Sans", @@ -818,6 +963,7 @@ def main() -> None: _speedup_map(rows, "deepselect", "DeepSelect FP32", "DeepSelect FP32 · unsorted indices") _latency(rows) _roofline(rows) + _integration() if __name__ == "__main__": diff --git a/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md b/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md index 3a1c1b06dfcc..b1578c154951 100644 --- a/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md +++ b/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md @@ -26,13 +26,12 @@ On B200, this design delivers **4.93× geometric-mean speedup over TensorRT-LLM - [From GVR V1 to V2: Two Costs to Remove](#from-gvr-v1-to-v2-two-costs-to-remove) - [Self-Sampling: Calibrate the Search to This Row](#self-sampling-calibrate-the-search-to-this-row) - [Multi-Thresholding: Make Each Full-Row Pass Count](#multi-thresholding-make-each-full-row-pass-count) -- [Why the Two Ideas Work Together](#why-the-two-ideas-work-together) - [Mapping Selection to Blackwell](#mapping-selection-to-blackwell) - [Performance Against Five Baselines](#performance-against-five-baselines) - [The Roofline Model: Fewer Passes, More Useful Work](#the-roofline-model-fewer-passes-more-useful-work) - [Decode and Prefill in TensorRT-LLM](#decode-and-prefill-in-tensorrt-llm) -- [Further Reading](#further-reading) - [Conclusion](#conclusion) +- [Further Reading](#further-reading) ## From GVR V1 to V2: Two Costs to Remove @@ -65,7 +64,7 @@ Temporal R0 and tiered GVR achieve **2.59× and 3.47×** speedup over radix CUDA ## Self-Sampling: Calibrate the Search to This Row -The first job is to place the search near the upper tail of this row's score distribution. V2 takes a small, deterministic sample distributed across the row and uses its ranks to estimate thresholds for the full population. The sample supplies a starting region; the later full-row verification decides whether that region contains enough candidates. +V2 takes a small, deterministic sample across the valid row and uses its ranks to estimate the upper tail of the full population. The sample chooses a starting region; full-row verification determines whether it contains enough candidates. In the `main` family, a sample unit is two adjacent `float4` vectors: eight scores loaded together. The clustered streaming family uses four vectors, or sixteen scores. Sample units are regularly spaced across the valid interval. Their addresses follow from the row layout, so sampling does not wait for previous-step indices. Sampling can still miss an unusual tail; its role is to reduce work, not to decide output membership. @@ -81,11 +80,11 @@ provide three anchors: - **Upper anchor $T_K$:** estimate the neighborhood of rank $K$; together with $T$, it defines the upper classification bound $H$ (`HIC` in the implementation). - **Lower floor $T_{\mathrm{floor}}$:** admit a larger population if the first estimate is too aggressive (`TSH` in the implementation). -The concrete sample budget, safety margin in $A$, rank rounding, and capacity clamps depend on the launch family. The algorithm does not assume independent random samples or a known analytical distribution. Its useful property is that the bracket is calibrated from the same row whose boundary will be verified. +Sample budgets, safety margins, and capacity clamps depend on the launch family. The estimate requires neither independent random samples nor a known analytical distribution; exact verification handles a poor estimate. -![Self-sampling chooses a bracket, multi-threshold verification obtains exact bin counts, and refinement emits 980 certain winners plus 44 of 73 boundary candidates for K=1024.](../media/gvr_v2/algorithm.svg) +![Self-sampling, exact multi-threshold counts, and crossing-bin refinement, with three verification outcomes: refine, lower admission, or exact recovery.](../media/gvr_v2/algorithm.svg) -*Figure 3. Two histograms serve different purposes: the sample histogram estimates a useful region; the verification histogram contains exact populations from the complete valid row or its complete admitted candidates. The pictured bin heights and 980/73/44 example are illustrative. Register-resident shortcuts are described below.* +*Figure 3. The sample histogram estimates a bracket; the verification histogram counts the complete admitted population. The lower panel shows how verification controls refinement and recovery. Bin heights and the 980/73/44 example are illustrative; exact recovery depends on the kernel family.* ## Multi-Thresholding: Make Each Full-Row Pass Count @@ -94,7 +93,7 @@ A scalar verification pass answers one question: how many scores exceed $T$? Mul Conceptually, divide the bracket $[T,H]$ into $M$ ordered bins, with boundaries $t_0,\ldots,t_M$, and let $h_j$ be the exact population of bin $j$. A descending cumulative scan yields $$ -C(t_j)=\sum_{\ell=j}^{M-1}h_\ell. +C(t_j)=\sum_{\ell=j}^{M-1}h_\ell,\qquad 0\le j\lt M. $$ The streaming verification histogram has 256 bins. Each survivor is assigned to a bin once; a small on-chip cumulative scan then exposes counts at all its boundaries. **One classification contributes to an entire family of threshold counts.** The expensive score reads are shared, and the remaining scan touches only the bin counters. Verification can locate where the population crosses $K$ without issuing another full-row query for each trial threshold. @@ -120,21 +119,15 @@ For $K=1024$, suppose 980 scores lie above the crossing bin and 73 lie inside it The histogram discretizes the search region, not the selected scores. Exact comparisons within the crossing bin resolve its coarse boundaries, including ties. Thus fewer passes do not require approximate Top-K membership. -### Two Kinds of Thresholds, Two Different Jobs - -The **sample-derived admission ladder** ($T$, a lower floor, and a conservative sentinel) repairs a poor initial guess. The **verification bin boundaries** answer many exact population queries within an admitted region. They work at different levels and should not be confused. - -For non-split streaming, too few survivors can trigger another full-row scan at a valid lower floor and then at the sentinel. Split-row streaming can stage down to the lower floor within its scan and use exact recovery if necessary. Candidate overflow cannot be treated as a successful partial selection: the kernel re-scans or falls back to exact key-space selection over a complete candidate set or the whole row. +### How Verification Preserves Exactness -## Why the Two Ideas Work Together +**The sample focuses the bins; exact bin counts make the sample safe.** A useful bracket keeps the crossing small, while multi-threshold verification avoids a separate full-row query for every trial boundary. Figure 3 distinguishes the resulting paths: refine a complete admitted set, lower admission when too few scores survive, or recover exactly when staging or bracket checks fail. -The two ideas address successive sources of work. Self-sampling gives the histogram a useful region to resolve. Multi-threshold verification locates the exact crossing within that region. Refinement ranks only the candidates whose membership is still undecided. The expensive global operation gets progressively more information before the algorithm commits to more work. +Two mechanisms have different jobs. The **admission ladder**—the primary threshold, lower floor, and conservative sentinel—widens the candidate region. The **verification bin boundaries** locate rank $K$ within that region. Non-split streaming can rescan at a lower threshold; split-row streaming can stage down to the lower floor within its scan. Overflow requires complete-set or whole-row exact recovery. -A good sample without broad verification could still pay for repeated full-row threshold tests. A histogram without a useful bracket could put too many scores into the crossing bin and leave expensive refinement. **V2 uses the sample to focus the bins, and the exact bin counts to make the sample safe.** Its performance objective is to avoid repeated expensive passes over $N$, while keeping most remaining work within a much smaller candidate region. +Guess quality controls work, while complete counts and exact refinement control membership. There is no fixed one-pass guarantee. For example, [PR #18625](https://github.com/NVIDIA/TensorRT-LLM/pull/18625) repairs infinite-width brackets in register families with exact whole-row key selection, preserving `+inf` winners. -This is an optimization of work, not a fixed one-pass guarantee. Difficult distributions, staging overflow, and unusable brackets may require extra scans. Exactness includes those paths: [PR #18625](https://github.com/NVIDIA/TensorRT-LLM/pull/18625) fixes register-family infinite-width brackets by using exact whole-row key selection, preserving `+inf` among the winners. - -The output contract is an exact selected **value multiset** with valid unique indices. Equal-valued candidates are interchangeable; index order need not match `torch.topk`. Short rows return all valid local indices followed by `-1` padding. NaN ordering remains implementation-specific. Guess quality controls the amount of work; complete counts and exact refinement control membership. +The output contract is an exact selected **value multiset** with valid unique indices. Tied indices may differ from `torch.topk`; output order is unrestricted. Short rows return valid local indices followed by `-1` padding. NaN ordering remains implementation-specific. ## Mapping Selection to Blackwell @@ -155,28 +148,6 @@ This explains the two sources of performance improvement: a better starting thre ## Performance Against Five Baselines -### The Gains Extend Beyond an Average - -Figure 1 puts the GVR evolution and library baselines on the same scale. Across the three models, tiered temporal GVR takes **1.34–1.50×** V2's time, SGLang takes **1.55–1.78×**, and radix CUDA takes **4.73–5.15×**. The comparison also reveals model-dependent behavior: HPC-ops is closer on V3.2 than on Flash, while DeepSelect's FP32 V3.2 route leaves a larger gap. - -GVR V2 is faster in every tested radix and FlashInfer comparison and in **99.91%** of SGLang comparisons. Figure 4 shows how the advantage changes with row length and batch size. - -![Three heatmaps of GVR V2 speedup over SGLang for every captured row-length bucket and all eleven batch sizes, averaged geometrically across layers.](../media/gvr_v2/sglang_map.svg) - -*Figure 4. SGLang plan + transform time divided by GVR V2 time, geometrically averaged across layers at each shape. A value of 1.0 means equal performance. Figures 4 and 5 share the same color scale; row lengths are rounded in the axis labels.* - -Long rows at intermediate batch sizes show particularly strong gains: **V4 Pro reaches 4.67× at $N=262{,}127$, $B=64$**. This is the strongest shape-average result in the grid; most regions are around 1.3–2.0×. - -DeepSelect FP32 shows a different pattern: V2's strongest gains move toward long rows at small batch sizes, especially for V3.2. - -![Three heatmaps of GVR V2 speedup over DeepSelect FP32 across row lengths and all eleven batch sizes, using the same color scale as the SGLang comparison.](../media/gvr_v2/deepselect_map.svg) - -*Figure 5. DeepSelect FP32 time divided by GVR V2 time, geometrically averaged across layers at each shape. The layout and color scale match Figure 4: values above 1.0 favor V2, and darker teal indicates a larger gain. Cell labels round to one decimal place.* - -For **V3.2, the gain reaches 7.66× around 128K scores at batch size 1** and stays above 6× at that row length through batch size 8. Flash and Pro also show broad gains, with peaks of **4.23×** and **4.34×**. The narrowest margin appears for the longest Flash rows at batch size 128, where the shape average is approximately parity (0.996×). - -Two details determine how these gains carry into an application: the actual row-length and batch distribution, and the work each API returns. The next sections make both explicit. - ### Benchmark Setup The benchmarks use FP32 indexer scores from the three models below on NVIDIA B200, with batch sizes from 1 to 1,024. Results report cold-L2 GPU kernel time, excluding compilation, input preparation, and Python overhead. Speedups are geometric means over matched workloads. @@ -189,7 +160,7 @@ The benchmarks use FP32 indexer scores from the three models below on NVIDIA B20 **$N$ is the indexer row width, not the original prompt length.** A roughly 512K-token V4 context yields a roughly 128K-wide indexer row because of 4× compression. -### Overall and Per-Model Results +### Overall Results | Baseline | Geomean speedup | Minimum speedup | GVR V2 faster | | :--- | ---: | ---: | ---: | @@ -199,17 +170,29 @@ The benchmarks use FP32 indexer scores from the three models below on NVIDIA B20 | DeepSelect v1.0.0 FP32 | **2.37×** | 0.84× | 99.60% | | HPC-ops FP32 | **1.55×** | 0.71× | 98.38% | -The minimum column exposes individual regressions that a geometric mean can hide. GVR V2 wins every recorded radix and FlashInfer pair, while SGLang, DeepSelect, and HPC-ops retain individual winning cases. +The minimum column retains individual regressions. Figure 1 shows the model-level comparison on the common workloads supported by each implementation. -| Baseline | V4 Flash, $K=512$ | V4 Pro, $K=1024$ | V3.2, $K=2048$ | -| :--- | ---: | ---: | ---: | -| SGLang v2, plan + transform | 1.78× | 1.76× | 1.55× | -| FlashInfer 0.6.14 | 2.12× | 2.14× | 1.89× | -| TensorRT-LLM radix CUDA | 4.74× | 4.73× | 5.15× | -| DeepSelect FP32 | 1.98× | 2.07× | 2.79× | -| HPC-ops FP32 | 2.30× | Unsupported | 1.30× | +### The Gains Extend Beyond an Average + +The comparison changes with the model and shape. Figure 1 shows HPC-ops closest on V3.2 and a larger DeepSelect FP32 gap there. The heatmaps resolve those averages into the row-length and batch regions where each advantage appears. + +Figure 4 locates the SGLang gains across the full length–batch grid. -*Each model column uses the workloads supported by that baseline.* +![Three heatmaps of GVR V2 speedup over SGLang for every captured row-length bucket and all eleven batch sizes, averaged geometrically across layers.](../media/gvr_v2/sglang_map.svg) + +*Figure 4. SGLang plan + transform time divided by GVR V2 time, geometrically averaged across layers at each shape. A value of 1.0 means equal performance. Figures 4 and 5 share the same color scale; row lengths are rounded in the axis labels.* + +Long rows at intermediate batch sizes show particularly strong gains: **V4 Pro reaches 4.67× at $N=262{,}127$, $B=64$**. This is the strongest shape-average result in the grid; most regions are around 1.3–2.0×. + +DeepSelect FP32 shows a different pattern: V2's strongest gains move toward long rows at small batch sizes, especially for V3.2. + +![Three heatmaps of GVR V2 speedup over DeepSelect FP32 across row lengths and all eleven batch sizes, using the same color scale as the SGLang comparison.](../media/gvr_v2/deepselect_map.svg) + +*Figure 5. DeepSelect FP32 time divided by GVR V2 time, geometrically averaged across layers at each shape. The layout and color scale match Figure 4: values above 1.0 favor V2, and darker teal indicates a larger gain. Cell labels round to one decimal place.* + +For **V3.2, the gain reaches 7.66× around 128K scores at batch size 1** and stays above 6× at that row length through batch size 8. Flash and Pro also show broad gains, with peaks of **4.23×** and **4.34×**. The narrowest margin appears for the longest Flash rows at batch size 128, where the shape average is approximately parity (0.996×). + +These patterns identify useful operating regions. The native API contracts below explain which work is included in each comparison. ### What Explains the Differences @@ -231,16 +214,6 @@ The minimum column exposes individual regressions that a geometric mean can hide At $B=1$, keeping a short row in registers and exposing parallelism within a longer row matter more than saturating HBM. At $B=1024$, streaming throughput becomes more visible. The different shapes of these curves are why a single average cannot identify every useful operating region. -For a concrete large-batch slice, the following times are at $B=1024$ and $N\approx131{,}072$, averaged over the same layers as Figure 6: - -| Model | GVR V2 | SGLang | FlashInfer | Radix CUDA | DeepSelect FP32 | HPC-ops FP32 | -| :--- | ---: | ---: | ---: | ---: | ---: | ---: | -| V4 Flash | **113.1 µs** | 196.8 µs | 275.4 µs | 461.3 µs | 190.5 µs | 199.2 µs | -| V4 Pro | **132.8 µs** | 199.1 µs | 298.3 µs | 477.7 µs | 209.1 µs | — | -| V3.2 | **124.0 µs** | 211.0 µs | 388.8 µs | 496.6 µs | 419.6 µs | 159.7 µs | - -The contrast between single-row latency and large-batch throughput reflects the importance of selecting the right execution family. - ## The Roofline Model: Fewer Passes, More Useful Work The bar chart shows how much time GVR V2 saves. The roofline asks how much of that time is fundamentally needed to move the input and output. It connects the algorithm's goal—fewer full-row passes—to a hardware limit. @@ -296,21 +269,23 @@ The full ideal bound is $T_{\mathrm{roof}}=\max(Q_{\min}/\mathrm{BW},W/R_{\mathr ### One Selection Core, Two Row Interfaces -TensorRT-LLM integrates GVR V2 around a **shared selection core with phase-specific row adapters**. The `TopK` module connects the sparse-attention indexer to the selected engine and writes INT32 indices into the caller's output buffer. The same configuration selects self-sampling for supported decode and prefill paths, giving both phases a common exact-selection contract. +TensorRT-LLM separates phase-specific row metadata from shared selection logic. The `TopK` module applies the same self-sampling configuration to supported decode and prefill paths, then passes each phase's valid score interval to the selected engine. -The adapters express each phase's work as a valid score interval. Decode's `run_varlen` derives each row's length from device-resident KV lengths, the multi-token prediction offset, and the indexer's compression ratio. Prefill's `run_prefill` receives `[start, end)` intervals already expressed in compressed score columns and returns indices relative to `start`. Both preserve identity indices for short rows and fill unused output slots with `-1`. +![Integration diagram: a shared TopK dispatcher feeds decode and prefill row adapters, which reuse GvrMainKernel's streaming selection pipeline; decode also retains register and cluster routes.](../media/gvr_v2/integration.svg) -The kernel reuse is concrete: prefill specializes the **same `GvrMainKernel` streaming implementation used by decode**. A compile-time window mode adapts row addressing, masks values outside the valid interval, and translates the selected indices into the local output frame. The self-sampling, multi-threshold counting, candidate collection, and exact refinement remain in the shared implementation. Prefill uses one thread block per row, while decode retains its register and cluster specializations for other workload shapes. This keeps the selection logic shared while allowing each phase to use an appropriate execution plan. [PR #18702](https://github.com/NVIDIA/TensorRT-LLM/pull/18702) introduces this reuse. +*Figure 8. Shared selection logic with phase-specific row interfaces. The decode arrow shows its streaming route; register and cluster routes remain available under the same output contract. Prefill specializes the streaming implementation at compile time.* -Self-sampling also simplifies the lifecycle around that core. Each invocation builds its bracket from the current scores, so the V2 path needs no previous-step selection buffer, prefill-to-decode prior seeding, or post-decode prior write-back. The integration allocates and updates that state only for the temporal engine. This lets the same selection design serve both a newly computed prefill window and a growing decode row. [PR #18446](https://github.com/NVIDIA/TensorRT-LLM/pull/18446) makes the dispatch and state ownership consistent. +The adapters preserve each phase's indexing semantics. Decode derives valid prefixes from device KV lengths, multi-token prediction offsets, and compression. Prefill receives `[start, end)` in compressed columns and returns indices relative to `start`. Both write INT32 indices into caller-owned output, with identity indices and `-1` padding for short rows. -### Stable Launches, Dynamic Row Lengths +Prefill's compile-time mode changes addressing, masking, and index origin in the same **`GvrMainKernel` streaming implementation** used by decode. Self-sampling, multi-threshold counting, collection, and exact refinement stay shared. One block per prefill row and specialized decode scheduling let the common algorithm serve different parallelism requirements. [PR #18702](https://github.com/NVIDIA/TensorRT-LLM/pull/18702) implements this reuse. -CUDA Graph replay needs a stable launch configuration even as requests grow. The host chooses a kernel family and launch envelope before capture. During decode, each row reads its actual length from device-resident metadata, including its multi-token prediction offset and compression ratio. +The bracket comes from the current scores in both phases. Consequently, V2 needs no previous-step Top-K buffer, prefill-to-decode prior seeding, or prior write-back. [PR #18446](https://github.com/NVIDIA/TensorRT-LLM/pull/18446) limits that state to the temporal engine. -The framework separates the physical row-width bound used for safe memory access from the routing bound used to choose an execution plan. Warmup prepares the decode launchers for exact row counts and the prefill launchers for a bounded set of row-count tiers and width buckets. Decode and prefill specializations have distinct compilation-cache keys, even though they share the streaming implementation. [PR #18683](https://github.com/NVIDIA/TensorRT-LLM/pull/18683) and [PR #18702](https://github.com/NVIDIA/TensorRT-LLM/pull/18702) establish these launch and warmup rules. +### Stable Launches, Dynamic Row Lengths + +Host routing chooses a stable launch envelope; device metadata supplies each row's actual length. The physical memory bound remains separate from the bound used to select an execution plan. Warmup prepares exact-row decode launchers and a bounded set of prefill tiers and width buckets, with distinct compilation-cache keys for the two phase specializations. [PR #18683](https://github.com/NVIDIA/TensorRT-LLM/pull/18683) and [PR #18702](https://github.com/NVIDIA/TensorRT-LLM/pull/18702) establish these rules. -The `TopK` boundary also checks whether the score layout supports the fast path. Unsupported layouts use exact native selection; a prefill specialization missing during graph capture falls back to radix without compiling inside capture. Configuration, warmup, and fallback therefore support the same selection contract as the shared kernel. +Unsupported layouts use exact native selection. If a prefill specialization is missing during CUDA Graph capture, `TopK` selects radix without compiling inside capture. Both adapters preserve the exact output contract when the fast path is unavailable. ### Serving Gains from the Shared Engine @@ -340,6 +315,12 @@ trtllm-serve deepseek-ai/DeepSeek-V4-Flash \ V2 requires CUTLASS DSL, datacenter Blackwell SM100/SM103, $K\in\lbrace 512,1024,2048\rbrace$, and supported indexer compression ratios 1 or 4. The fast path expects FP32 scores with unit inner stride, a row stride divisible by four floats, and a 16-byte-aligned base. Unsupported layouts use exact native fallback selection. The retired `TRTLLM_GVR_SELF_SAMPLING` environment variable is no longer the enablement mechanism, and `use_cute_dsl_topk` is not required to select V2. +## Conclusion + +GVR V2 makes exact Top-K cheaper by learning more before repeating expensive work. **Self-sampling focuses the search; multi-threshold counts locate the crossing; exact refinement resolves the remaining membership.** Register, streaming, and cluster execution paths adapt that design to the available parallelism. + +The performance maps show where the gains occur, and the Pareto curves express them as progress toward the bandwidth roof. A shared streaming implementation carries the same selection logic into decode and prefill, with phase-specific row interfaces and no temporal Top-K prior. + ## Further Reading [Benchmark methodology and figure reproduction](../media/gvr_v2/README.md) are available separately. @@ -355,9 +336,3 @@ Implementation milestones: - [PR #18702: self-sampling prefill](https://github.com/NVIDIA/TensorRT-LLM/pull/18702). For the surrounding model pipeline, see [Sparse Attention in TensorRT-LLM](blog17_Sparse_Attention_in_TensorRT-LLM.md) and [DeepSeek-V4 on NVIDIA Blackwell](blog26_DeepSeek_V4_on_NVIDIA_Blackwell_Model_Specific_and_Agentic_Workload_Optimizations_in_TensorRT-LLM.md). - -## Conclusion - -GVR V2 reduces the cost of finding the boundary before optimizing the work left at that boundary. **Self-sampling** places the search near the current row's tail. **Multi-thresholding** turns a classification pass into many exact population counts. The crossing bin then isolates the candidates that still need ranking. This removes the previous-step Top-K state and dependent gather of temporal GVR while preserving exact membership through verification and recovery. - -The B200 results connect that algorithmic change to practical kernels: 4.93× over radix CUDA, 1.66× over SGLang including planning, and broad gains over FlashInfer, DeepSelect FP32, and HPC-ops FP32 on their paired case sets. The roofline makes the objective concrete: move useful selection throughput closer to the bandwidth roof by spending less time revisiting the row. Register, streaming, and cluster specializations make this design work across launch sizes, while the shared exactness contract carries it from decode into prefill. From ab0876101ef2fa0e1ad27d972717a34b7444a451 Mon Sep 17 00:00:00 2001 From: longcheng-nv <243710427+longcheng-nv@users.noreply.github.com> Date: Thu, 17 Sep 2026 02:10:02 +0000 Subject: [PATCH 07/33] [None][doc] Adopt GVR V2 algorithm title and unified-core subtitle Signed-off-by: longcheng-nv <243710427+longcheng-nv@users.noreply.github.com> --- docs/source/blogs/media/gvr_v2/README.md | 2 +- ...29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/source/blogs/media/gvr_v2/README.md b/docs/source/blogs/media/gvr_v2/README.md index 0813f0fdbced..72a5947787db 100644 --- a/docs/source/blogs/media/gvr_v2/README.md +++ b/docs/source/blogs/media/gvr_v2/README.md @@ -9,7 +9,7 @@ SPDX-License-Identifier: Apache-2.0 # GVR V2: Benchmark Methodology and Figure Reproduction -This companion to [GVR V2: Faster Exact Top-K with Self-Sampling and Multi-Thresholding](../../tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md) contains the observations and definitions needed to reproduce the article's figures. The article focuses on the algorithm and its performance; this document records the measurement boundaries. +This companion to [GVR V2: Self-Sampling and Multi-Thresholding for Faster Exact Top-K](../../tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md) contains the observations and definitions needed to reproduce the article's figures. The article focuses on the algorithm and its performance; this document records the measurement boundaries. ## Regenerate the Figures diff --git a/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md b/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md index b1578c154951..e72f6cd2542f 100644 --- a/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md +++ b/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md @@ -3,7 +3,9 @@ SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All SPDX-License-Identifier: Apache-2.0 --> -# GVR V2: Faster Exact Top-K with Self-Sampling and Multi-Thresholding +# GVR V2: Self-Sampling and Multi-Thresholding for Faster Exact Top-K + +*A Unified Selection Core for Prefill and Decode in TensorRT-LLM* By NVIDIA TensorRT-LLM Team From 8560db0028e44c7463974deb6308ff50f6ca6a53 Mon Sep 17 00:00:00 2001 From: longcheng-nv <243710427+longcheng-nv@users.noreply.github.com> Date: Thu, 17 Sep 2026 02:24:38 +0000 Subject: [PATCH 08/33] [None][doc] Explain robustness and integration motives for GVR V2 Signed-off-by: longcheng-nv <243710427+longcheng-nv@users.noreply.github.com> --- docs/source/blogs/media/gvr_v2/evolution.svg | 7 +-- .../source/blogs/media/gvr_v2/integration.svg | 2 +- .../source/blogs/media/gvr_v2/plot_results.py | 15 +++--- ...ampling_Exact_TopK_for_Sparse_Attention.md | 46 +++++++++++++------ 4 files changed, 45 insertions(+), 25 deletions(-) diff --git a/docs/source/blogs/media/gvr_v2/evolution.svg b/docs/source/blogs/media/gvr_v2/evolution.svg index f1294b9d97c3..fbb7339e2aa8 100644 --- a/docs/source/blogs/media/gvr_v2/evolution.svg +++ b/docs/source/blogs/media/gvr_v2/evolution.svg @@ -123,7 +123,8 @@ z → exact refinement - Two dependent reads; threshold quality follows temporal overlap. + Biased toward previous winners; overlap varies across layers and steps. + Weak hints add verification and recovery work. GVR V2 streaming: self-sampling + multi-thresholding @@ -177,7 +178,7 @@ L 424.616412 275.1088 " style="fill: none; stroke: #64748b; stroke-width: 1.5; stroke-linecap: round"/> - Current-row information; no previous-step Top-K state. + No temporal-overlap dependency; one calibration rule for both phases. @@ -377,7 +378,7 @@ L 964.8 301.536 From temporal prediction to current-row calibration - R0 already introduced a hint-derived threshold ladder. V2 combines that direction with current-row sampling and execution specialization. + Design goals: improve the practical performance floor and average latency; remove the temporal prior's framework lifecycle. Bars compare the temporal R0, temporal tiered, and self-sampling V2 implementations. diff --git a/docs/source/blogs/media/gvr_v2/integration.svg b/docs/source/blogs/media/gvr_v2/integration.svg index 16e7b3fb0701..9df3baa85d07 100644 --- a/docs/source/blogs/media/gvr_v2/integration.svg +++ b/docs/source/blogs/media/gvr_v2/integration.svg @@ -268,7 +268,7 @@ L 707.408449 408.86368 Prefill specializes addressing, masks, and index origin; selection logic is shared. - Caller-owned INT32 output · no previous-step Top-K prior for V2 + Caller-owned INT32 output · no temporal-prior seed, handoff, or write-back None: ax.text( 0.2, 0.23, - "Current-row information; no previous-step Top-K state.", - fontsize=10, + "No temporal-overlap dependency; one calibration rule for both phases.", + fontsize=9.5, color="#447a00", ) bars = fig.add_axes((0.76, 0.25, 0.21, 0.5)) @@ -333,8 +334,8 @@ def _evolution(rows: list[dict]) -> None: fig.text( 0.035, 0.06, - "R0 already introduced a hint-derived threshold ladder. " - "V2 combines that direction with current-row sampling and execution specialization.", + "Design goals: improve the practical performance floor and average latency; " + "remove the temporal prior's framework lifecycle.", fontsize=10, color="#475569", ) @@ -562,7 +563,7 @@ def _integration() -> None: ax, (0.75, 0.72), (12.5, 0.66), - "Caller-owned INT32 output · no previous-step Top-K prior for V2", + "Caller-owned INT32 output · no temporal-prior seed, handoff, or write-back", "#edf5df", 12, ) diff --git a/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md b/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md index e72f6cd2542f..0b3afd266d7e 100644 --- a/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md +++ b/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md @@ -13,7 +13,7 @@ By NVIDIA TensorRT-LLM Team Selecting 1,024 INT32 indices from 131,072 FP32 scores writes just **4 KiB of output**, yet one complete read of the scores moves **512 KiB**. Every additional full-row pass pays that input cost again. For a sparse-attention indexer, finding the Top-K boundary can therefore cost far more than emitting the winners. -GVR V2 makes each full-row pass more useful. **Self-sampling estimates where the current row's Top-K boundary lies; multi-thresholding derives many exact population counts from one classification pass.** Together, they concentrate exact refinement on the small group of scores still competing for the final slots. +GVR V2 makes each full-row pass more useful without depending on the previous decode step to predict the current one. **Self-sampling estimates where the current row's Top-K boundary lies; multi-thresholding derives many exact population counts from one classification pass.** Together, they concentrate exact refinement on the small group of scores still competing for the final slots. On B200, this design delivers **4.93× geometric-mean speedup over TensorRT-LLM radix CUDA and 1.66× over SGLang v2**, with **2.01× over FlashInfer, 2.37× over DeepSelect FP32, and 1.55× over HPC-ops FP32**. The workloads span DeepSeek-V3.2, DeepSeek-V4 Flash, and DeepSeek-V4 Pro indexers. The SGLang result includes planning; the transform-only comparison is **1.42×**. @@ -21,11 +21,11 @@ On B200, this design delivers **4.93× geometric-mean speedup over TensorRT-LLM *Figure 1. Kernel time relative to GVR V2, geometrically averaged over the same workloads within each model; shorter is faster. The temporal bars show the R0 and tiered implementations. SGLang includes planning; HPC-ops does not support Pro.* -[The original GVR blog](blog21_Temporal_Correlation_Meets_Sparse_Attention.md) described a temporal shortcut: the previous decode step's selected indices predict the next step's winners. V2 makes the row itself the source of the guess. This removes a dependent gather and the need to carry Top-K state across decode steps, while preserving the **Guess–Verify–Refine** exactness contract. It also makes the design useful for prefill, where a previous decode selection does not exist. +[The original GVR blog](blog21_Temporal_Correlation_Meets_Sparse_Attention.md) described a temporal shortcut: the previous decode step's selected indices predict the next step's winners. Experience with V1 exposed two limits: hint quality varies sharply, and maintaining the hint couples selection to the serving framework. V2 makes the current row the source of the guess, targeting **a stronger performance floor and better average latency**, while enabling **one selection core for prefill and decode**. The **Guess–Verify–Refine** exactness contract remains. ## Table of Contents -- [From GVR V1 to V2: Two Costs to Remove](#from-gvr-v1-to-v2-two-costs-to-remove) +- [From GVR V1 to V2: Why Move Beyond Temporal Hints?](#from-gvr-v1-to-v2-why-move-beyond-temporal-hints) - [Self-Sampling: Calibrate the Search to This Row](#self-sampling-calibrate-the-search-to-this-row) - [Multi-Thresholding: Make Each Full-Row Pass Count](#multi-thresholding-make-each-full-row-pass-count) - [Mapping Selection to Blackwell](#mapping-selection-to-blackwell) @@ -35,7 +35,7 @@ On B200, this design delivers **4.93× geometric-mean speedup over TensorRT-LLM - [Conclusion](#conclusion) - [Further Reading](#further-reading) -## From GVR V1 to V2: Two Costs to Remove +## From GVR V1 to V2: Why Move Beyond Temporal Hints? Original GVR V1 gathers the current scores at the previous step's Top-K indices, estimates a bracket from their minimum, maximum, and mean, then uses a secant-style search on the monotone count function @@ -43,32 +43,46 @@ $$ C(T)=\sum_{i=0}^{N-1}\mathbf{1}[x_i\ge T]. $$ -It seeks an admission threshold with enough survivors to contain Top-K, but few enough to fit its candidate capacity. A good temporal prediction makes that search short. Two costs remain: loading the old indices before the score addresses are known, and scanning the row again when another threshold must be tested. The first is a memory dependency; the second multiplies traffic as $N$ grows. +It seeks an admission threshold with enough survivors to contain Top-K, but few enough to fit its candidate capacity. A high-quality temporal hint can make this search very short. The difficulty is making that benefit reliable across inference workloads. -V2 addresses both. Its streaming paths read regularly spaced, coalesced samples of the current row to choose a useful bracket. They then classify the full row into bins whose cumulative counts evaluate many thresholds together. The algorithm spends a small amount of work learning where to look, then obtains much more information from each expensive full-row pass. +### A Biased Sample with Variable Value + +Temporal hints are a **biased sample**: they inspect current scores at positions selected as winners in the previous step. When temporal overlap is high and stable, that bias is valuable because the sample concentrates on the upper tail. In inference traces examined during V1 development, however, the hit rate—the fraction of previous-step selected indices retained in the current Top-K—varied from **nearly 0% to about 90%** across models, layers, and decode steps. A low-overlap sample can provide little useful information about the current tail. + +The kernel cannot know that exact hit rate before finding the current Top-K. Verification can reveal that a proposed threshold is poor, but by then the hint gather and some selection work have already been paid for. Hint quality therefore cannot serve as a cheap, advance decision about whether the temporal shortcut is worth taking. + +This variability affects the whole design. Robust selection must cover weak hints with conservative admission, additional count queries, candidate-capacity checks, and exact recovery. A wider range of hint quality puts more pressure on those mechanisms: retries add full-row reads, and managing the safe paths adds overhead. The cost reduces average speedup and contributes to latency variation, even when favorable steps are very fast. Exact fallback protects correctness; its cost still matters to serving performance. + +V2 instead calibrates from regularly spaced, coalesced samples of the **current row**, removing dependence on temporal overlap and the dependent read through old indices. Multi-thresholding then extracts many exact population counts from each full-row classification pass. The two ideas address complementary costs: unreliable initial calibration and repeated scalar threshold queries. The goal is a stronger practical performance floor and a better average, rather than relying on consistently favorable temporal overlap. This is a design objective, not a fixed worst-case latency guarantee. V1 also used a histogram during local refinement after candidate collection. The distinction is where that information becomes available: V2 makes multi-threshold population information central to verification, so it can pass an already identified crossing to refinement. +### A Hint That Crosses Framework Boundaries + +V1's prior also has a lifecycle outside the kernel. Prefill lacks the same previous-decode-step hint, so its seeding policy differs. That phase-dependent history complicates a common selection architecture. V2's current-row calibration removes the Top-K prior dependency, allowing phase differences to stay in dispatch and row-interface adapters. The [integration section](#decode-and-prefill-in-tensorrt-llm) traces the consequences for CUDA Graph preparation and disaggregated serving. + | Algorithm question | Original GVR V1 | Streaming GVR V2 | | :--- | :--- | :--- | | Where does the guess come from? | Current scores gathered through previous-step indices | A coalesced sample of the current row | +| What makes the guess useful? | High, stable overlap with previous winners | Coverage of the current row's score distribution | | What guides admission? | Hint statistics and scalar secant-style count queries | Sample-derived primary threshold, lower safety floor, and upper anchor | | What does verification learn? | A count for the trial threshold | Exact bin populations and counts at many boundaries | | Where is the remaining uncertainty? | The admitted candidate set | The crossing bin containing rank $K$ | | What state crosses decode steps? | Per-layer prior indices | No Top-K prior | +| How do prefill and decode relate? | Different hint availability and seeding policies | Shared streaming selection with phase-specific row adapters | | How does a bad guess affect the result? | More verification/refinement work | Lower admission or exact recovery; membership remains exact | -![GVR V1 and V2 data-flow comparison beside measured progression from temporal R0 to tiered temporal GVR and self-sampling GVR V2.](../media/gvr_v2/evolution.svg) +![V1's temporal bias makes threshold quality depend on changing overlap; V2 calibrates from the current row with no temporal prior. Beside these flows, measured bars compare temporal R0, tiered temporal GVR, and V2.](../media/gvr_v2/evolution.svg) -*Figure 2. Original V1 uses temporal hints and scalar threshold search. The later temporal R0 and tiered implementations introduce broader verification and execution specialization; V2 combines these advances with current-row self-sampling. Bars show speedup over radix CUDA.* +*Figure 2. The design shift removes dependence on temporal overlap and prior state while making each verification pass more informative. Original V1 uses scalar threshold search; later temporal R0 and tiered implementations add broader verification and execution specialization. The bars compare those later temporal implementations with V2 over radix CUDA.* Temporal R0 and tiered GVR achieve **2.59× and 3.47×** speedup over radix CUDA; V2 reaches **4.93×**. V2 is **1.91× faster than temporal R0** and **1.42× faster than tiered temporal GVR**, combining current-row sampling, multi-threshold verification, and specialized execution paths. ## Self-Sampling: Calibrate the Search to This Row -V2 takes a small, deterministic sample across the valid row and uses its ranks to estimate the upper tail of the full population. The sample chooses a starting region; full-row verification determines whether it contains enough candidates. +V2 takes a small, deterministic sample across the valid row and uses its ranks to estimate the upper tail of the full population. The same rule works without knowing the model, layer, decode step, or previous winners. The sample chooses a starting region; full-row verification determines whether it contains enough candidates. -In the `main` family, a sample unit is two adjacent `float4` vectors: eight scores loaded together. The clustered streaming family uses four vectors, or sixteen scores. Sample units are regularly spaced across the valid interval. Their addresses follow from the row layout, so sampling does not wait for previous-step indices. Sampling can still miss an unusual tail; its role is to reduce work, not to decide output membership. +In the `main` family, a sample unit is two adjacent `float4` vectors: eight scores loaded together. The clustered streaming family uses four vectors, or sixteen scores. Sample units are regularly spaced across the valid interval. Their addresses follow from the row layout, so sampling does not wait for previous-step indices. Regular spacing is not a guarantee of statistical unbiasedness: it can still miss an unusual tail. Its role is to reduce work, not to decide output membership. Let $S$ be the sample size and $A\ge K$ the desired full-row candidate population. A **256-bin sample histogram** approximates the score distribution. Descending sample ranks @@ -269,19 +283,23 @@ The full ideal bound is $T_{\mathrm{roof}}=\max(Q_{\min}/\mathrm{BW},W/R_{\mathr ## Decode and Prefill in TensorRT-LLM +Self-sampling changes the integration boundary as well as the threshold estimate. A temporal prior makes selection depend on state produced by an earlier call. Its buffers, initialization, request alignment, and write-back must remain valid through CUDA Graph warmup and replay; disaggregated prefill/decode also needs a policy for making the prior available at the handoff. Prefill and decode do not naturally obtain that hint in the same way. These extra lifecycle rules create maintenance work and opportunities for inconsistent state. + +V2 derives its bracket from the current scores in both phases. Selection therefore needs the current row and its metadata, with no previous-step Top-K buffer, prefill-to-decode prior seeding, or prior write-back. This removes a Top-K-specific state dependency from graph preparation and phase handoffs. [PR #18446](https://github.com/NVIDIA/TensorRT-LLM/pull/18446) limits prior ownership to the temporal engine. + ### One Selection Core, Two Row Interfaces TensorRT-LLM separates phase-specific row metadata from shared selection logic. The `TopK` module applies the same self-sampling configuration to supported decode and prefill paths, then passes each phase's valid score interval to the selected engine. ![Integration diagram: a shared TopK dispatcher feeds decode and prefill row adapters, which reuse GvrMainKernel's streaming selection pipeline; decode also retains register and cluster routes.](../media/gvr_v2/integration.svg) -*Figure 8. Shared selection logic with phase-specific row interfaces. The decode arrow shows its streaming route; register and cluster routes remain available under the same output contract. Prefill specializes the streaming implementation at compile time.* +*Figure 8. Current-row calibration lets both phases enter the same selection core without a temporal-prior lifecycle. The decode arrow shows its streaming route; register and cluster routes remain available under the same output contract. Prefill specializes the streaming implementation at compile time.* The adapters preserve each phase's indexing semantics. Decode derives valid prefixes from device KV lengths, multi-token prediction offsets, and compression. Prefill receives `[start, end)` in compressed columns and returns indices relative to `start`. Both write INT32 indices into caller-owned output, with identity indices and `-1` padding for short rows. Prefill's compile-time mode changes addressing, masking, and index origin in the same **`GvrMainKernel` streaming implementation** used by decode. Self-sampling, multi-threshold counting, collection, and exact refinement stay shared. One block per prefill row and specialized decode scheduling let the common algorithm serve different parallelism requirements. [PR #18702](https://github.com/NVIDIA/TensorRT-LLM/pull/18702) implements this reuse. -The bracket comes from the current scores in both phases. Consequently, V2 needs no previous-step Top-K buffer, prefill-to-decode prior seeding, or prior write-back. [PR #18446](https://github.com/NVIDIA/TensorRT-LLM/pull/18446) limits that state to the temporal engine. +This separation keeps phase-specific decisions in the wrapper, dispatch, and compile-time row adapters. Improvements to threshold calibration, counting, and exact recovery can serve both phases through the shared streaming body, reducing duplicated selection logic and the number of state transitions the framework must maintain. ### Stable Launches, Dynamic Row Lengths @@ -319,9 +337,9 @@ V2 requires CUTLASS DSL, datacenter Blackwell SM100/SM103, $K\in\lbrace 512,1024 ## Conclusion -GVR V2 makes exact Top-K cheaper by learning more before repeating expensive work. **Self-sampling focuses the search; multi-threshold counts locate the crossing; exact refinement resolves the remaining membership.** Register, streaming, and cluster execution paths adapt that design to the available parallelism. +GVR V2 follows from a practical limit of temporal prediction: a biased hint can be excellent when overlap is high, yet expensive to rely on when quality fluctuates. **Self-sampling calibrates from the current row; multi-threshold counts locate the crossing; exact refinement resolves the remaining membership.** Together, they target both difficult-input performance and average latency while preserving exactness. -The performance maps show where the gains occur, and the Pareto curves express them as progress toward the bandwidth roof. A shared streaming implementation carries the same selection logic into decode and prefill, with phase-specific row interfaces and no temporal Top-K prior. +The performance maps show the gains across shapes, and the Pareto curves relate them to the bandwidth roof. Removing the temporal prior also removes its framework lifecycle: a shared streaming implementation serves prefill and decode through phase-specific row interfaces. The result is one algorithmic core whose calibration depends on the input it is selecting now. ## Further Reading From 773914b8c233b6958e15acf5195aaafcfaa1af02 Mon Sep 17 00:00:00 2001 From: longcheng-nv <243710427+longcheng-nv@users.noreply.github.com> Date: Thu, 17 Sep 2026 02:39:45 +0000 Subject: [PATCH 09/33] [None][doc] Connect GVR V2 to SELECT and visualize temporal overlap Signed-off-by: longcheng-nv <243710427+longcheng-nv@users.noreply.github.com> --- docs/source/blogs/media/gvr_v2/README.md | 20 +- .../source/blogs/media/gvr_v2/provenance.json | 9 + .../blogs/media/gvr_v2/temporal_overlap.svg | 5321 +++++++++++++++++ ...ampling_Exact_TopK_for_Sparse_Attention.md | 71 +- 4 files changed, 5395 insertions(+), 26 deletions(-) create mode 100644 docs/source/blogs/media/gvr_v2/temporal_overlap.svg diff --git a/docs/source/blogs/media/gvr_v2/README.md b/docs/source/blogs/media/gvr_v2/README.md index 72a5947787db..707285d4b8e6 100644 --- a/docs/source/blogs/media/gvr_v2/README.md +++ b/docs/source/blogs/media/gvr_v2/README.md @@ -9,7 +9,7 @@ SPDX-License-Identifier: Apache-2.0 # GVR V2: Benchmark Methodology and Figure Reproduction -This companion to [GVR V2: Self-Sampling and Multi-Thresholding for Faster Exact Top-K](../../tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md) contains the observations and definitions needed to reproduce the article's figures. The article focuses on the algorithm and its performance; this document records the measurement boundaries. +This companion to [GVR V2: Self-Sampling and Multi-Thresholding for Faster Exact Top-K](../../tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md) contains the observations and definitions needed to reproduce the article's performance figures, plus the scope of its supplied temporal-overlap illustration. The article focuses on the algorithm and its performance; this document records the measurement boundaries. ## Regenerate the Figures @@ -21,6 +21,14 @@ python docs/source/blogs/media/gvr_v2/plot_results.py The script regenerates `summary.json` and eight SVGs: `speedup.svg`, `evolution.svg`, `algorithm.svg`, `sglang_map.svg`, `deepselect_map.svg`, `latency.svg`, `roofline.svg`, and `integration.svg`. It requires no GPU. The algorithm diagrams are schematic; every performance panel uses the bundled timing observations. +The ninth figure, [temporal_overlap.svg](temporal_overlap.svg), is an author-supplied illustration converted directly from its standalone PDF. Its labels, axes, and plotted contents are preserved. It is not generated by `plot_results.py` or derived from the kernel-timing CSVs. + +## Temporal-Overlap Illustration + +Figure 2 shows SWE-bench-64K decode traces for DeepSeek-V3.2 and DeepSeek-V4 Pro. The prior indices are shifted by +1 for V3.2 and retain their compressed-bin coordinates for V4 Pro before overlap is measured. Blue points match the transported prior; orange points are new selections. The top panels show selected 1,024-position crops for layer 60. The bottom panels use the full index domain over 298 transitions per trace, without smoothing, for V3.2 layers 0/20/60 and Pro layers 2/22/60. Parenthesized legend values are mean overlaps. + +The figure illustrates temporal-hint variability, not kernel speedup. Its source Top-K streams are separate from the timing observations bundled below. `provenance.json` records the supplied SVG's checksum without private source paths or submission metadata. + ## Published Data | File | Contents | @@ -60,7 +68,7 @@ SGLang planning can be amortized across layers in a serving integration. FlashIn The temporal R0 and tiered implementations correspond to public [PR #16457](https://github.com/NVIDIA/TensorRT-LLM/pull/16457) and [PR #16877](https://github.com/NVIDIA/TensorRT-LLM/pull/16877). They already include improvements beyond original scalar-search V1, including a threshold ladder and execution specialization. The original scalar-search implementation has no measurement on this grid. The temporal comparisons span full implementations, including scheduling and integration; they are not an isolated self-sampling ablation. -Figure 2 computes each implementation's speedup directly from its paired radix times. The geometric means are 2.586546× for temporal R0, 3.471858× for tiered temporal GVR, and 4.929143× for V2. Direct temporal/V2 time ratios are 1.905685× and 1.419742×. `summary.json` records these under `evolution_vs_radix` and `temporal_vs_v2`. Historical R0 observations for V3.2 lack explicit N/K metadata; workload identity supplies the join for those records. +Figure 3 computes each implementation's speedup directly from its paired radix times. The geometric means are 2.586546× for temporal R0, 3.471858× for tiered temporal GVR, and 4.929143× for V2. Direct temporal/V2 time ratios are 1.905685× and 1.419742×. `summary.json` records these under `evolution_vs_radix` and `temporal_vs_v2`. Historical R0 observations for V3.2 lack explicit N/K metadata; workload identity supplies the join for those records. ## Aggregation and Coverage @@ -70,7 +78,7 @@ Figure 1 intersects all supported implementations within each model: 2,079 Flash SGLang and FlashInfer lack V3.2 layers 0–2 and cover 9,515 cases in total. HPC-ops covers 6,776 Flash/V3.2 cases. GVR, radix, and DeepSelect cover all 9,746 cases. Missing coverage is never filled with estimated timings. -The latency and roofline curves use arithmetic-mean durations over matching layers at each row-length/batch point: 21 layers for Flash, 30 for Pro, and 58 for V3.2. All layers at each plotted point have the same valid width. The SGLang and DeepSelect FP32 heatmaps (Figures 4 and 5) instead geometrically average per-layer speedups at each shape, using each baseline's full paired coverage. DeepSelect therefore includes all 61 V3.2 layers; SGLang includes 58. Both maps share a 0.8–8.0 scale with parity at 1.0, and cell labels round to one decimal place. A shape average can hide individual regressions. +The latency and roofline curves use arithmetic-mean durations over matching layers at each row-length/batch point: 21 layers for Flash, 30 for Pro, and 58 for V3.2. All layers at each plotted point have the same valid width. The SGLang and DeepSelect FP32 heatmaps (Figures 5 and 6) instead geometrically average per-layer speedups at each shape, using each baseline's full paired coverage. DeepSelect therefore includes all 61 V3.2 layers; SGLang includes 58. Both maps share a 0.8–8.0 scale with parity at 1.0, and cell labels round to one decimal place. A shape average can hide individual regressions. Correctness compares selected value multisets with `torch.topk`, allowing tied indices to differ. The capture-grid checks do not establish NaN ordering parity or a universal tie order. The linked implementation PRs additionally cover padding, variable lengths, exceptional values, and graph replay. @@ -88,7 +96,7 @@ The article uses Figure 1 for the model-level comparison. The following table re *Each model column uses the workloads supported by that baseline.* -For a concrete large-batch slice, the following times are at $B=1024$ and $N\approx131{,}072$, averaged over the same layers as Figure 6: +For a concrete large-batch slice, the following times are at $B=1024$ and $N\approx131{,}072$, averaged over the same layers as Figure 7: | Model | GVR V2 | SGLang | FlashInfer | Radix CUDA | DeepSelect FP32 | HPC-ops FP32 | | :--- | ---: | ---: | ---: | ---: | ---: | ---: | @@ -103,9 +111,9 @@ The logical work is `W = B*N` abstract comparisons and the minimum traffic is `Q The full model is `min(R, BW*I)`. The theoretical parameters are `R=37.224960 Tcompare/s` and `BW=8 TB/s`; calibrated parameters are `R=37.047490 Tcompare/s` and `BW=6.912116 TB/s`. Their knees are 4.65312 and approximately 5.35979 compare/byte, above Top-K's ideal `[0.125, 0.25)` intensity range. The semantic comparison convention counts two binary comparisons per FMNMX3 result; it is not FP32 FLOPS. -Figure 7B uses linear axes at B=1024. In this article, a Pareto curve denotes each operator's plotted intensity–throughput curve at that fixed batch. Figure 6 also shows B=1, and both heatmaps cover all 11 batches. +Figure 8B uses linear axes at B=1024. In this article, a Pareto curve denotes each operator's plotted intensity–throughput curve at that fixed batch. Figure 7 also shows B=1, and both heatmaps cover all 11 batches. -Reachable rate is `100 * P / min(R, BW*I)` percent, using the calibrated roof. Compute each point from the arithmetic-mean duration across the same matched layers used in Figure 7B. The average reachable rate is the unweighted arithmetic mean of these point-level percentages, and the peak is their maximum. Flash and Pro each contribute nine intensity points; V3.2 contributes seven. The average is not weighted by row length or serving frequency. Unsupported HPC-ops Pro results remain absent. `summary.json` records the point counts and average/peak percentages under `roofline_reachable_rate`. +Reachable rate is `100 * P / min(R, BW*I)` percent, using the calibrated roof. Compute each point from the arithmetic-mean duration across the same matched layers used in Figure 8B. The average reachable rate is the unweighted arithmetic mean of these point-level percentages, and the peak is their maximum. Flash and Pro each contribute nine intensity points; V3.2 contributes seven. The average is not weighted by row length or serving frequency. Unsupported HPC-ops Pro results remain absent. `summary.json` records the point counts and average/peak percentages under `roofline_reachable_rate`. The read-dominated roof is optimistic; mixed read/write behavior and additional kernel work can lower achievable throughput. Reachable rate describes useful selection work relative to this model, not measured DRAM bandwidth utilization. diff --git a/docs/source/blogs/media/gvr_v2/provenance.json b/docs/source/blogs/media/gvr_v2/provenance.json index 821ecfa1f8ef..cb520c6a6b54 100644 --- a/docs/source/blogs/media/gvr_v2/provenance.json +++ b/docs/source/blogs/media/gvr_v2/provenance.json @@ -42,5 +42,14 @@ "work_definition": "One abstract comparison per input score; W=B*N, Qmin=4*B*(N+K).", "compare_calibration": "Study counts two semantic binary comparisons per FMNMX3 result.", "scope": "Single-GPU read-dominated ceiling; actual Top-K instruction count and extra traffic are excluded." + }, + "illustrative_figures": { + "temporal_overlap.svg": { + "sha256": "f44c09a246ad12fbf51c806999f29490ea2e8dae69b633f88dea0253e56e1a84", + "source": "Temporal Top-K overlap figure supplied by the article authors", + "conversion": "Standalone figure converted from PDF to SVG; plotted values, labels, vector axes, and embedded point clouds preserved.", + "scope": "SWE-bench-64K traces for DeepSeek-V3.2 and DeepSeek-V4 Pro; coordinate-aligned overlap, distinct from kernel timing comparisons.", + "reproduction": "Imported figure asset; not generated from the bundled kernel-timing CSVs." + } } } diff --git a/docs/source/blogs/media/gvr_v2/temporal_overlap.svg b/docs/source/blogs/media/gvr_v2/temporal_overlap.svg new file mode 100644 index 000000000000..5de4c91aa1fc --- /dev/null +++ b/docs/source/blogs/media/gvr_v2/temporal_overlap.svg @@ -0,0 +1,5321 @@ + + +Temporal Top-K overlap across models, layers, and decode steps +Retained and new selections above raw transported-overlap traces for DeepSeek-V3.2 and DeepSeek-V4 Pro. Values and labels reproduce the author-supplied figure. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md b/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md index 0b3afd266d7e..274ba3a8ec50 100644 --- a/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md +++ b/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md @@ -13,7 +13,7 @@ By NVIDIA TensorRT-LLM Team Selecting 1,024 INT32 indices from 131,072 FP32 scores writes just **4 KiB of output**, yet one complete read of the scores moves **512 KiB**. Every additional full-row pass pays that input cost again. For a sparse-attention indexer, finding the Top-K boundary can therefore cost far more than emitting the winners. -GVR V2 makes each full-row pass more useful without depending on the previous decode step to predict the current one. **Self-sampling estimates where the current row's Top-K boundary lies; multi-thresholding derives many exact population counts from one classification pass.** Together, they concentrate exact refinement on the small group of scores still competing for the final slots. +GVR V2 makes each full-row pass more useful without depending on the previous decode step to predict the current one. **Self-sampling estimates where the current row's Top-K boundary lies; multi-thresholding derives many exact population counts from one classification pass.** Together, they concentrate exact refinement on the small group of scores still competing for the final slots. The sampling idea builds on Floyd–Rivest SELECT, adapted to the memory traffic and parallel execution costs of GPU Top-K. On B200, this design delivers **4.93× geometric-mean speedup over TensorRT-LLM radix CUDA and 1.66× over SGLang v2**, with **2.01× over FlashInfer, 2.37× over DeepSelect FP32, and 1.55× over HPC-ops FP32**. The workloads span DeepSeek-V3.2, DeepSeek-V4 Flash, and DeepSeek-V4 Pro indexers. The SGLang result includes planning; the transform-only comparison is **1.42×**. @@ -25,6 +25,7 @@ On B200, this design delivers **4.93× geometric-mean speedup over TensorRT-LLM ## Table of Contents +- [From Floyd–Rivest SELECT to GPU Top-K](#from-floydrivest-select-to-gpu-top-k) - [From GVR V1 to V2: Why Move Beyond Temporal Hints?](#from-gvr-v1-to-v2-why-move-beyond-temporal-hints) - [Self-Sampling: Calibrate the Search to This Row](#self-sampling-calibrate-the-search-to-this-row) - [Multi-Thresholding: Make Each Full-Row Pass Count](#multi-thresholding-make-each-full-row-pass-count) @@ -35,6 +36,29 @@ On B200, this design delivers **4.93× geometric-mean speedup over TensorRT-LLM - [Conclusion](#conclusion) - [Further Reading](#further-reading) +## From Floyd–Rivest SELECT to GPU Top-K + +GVR V2's self-sampling was inspired by Floyd and Rivest's 1975 paper, [*Expected Time Bounds for Selection*](https://people.csail.mit.edu/rivest/pubs/FR75a.pdf). Its theoretical SELECT algorithm draws a random sample, chooses two sample order statistics to bracket the desired rank, partitions the full input, and continues exactly in the partition containing that rank. If the bracket misses, selection continues in the appropriate outer partition. Sampling reduces expected work without making the answer approximate. + +The classical expected comparison bound for ascending rank $i$ among $n$ elements is + +$$ +n+\min(i,n-i)+o(n). +$$ + +This belongs to a comparison model with random-sampling assumptions; the original treatment assumes distinct keys. [Kiwiel's later analysis](https://arxiv.org/abs/cs/0312055) establishes rigorous bounds for SELECT variants, including repeated keys. These results motivate **using sample ranks to narrow an exact selection problem**. + +GVR V2 carries that principle into a different cost model: + +| Design choice | Floyd–Rivest theoretical SELECT | GVR V2 streaming | +| :--- | :--- | :--- | +| Primary objective | Expected element comparisons | Kernel latency: input passes, memory traffic, and parallel work | +| Calibration | Random sample and sample order statistics | Regularly spaced, coalesced sample and histogram quantiles | +| Remaining selection | Exact partitioning and recursive selection | Exact bin counts, crossing-bin refinement, and recovery | +| Result | An element at the requested rank | An exact set of $K$ indices, without requiring sorted output | + +On a GPU, doing more work on chip can be worthwhile if it avoids another full-row read. V2 therefore couples sampling to candidate capacity, coalesced loads, and multi-threshold counts; its launch families balance that work against synchronization and available parallelism. **The inherited idea is sample-guided exact selection; the optimization target is GPU execution cost.** V2's deterministic sampling policy does not inherit SELECT's randomized comparison bound. Its exactness follows from full-row accounting and exact refinement or recovery, while its performance is evaluated below. + ## From GVR V1 to V2: Why Move Beyond Temporal Hints? Original GVR V1 gathers the current scores at the previous step's Top-K indices, estimates a bracket from their minimum, maximum, and mean, then uses a secant-style search on the monotone count function @@ -47,15 +71,17 @@ It seeks an admission threshold with enough survivors to contain Top-K, but few ### A Biased Sample with Variable Value -Temporal hints are a **biased sample**: they inspect current scores at positions selected as winners in the previous step. When temporal overlap is high and stable, that bias is valuable because the sample concentrates on the upper tail. In inference traces examined during V1 development, however, the hit rate—the fraction of previous-step selected indices retained in the current Top-K—varied from **nearly 0% to about 90%** across models, layers, and decode steps. A low-overlap sample can provide little useful information about the current tail. +Temporal hints are a **biased sample** of current scores at previous winners' positions. High, stable overlap makes that bias useful. Figure 2 shows why it is an unreliable assumption across layers and decode steps. -The kernel cannot know that exact hit rate before finding the current Top-K. Verification can reveal that a proposed threshold is poor, but by then the hint gather and some selection work have already been paid for. Hint quality therefore cannot serve as a cheap, advance decision about whether the temporal shortcut is worth taking. +![Temporal Top-K overlap for DeepSeek-V3.2 and DeepSeek-V4 Pro. Upper panels distinguish retained and new selections; lower panels show raw overlap across three layers, including abrupt drops despite a high average.](../media/gvr_v2/temporal_overlap.svg) -This variability affects the whole design. Robust selection must cover weak hints with conservative admission, additional count queries, candidate-capacity checks, and exact recovery. A wider range of hint quality puts more pressure on those mechanisms: retries add full-row reads, and managing the safe paths adds overhead. The cost reduces average speedup and contributes to latency variation, even when favorable steps are very fast. Exact fallback protects correctness; its cost still matters to serving performance. +*Figure 2. Temporal overlap on SWE-bench-64K workloads. Blue marks previous winners retained after coordinate alignment; orange marks new selections. V3.2 shifts prior indices by +1, while V4 Pro keeps compressed-bin coordinates. Upper panels show position crops; lower curves measure full-domain overlap across layers and steps, with means in parentheses. Even a high-mean layer can suffer an abrupt collapse.* -V2 instead calibrates from regularly spaced, coalesced samples of the **current row**, removing dependence on temporal overlap and the dependent read through old indices. Multi-thresholding then extracts many exact population counts from each full-row classification pass. The two ideas address complementary costs: unreliable initial calibration and repeated scalar threshold queries. The goal is a stronger practical performance floor and a better average, rather than relying on consistently favorable temporal overlap. This is a design objective, not a fixed worst-case latency guarantee. +The hit rate is the fraction of the current Top-K covered by the aligned previous selection. Its true value is known only after the current selection is established. Verification can expose a poor threshold, but the hint gather and initial work have already been paid for. Conservative admission, repeated counts, capacity checks, and exact recovery keep weak hints safe; their overhead and extra reads reduce average speedup and make latency less predictable. -V1 also used a histogram during local refinement after candidate collection. The distinction is where that information becomes available: V2 makes multi-threshold population information central to verification, so it can pass an already identified crossing to refinement. +V2 calibrates from the **current row**, removing dependence on temporal overlap and the read through old indices. Multi-thresholding addresses the other major cost: repeated scalar threshold queries. Together, they target a stronger practical performance floor and better average latency, without a fixed worst-case latency guarantee. + +V1 already used a histogram for local refinement. V2 moves multi-threshold population information into verification, so refinement starts from an identified crossing bin. ### A Hint That Crosses Framework Boundaries @@ -74,7 +100,7 @@ V1's prior also has a lifecycle outside the kernel. Prefill lacks the same previ ![V1's temporal bias makes threshold quality depend on changing overlap; V2 calibrates from the current row with no temporal prior. Beside these flows, measured bars compare temporal R0, tiered temporal GVR, and V2.](../media/gvr_v2/evolution.svg) -*Figure 2. The design shift removes dependence on temporal overlap and prior state while making each verification pass more informative. Original V1 uses scalar threshold search; later temporal R0 and tiered implementations add broader verification and execution specialization. The bars compare those later temporal implementations with V2 over radix CUDA.* +*Figure 3. The design shift removes dependence on temporal overlap and prior state while making each verification pass more informative. Original V1 uses scalar threshold search; later temporal R0 and tiered implementations add broader verification and execution specialization. The bars compare those later temporal implementations with V2 over radix CUDA.* Temporal R0 and tiered GVR achieve **2.59× and 3.47×** speedup over radix CUDA; V2 reaches **4.93×**. V2 is **1.91× faster than temporal R0** and **1.42× faster than tiered temporal GVR**, combining current-row sampling, multi-threshold verification, and specialized execution paths. @@ -96,11 +122,11 @@ provide three anchors: - **Upper anchor $T_K$:** estimate the neighborhood of rank $K$; together with $T$, it defines the upper classification bound $H$ (`HIC` in the implementation). - **Lower floor $T_{\mathrm{floor}}$:** admit a larger population if the first estimate is too aggressive (`TSH` in the implementation). -Sample budgets, safety margins, and capacity clamps depend on the launch family. The estimate requires neither independent random samples nor a known analytical distribution; exact verification handles a poor estimate. +The proportional ranks connect the small sample to the full-row selection target. Unlike SELECT's recursively selected sample pivots, V2 estimates these anchors from histogram bins and budgets them around candidate capacity. Sample sizes, safety margins, and capacity clamps depend on the launch family. The estimate requires neither independent random samples nor a known analytical distribution; exact verification handles a poor estimate. ![Self-sampling, exact multi-threshold counts, and crossing-bin refinement, with three verification outcomes: refine, lower admission, or exact recovery.](../media/gvr_v2/algorithm.svg) -*Figure 3. The sample histogram estimates a bracket; the verification histogram counts the complete admitted population. The lower panel shows how verification controls refinement and recovery. Bin heights and the 980/73/44 example are illustrative; exact recovery depends on the kernel family.* +*Figure 4. The sample histogram estimates a bracket; the verification histogram counts the complete admitted population. The lower panel shows how verification controls refinement and recovery. Bin heights and the 980/73/44 example are illustrative; exact recovery depends on the kernel family.* ## Multi-Thresholding: Make Each Full-Row Pass Count @@ -137,7 +163,7 @@ The histogram discretizes the search region, not the selected scores. Exact comp ### How Verification Preserves Exactness -**The sample focuses the bins; exact bin counts make the sample safe.** A useful bracket keeps the crossing small, while multi-threshold verification avoids a separate full-row query for every trial boundary. Figure 3 distinguishes the resulting paths: refine a complete admitted set, lower admission when too few scores survive, or recover exactly when staging or bracket checks fail. +**The sample focuses the bins; exact bin counts make the sample safe.** A useful bracket keeps the crossing small, while multi-threshold verification avoids a separate full-row query for every trial boundary. Figure 4 distinguishes the resulting paths: refine a complete admitted set, lower admission when too few scores survive, or recover exactly when staging or bracket checks fail. Two mechanisms have different jobs. The **admission ladder**—the primary threshold, lower floor, and conservative sentinel—widens the candidate region. The **verification bin boundaries** locate rank $K$ within that region. Non-split streaming can rescan at a lower threshold; split-row streaming can stage down to the lower floor within its scan. Overflow requires complete-set or whole-row exact recovery. @@ -192,11 +218,11 @@ The minimum column retains individual regressions. Figure 1 shows the model-leve The comparison changes with the model and shape. Figure 1 shows HPC-ops closest on V3.2 and a larger DeepSelect FP32 gap there. The heatmaps resolve those averages into the row-length and batch regions where each advantage appears. -Figure 4 locates the SGLang gains across the full length–batch grid. +Figure 5 locates the SGLang gains across the full length–batch grid. ![Three heatmaps of GVR V2 speedup over SGLang for every captured row-length bucket and all eleven batch sizes, averaged geometrically across layers.](../media/gvr_v2/sglang_map.svg) -*Figure 4. SGLang plan + transform time divided by GVR V2 time, geometrically averaged across layers at each shape. A value of 1.0 means equal performance. Figures 4 and 5 share the same color scale; row lengths are rounded in the axis labels.* +*Figure 5. SGLang plan + transform time divided by GVR V2 time, geometrically averaged across layers at each shape. A value of 1.0 means equal performance. Figures 5 and 6 share the same color scale; row lengths are rounded in the axis labels.* Long rows at intermediate batch sizes show particularly strong gains: **V4 Pro reaches 4.67× at $N=262{,}127$, $B=64$**. This is the strongest shape-average result in the grid; most regions are around 1.3–2.0×. @@ -204,7 +230,7 @@ DeepSelect FP32 shows a different pattern: V2's strongest gains move toward long ![Three heatmaps of GVR V2 speedup over DeepSelect FP32 across row lengths and all eleven batch sizes, using the same color scale as the SGLang comparison.](../media/gvr_v2/deepselect_map.svg) -*Figure 5. DeepSelect FP32 time divided by GVR V2 time, geometrically averaged across layers at each shape. The layout and color scale match Figure 4: values above 1.0 favor V2, and darker teal indicates a larger gain. Cell labels round to one decimal place.* +*Figure 6. DeepSelect FP32 time divided by GVR V2 time, geometrically averaged across layers at each shape. The layout and color scale match Figure 5: values above 1.0 favor V2, and darker teal indicates a larger gain. Cell labels round to one decimal place.* For **V3.2, the gain reaches 7.66× around 128K scores at batch size 1** and stays above 6× at that row length through batch size 8. Flash and Pro also show broad gains, with peaks of **4.23×** and **4.34×**. The narrowest margin appears for the longest Flash rows at batch size 128, where the shape average is approximately parity (0.996×). @@ -226,7 +252,7 @@ These patterns identify useful operating regions. The native API contracts below ![Cold kernel latency for all six implementations versus valid row length, with separate panels for three models and batch sizes 1 and 1024.](../media/gvr_v2/latency.svg) -*Figure 6. Mean cold kernel time across matching layers. Each row is a model; the columns contrast batch sizes 1 and 1,024. Solid and dashed lines distinguish benchmark runs. Both axes are logarithmic; 1K means 1,024.* +*Figure 7. Mean cold kernel time across matching layers. Each row is a model; the columns contrast batch sizes 1 and 1,024. Solid and dashed lines distinguish benchmark runs. Both axes are logarithmic; 1K means 1,024.* At $B=1$, keeping a short row in registers and exposing parallelism within a longer row matter more than saturating HBM. At $B=1024$, streaming throughput becomes more visible. The different shapes of these curves are why a single average cannot identify every useful operating region. @@ -243,7 +269,7 @@ W=BN,\qquad Q_{\min}=4B(N+K)\ \text{bytes},\qquad I=\frac{W}{Q_{\min}}=\frac{N}{4(N+K)}. $$ -Here one unit of work is one **abstract comparison per input score**. This is a common normalization for every implementation, not its measured instruction count. Since $1\le K\le N$, ideal Top-K intensity stays within **$0.125\le I\lt 0.25$ compare/byte**. +Here one unit of work is one **abstract comparison per input score**. This is a common normalization for every implementation, not its measured instruction count or SELECT's expected comparison formula. Since $1\le K\le N$, ideal Top-K intensity stays within **$0.125\le I\lt 0.25$ compare/byte**. The theoretical and calibrated B200 roofs, in Tcompare/s, are @@ -252,17 +278,17 @@ P_{\mathrm{theory}}(I)=\min(37.225,8I),\qquad P_{\mathrm{calibrated}}(I)=\min(37.047,6.912I). $$ -The calibrated limits are **6.912 TB/s** sustained read bandwidth and **37.047 Tcompare/s** semantic comparison throughput. They meet at **5.36 compare/byte**, more than 21 times the maximum ideal Top-K intensity. The entire workload band sits on the bandwidth slope in Figure 7A. +The calibrated limits are **6.912 TB/s** sustained read bandwidth and **37.047 Tcompare/s** semantic comparison throughput. They meet at **5.36 compare/byte**, more than 21 times the maximum ideal Top-K intensity. The entire workload band sits on the bandwidth slope in Figure 8A. ![A clean two-level roofline: the full B200 hardware model highlights Top-K's narrow bandwidth-limited band; three linear-scale Pareto curve panels compare GVR V2 and five baselines at batch 1024, with GVR V2 highlighted in green.](../media/gvr_v2/roofline.svg) -*Figure 7.* A: the full theoretical and calibrated roofs. B: Pareto curves in the Top-K band at $B=1024$, plotting useful throughput $P=BN/t$ against intensity $I=N/[4(N+K)]$ on linear axes. Green highlights V2; the dotted line is the calibrated bandwidth roof. All kernels share the same minimum-traffic model $Q_{\min}$, while extra reads and output work remain in measured time. +*Figure 8.* A: the full theoretical and calibrated roofs. B: Pareto curves in the Top-K band at $B=1024$, plotting useful throughput $P=BN/t$ against intensity $I=N/[4(N+K)]$ on linear axes. Green highlights V2; the dotted line is the calibrated bandwidth roof. All kernels share the same minimum-traffic model $Q_{\min}$, while extra reads and output work remain in measured time. ### Compare Pareto Curves and Reachable Rates -Each operator's **Pareto curve** in Figure 7B traces useful throughput across intensities at $B=1024$. At fixed $N$ and $K$, every implementation has the same horizontal position; a faster kernel moves **upward**, toward the calibrated roof. Figure 6 retains the contrasting single-row view, and Figures 4 and 5 cover all 11 batch sizes. +Each operator's **Pareto curve** in Figure 8B traces useful throughput across intensities at $B=1024$. At fixed $N$ and $K$, every implementation has the same horizontal position; a faster kernel moves **upward**, toward the calibrated roof. Figure 7 retains the contrasting single-row view, and Figures 5 and 6 cover all 11 batch sizes. -The **reachable rate** is $P(I)/P_{\mathrm{calibrated}}(I)$, expressed as a percentage. The table compares **average / peak reachable rate** along each Pareto curve. The average weights the plotted intensity points equally; the peak is their maximum. Both use the same layer-averaged timings as Figure 7B. +The **reachable rate** is $P(I)/P_{\mathrm{calibrated}}(I)$, expressed as a percentage. The table compares **average / peak reachable rate** along each Pareto curve. The average weights the plotted intensity points equally; the peak is their maximum. Both use the same layer-averaged timings as Figure 8B. | Operator | V4 Flash | V4 Pro | V3.2 | | :--- | ---: | ---: | ---: | @@ -293,7 +319,7 @@ TensorRT-LLM separates phase-specific row metadata from shared selection logic. ![Integration diagram: a shared TopK dispatcher feeds decode and prefill row adapters, which reuse GvrMainKernel's streaming selection pipeline; decode also retains register and cluster routes.](../media/gvr_v2/integration.svg) -*Figure 8. Current-row calibration lets both phases enter the same selection core without a temporal-prior lifecycle. The decode arrow shows its streaming route; register and cluster routes remain available under the same output contract. Prefill specializes the streaming implementation at compile time.* +*Figure 9. Current-row calibration lets both phases enter the same selection core without a temporal-prior lifecycle. The decode arrow shows its streaming route; register and cluster routes remain available under the same output contract. Prefill specializes the streaming implementation at compile time.* The adapters preserve each phase's indexing semantics. Decode derives valid prefixes from device KV lengths, multi-token prediction offsets, and compression. Prefill receives `[start, end)` in compressed columns and returns indices relative to `start`. Both write INT32 indices into caller-owned output, with identity indices and `-1` padding for short rows. @@ -345,6 +371,11 @@ The performance maps show the gains across shapes, and the Pareto curves relate [Benchmark methodology and figure reproduction](../media/gvr_v2/README.md) are available separately. +Selection background: + +- [Floyd and Rivest, *Expected Time Bounds for Selection* (1975)](https://people.csail.mit.edu/rivest/pubs/FR75a.pdf), *Communications of the ACM* 18(3), 165–172: the sampling-based selection idea behind V2's calibration. +- [Kiwiel, *Randomized Selection with Quintary Partitions*](https://arxiv.org/abs/cs/0312055): rigorous analysis of SELECT variants and repeated-key handling. + Implementation milestones: - [PR #17821: original self-sampling decode integration](https://github.com/NVIDIA/TensorRT-LLM/pull/17821). From 1491efd9b689797d26b0dd3dc001b9f205850328 Mon Sep 17 00:00:00 2001 From: longcheng-nv <243710427+longcheng-nv@users.noreply.github.com> Date: Thu, 17 Sep 2026 02:50:51 +0000 Subject: [PATCH 10/33] [None][doc] Cover GVR V2 dispatch updates and widen overlap figure Signed-off-by: longcheng-nv <243710427+longcheng-nv@users.noreply.github.com> --- docs/source/blogs/media/gvr_v2/README.md | 2 ++ docs/source/blogs/media/gvr_v2/provenance.json | 5 +++-- docs/source/blogs/media/gvr_v2/temporal_overlap.svg | 2 +- ...9_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md | 5 +++++ 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/docs/source/blogs/media/gvr_v2/README.md b/docs/source/blogs/media/gvr_v2/README.md index 707285d4b8e6..46ddc62f5a41 100644 --- a/docs/source/blogs/media/gvr_v2/README.md +++ b/docs/source/blogs/media/gvr_v2/README.md @@ -51,6 +51,8 @@ Measurements use NVIDIA B200, FP32 indexer scores, and batch sizes from 1 to 1,0 The primary reference is the hint-free GVR V2 `run_varlen` implementation. DeepSelect FP32 and HPC-ops were measured in the same process as that reference. Radix CUDA, SGLang, FlashInfer, and the temporal GVR implementations use matched observations from separate runs. These comparisons describe the bundled implementations and workloads; they are not a current-release, equal-interface benchmark of entire serving frameworks. +The article also describes dispatch improvements in [PR #19076](https://github.com/NVIDIA/TensorRT-LLM/pull/19076). Its targeted B200/B300 measurements are separate from this frozen comparison grid; the existing figures and summaries have not been recomputed for that PR. + | Implementation | Relevant comparison contract | | :--- | :--- | | GVR V2 | FP32 scores, valid row lengths, unordered INT32 indices | diff --git a/docs/source/blogs/media/gvr_v2/provenance.json b/docs/source/blogs/media/gvr_v2/provenance.json index cb520c6a6b54..df604e271861 100644 --- a/docs/source/blogs/media/gvr_v2/provenance.json +++ b/docs/source/blogs/media/gvr_v2/provenance.json @@ -45,11 +45,12 @@ }, "illustrative_figures": { "temporal_overlap.svg": { - "sha256": "f44c09a246ad12fbf51c806999f29490ea2e8dae69b633f88dea0253e56e1a84", + "sha256": "4b9081122fb8f4fa208f4e3c66acc76bfd0ee131fab14cd9ef424db5b28be63c", "source": "Temporal Top-K overlap figure supplied by the article authors", "conversion": "Standalone figure converted from PDF to SVG; plotted values, labels, vector axes, and embedded point clouds preserved.", "scope": "SWE-bench-64K traces for DeepSeek-V3.2 and DeepSeek-V4 Pro; coordinate-aligned overlap, distinct from kernel timing comparisons.", - "reproduction": "Imported figure asset; not generated from the bundled kernel-timing CSVs." + "reproduction": "Imported figure asset; not generated from the bundled kernel-timing CSVs.", + "display": "Intrinsic width is 1200 CSS pixels for responsive full-column display; the original viewBox, aspect ratio, and plotted content are preserved." } } } diff --git a/docs/source/blogs/media/gvr_v2/temporal_overlap.svg b/docs/source/blogs/media/gvr_v2/temporal_overlap.svg index 5de4c91aa1fc..ce81feeafe3e 100644 --- a/docs/source/blogs/media/gvr_v2/temporal_overlap.svg +++ b/docs/source/blogs/media/gvr_v2/temporal_overlap.svg @@ -1,4 +1,4 @@ - + Temporal Top-K overlap across models, layers, and decode steps diff --git a/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md b/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md index 274ba3a8ec50..7499a4816c52 100644 --- a/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md +++ b/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md @@ -188,6 +188,8 @@ Register families bypass sparse sampling but retain exact histogram crossing and This explains the two sources of performance improvement: a better starting threshold reduces selection work, and a suitable kernel family reduces the cost of executing that work. Neither eliminates the obligation to examine all valid scores. +[PR #19076](https://github.com/NVIDIA/TensorRT-LLM/pull/19076) extends this execution policy through host dispatch while keeping the device kernels unchanged. It adds register plans for roughly 4K–8K-score rows, sizes register waves using the device's SM count, and includes targeted B300 routing. A common 96-candidate gate also keeps large crossing bins out of the quadratic direct-ranking path, avoiding a long quadratic detour for a difficult row. This makes dispatch part of the same practical performance-floor objective as calibration and recovery. + ## Performance Against Five Baselines ### Benchmark Setup @@ -331,6 +333,8 @@ This separation keeps phase-specific decisions in the wrapper, dispatch, and com Host routing chooses a stable launch envelope; device metadata supplies each row's actual length. The physical memory bound remains separate from the bound used to select an execution plan. Warmup prepares exact-row decode launchers and a bounded set of prefill tiers and width buckets, with distinct compilation-cache keys for the two phase specializations. [PR #18683](https://github.com/NVIDIA/TensorRT-LLM/pull/18683) and [PR #18702](https://github.com/NVIDIA/TensorRT-LLM/pull/18702) establish these rules. +[PR #19076](https://github.com/NVIDIA/TensorRT-LLM/pull/19076) also selects a sampled prefill plan for qualifying small row envelopes. Execution, readiness checks, and warmup share the envelope-dependent plan rule; decode launcher and warmup caches distinguish the device's SM count and architecture. These changes improve plan selection around the shared kernel while keeping graph preparation consistent with execution. + Unsupported layouts use exact native selection. If a prefill specialization is missing during CUDA Graph capture, `TopK` selects radix without compiling inside capture. Both adapters preserve the exact output contract when the fast path is unavailable. ### Serving Gains from the Shared Engine @@ -385,5 +389,6 @@ Implementation milestones: - [PR #18683: physical envelopes and exact-row warmup](https://github.com/NVIDIA/TensorRT-LLM/pull/18683). - [PR #18446: configuration-based dispatch and prior-state removal for V2](https://github.com/NVIDIA/TensorRT-LLM/pull/18446). - [PR #18702: self-sampling prefill](https://github.com/NVIDIA/TensorRT-LLM/pull/18702). +- [PR #19076: register-plan tuning, a unified crossing-bin gate, sampled prefill plans, and SM-aware B200/B300 dispatch](https://github.com/NVIDIA/TensorRT-LLM/pull/19076). For the surrounding model pipeline, see [Sparse Attention in TensorRT-LLM](blog17_Sparse_Attention_in_TensorRT-LLM.md) and [DeepSeek-V4 on NVIDIA Blackwell](blog26_DeepSeek_V4_on_NVIDIA_Blackwell_Model_Specific_and_Agentic_Workload_Optimizations_in_TensorRT-LLM.md). From 50be207ff50ce740e3a9181dd80a076f7db13469 Mon Sep 17 00:00:00 2001 From: longcheng-nv <243710427+longcheng-nv@users.noreply.github.com> Date: Thu, 17 Sep 2026 05:12:11 +0000 Subject: [PATCH 11/33] [None][doc] Quantify temporal hint variability across inputs and layers Signed-off-by: longcheng-nv <243710427+longcheng-nv@users.noreply.github.com> --- docs/source/blogs/media/gvr_v2/README.md | 17 ++++++++++++++++- ...ampling_Exact_TopK_for_Sparse_Attention.md | 19 +++++++++++++++++-- 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/docs/source/blogs/media/gvr_v2/README.md b/docs/source/blogs/media/gvr_v2/README.md index 46ddc62f5a41..bb0ef6c8e1aa 100644 --- a/docs/source/blogs/media/gvr_v2/README.md +++ b/docs/source/blogs/media/gvr_v2/README.md @@ -9,7 +9,7 @@ SPDX-License-Identifier: Apache-2.0 # GVR V2: Benchmark Methodology and Figure Reproduction -This companion to [GVR V2: Self-Sampling and Multi-Thresholding for Faster Exact Top-K](../../tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md) contains the observations and definitions needed to reproduce the article's performance figures, plus the scope of its supplied temporal-overlap illustration. The article focuses on the algorithm and its performance; this document records the measurement boundaries. +This companion to [GVR V2: Self-Sampling and Multi-Thresholding for Faster Exact Top-K](../../tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md) contains the observations and definitions needed to reproduce the article's performance figures, plus the scope of its supplied temporal-overlap illustration and statistics. The article focuses on the algorithm and its performance; this document records the measurement boundaries. ## Regenerate the Figures @@ -29,6 +29,21 @@ Figure 2 shows SWE-bench-64K decode traces for DeepSeek-V3.2 and DeepSeek-V4 Pro The figure illustrates temporal-hint variability, not kernel speedup. Its source Top-K streams are separate from the timing observations bundled below. `provenance.json` records the supplied SVG's checksum without private source paths or submission metadata. +### Temporal-Overlap Statistics + +The table following Figure 2 uses author-supplied near-64K overlap summaries. Layer IDs are matched between SWE-bench and random-token inputs within each indexer. First average the coordinate-aligned adjacent-step hit ratio over time for each layer; then compute statistics across those layer means, with equal weight per layer despite unequal decode durations. P10 and P90 are linearly interpolated empirical quantiles. V3.2 reconstructs the prior with +1 transport; V4 retains compressed-bin coordinates. + +| Indexer | Input | Layers | Mean | Median | P10 | P90 | Min–max | +| :--- | :--- | ---: | ---: | ---: | ---: | ---: | ---: | +| V4 Pro | SWE-bench | 30 | 71.5% | 70.5% | 60.3% | 82.6% | 57.1–85.0% | +| V4 Pro | Random tokens | 30 | 57.9% | 58.1% | 33.6% | 80.4% | 28.4–86.7% | +| V4 Flash | SWE-bench | 21 | 62.8% | 61.5% | 53.4% | 73.3% | 53.2–83.7% | +| V4 Flash | Random tokens | 21 | 52.8% | 49.2% | 30.7% | 74.7% | 25.9–81.3% | +| V3.2 | SWE-bench | 61 | 47.4% | 47.8% | 37.9% | 59.7% | 5.7–70.7% | +| V3.2 | Random tokens | 61 | 46.0% | 46.5% | 33.1% | 62.2% | 6.0–67.9% | + +These percentages preserve the supplied summaries' precision. They are independent of the timing CSVs and are not regenerated by `plot_results.py`. They summarize per-layer means, not individual-step extremes or the selected traces in Figure 2. Different K values and transport rules make this evidence of hint variability, not a controlled ranking of models or a universal causal effect of prompt type. Low overlap concerns prediction quality and execution cost; exact verification and recovery preserve selection correctness. + ## Published Data | File | Contents | diff --git a/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md b/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md index 7499a4816c52..5b4ed3196994 100644 --- a/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md +++ b/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md @@ -71,13 +71,28 @@ It seeks an admission threshold with enough survivors to contain Top-K, but few ### A Biased Sample with Variable Value -Temporal hints are a **biased sample** of current scores at previous winners' positions. High, stable overlap makes that bias useful. Figure 2 shows why it is an unreliable assumption across layers and decode steps. +Temporal hints are a **biased sample** of current scores at previous winners' positions. The hit rate is the fraction of the current Top-K covered by the aligned previous selection. High, stable overlap makes that bias useful. Figure 2 shows why it is an unreliable assumption across layers and decode steps. ![Temporal Top-K overlap for DeepSeek-V3.2 and DeepSeek-V4 Pro. Upper panels distinguish retained and new selections; lower panels show raw overlap across three layers, including abrupt drops despite a high average.](../media/gvr_v2/temporal_overlap.svg) *Figure 2. Temporal overlap on SWE-bench-64K workloads. Blue marks previous winners retained after coordinate alignment; orange marks new selections. V3.2 shifts prior indices by +1, while V4 Pro keeps compressed-bin coordinates. Upper panels show position crops; lower curves measure full-domain overlap across layers and steps, with means in parentheses. Even a high-mean layer can suffer an abrupt collapse.* -The hit rate is the fraction of the current Top-K covered by the aligned previous selection. Its true value is known only after the current selection is established. Verification can expose a poor threshold, but the hint gather and initial work have already been paid for. Conservative admission, repeated counts, capacity checks, and exact recovery keep weak hints safe; their overhead and extra reads reduce average speedup and make latency less predictable. +Near-64K measurements also expose dependence on the input and layer: + +| Indexer | Input | Layers | Mean | P10–P90 | Min–max | +| :--- | :--- | ---: | ---: | ---: | ---: | +| V4 Pro | SWE-bench | 30 | 71.5% | 60.3–82.6% | 57.1–85.0% | +| V4 Pro | Random tokens | 30 | 57.9% | 33.6–80.4% | 28.4–86.7% | +| V4 Flash | SWE-bench | 21 | 62.8% | 53.4–73.3% | 53.2–83.7% | +| V4 Flash | Random tokens | 21 | 52.8% | 30.7–74.7% | 25.9–81.3% | +| V3.2 | SWE-bench | 61 | 47.4% | 37.9–59.7% | 5.7–70.7% | +| V3.2 | Random tokens | 61 | 46.0% | 33.1–62.2% | 6.0–67.9% | + +*Distribution of per-layer mean hit rates, with layer IDs matched between inputs within each model. Each layer is averaged over its decode steps and then weighted equally; P10–P90 and min–max describe those layer means, not individual transitions. V3.2 uses +1 alignment.* + +V4 Pro's mean changes from **71.5% to 57.9%** between these inputs, and its random-token P10–P90 spans **33.6–80.4%**. V3.2 has similar overall means across inputs, yet its weakest SWE-bench layer averages only **5.7%**. **An average overlap cannot serve as a dependable per-row performance assumption.** The table exposes variation across inputs and layers; Figure 2 adds the abrupt changes within a layer over time. + +A row's true hit rate is known only after the current selection is established. Verification can expose a poor threshold, but the hint gather and initial work have already been paid for. Conservative admission, repeated counts, capacity checks, and exact recovery keep weak hints safe; their overhead and extra reads reduce average speedup and make latency less predictable. V2 calibrates from the **current row**, removing dependence on temporal overlap and the read through old indices. Multi-thresholding addresses the other major cost: repeated scalar threshold queries. Together, they target a stronger practical performance floor and better average latency, without a fixed worst-case latency guarantee. From 9ad07762f6362cebd7ebd698a1332d9580799892 Mon Sep 17 00:00:00 2001 From: longcheng-nv <243710427+longcheng-nv@users.noreply.github.com> Date: Thu, 17 Sep 2026 05:26:22 +0000 Subject: [PATCH 12/33] [None][doc] Organize the GVR V2 blog into four main sections Signed-off-by: longcheng-nv <243710427+longcheng-nv@users.noreply.github.com> --- ...ampling_Exact_TopK_for_Sparse_Attention.md | 88 +++++++++++-------- 1 file changed, 49 insertions(+), 39 deletions(-) diff --git a/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md b/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md index 5b4ed3196994..66236018b945 100644 --- a/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md +++ b/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md @@ -9,8 +9,6 @@ SPDX-License-Identifier: Apache-2.0 By NVIDIA TensorRT-LLM Team -## Introduction - Selecting 1,024 INT32 indices from 131,072 FP32 scores writes just **4 KiB of output**, yet one complete read of the scores moves **512 KiB**. Every additional full-row pass pays that input cost again. For a sparse-attention indexer, finding the Top-K boundary can therefore cost far more than emitting the winners. GVR V2 makes each full-row pass more useful without depending on the previous decode step to predict the current one. **Self-sampling estimates where the current row's Top-K boundary lies; multi-thresholding derives many exact population counts from one classification pass.** Together, they concentrate exact refinement on the small group of scores still competing for the final slots. The sampling idea builds on Floyd–Rivest SELECT, adapted to the memory traffic and parallel execution costs of GPU Top-K. @@ -23,20 +21,26 @@ On B200, this design delivers **4.93× geometric-mean speedup over TensorRT-LLM [The original GVR blog](blog21_Temporal_Correlation_Meets_Sparse_Attention.md) described a temporal shortcut: the previous decode step's selected indices predict the next step's winners. Experience with V1 exposed two limits: hint quality varies sharply, and maintaining the hint couples selection to the serving framework. V2 makes the current row the source of the guess, targeting **a stronger performance floor and better average latency**, while enabling **one selection core for prefill and decode**. The **Guess–Verify–Refine** exactness contract remains. -## Table of Contents +**Table of Contents** + +- **[Motivation and Design Foundations](#motivation-and-design-foundations)** + - [From Floyd–Rivest SELECT to GPU Top-K](#from-floydrivest-select-to-gpu-top-k) + - [From GVR V1 to V2: Why Move Beyond Temporal Hints?](#from-gvr-v1-to-v2-why-move-beyond-temporal-hints) +- **[Self-Sampling and Multi-Thresholding](#self-sampling-and-multi-thresholding)** + - [Self-Sampling: Calibrate the Search to This Row](#self-sampling-calibrate-the-search-to-this-row) + - [Multi-Thresholding: Make Each Full-Row Pass Count](#multi-thresholding-make-each-full-row-pass-count) + - [Mapping Selection to Blackwell](#mapping-selection-to-blackwell) +- **[Performance and Roofline Analysis](#performance-and-roofline-analysis)** + - [Performance Against Five Baselines](#performance-against-five-baselines) + - [The Roofline Model: Fewer Passes, More Useful Work](#the-roofline-model-fewer-passes-more-useful-work) +- **[TensorRT-LLM Integration and Takeaways](#tensorrt-llm-integration-and-takeaways)** + - [Decode and Prefill in TensorRT-LLM](#decode-and-prefill-in-tensorrt-llm) + - [Conclusion](#conclusion) + - [Further Reading](#further-reading) -- [From Floyd–Rivest SELECT to GPU Top-K](#from-floydrivest-select-to-gpu-top-k) -- [From GVR V1 to V2: Why Move Beyond Temporal Hints?](#from-gvr-v1-to-v2-why-move-beyond-temporal-hints) -- [Self-Sampling: Calibrate the Search to This Row](#self-sampling-calibrate-the-search-to-this-row) -- [Multi-Thresholding: Make Each Full-Row Pass Count](#multi-thresholding-make-each-full-row-pass-count) -- [Mapping Selection to Blackwell](#mapping-selection-to-blackwell) -- [Performance Against Five Baselines](#performance-against-five-baselines) -- [The Roofline Model: Fewer Passes, More Useful Work](#the-roofline-model-fewer-passes-more-useful-work) -- [Decode and Prefill in TensorRT-LLM](#decode-and-prefill-in-tensorrt-llm) -- [Conclusion](#conclusion) -- [Further Reading](#further-reading) +## Motivation and Design Foundations -## From Floyd–Rivest SELECT to GPU Top-K +### From Floyd–Rivest SELECT to GPU Top-K GVR V2's self-sampling was inspired by Floyd and Rivest's 1975 paper, [*Expected Time Bounds for Selection*](https://people.csail.mit.edu/rivest/pubs/FR75a.pdf). Its theoretical SELECT algorithm draws a random sample, chooses two sample order statistics to bracket the desired rank, partitions the full input, and continues exactly in the partition containing that rank. If the bracket misses, selection continues in the appropriate outer partition. Sampling reduces expected work without making the answer approximate. @@ -59,7 +63,7 @@ GVR V2 carries that principle into a different cost model: On a GPU, doing more work on chip can be worthwhile if it avoids another full-row read. V2 therefore couples sampling to candidate capacity, coalesced loads, and multi-threshold counts; its launch families balance that work against synchronization and available parallelism. **The inherited idea is sample-guided exact selection; the optimization target is GPU execution cost.** V2's deterministic sampling policy does not inherit SELECT's randomized comparison bound. Its exactness follows from full-row accounting and exact refinement or recovery, while its performance is evaluated below. -## From GVR V1 to V2: Why Move Beyond Temporal Hints? +### From GVR V1 to V2: Why Move Beyond Temporal Hints? Original GVR V1 gathers the current scores at the previous step's Top-K indices, estimates a bracket from their minimum, maximum, and mean, then uses a secant-style search on the monotone count function @@ -69,7 +73,7 @@ $$ It seeks an admission threshold with enough survivors to contain Top-K, but few enough to fit its candidate capacity. A high-quality temporal hint can make this search very short. The difficulty is making that benefit reliable across inference workloads. -### A Biased Sample with Variable Value +#### A Biased Sample with Variable Value Temporal hints are a **biased sample** of current scores at previous winners' positions. The hit rate is the fraction of the current Top-K covered by the aligned previous selection. High, stable overlap makes that bias useful. Figure 2 shows why it is an unreliable assumption across layers and decode steps. @@ -98,7 +102,7 @@ V2 calibrates from the **current row**, removing dependence on temporal overlap V1 already used a histogram for local refinement. V2 moves multi-threshold population information into verification, so refinement starts from an identified crossing bin. -### A Hint That Crosses Framework Boundaries +#### A Hint That Crosses Framework Boundaries V1's prior also has a lifecycle outside the kernel. Prefill lacks the same previous-decode-step hint, so its seeding policy differs. That phase-dependent history complicates a common selection architecture. V2's current-row calibration removes the Top-K prior dependency, allowing phase differences to stay in dispatch and row-interface adapters. The [integration section](#decode-and-prefill-in-tensorrt-llm) traces the consequences for CUDA Graph preparation and disaggregated serving. @@ -119,7 +123,9 @@ V1's prior also has a lifecycle outside the kernel. Prefill lacks the same previ Temporal R0 and tiered GVR achieve **2.59× and 3.47×** speedup over radix CUDA; V2 reaches **4.93×**. V2 is **1.91× faster than temporal R0** and **1.42× faster than tiered temporal GVR**, combining current-row sampling, multi-threshold verification, and specialized execution paths. -## Self-Sampling: Calibrate the Search to This Row +## Self-Sampling and Multi-Thresholding + +### Self-Sampling: Calibrate the Search to This Row V2 takes a small, deterministic sample across the valid row and uses its ranks to estimate the upper tail of the full population. The same rule works without knowing the model, layer, decode step, or previous winners. The sample chooses a starting region; full-row verification determines whether it contains enough candidates. @@ -143,7 +149,7 @@ The proportional ranks connect the small sample to the full-row selection target *Figure 4. The sample histogram estimates a bracket; the verification histogram counts the complete admitted population. The lower panel shows how verification controls refinement and recovery. Bin heights and the 980/73/44 example are illustrative; exact recovery depends on the kernel family.* -## Multi-Thresholding: Make Each Full-Row Pass Count +### Multi-Thresholding: Make Each Full-Row Pass Count A scalar verification pass answers one question: how many scores exceed $T$? Multi-thresholding obtains a family of answers from the same classification work. @@ -157,7 +163,7 @@ The streaming verification histogram has 256 bins. Each survivor is assigned to Values above $H$ saturate into the top bin and remain candidates. Full-row accounting establishes whether enough survivors exist. The implementation may build the histogram during streaming, merge shard histograms through distributed shared memory, or reconstruct it from a complete bounded staging slab. Those execution choices preserve the same logical result: exact populations must cover the admitted set before its crossing is trusted. -### Turn a Threshold Search into a Boundary Problem +#### Turn a Threshold Search into a Boundary Problem Scanning bins from high scores to low identifies the crossing bin $j^{\ast}$ with @@ -176,7 +182,7 @@ For $K=1024$, suppose 980 scores lie above the crossing bin and 73 lie inside it The histogram discretizes the search region, not the selected scores. Exact comparisons within the crossing bin resolve its coarse boundaries, including ties. Thus fewer passes do not require approximate Top-K membership. -### How Verification Preserves Exactness +#### How Verification Preserves Exactness **The sample focuses the bins; exact bin counts make the sample safe.** A useful bracket keeps the crossing small, while multi-threshold verification avoids a separate full-row query for every trial boundary. Figure 4 distinguishes the resulting paths: refine a complete admitted set, lower admission when too few scores survive, or recover exactly when staging or bracket checks fail. @@ -186,7 +192,7 @@ Guess quality controls work, while complete counts and exact refinement control The output contract is an exact selected **value multiset** with valid unique indices. Tied indices may differ from `torch.topk`; output order is unrestricted. Short rows return valid local indices followed by `-1` padding. NaN ordering remains implementation-specific. -## Mapping Selection to Blackwell +### Mapping Selection to Blackwell A single scheduling policy cannot serve both one short row and thousands of long rows efficiently. GVR V2 uses four kernel families, implemented in CuTe DSL: @@ -205,9 +211,11 @@ This explains the two sources of performance improvement: a better starting thre [PR #19076](https://github.com/NVIDIA/TensorRT-LLM/pull/19076) extends this execution policy through host dispatch while keeping the device kernels unchanged. It adds register plans for roughly 4K–8K-score rows, sizes register waves using the device's SM count, and includes targeted B300 routing. A common 96-candidate gate also keeps large crossing bins out of the quadratic direct-ranking path, avoiding a long quadratic detour for a difficult row. This makes dispatch part of the same practical performance-floor objective as calibration and recovery. -## Performance Against Five Baselines +## Performance and Roofline Analysis -### Benchmark Setup +### Performance Against Five Baselines + +#### Benchmark Setup The benchmarks use FP32 indexer scores from the three models below on NVIDIA B200, with batch sizes from 1 to 1,024. Results report cold-L2 GPU kernel time, excluding compilation, input preparation, and Python overhead. Speedups are geometric means over matched workloads. @@ -219,7 +227,7 @@ The benchmarks use FP32 indexer scores from the three models below on NVIDIA B20 **$N$ is the indexer row width, not the original prompt length.** A roughly 512K-token V4 context yields a roughly 128K-wide indexer row because of 4× compression. -### Overall Results +#### Overall Results | Baseline | Geomean speedup | Minimum speedup | GVR V2 faster | | :--- | ---: | ---: | ---: | @@ -231,7 +239,7 @@ The benchmarks use FP32 indexer scores from the three models below on NVIDIA B20 The minimum column retains individual regressions. Figure 1 shows the model-level comparison on the common workloads supported by each implementation. -### The Gains Extend Beyond an Average +#### The Gains Extend Beyond an Average The comparison changes with the model and shape. Figure 1 shows HPC-ops closest on V3.2 and a larger DeepSelect FP32 gap there. The heatmaps resolve those averages into the row-length and batch regions where each advantage appears. @@ -253,7 +261,7 @@ For **V3.2, the gain reaches 7.66× around 128K scores at batch size 1** and sta These patterns identify useful operating regions. The native API contracts below explain which work is included in each comparison. -### What Explains the Differences +#### What Explains the Differences **SGLang.** The **1.66×** comparison includes both planning and transformation. Serving integrations can amortize planning across layers; against transformation alone, V2 achieves **1.42×** geometric-mean speedup and wins **98.78%** of comparisons. @@ -265,7 +273,7 @@ These patterns identify useful operating regions. The native API contracts below **HPC-ops.** FP32 support covers $K \in \lbrace 512,2048\rbrace$. V2's advantage is **2.30×** on Flash and **1.30×** on V3.2, with an overall **1.55×** speedup. HPC-ops retains individual wins on V3.2; Pro is unsupported. -### Latency Across Row Length and Batch Size +#### Latency Across Row Length and Batch Size ![Cold kernel latency for all six implementations versus valid row length, with separate panels for three models and batch sizes 1 and 1024.](../media/gvr_v2/latency.svg) @@ -273,11 +281,11 @@ These patterns identify useful operating regions. The native API contracts below At $B=1$, keeping a short row in registers and exposing parallelism within a longer row matter more than saturating HBM. At $B=1024$, streaming throughput becomes more visible. The different shapes of these curves are why a single average cannot identify every useful operating region. -## The Roofline Model: Fewer Passes, More Useful Work +### The Roofline Model: Fewer Passes, More Useful Work The bar chart shows how much time GVR V2 saves. The roofline asks how much of that time is fundamentally needed to move the input and output. It connects the algorithm's goal—fewer full-row passes—to a hardware limit. -### Locate Top-K on the Hardware Roof +#### Locate Top-K on the Hardware Roof For FP32 input and INT32 index-only output, define the ideal work and minimum traffic as @@ -301,7 +309,7 @@ The calibrated limits are **6.912 TB/s** sustained read bandwidth and **37.047 T *Figure 8.* A: the full theoretical and calibrated roofs. B: Pareto curves in the Top-K band at $B=1024$, plotting useful throughput $P=BN/t$ against intensity $I=N/[4(N+K)]$ on linear axes. Green highlights V2; the dotted line is the calibrated bandwidth roof. All kernels share the same minimum-traffic model $Q_{\min}$, while extra reads and output work remain in measured time. -### Compare Pareto Curves and Reachable Rates +#### Compare Pareto Curves and Reachable Rates Each operator's **Pareto curve** in Figure 8B traces useful throughput across intensities at $B=1024$. At fixed $N$ and $K$, every implementation has the same horizontal position; a faster kernel moves **upward**, toward the calibrated roof. Figure 7 retains the contrasting single-row view, and Figures 5 and 6 cover all 11 batch sizes. @@ -320,17 +328,19 @@ The **reachable rate** is $P(I)/P_{\mathrm{calibrated}}(I)$, expressed as a perc GVR V2 leads both measures on all three models: its average reachable rate is **39.0–41.6%**, with peaks of **65.1–78.0%**. The nearest baseline varies by model. On V3.2, HPC-ops reaches **31.6% / 53.1%**, compared with V2's **41.3% / 65.1%**. On Flash, DeepSelect reaches a **64.4%** peak but averages **21.2%**, while SGLang averages **24.7%**. Reporting both measures captures the best operating point and the performance sustained across the curve. -### Interpret the Remaining Gap +#### Interpret the Remaining Gap The full ideal bound is $T_{\mathrm{roof}}=\max(Q_{\min}/\mathrm{BW},W/R_{\mathrm{compare}})$. Within the Top-K band, traffic dominates. Sampling, histogram updates, candidate staging, exact refinement, and synchronization account for work beyond the ideal minimum. The read-dominated roof is optimistic, especially when $K/N$ is large; the plotted throughput describes useful selection work rather than measured DRAM traffic. -## Decode and Prefill in TensorRT-LLM +## TensorRT-LLM Integration and Takeaways + +### Decode and Prefill in TensorRT-LLM Self-sampling changes the integration boundary as well as the threshold estimate. A temporal prior makes selection depend on state produced by an earlier call. Its buffers, initialization, request alignment, and write-back must remain valid through CUDA Graph warmup and replay; disaggregated prefill/decode also needs a policy for making the prior available at the handoff. Prefill and decode do not naturally obtain that hint in the same way. These extra lifecycle rules create maintenance work and opportunities for inconsistent state. V2 derives its bracket from the current scores in both phases. Selection therefore needs the current row and its metadata, with no previous-step Top-K buffer, prefill-to-decode prior seeding, or prior write-back. This removes a Top-K-specific state dependency from graph preparation and phase handoffs. [PR #18446](https://github.com/NVIDIA/TensorRT-LLM/pull/18446) limits prior ownership to the temporal engine. -### One Selection Core, Two Row Interfaces +#### One Selection Core, Two Row Interfaces TensorRT-LLM separates phase-specific row metadata from shared selection logic. The `TopK` module applies the same self-sampling configuration to supported decode and prefill paths, then passes each phase's valid score interval to the selected engine. @@ -344,7 +354,7 @@ Prefill's compile-time mode changes addressing, masking, and index origin in the This separation keeps phase-specific decisions in the wrapper, dispatch, and compile-time row adapters. Improvements to threshold calibration, counting, and exact recovery can serve both phases through the shared streaming body, reducing duplicated selection logic and the number of state transitions the framework must maintain. -### Stable Launches, Dynamic Row Lengths +#### Stable Launches, Dynamic Row Lengths Host routing chooses a stable launch envelope; device metadata supplies each row's actual length. The physical memory bound remains separate from the bound used to select an execution plan. Warmup prepares exact-row decode launchers and a bounded set of prefill tiers and width buckets, with distinct compilation-cache keys for the two phase specializations. [PR #18683](https://github.com/NVIDIA/TensorRT-LLM/pull/18683) and [PR #18702](https://github.com/NVIDIA/TensorRT-LLM/pull/18702) establish these rules. @@ -352,13 +362,13 @@ Host routing chooses a stable launch envelope; device metadata supplies each row Unsupported layouts use exact native selection. If a prefill specialization is missing during CUDA Graph capture, `TopK` selects radix without compiling inside capture. Both adapters preserve the exact output contract when the fast path is unavailable. -### Serving Gains from the Shared Engine +#### Serving Gains from the Shared Engine In B200 profiles, V2 makes prefill Top-K **1.84–2.61×** faster than radix CUDA. Adding V2 prefill to a deployment already using V2 decode improves serving throughput by **2.9–4.5%** on long-input workloads. This is the incremental benefit of the prefill change. For decode, [PR #18410](https://github.com/NVIDIA/TensorRT-LLM/pull/18410) reports **6–19% lower time per output token** on 8×B200 with TP8/EP8 and batch/concurrency 1. The serving benefit depends on Top-K's share of total execution time; the kernel comparisons above do not measure competing serving stacks. -### Enable GVR V2 +#### Enable GVR V2 On a TensorRT-LLM revision containing the linked integration PRs, save the following as `gvr_v2.yaml`: @@ -380,13 +390,13 @@ trtllm-serve deepseek-ai/DeepSeek-V4-Flash \ V2 requires CUTLASS DSL, datacenter Blackwell SM100/SM103, $K\in\lbrace 512,1024,2048\rbrace$, and supported indexer compression ratios 1 or 4. The fast path expects FP32 scores with unit inner stride, a row stride divisible by four floats, and a 16-byte-aligned base. Unsupported layouts use exact native fallback selection. The retired `TRTLLM_GVR_SELF_SAMPLING` environment variable is no longer the enablement mechanism, and `use_cute_dsl_topk` is not required to select V2. -## Conclusion +### Conclusion GVR V2 follows from a practical limit of temporal prediction: a biased hint can be excellent when overlap is high, yet expensive to rely on when quality fluctuates. **Self-sampling calibrates from the current row; multi-threshold counts locate the crossing; exact refinement resolves the remaining membership.** Together, they target both difficult-input performance and average latency while preserving exactness. The performance maps show the gains across shapes, and the Pareto curves relate them to the bandwidth roof. Removing the temporal prior also removes its framework lifecycle: a shared streaming implementation serves prefill and decode through phase-specific row interfaces. The result is one algorithmic core whose calibration depends on the input it is selecting now. -## Further Reading +### Further Reading [Benchmark methodology and figure reproduction](../media/gvr_v2/README.md) are available separately. From bd66cd6ef137ff2e28f53168448ee6015da60cbe Mon Sep 17 00:00:00 2001 From: longcheng-nv <243710427+longcheng-nv@users.noreply.github.com> Date: Thu, 17 Sep 2026 05:51:48 +0000 Subject: [PATCH 13/33] [None][doc] Refresh GVR V2 benchmarks with PR 19076 measurements Signed-off-by: longcheng-nv <243710427+longcheng-nv@users.noreply.github.com> --- docs/source/blogs/media/gvr_v2/README.md | 22 +- .../blogs/media/gvr_v2/deepselect_map.svg | 212 +-- docs/source/blogs/media/gvr_v2/evolution.svg | 12 +- .../blogs/media/gvr_v2/flash_timings.csv.gz | Bin 60729 -> 60722 bytes docs/source/blogs/media/gvr_v2/latency.svg | 1441 +++++++++-------- .../source/blogs/media/gvr_v2/plot_results.py | 5 +- .../blogs/media/gvr_v2/pro_timings.csv.gz | Bin 78761 -> 78996 bytes .../source/blogs/media/gvr_v2/provenance.json | 16 +- docs/source/blogs/media/gvr_v2/roofline.svg | 114 +- docs/source/blogs/media/gvr_v2/sglang_map.svg | 168 +- docs/source/blogs/media/gvr_v2/speedup.svg | 128 +- docs/source/blogs/media/gvr_v2/summary.json | 318 ++-- .../blogs/media/gvr_v2/v32_timings.csv.gz | Bin 136826 -> 137060 bytes ...ampling_Exact_TopK_for_Sparse_Attention.md | 36 +- 14 files changed, 1245 insertions(+), 1227 deletions(-) diff --git a/docs/source/blogs/media/gvr_v2/README.md b/docs/source/blogs/media/gvr_v2/README.md index bb0ef6c8e1aa..18e2def64c24 100644 --- a/docs/source/blogs/media/gvr_v2/README.md +++ b/docs/source/blogs/media/gvr_v2/README.md @@ -62,11 +62,11 @@ The files contain kernel timings and workload dimensions. They do not contain in ## Measurement and Comparison Scope -Measurements use NVIDIA B200, FP32 indexer scores, and batch sizes from 1 to 1,024. Each case has 10 warmup calls, five warm-L2 repetitions, and 10 cold-L2 repetitions. The article reports mean GPU kernel duration from the cold repetitions. A 512 MB cache eviction runs outside the timed region. Compilation, input preparation, allocation during setup, and Python launch overhead are excluded; required device kernels remain timed. +Measurements use NVIDIA B200, FP32 indexer scores, and batch sizes from 1 to 1,024. The GVR V2 reference covers 886 row geometries and 9,746 workload/batch cases, all passing tie-aware exactness checks. Each published GVR time is the arithmetic mean of 10 cold-L2 repetitions, rounded to 0.001 µs; five warm-L2 repetitions are excluded from these figures. A 512 MiB cache eviction runs outside the timed region. Compilation, input preparation, allocation during setup, and Python launch overhead are excluded; required device kernels remain timed. -The primary reference is the hint-free GVR V2 `run_varlen` implementation. DeepSelect FP32 and HPC-ops were measured in the same process as that reference. Radix CUDA, SGLang, FlashInfer, and the temporal GVR implementations use matched observations from separate runs. These comparisons describe the bundled implementations and workloads; they are not a current-release, equal-interface benchmark of entire serving frameworks. +The primary reference is the hint-free GVR V2 `run_varlen` implementation from [PR #19076](https://github.com/NVIDIA/TensorRT-LLM/pull/19076), measured at its [final public revision](https://github.com/NVIDIA/TensorRT-LLM/commit/be1b9885e8df9bf070e8cb68459e24a7119afaa9). All FP32 comparisons, including DeepSelect and HPC-ops, match existing baseline observations from separate runs by workload identity and batch size, with shape metadata checked where available. Baseline times are retained as measured; no aggregate correction factor is applied. These comparisons describe the bundled implementations and workloads; they are not a current-release, equal-interface benchmark of entire serving frameworks. -The article also describes dispatch improvements in [PR #19076](https://github.com/NVIDIA/TensorRT-LLM/pull/19076). Its targeted B200/B300 measurements are separate from this frozen comparison grid; the existing figures and summaries have not been recomputed for that PR. +Figures 1, 3, and 5–8 and their numerical summaries all use this PR #19076 reference. B300 measurements are outside the B200 comparison. Historical serving experiments retain their original implementation scope, as described below. | Implementation | Relevant comparison contract | | :--- | :--- | @@ -79,13 +79,13 @@ The article also describes dispatch improvements in [PR #19076](https://github.c The public baseline revisions for DeepSelect and HPC-ops are [8e70df71d2](https://github.com/deepseek-ai/DeepSelect/tree/8e70df71d2) and [2a2e265624](https://github.com/Tencent/hpc-ops/tree/2a2e265624). Complete build revisions for the historical SGLang and radix observations are unavailable in the timing export. -SGLang planning can be amortized across layers in a serving integration. FlashInfer's additional outputs and padded-row scan remain part of its timed native API. DeepSelect and HPC-ops receive preallocated output or workspace. The BF16 comparison uses its own paired `gvr_bf16_run_us` reference and preconverted BF16 input for DeepSelect; conversion time is excluded. Each dtype is checked against its own `torch.topk` result, so BF16 speed does not establish preservation of FP32 Top-K membership. +SGLang planning can be amortized across layers in a serving integration. FlashInfer's additional outputs and padded-row scan remain part of its timed native API. DeepSelect and HPC-ops receive preallocated output or workspace. The historical BF16 comparison remains separate from the PR #19076 FP32 reference. It uses its own paired `gvr_bf16_run_us` reference and preconverted BF16 input for DeepSelect; conversion time is excluded. Each dtype is checked against its own `torch.topk` result, so BF16 speed does not establish preservation of FP32 Top-K membership. ## Temporal GVR and Algorithm Evolution The temporal R0 and tiered implementations correspond to public [PR #16457](https://github.com/NVIDIA/TensorRT-LLM/pull/16457) and [PR #16877](https://github.com/NVIDIA/TensorRT-LLM/pull/16877). They already include improvements beyond original scalar-search V1, including a threshold ladder and execution specialization. The original scalar-search implementation has no measurement on this grid. The temporal comparisons span full implementations, including scheduling and integration; they are not an isolated self-sampling ablation. -Figure 3 computes each implementation's speedup directly from its paired radix times. The geometric means are 2.586546× for temporal R0, 3.471858× for tiered temporal GVR, and 4.929143× for V2. Direct temporal/V2 time ratios are 1.905685× and 1.419742×. `summary.json` records these under `evolution_vs_radix` and `temporal_vs_v2`. Historical R0 observations for V3.2 lack explicit N/K metadata; workload identity supplies the join for those records. +Figure 3 computes each implementation's speedup directly from its paired radix times. The geometric means are 2.586546× for temporal R0, 3.471858× for tiered temporal GVR, and 5.051864× for V2. Direct temporal/V2 time ratios are 1.953131× and 1.455089×. `summary.json` records these under `evolution_vs_radix` and `temporal_vs_v2`. Historical R0 observations for V3.2 lack explicit N/K metadata; workload identity supplies the join for those records. ## Aggregation and Coverage @@ -105,11 +105,11 @@ The article uses Figure 1 for the model-level comparison. The following table re | Baseline | V4 Flash, $K=512$ | V4 Pro, $K=1024$ | V3.2, $K=2048$ | | :--- | ---: | ---: | ---: | -| SGLang v2, plan + transform | 1.78× | 1.76× | 1.55× | -| FlashInfer 0.6.14 | 2.12× | 2.14× | 1.89× | -| TensorRT-LLM radix CUDA | 4.74× | 4.73× | 5.15× | -| DeepSelect FP32 | 1.98× | 2.07× | 2.79× | -| HPC-ops FP32 | 2.30× | Unsupported | 1.30× | +| SGLang v2, plan + transform | 1.83× | 1.81× | 1.58× | +| FlashInfer 0.6.14 | 2.18× | 2.20× | 1.93× | +| TensorRT-LLM radix CUDA | 4.88× | 4.87× | 5.25× | +| DeepSelect FP32 | 2.03× | 2.13× | 2.85× | +| HPC-ops FP32 | 2.37× | Unsupported | 1.33× | *Each model column uses the workloads supported by that baseline.* @@ -119,7 +119,7 @@ For a concrete large-batch slice, the following times are at $B=1024$ and $N\app | :--- | ---: | ---: | ---: | ---: | ---: | ---: | | V4 Flash | **113.1 µs** | 196.8 µs | 275.4 µs | 461.3 µs | 190.5 µs | 199.2 µs | | V4 Pro | **132.8 µs** | 199.1 µs | 298.3 µs | 477.7 µs | 209.1 µs | — | -| V3.2 | **124.0 µs** | 211.0 µs | 388.8 µs | 496.6 µs | 419.6 µs | 159.7 µs | +| V3.2 | **124.0 µs** | 211.0 µs | 388.7 µs | 496.6 µs | 419.6 µs | 159.7 µs | ## Roofline Definitions diff --git a/docs/source/blogs/media/gvr_v2/deepselect_map.svg b/docs/source/blogs/media/gvr_v2/deepselect_map.svg index 099f63c24df4..5ba2bff0b16e 100644 --- a/docs/source/blogs/media/gvr_v2/deepselect_map.svg +++ b/docs/source/blogs/media/gvr_v2/deepselect_map.svg @@ -39,7 +39,7 @@ z +iVBORw0KGgoAAAANSUhEUgAAAXAAAAE0CAYAAAA10GhFAAAGLUlEQVR4nO3WzYpcVRiG0e9UVXe6IwmIJOBQb9N7c653IU4cGBE0P013VTmJBMRJMtnngbWu4OXU3k/t7YeffrzOYren4+oJMzPzzd3z1RPm5e2z1RNmZubb5y9WT5jjtq2eMDMz3+/gW7w6LL+mMzNzPtytnjCX6/pvcZn1G2ZmDqsHAPBlBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABok73NzerN8xh21ZPmJmZx8t59YR5+/i4esLMzLy4uV09YR7O63+PmZk/n9b/Jve3d6snzMzM03n9tzhfr6snzNMONsx4gQNkCThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QNTp9f1XqzfM7fG4esLMzNwdT6sn7GLDzMy7p8fVE+a47eN9cdy21RPm/eW8esLMzDxcLqsn7OZb7ME+bggAn03AAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCDq9N3Lr1dvmOO2rZ4wMzO3h+PqCXM6+E/912kn54JP/jo/rp4wbx7er54wh20f93QfKwD4bAIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFGn18/uV2+Yw7atnsB/nGb9b7KXc7GHFU/X6+oJM7OPHb9/eL96wtwe9vH23ccKAD6bgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThA1Om6esHMXK57WDGzhxXb6gEfXbb1S/ZyLrxyPnm6XFZPmOMOzubbp8fVE2bG2QTIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiDq9unm2esMcZls9YWZmLnNdPWE33+Kwjxl8tJdzsf6GzJwO69+dfzy8Xz1hZrzAAbIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwg6nS+XldvmPOs37AXl9UDPtrDP/thttUT9mPbxx35cDmvnjC/vft79YR58+Hd6gkzs497CsAXEHCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiDpts63eMIf1E2Zm5nJdvWA/3+LgXPA/ztf1l+TNh3erJ8zPv/6yesLMeIEDZAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0T9A1xPbIs5/ysCAAAAAElFTkSuQmCC" id="imagee51fe4d616" transform="scale(1 -1) translate(0 -221.76)" x="51.926719" y="-69.408" width="264.96" height="221.76"/> @@ -272,16 +272,16 @@ L 316.740278 291.168 " style="fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> - 1.4 + 1.5 - 1.4 + 1.5 - 1.4 + 1.5 - 1.4 + 1.5 1.4 @@ -293,7 +293,7 @@ L 316.740278 291.168 1.4 - 1.4 + 1.3 2.2 @@ -302,19 +302,19 @@ L 316.740278 291.168 3.2 - 4.2 + 4.3 - 1.5 + 1.6 - 1.5 + 1.6 - 1.4 + 1.6 - 1.4 + 1.5 1.4 @@ -329,7 +329,7 @@ L 316.740278 291.168 1.4 - 2.0 + 2.1 2.8 @@ -338,19 +338,19 @@ L 316.740278 291.168 3.2 - 1.4 + 1.5 1.4 - 1.3 + 1.5 - 1.3 + 1.4 - 1.3 + 1.4 1.3 @@ -371,31 +371,31 @@ L 316.740278 291.168 2.7 - 1.7 + 2.1 - 1.7 + 2.1 - 1.7 + 2.1 - 1.7 + 2.1 - 1.7 + 2.0 - 1.7 + 1.9 - 1.6 + 1.9 - 1.6 + 1.8 - 2.1 + 2.4 3.0 @@ -404,16 +404,16 @@ L 316.740278 291.168 3.2 - 1.9 + 2.0 - 1.9 + 2.0 - 1.9 + 2.0 - 1.9 + 2.0 1.9 @@ -440,13 +440,13 @@ L 316.740278 291.168 2.6 - 2.5 + 2.6 - 2.5 + 2.4 - 2.4 + 2.3 2.3 @@ -461,7 +461,7 @@ L 316.740278 291.168 1.6 - 2.2 + 2.3 2.7 @@ -470,16 +470,16 @@ L 316.740278 291.168 2.6 - 3.2 + 3.3 3.1 - 3.1 + 3.0 - 2.9 + 2.8 2.6 @@ -503,10 +503,10 @@ L 316.740278 291.168 2.1 - 3.6 + 3.7 - 3.6 + 3.7 3.5 @@ -521,7 +521,7 @@ L 316.740278 291.168 2.5 - 2.2 + 2.1 1.4 @@ -536,16 +536,16 @@ L 316.740278 291.168 1.7 - 3.8 + 3.9 - 3.6 + 3.8 - 3.3 + 3.4 - 3.0 + 3.1 2.6 @@ -583,7 +583,7 @@ z +iVBORw0KGgoAAAANSUhEUgAAAXAAAAE0CAYAAAA10GhFAAAGB0lEQVR4nO3WS45cRRRF0ZufKuwqY1vIgJBMAzEvBkibsTAFBIKGMfhbmUnDgMC0cCfeltYawdGLyJ2x++a7by+z2O39e6snzMzMJw8erJ4wT25uVk+YmZmntw9XT5jbq+vVE2Zm5uvbR6snzOdX2/iN8M55lmdzZmb2qwcA8GEEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGijl9++mT1hjnst/E/cn04rJ6wGU8fPFo9YXarB/zp2d3b1RPm8fFq9YSZmTlfVi+YubusH3Ga8+oJM+MFDpAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUccnNzerN8zV/rB6wszMXG9gx/Vh/YaZmR9f/LZ6wma+xWf31v9GXp5PqyfMzMzz093qCfPytI1vsQVe4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUcentw9Xb9iMq/1h9YS5PqzfMDNz2O1WT9jEefBvz96+WT1hfnjxfPWE2e+28fbdxgoA/jcBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScICo41cfP169YfazWz2B9xx2689kv4ENM9u4n6/P59UTZmbmdLmsnjC/vnm9esJcHQ6rJ8yMFzhAloADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QNTxfFk9YWZ2WxjBP+1nt3rCnC8buRfrP8XcbeRTnC7n1RPm4fVHqyfMaSN30wscIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCDq+MX1/dUbZr9bvYD3HXcOhf/awovvsFu/4udXL1ZPmJltnAcAH0DAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGijqc5r94wl8tu9QQ2aD/uxdasr8XMm/Np9YR5dbpbPWFmvMABsgQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaKOBw3/2363esF27MfH+MsW7sX5snrBO1uoxe9v36yeMN//8tPqCTOzjfMA4AMIOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANE/QHhz1HPR9e4GAAAAABJRU5ErkJggg==" id="image13b3ef0381" transform="scale(1 -1) translate(0 -221.76)" x="388.239939" y="-69.408" width="264.96" height="221.76"/> @@ -806,16 +806,16 @@ L 653.053498 291.168 " style="fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> - 1.4 + 1.5 - 1.4 + 1.5 - 1.4 + 1.5 - 1.4 + 1.5 1.4 @@ -833,25 +833,25 @@ L 653.053498 291.168 1.9 - 2.8 + 2.9 3.8 - 1.5 + 1.6 - 1.5 + 1.6 - 1.5 + 1.6 - 1.4 + 1.6 - 1.4 + 1.5 1.4 @@ -872,16 +872,16 @@ L 653.053498 291.168 3.1 - 1.4 + 1.5 - 1.4 + 1.5 1.4 - 1.4 + 1.5 1.4 @@ -905,31 +905,31 @@ L 653.053498 291.168 2.9 - 1.8 + 2.3 - 1.8 + 2.2 - 1.8 + 2.2 - 1.8 + 2.2 - 1.8 + 2.1 - 1.8 + 2.1 - 1.8 + 2.0 - 1.7 + 1.9 - 2.1 + 2.6 2.9 @@ -938,16 +938,16 @@ L 653.053498 291.168 3.0 - 2.1 + 2.2 - 2.1 + 2.2 - 2.1 + 2.2 - 2.1 + 2.2 2.1 @@ -971,7 +971,7 @@ L 653.053498 291.168 3.1 - 2.8 + 3.0 2.9 @@ -995,7 +995,7 @@ L 653.053498 291.168 1.6 - 2.4 + 2.5 2.9 @@ -1004,16 +1004,16 @@ L 653.053498 291.168 2.9 - 3.3 + 3.5 - 3.3 + 3.4 3.3 - 3.2 + 3.1 2.9 @@ -1037,10 +1037,10 @@ L 653.053498 291.168 2.3 - 3.7 + 3.9 - 3.7 + 3.8 3.7 @@ -1052,7 +1052,7 @@ L 653.053498 291.168 2.4 - 2.3 + 2.4 2.3 @@ -1064,22 +1064,22 @@ L 653.053498 291.168 1.4 - 1.6 + 1.5 1.6 - 4.3 + 4.4 - 4.1 + 4.2 3.8 - 3.4 + 3.5 2.9 @@ -1117,7 +1117,7 @@ z +iVBORw0KGgoAAAANSUhEUgAAAXAAAAE0CAYAAAA10GhFAAAF9ElEQVR4nO3Wv4pdVRyG4d85czLO5L+JRp0gGAxWlpb2CnZeorU3Y2VpIYiCJiGJMSROxiIIopVp1n7hea7gY+293712X3/7zcUsdnw4rJ4wMzNnt2+tnjDvXL26esLMzJxdubZ6wty9cn31hJmZufPW6eoJ8/bhePWEmZl5/up89YQ5v1ierM3Yrx4AwJsRcIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4jazRefX6weMSenqxe8du3G6gVz6+xs9YSZmfn43r3VE+aTux+snjAzM5/d+2j1hLl/4/bqCTMz89vzZ6snzNOXL1ZP2Aw3cIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScICow6dffrV6w2ZcuXy6esJcPTlZPWFmZu6fvb96wrx38+bqCTMzc3J0afWEeXF+vnrCzMz89PuT1RPm4bNnqyfM0X4bd99trADgfxNwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiDp8eOfd1Rvm+NJh9YSZmblx+fLqCXN82MZZXN/AWbx9crJ6wszMHO12qyfMy1fnqyfMzMyPDx6snjAPnzxdPWFOj49XT5gZN3CALAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAqN13v/58sXrEfrdbPWFmZvazjR1bsIU/+9FG3ost2Mo38v2Th6snzA+P12+4tD9aPWFmtvGdAvAGBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiDn+8Ol+9YfazWz2BfznsPJO/7TdwFusXvHa8X3/nu3N6ZfWEzVj/NAB4IwIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUbtfHj+6WD1iK/azWz1hM3Y7Z8F/PfrzxeoJ/IMbOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOEDUX0x2PBiHxAxEAAAAAElFTkSuQmCC" id="image63a3062e03" transform="scale(1 -1) translate(0 -221.76)" x="724.553159" y="-69.408" width="264.96" height="221.76"/> @@ -1320,49 +1320,49 @@ L 989.366719 291.168 " style="fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> - 1.1 + 1.4 - 1.1 + 1.3 - 1.1 + 1.3 - 1.1 + 1.3 - 1.1 + 1.2 - 1.1 + 1.2 - 1.1 + 1.2 - 1.1 + 1.2 - 1.4 + 1.7 - 1.7 + 1.8 1.7 - 2.2 + 2.3 - 2.2 + 2.3 - 2.2 + 2.3 - 2.2 + 2.3 2.2 @@ -1374,7 +1374,7 @@ L 989.366719 291.168 2.1 - 2.1 + 2.0 2.7 @@ -1386,7 +1386,7 @@ L 989.366719 291.168 3.0 - 2.0 + 2.1 2.0 @@ -1449,13 +1449,13 @@ L 989.366719 291.168 4.5 - 4.3 + 4.4 5.4 - 5.3 + 5.4 5.1 @@ -1476,7 +1476,7 @@ L 989.366719 291.168 2.9 - 3.7 + 3.6 4.0 @@ -1485,7 +1485,7 @@ L 989.366719 291.168 3.9 - 7.7 + 7.6 7.3 @@ -1518,19 +1518,19 @@ L 989.366719 291.168 3.4 - 4.8 + 4.6 4.5 - 4.0 + 4.1 3.7 - 3.1 + 3.2 2.6 diff --git a/docs/source/blogs/media/gvr_v2/evolution.svg b/docs/source/blogs/media/gvr_v2/evolution.svg index fbb7339e2aa8..2cf0ac245943 100644 --- a/docs/source/blogs/media/gvr_v2/evolution.svg +++ b/docs/source/blogs/media/gvr_v2/evolution.svg @@ -1,7 +1,7 @@ - + @@ -22,8 +22,8 @@ @@ -345,8 +345,8 @@ z @@ -368,7 +368,7 @@ L 964.8 301.536 3.47× - 4.93× + 5.05× Measured evolution diff --git a/docs/source/blogs/media/gvr_v2/flash_timings.csv.gz b/docs/source/blogs/media/gvr_v2/flash_timings.csv.gz index da15de185348ad36ae9e32932741eab42e8b6f80..893e911eafb1eeeee8a09968eee564cee06e2b89 100644 GIT binary patch literal 60722 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

BCa)*r;MbtMoIj$wKIosMT)aVwVUs{)?Sf& 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

5_1X;i3-vMu}P)DPB+MyV$udPL^~N}f|og_0o4 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 diff --git a/docs/source/blogs/media/gvr_v2/latency.svg b/docs/source/blogs/media/gvr_v2/latency.svg index 5f9b22a102ff..f93cafe054ed 100644 --- a/docs/source/blogs/media/gvr_v2/latency.svg +++ b/docs/source/blogs/media/gvr_v2/latency.svg @@ -125,8 +125,8 @@ L 357.586614 50.76 - @@ -136,11 +136,11 @@ L -3.5 0 " style="stroke: #000000; stroke-width: 0.8"/> - + - 10 + 10 @@ -151,98 +151,98 @@ L -2 0 " style="stroke: #000000; stroke-width: 0.6"/> - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -252,14 +252,14 @@ L -2 0 - - - - - - - - + + + + + + + + - - - - - - - - - - + + + + + + + + + - - - - - - - - - - + + + + + + + + + - - - - - - - - - - + + + + + + + + + - + - - - - - - - - - + + + + + + + + + - +" clip-path="url(#p713a708fef)" style="fill: none; stroke-dasharray: 5.92,2.56; stroke-dashoffset: 0; stroke: #bd426b; stroke-width: 1.6"/> - - - - - - - - + + + + + + + + @@ -572,186 +572,186 @@ L 753.259342 50.76 - - + - 10 + 10 - - + - 100 + 100 - - + - 1000 + 1000 - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -761,140 +761,140 @@ L 768.243437 59.962839 - - - - - - - - + + + + + + + + - - - - - - - - - - + + + + + + + + + - - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + - + - - - - - - - - - + + + + + + + + + - + - - - - - - - - - + + + + + + + + + @@ -1003,93 +1003,93 @@ L 357.586614 289.144158 - - + - 10 + 10 - + - + - + - + - + - + - + - + - + - + - + @@ -1099,117 +1099,117 @@ L 372.57071 381.193017 - - - - - - - - + + + + + + + + - - - - - - - - - - + + + + + + + + + - - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + - + - - - - - - - - - + + + + + + + + + @@ -1318,186 +1318,186 @@ L 753.259342 289.144158 - - + - 10 + 10 - - + - 100 + 100 - - + - 1000 + 1000 - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -1507,117 +1507,117 @@ L 768.243437 299.555368 - - - - - - - - + + + + + + + + - - - - - - - - - - + + + + + + + + + - - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + - + - - - - - - - - - + + + + + + + + + @@ -1711,93 +1711,100 @@ L 372.57071 527.528317 - - + - 10 + 10 - + - + - + - + - + - + - + - + - + - + - + + + + + + + + @@ -1805,118 +1812,118 @@ L 372.57071 647.526058 Mean kernel time (µs) - + - - - - - - + + + + + + - - + - - - - - - - + + + + + + + - - + - - - - - - - + + + + + + + - - + - - - - - - - + + + + + + + - - + +L 336.828122 557.962967 +" clip-path="url(#pfba270d3eb)" style="fill: none; stroke-dasharray: 5.92,2.56; stroke-dashoffset: 0; stroke: #d97416; stroke-width: 1.6"/> - - - - - + + + + + - - - - - + + + + + - - - - - - - + + + + + + + @@ -1944,12 +1951,12 @@ z - + - + @@ -1959,12 +1966,12 @@ L 452.237685 527.528317 - + - + @@ -1974,12 +1981,12 @@ L 557.572936 527.528317 - + - + @@ -1989,12 +1996,12 @@ L 662.908187 527.528317 - + - + @@ -2008,102 +2015,102 @@ L 768.243437 527.528317 - - - + + - + - + - 100 - - - - - - - + 100 - + - + - + - + - + - + - + - + - + - + - + + + + + + + + @@ -2111,118 +2118,118 @@ L 768.243437 612.60746 Mean kernel time (µs) - + - - - - - - + + + + + + - - + - - - - - - - + + + + + + + - - + - - - - - - - + + + + + + + - - + - - - - - - + + + + + + - - + + - - - - - - - + + + + + + + - - + + - - - - - - - + + + + + + + @@ -2243,7 +2250,7 @@ L 768.243437 684.36 Latency across row lengths and batch sizes - + GVR V2 - + SGLang v2 (plan + transform) - + FlashInfer 0.6.14 - + TensorRT-LLM radix CUDA - + +" style="fill: none; stroke-dasharray: 9.25,4; stroke-dashoffset: 0; stroke: #d97416; stroke-width: 2.5"/> DeepSelect FP32 - + +" style="fill: none; stroke-dasharray: 9.25,4; stroke-dashoffset: 0; stroke: #bd426b; stroke-width: 2.5"/> HPC-ops FP32 diff --git a/docs/source/blogs/media/gvr_v2/plot_results.py b/docs/source/blogs/media/gvr_v2/plot_results.py index 1eb6a6566400..4dd8b6e4e368 100644 --- a/docs/source/blogs/media/gvr_v2/plot_results.py +++ b/docs/source/blogs/media/gvr_v2/plot_results.py @@ -49,7 +49,7 @@ "deepselect": "#d97416", "hpc_ops": "#bd426b", } -CROSS_CAMPAIGN = {"sglang", "flashinfer", "radix_cuda"} +CROSS_CAMPAIGN = set(ARMS) REACHABLE_BW = 6.912116 TEMPORAL = ["temporal_r0", "temporal_tiered"] COMPARISON_ARMS = ["gvr_v2", *TEMPORAL, *ARMS] @@ -197,7 +197,7 @@ def _overview(rows: list[dict]) -> None: fig.text( 0.185, 0.13, - "Same workloads within each panel. GVR V2 = 1.00×.", + "Same workloads within each panel. GVR V2 (PR #19076) = 1.00×.", fontsize=10, color="#334155", ) @@ -935,6 +935,7 @@ def main() -> None: rows = _load() summary = { "copyright": COPYRIGHT, + "reference": json.loads((ROOT / "provenance.json").read_text())["reference"], "overall": {a: _stats(rows, a) for a in ARMS}, "comparison_common_cases": _comparison(rows), "by_model": { diff --git a/docs/source/blogs/media/gvr_v2/pro_timings.csv.gz b/docs/source/blogs/media/gvr_v2/pro_timings.csv.gz index 14100f2776a13832794f72e42ff0bb419cb56ad3..6f3090014fe07a3d84331b15e9d8d668e5f06396 100644 GIT binary patch literal 78996 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 literal 78761 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 +" clip-path="url(#p5980473fb0)" style="fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #d97416; stroke-opacity: 0.8; stroke-width: 1.5"/> +" clip-path="url(#p5980473fb0)" style="fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #bd426b; stroke-opacity: 0.8; stroke-width: 1.5"/> DeepSeek-V4 Flash · K=512 - - - - - - - - - - + + + + + + + + + @@ -1341,7 +1341,7 @@ L 597.55891 512.161743 L 605.076785 500.161739 L 608.923393 482.893481 L 610.869065 456.696634 -" clip-path="url(#p8c74425732)" style="fill: none; stroke: #d97416; stroke-opacity: 0.8; stroke-width: 1.5; stroke-linecap: square"/> +" clip-path="url(#p8c74425732)" style="fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #d97416; stroke-opacity: 0.8; stroke-width: 1.5"/> @@ -1358,26 +1358,26 @@ L 610.869065 456.696634 DeepSeek-V4 Pro · K=1024 - - - - - - - - - - + + + + + + + + + @@ -1854,7 +1854,7 @@ L 890.63599 521.930417 L 905.000943 515.809056 L 912.517309 508.605888 L 914.04562 486.769115 -" clip-path="url(#p11c51aaaf1)" style="fill: none; stroke: #d97416; stroke-opacity: 0.8; stroke-width: 1.5; stroke-linecap: square"/> +" clip-path="url(#p11c51aaaf1)" style="fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #d97416; stroke-opacity: 0.8; stroke-width: 1.5"/> @@ -1873,7 +1873,7 @@ L 890.63599 495.601466 L 905.000943 480.819213 L 912.517309 467.029072 L 914.04562 461.829 -" clip-path="url(#p11c51aaaf1)" style="fill: none; stroke: #bd426b; stroke-opacity: 0.8; stroke-width: 1.5; stroke-linecap: square"/> +" clip-path="url(#p11c51aaaf1)" style="fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #bd426b; stroke-opacity: 0.8; stroke-width: 1.5"/> @@ -1888,22 +1888,22 @@ L 914.04562 461.829 DeepSeek-V3.2 · K=2048 - - - - - - - - + + + + + + + @@ -1966,7 +1966,7 @@ L 482.967812 606.191431 +" style="fill: none; stroke-dasharray: 9.25,4; stroke-dashoffset: 0; stroke: #d97416; stroke-width: 2.5"/> DeepSelect FP32 @@ -1975,7 +1975,7 @@ L 658.411562 591.513306 +" style="fill: none; stroke-dasharray: 9.25,4; stroke-dashoffset: 0; stroke: #bd426b; stroke-width: 2.5"/> HPC-ops FP32 diff --git a/docs/source/blogs/media/gvr_v2/sglang_map.svg b/docs/source/blogs/media/gvr_v2/sglang_map.svg index dbd44bf08af0..253e8b2262fa 100644 --- a/docs/source/blogs/media/gvr_v2/sglang_map.svg +++ b/docs/source/blogs/media/gvr_v2/sglang_map.svg @@ -39,7 +39,7 @@ z +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" id="image79fb9c2712" transform="scale(1 -1) translate(0 -221.76)" x="51.926719" y="-69.408" width="264.96" height="221.76"/> @@ -272,16 +272,16 @@ L 316.740278 291.168 " style="fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> - 1.9 + 2.1 - 1.8 + 2.0 - 1.8 + 2.0 - 1.8 + 2.0 1.9 @@ -305,22 +305,22 @@ L 316.740278 291.168 2.9 - 1.9 + 2.0 - 1.8 + 2.0 - 1.8 + 1.9 - 1.8 + 1.9 1.9 - 1.8 + 1.9 1.8 @@ -335,22 +335,22 @@ L 316.740278 291.168 2.0 - 2.1 + 2.0 - 1.7 + 1.8 - 1.7 + 1.8 - 1.7 + 1.8 - 1.6 + 1.7 - 1.7 + 1.8 1.7 @@ -371,31 +371,31 @@ L 316.740278 291.168 1.8 - 1.4 + 1.8 - 1.4 + 1.7 - 1.4 + 1.8 - 1.4 + 1.7 - 1.5 + 1.7 - 1.5 + 1.7 - 1.4 + 1.6 - 1.4 + 1.6 - 1.2 + 1.4 1.5 @@ -404,13 +404,13 @@ L 316.740278 291.168 1.4 - 1.7 + 1.8 - 1.7 + 1.8 - 1.7 + 1.8 1.7 @@ -443,7 +443,7 @@ L 316.740278 291.168 1.8 - 1.8 + 1.7 1.7 @@ -458,7 +458,7 @@ L 316.740278 291.168 1.8 - 1.4 + 1.5 1.4 @@ -479,7 +479,7 @@ L 316.740278 291.168 1.8 - 1.8 + 1.7 1.8 @@ -503,7 +503,7 @@ L 316.740278 291.168 1.5 - 1.8 + 1.9 1.8 @@ -539,7 +539,7 @@ L 316.740278 291.168 2.0 - 1.9 + 2.0 1.8 @@ -563,7 +563,7 @@ L 316.740278 291.168 1.7 - 1.6 + 1.7 1.9 @@ -583,7 +583,7 @@ z +iVBORw0KGgoAAAANSUhEUgAAAXAAAAE0CAYAAAA10GhFAAAGCklEQVR4nO3WPY4dRRiG0a97rm3Mj4TlABKHBATsgYiMFbEDFkZKwBKIkIHUMuPpJhgQOHRU/UjnrOBV36rn1vbLH7+ds9htttUTZmbmblu/4+m+r54wMzP7BX6TH3/+afWEmZn59fXvqyfMD99+t3rCzMx8+fSj1RMucU/fHsfqCTMzc41aAPDBBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABom7PNg3/175tqyfMca5e8Oj53fpz8erFi9UTZmbm+6++Xj1hPr89WT1hZmbuLnBH9lm/4clFunmNFQB8MAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4i63Z/n6g2X+RdZ/yVmjkusmPnz/mH1hPnm5RerJ8zMzMtnz1dPmKf7VW7JevfnsXrC3G3b6gkzc512AvCBBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABom6rB/C+c/WAf7w9j9UT5tXHn62eMDMzz7b175xP9mtc1Xfn+hP6cIFbcqyfMDNe4ABZAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUbcn27Z6w+wX2MD7Pr27rZ4w+1zjXOwXmPHmeFg9YWZm7i5wV9+d5+oJc4VuzniBA2QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANE3c7VC2bmOK+wgv/bt231hDnmIufiXP8tZrvGt7ib9d/i+X63esLcLnA/ZrzAAbIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGibtvqBbxn3/wi/9rHt7ia+/NYPWH+OtZveDjP1RNmxgscIEvAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGibm/PY/WG2WdbPeE6znP1gpmZuW3rf5NjrvEtruAqd+QK5+IKp2J9NR95gQNECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRN2O81y9YWZbPeDRfpUhF/DuAufC6+I/63+NR1e4I2+Oh9UT5vXbN6snzIw7ApAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4Q9Te8iVbOXBac1AAAAABJRU5ErkJggg==" id="image7d6f6df8f2" transform="scale(1 -1) translate(0 -221.76)" x="388.239939" y="-69.408" width="264.96" height="221.76"/> @@ -806,16 +806,16 @@ L 653.053498 291.168 " style="fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> - 1.9 + 2.1 - 1.9 + 2.0 - 1.9 + 2.0 - 1.9 + 2.0 1.9 @@ -827,7 +827,7 @@ L 653.053498 291.168 1.9 - 1.8 + 1.9 1.7 @@ -839,19 +839,19 @@ L 653.053498 291.168 2.6 - 1.9 + 2.0 - 1.8 + 1.9 - 1.8 + 2.0 - 1.8 + 1.9 - 1.8 + 1.9 1.8 @@ -869,19 +869,19 @@ L 653.053498 291.168 1.9 - 2.0 + 1.9 - 1.7 + 1.8 - 1.7 + 1.8 - 1.7 + 1.8 - 1.7 + 1.8 1.7 @@ -905,31 +905,31 @@ L 653.053498 291.168 1.9 - 1.5 + 1.8 - 1.4 + 1.8 - 1.4 + 1.8 - 1.4 + 1.8 - 1.5 + 1.8 - 1.5 + 1.7 - 1.5 + 1.7 - 1.4 + 1.6 - 1.2 + 1.4 1.4 @@ -938,13 +938,13 @@ L 653.053498 291.168 1.3 - 1.7 + 1.8 - 1.7 + 1.8 - 1.7 + 1.8 1.7 @@ -959,7 +959,7 @@ L 653.053498 291.168 1.6 - 1.5 + 1.6 1.5 @@ -1025,7 +1025,7 @@ L 653.053498 291.168 2.2 - 1.6 + 1.7 1.5 @@ -1037,7 +1037,7 @@ L 653.053498 291.168 1.4 - 1.7 + 1.8 1.8 @@ -1076,7 +1076,7 @@ L 653.053498 291.168 1.9 - 1.7 + 1.8 1.6 @@ -1085,7 +1085,7 @@ L 653.053498 291.168 1.6 - 4.1 + 4.2 4.7 @@ -1117,7 +1117,7 @@ z +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" id="image2c7e33a088" transform="scale(1 -1) translate(0 -221.76)" x="724.553159" y="-69.408" width="264.96" height="221.76"/> @@ -1320,31 +1320,31 @@ L 989.366719 291.168 " style="fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> - 1.5 + 1.8 - 1.5 + 1.7 - 1.5 + 1.7 - 1.5 + 1.7 - 1.5 + 1.7 - 1.5 + 1.6 - 1.5 + 1.6 - 1.4 + 1.6 - 1.3 + 1.6 1.4 @@ -1419,7 +1419,7 @@ L 989.366719 291.168 1.4 - 1.3 + 1.4 1.3 @@ -1452,13 +1452,13 @@ L 989.366719 291.168 1.5 - 1.4 + 1.5 - 1.4 + 1.5 - 1.4 + 1.5 1.4 @@ -1473,7 +1473,7 @@ L 989.366719 291.168 1.8 - 1.6 + 1.7 1.5 @@ -1518,7 +1518,7 @@ L 989.366719 291.168 1.7 - 1.8 + 1.7 1.7 @@ -1548,7 +1548,7 @@ L 989.366719 291.168 1.7 - 1.7 + 1.8 DeepSeek-V3.2 · K=2048 diff --git a/docs/source/blogs/media/gvr_v2/speedup.svg b/docs/source/blogs/media/gvr_v2/speedup.svg index 08214343d73a..df3657395e80 100644 --- a/docs/source/blogs/media/gvr_v2/speedup.svg +++ b/docs/source/blogs/media/gvr_v2/speedup.svg @@ -1,7 +1,7 @@ - + @@ -22,8 +22,8 @@ @@ -186,80 +186,80 @@ z - 2.03× + 2.09× - 1.48× + 1.53× - 1.78× + 1.83× - 2.12× + 2.18× - 4.74× + 4.88× - 1.98× + 2.03× - 2.30× + 2.37× K=512 @@ -402,69 +402,69 @@ z - 2.09× + 2.16× - 1.50× + 1.54× - 1.76× + 1.81× - 2.14× + 2.20× - 4.73× + 4.87× - 2.07× + 2.13× Not supported @@ -610,80 +610,80 @@ z - 1.75× + 1.78× - 1.34× + 1.37× - 1.55× + 1.58× - 1.89× + 1.93× - 5.15× + 5.25× - 2.79× + 2.85× - 1.30× + 1.33× K=2048 @@ -699,7 +699,7 @@ z Geometric-mean kernel time relative to GVR V2 · shorter is faster · B200 / FP32 - Same workloads within each panel. GVR V2 = 1.00×. + Same workloads within each panel. GVR V2 (PR #19076) = 1.00×. Temporal GVR: R0 threshold ladder and tiered execution. V2: current-row self-sampling. diff --git a/docs/source/blogs/media/gvr_v2/summary.json b/docs/source/blogs/media/gvr_v2/summary.json index f4a9f33d63b4..975e66de8acc 100644 --- a/docs/source/blogs/media/gvr_v2/summary.json +++ b/docs/source/blogs/media/gvr_v2/summary.json @@ -1,60 +1,68 @@ { "copyright": "Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. SPDX-License-Identifier: Apache-2.0", + "reference": { + "repository": "NVIDIA/TensorRT-LLM", + "implementation": "GVR V2 self-sampling", + "entry": "run_varlen", + "mode": "hint-free", + "pull_request": "https://github.com/NVIDIA/TensorRT-LLM/pull/19076", + "commit": "be1b9885e8df9bf070e8cb68459e24a7119afaa9" + }, "overall": { "sglang": { "cases": 9515, - "geomean": 1.659919912625496, - "minimum": 0.9452784089288601, - "p5": 1.284137593467646, - "p95": 2.294301211085517, - "wins": 9506, - "win_percent": 99.90541250656858, + "geomean": 1.7014384894837788, + "minimum": 0.9428939906877946, + "p5": 1.3001369745640126, + "p95": 2.317691250588399, + "wins": 9508, + "win_percent": 99.92643194955335, "baseline_median_us": 14.365, - "gvr_median_us": 9.626 + "gvr_median_us": 9.61 }, "flashinfer": { "cases": 9515, - "geomean": 2.0126556370686415, - "minimum": 1.2048796877826886, - "p5": 1.4221216647629091, - "p95": 3.1066784765052313, + "geomean": 2.062996980118572, + "minimum": 1.2160371452420702, + "p5": 1.4397936353872656, + "p95": 3.2003547933365404, "wins": 9515, "win_percent": 100, "baseline_median_us": 16.902, - "gvr_median_us": 9.626 + "gvr_median_us": 9.61 }, "radix_cuda": { "cases": 9746, - "geomean": 4.92914283450788, - "minimum": 1.34452479338843, - "p5": 1.7330116321841083, - "p95": 9.409458499113798, + "geomean": 5.051863720455904, + "minimum": 1.3352283494409702, + "p5": 1.800987459271426, + "p95": 10.216837270210021, "wins": 9746, "win_percent": 100, "baseline_median_us": 46.3535, - "gvr_median_us": 9.651 + "gvr_median_us": 9.6435 }, "deepselect": { "cases": 9746, - "geomean": 2.365726126886252, - "minimum": 0.8387043554773427, - "p5": 1.1323672895555466, - "p95": 5.269908377259912, - "wins": 9707, - "win_percent": 99.59983583008413, + "geomean": 2.4246256183291397, + "minimum": 0.8345965469121953, + "p5": 1.2680811414029267, + "p95": 5.269482214016592, + "wins": 9709, + "win_percent": 99.620357069567, "baseline_median_us": 26.854, - "gvr_median_us": 9.651 + "gvr_median_us": 9.6435 }, "hpc_ops": { "cases": 6776, - "geomean": 1.5503113358686176, - "minimum": 0.707073853570024, - "p5": 1.0617866160873248, - "p95": 3.411471833093196, - "wins": 6666, - "win_percent": 98.37662337662337, + "geomean": 1.5854641934414742, + "minimum": 0.7191312922503, + "p5": 1.0725354119733659, + "p95": 3.3893380735586316, + "wins": 6688, + "win_percent": 98.7012987012987, "baseline_median_us": 15.2865, - "gvr_median_us": 10.058 + "gvr_median_us": 10.0685 } }, "comparison_common_cases": { @@ -63,13 +71,13 @@ "layers": 21, "latency_relative_to_v2": { "gvr_v2": 1.0, - "temporal_r0": 2.0293725740894857, - "temporal_tiered": 1.4841922688442863, - "sglang": 1.7813879012416804, - "flashinfer": 2.1168284413867866, - "radix_cuda": 4.738848498350794, - "deepselect": 1.9762668821010982, - "hpc_ops": 2.3022651105074425 + "temporal_r0": 2.08799443828557, + "temporal_tiered": 1.5270656764856136, + "sglang": 1.832846308120955, + "flashinfer": 2.177976616444322, + "radix_cuda": 4.875738163985888, + "deepselect": 2.0333546984325714, + "hpc_ops": 2.3687699378490183 } }, "pro": { @@ -77,12 +85,12 @@ "layers": 30, "latency_relative_to_v2": { "gvr_v2": 1.0, - "temporal_r0": 2.092569227440768, - "temporal_tiered": 1.4982771524645222, - "sglang": 1.7583326591453858, - "flashinfer": 2.1380735012445657, - "radix_cuda": 4.730141753655872, - "deepselect": 2.0652926786843926 + "temporal_r0": 2.155315379850125, + "temporal_tiered": 1.54320332519381, + "sglang": 1.8110566539219024, + "flashinfer": 2.202184109396619, + "radix_cuda": 4.871976103268161, + "deepselect": 2.127220937729447 } }, "v32": { @@ -90,13 +98,13 @@ "layers": 58, "latency_relative_to_v2": { "gvr_v2": 1.0, - "temporal_r0": 1.7452692400246128, - "temporal_tiered": 1.343629605500426, - "sglang": 1.5458744575710972, - "flashinfer": 1.8884614097529644, - "radix_cuda": 5.14935336398433, - "deepselect": 2.7938491864507595, - "hpc_ops": 1.3017841898865732 + "temporal_r0": 1.780045220393957, + "temporal_tiered": 1.370402573082146, + "sglang": 1.5766773265824163, + "flashinfer": 1.9260906164150302, + "radix_cuda": 5.251958628200303, + "deepselect": 2.8495190179213177, + "hpc_ops": 1.3277233518189635 } } }, @@ -104,104 +112,104 @@ "flash": { "sglang": { "cases": 2079, - "geomean": 1.7813879012416804, - "minimum": 0.9634314231629667, - "p5": 1.3783206714743743, - "p95": 2.633179873020246, - "wins": 2078, - "win_percent": 99.95189995189995, + "geomean": 1.832846308120955, + "minimum": 1.077920656634747, + "p5": 1.4549824545771106, + "p95": 2.6442971958910717, + "wins": 2079, + "win_percent": 100, "baseline_median_us": 11.911, - "gvr_median_us": 6.586 + "gvr_median_us": 6.608 }, "flashinfer": { "cases": 2079, - "geomean": 2.1168284413867866, - "minimum": 1.327138186198589, - "p5": 1.741738976670898, - "p95": 2.9409341645629477, + "geomean": 2.177976616444322, + "minimum": 1.3678796169630645, + "p5": 1.7868236472748813, + "p95": 3.0966706173286083, "wins": 2079, "win_percent": 100, "baseline_median_us": 15.267, - "gvr_median_us": 6.586 + "gvr_median_us": 6.608 }, "radix_cuda": { "cases": 2079, - "geomean": 4.738848498350794, - "minimum": 1.4393757503001199, - "p5": 1.6352899884566188, - "p95": 11.130091581813774, + "geomean": 4.875738163985888, + "minimum": 1.4130089899524063, + "p5": 1.6569445902710334, + "p95": 10.993023430337592, "wins": 2079, "win_percent": 100, "baseline_median_us": 39.606, - "gvr_median_us": 6.586 + "gvr_median_us": 6.608 }, "deepselect": { "cases": 2079, - "geomean": 1.9762668821010982, - "minimum": 0.8387043554773427, - "p5": 1.2575985736118185, - "p95": 3.530044018339831, - "wins": 2057, - "win_percent": 98.94179894179894, + "geomean": 2.0333546984325714, + "minimum": 0.8345965469121953, + "p5": 1.2718755476500327, + "p95": 3.58100364778223, + "wins": 2059, + "win_percent": 99.03799903799904, "baseline_median_us": 16.634, - "gvr_median_us": 6.586 + "gvr_median_us": 6.608 }, "hpc_ops": { "cases": 2079, - "geomean": 2.3022651105074425, - "minimum": 1.092841163310962, - "p5": 1.5165886364171397, - "p95": 5.3384128691328945, + "geomean": 2.3687699378490183, + "minimum": 1.1533789329685362, + "p5": 1.5438957493794887, + "p95": 5.4378585199743545, "wins": 2079, "win_percent": 100, "baseline_median_us": 16.144, - "gvr_median_us": 6.586 + "gvr_median_us": 6.608 } }, "pro": { "sglang": { "cases": 2970, - "geomean": 1.7583326591453858, - "minimum": 0.9452784089288601, - "p5": 1.3523156478223413, - "p95": 2.6234948351553213, + "geomean": 1.8110566539219024, + "minimum": 0.9428939906877946, + "p5": 1.4159648911660379, + "p95": 2.639499335056157, "wins": 2963, "win_percent": 99.76430976430977, "baseline_median_us": 12.790500000000002, - "gvr_median_us": 7.0035 + "gvr_median_us": 6.979 }, "flashinfer": { "cases": 2970, - "geomean": 2.1380735012445657, - "minimum": 1.2048796877826886, - "p5": 1.7583690358151742, - "p95": 2.989261325105112, + "geomean": 2.202184109396619, + "minimum": 1.2160371452420702, + "p5": 1.7908103368572619, + "p95": 3.139525524746378, "wins": 2970, "win_percent": 100, "baseline_median_us": 15.795, - "gvr_median_us": 7.0035 + "gvr_median_us": 6.979 }, "radix_cuda": { "cases": 2970, - "geomean": 4.730141753655872, - "minimum": 1.34452479338843, - "p5": 1.6644194770141632, - "p95": 10.492732386881801, + "geomean": 4.871976103268161, + "minimum": 1.3352283494409702, + "p5": 1.6883335124343106, + "p95": 10.58141910734875, "wins": 2970, "win_percent": 100, "baseline_median_us": 42.3375, - "gvr_median_us": 7.0035 + "gvr_median_us": 6.979 }, "deepselect": { "cases": 2970, - "geomean": 2.0652926786843926, - "minimum": 0.8633132859486058, - "p5": 1.300981064323937, - "p95": 3.7401871934801103, + "geomean": 2.127220937729447, + "minimum": 0.863119682677618, + "p5": 1.2984786476378885, + "p95": 3.7923390954150102, "wins": 2953, "win_percent": 99.42760942760943, "baseline_median_us": 18.569499999999998, - "gvr_median_us": 7.0035 + "gvr_median_us": 6.979 }, "hpc_ops": { "cases": 0 @@ -210,71 +218,71 @@ "v32": { "sglang": { "cases": 4466, - "geomean": 1.5458744575710972, - "minimum": 0.995505617977528, - "p5": 1.2471306665615176, - "p95": 2.0331705513657594, - "wins": 4465, - "win_percent": 99.97760859829825, + "geomean": 1.5766773265824163, + "minimum": 1.0017473532737178, + "p5": 1.2598374022022603, + "p95": 2.0360758744487986, + "wins": 4466, + "win_percent": 100, "baseline_median_us": 17.1005, - "gvr_median_us": 10.7935 + "gvr_median_us": 10.7775 }, "flashinfer": { "cases": 4466, - "geomean": 1.8884614097529644, - "minimum": 1.2740702479338843, - "p5": 1.3864284809219347, - "p95": 3.336226127023025, + "geomean": 1.9260906164150302, + "minimum": 1.2687127188762748, + "p5": 1.3887920766440032, + "p95": 3.35022468036877, "wins": 4466, "win_percent": 100, "baseline_median_us": 18.2675, - "gvr_median_us": 10.7935 + "gvr_median_us": 10.7775 }, "radix_cuda": { "cases": 4697, - "geomean": 5.1482115783067535, - "minimum": 2.146239180122966, - "p5": 3.609013753424199, - "p95": 8.883631207549637, + "geomean": 5.250852136354158, + "minimum": 2.1828381113051605, + "p5": 3.648166973469981, + "p95": 8.976731655272205, "wins": 4697, "win_percent": 100, "baseline_median_us": 49.974, - "gvr_median_us": 10.787 + "gvr_median_us": 10.768 }, "deepselect": { "cases": 4697, - "geomean": 2.791499963621508, - "minimum": 1.0073976656255137, - "p5": 1.1201868693909796, - "p95": 6.159466538766953, + "geomean": 2.8471544583323984, + "minimum": 1.1209530738450346, + "p5": 1.2609337008410433, + "p95": 6.136549264193189, "wins": 4697, "win_percent": 100, "baseline_median_us": 45.325, - "gvr_median_us": 10.787 + "gvr_median_us": 10.768 }, "hpc_ops": { "cases": 4697, - "geomean": 1.301380953511156, - "minimum": 0.707073853570024, - "p5": 1.040466706447916, - "p95": 1.6382505329224384, - "wins": 4587, - "win_percent": 97.65807962529274, + "geomean": 1.3273267533814441, + "minimum": 0.7191312922503, + "p5": 1.0487701175120445, + "p95": 1.6321223815497354, + "wins": 4609, + "win_percent": 98.12646370023418, "baseline_median_us": 14.95, - "gvr_median_us": 10.787 + "gvr_median_us": 10.768 } } }, "sglang_transform_only": { "cases": 9515, - "geomean": 1.4216305273775935, - "minimum": 0.8034761658922732, - "p5": 1.0769350221910845, - "p95": 2.127197724856214, - "wins": 9399, - "win_percent": 98.78087230688386, + "geomean": 1.4571889153853919, + "minimum": 0.9224298976795349, + "p5": 1.123068045548716, + "p95": 2.1337606011346444, + "wins": 9455, + "win_percent": 99.36941671045717, "baseline_median_us": 12.397, - "gvr_median_us": 9.626 + "gvr_median_us": 9.61 }, "deepselect_bf16": { "cases": 9746, @@ -290,25 +298,25 @@ "temporal_vs_v2": { "temporal_r0": { "cases": 9746, - "geomean": 1.9056854507699208, - "minimum": 0.9918327259569409, - "p5": 1.3440862636763187, - "p95": 2.8577032051156213, + "geomean": 1.9531313079318369, + "minimum": 0.9991411021654637, + "p5": 1.3488066063428978, + "p95": 2.9248310667525446, "wins": 9745, "win_percent": 99.98973938025857, "baseline_median_us": 16.9455, - "gvr_median_us": 9.651 + "gvr_median_us": 9.6435 }, "temporal_tiered": { "cases": 9746, - "geomean": 1.4197420853024663, - "minimum": 0.6822172253667951, - "p5": 1.042921280424682, - "p95": 2.1030143856993346, - "wins": 9525, - "win_percent": 97.73240303714344, + "geomean": 1.4550894088383663, + "minimum": 0.6885347106288259, + "p5": 1.095922446440455, + "p95": 2.102507274523004, + "wins": 9704, + "win_percent": 99.56905397085984, "baseline_median_us": 12.232, - "gvr_median_us": 9.651 + "gvr_median_us": 9.6435 } }, "roofline_reachable_rate": { @@ -319,8 +327,8 @@ "flash": { "gvr_v2": { "points": 9, - "average_percent": 41.59262449083251, - "peak_percent": 77.98454391932714 + "average_percent": 41.56601571959186, + "peak_percent": 77.81571160254971 }, "sglang": { "points": 9, @@ -351,8 +359,8 @@ "pro": { "gvr_v2": { "points": 9, - "average_percent": 39.0022042727297, - "peak_percent": 68.41314746484473 + "average_percent": 39.00405637364329, + "peak_percent": 68.39789370398464 }, "sglang": { "points": 9, @@ -378,8 +386,8 @@ "v32": { "gvr_v2": { "points": 7, - "average_percent": 41.297662352832006, - "peak_percent": 65.08393175529055 + "average_percent": 41.46850757505675, + "peak_percent": 66.471336883724 }, "sglang": { "points": 7, @@ -419,7 +427,7 @@ "wins_percent": 98.38908270059513 }, "gvr_v2": { - "geomean": 4.92914283450788, + "geomean": 5.051863720455904, "wins_percent": 100 } } diff --git a/docs/source/blogs/media/gvr_v2/v32_timings.csv.gz b/docs/source/blogs/media/gvr_v2/v32_timings.csv.gz index cdb3c026f6a73bbedd152fcc464449c4201ef4df..412dee2dedd23b71a0bc1dc00f41b2bebd2e6a49 100644 GIT binary patch literal 137060 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%0AVw7Yv%UCIrW4x~`_l*j=rk9Bbjtk$62_zT@td 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

nN^tQe~axmoW|1dAL{dMx-87e5zF!#@}!7a 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

=m!@Q0fHqnR-reE3sy4 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%0D9gxx9( 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 M2mG=*c?0wY06^oUlK=n! diff --git a/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md b/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md index 66236018b945..de094f3cbe16 100644 --- a/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md +++ b/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md @@ -13,7 +13,7 @@ Selecting 1,024 INT32 indices from 131,072 FP32 scores writes just **4 KiB of ou GVR V2 makes each full-row pass more useful without depending on the previous decode step to predict the current one. **Self-sampling estimates where the current row's Top-K boundary lies; multi-thresholding derives many exact population counts from one classification pass.** Together, they concentrate exact refinement on the small group of scores still competing for the final slots. The sampling idea builds on Floyd–Rivest SELECT, adapted to the memory traffic and parallel execution costs of GPU Top-K. -On B200, this design delivers **4.93× geometric-mean speedup over TensorRT-LLM radix CUDA and 1.66× over SGLang v2**, with **2.01× over FlashInfer, 2.37× over DeepSelect FP32, and 1.55× over HPC-ops FP32**. The workloads span DeepSeek-V3.2, DeepSeek-V4 Flash, and DeepSeek-V4 Pro indexers. The SGLang result includes planning; the transform-only comparison is **1.42×**. +On B200, this design delivers **5.05× geometric-mean speedup over TensorRT-LLM radix CUDA and 1.70× over SGLang v2**, with **2.06× over FlashInfer, 2.42× over DeepSelect FP32, and 1.59× over HPC-ops FP32**. The workloads span DeepSeek-V3.2, DeepSeek-V4 Flash, and DeepSeek-V4 Pro indexers. The SGLang result includes planning; the transform-only comparison is **1.46×**. ![Three horizontal bar-chart panels compare GVR V2, temporal GVR R0 and tiered versions, SGLang, FlashInfer, radix CUDA, DeepSelect FP32, and HPC-ops FP32 on common cases per model. GVR V2 is 1.00; shorter bars mean less kernel time.](../media/gvr_v2/speedup.svg) @@ -121,7 +121,7 @@ V1's prior also has a lifecycle outside the kernel. Prefill lacks the same previ *Figure 3. The design shift removes dependence on temporal overlap and prior state while making each verification pass more informative. Original V1 uses scalar threshold search; later temporal R0 and tiered implementations add broader verification and execution specialization. The bars compare those later temporal implementations with V2 over radix CUDA.* -Temporal R0 and tiered GVR achieve **2.59× and 3.47×** speedup over radix CUDA; V2 reaches **4.93×**. V2 is **1.91× faster than temporal R0** and **1.42× faster than tiered temporal GVR**, combining current-row sampling, multi-threshold verification, and specialized execution paths. +Temporal R0 and tiered GVR achieve **2.59× and 3.47×** speedup over radix CUDA; V2 reaches **5.05×**. V2 is **1.95× faster than temporal R0** and **1.46× faster than tiered temporal GVR**, combining current-row sampling, multi-threshold verification, and specialized execution paths. ## Self-Sampling and Multi-Thresholding @@ -217,7 +217,7 @@ This explains the two sources of performance improvement: a better starting thre #### Benchmark Setup -The benchmarks use FP32 indexer scores from the three models below on NVIDIA B200, with batch sizes from 1 to 1,024. Results report cold-L2 GPU kernel time, excluding compilation, input preparation, and Python overhead. Speedups are geometric means over matched workloads. +The benchmarks use FP32 indexer scores from the three models below on NVIDIA B200, with batch sizes from 1 to 1,024. GVR V2 uses the merged [PR #19076](https://github.com/NVIDIA/TensorRT-LLM/pull/19076) implementation. Results report cold-L2 GPU kernel time, excluding compilation, input preparation, and Python overhead. Speedups are geometric means over matched workloads from separate benchmark runs. | Model | $K$ | Indexer compression | Valid row lengths $N$ | | :--- | ---: | ---: | :--- | @@ -231,11 +231,11 @@ The benchmarks use FP32 indexer scores from the three models below on NVIDIA B20 | Baseline | Geomean speedup | Minimum speedup | GVR V2 faster | | :--- | ---: | ---: | ---: | -| SGLang v2, plan + transform | **1.66×** | 0.95× | 99.91% | -| FlashInfer 0.6.14 `top_k` | **2.01×** | 1.20× | 100.00% | -| TensorRT-LLM radix CUDA dispatch | **4.93×** | 1.34× | 100.00% | -| DeepSelect v1.0.0 FP32 | **2.37×** | 0.84× | 99.60% | -| HPC-ops FP32 | **1.55×** | 0.71× | 98.38% | +| SGLang v2, plan + transform | **1.70×** | 0.94× | 99.93% | +| FlashInfer 0.6.14 `top_k` | **2.06×** | 1.22× | 100.00% | +| TensorRT-LLM radix CUDA dispatch | **5.05×** | 1.34× | 100.00% | +| DeepSelect v1.0.0 FP32 | **2.42×** | 0.83× | 99.62% | +| HPC-ops FP32 | **1.59×** | 0.72× | 98.70% | The minimum column retains individual regressions. Figure 1 shows the model-level comparison on the common workloads supported by each implementation. @@ -249,7 +249,7 @@ Figure 5 locates the SGLang gains across the full length–batch grid. *Figure 5. SGLang plan + transform time divided by GVR V2 time, geometrically averaged across layers at each shape. A value of 1.0 means equal performance. Figures 5 and 6 share the same color scale; row lengths are rounded in the axis labels.* -Long rows at intermediate batch sizes show particularly strong gains: **V4 Pro reaches 4.67× at $N=262{,}127$, $B=64$**. This is the strongest shape-average result in the grid; most regions are around 1.3–2.0×. +Long rows at intermediate batch sizes show particularly strong gains: **V4 Pro reaches 4.69× at $N=262{,}127$, $B=64$**. This is the strongest shape-average result in the grid; most regions are around 1.3–2.0×. DeepSelect FP32 shows a different pattern: V2's strongest gains move toward long rows at small batch sizes, especially for V3.2. @@ -257,27 +257,27 @@ DeepSelect FP32 shows a different pattern: V2's strongest gains move toward long *Figure 6. DeepSelect FP32 time divided by GVR V2 time, geometrically averaged across layers at each shape. The layout and color scale match Figure 5: values above 1.0 favor V2, and darker teal indicates a larger gain. Cell labels round to one decimal place.* -For **V3.2, the gain reaches 7.66× around 128K scores at batch size 1** and stays above 6× at that row length through batch size 8. Flash and Pro also show broad gains, with peaks of **4.23×** and **4.34×**. The narrowest margin appears for the longest Flash rows at batch size 128, where the shape average is approximately parity (0.996×). +For **V3.2, the gain reaches 7.58× around 128K scores at batch size 1** and stays above 6× at that row length through batch size 8. Flash and Pro also show broad gains, with peaks of **4.26×** and **4.40×**. The narrowest margin appears for the longest Flash rows at batch size 128, where the shape average is approximately parity (0.993×). These patterns identify useful operating regions. The native API contracts below explain which work is included in each comparison. #### What Explains the Differences -**SGLang.** The **1.66×** comparison includes both planning and transformation. Serving integrations can amortize planning across layers; against transformation alone, V2 achieves **1.42×** geometric-mean speedup and wins **98.78%** of comparisons. +**SGLang.** The **1.70×** comparison includes both planning and transformation. Serving integrations can amortize planning across layers; against transformation alone, V2 achieves **1.46×** geometric-mean speedup and wins **99.37%** of comparisons. -**FlashInfer.** Its `top_k` API returns FP32 values and INT64 indices, while GVR V2 returns INT32 indices only. The **2.01×** result includes that additional output work and FlashInfer's scan of the padded row. +**FlashInfer.** Its `top_k` API returns FP32 values and INT64 indices, while GVR V2 returns INT32 indices only. The **2.06×** result includes that additional output work and FlashInfer's scan of the padded row. -**TensorRT-LLM radix CUDA.** The baseline uses the production dispatcher, including short-row insertion and long-row split-work paths. V2's **4.93×** advantage is consistent with reducing full-row selection passes and matching execution to the workload. +**TensorRT-LLM radix CUDA.** The baseline uses the production dispatcher, including short-row insertion and long-row split-work paths. V2's **5.05×** advantage is consistent with reducing full-row selection passes and matching execution to the workload. -**DeepSelect.** The FP32 comparison requests unsorted INT32 indices. Its $K=2048$ path emphasizes correctness coverage, which helps explain the larger **2.79×** gap on V3.2. +**DeepSelect.** The FP32 comparison requests unsorted INT32 indices. Its $K=2048$ path emphasizes correctness coverage, which helps explain the larger **2.85×** gap on V3.2. -**HPC-ops.** FP32 support covers $K \in \lbrace 512,2048\rbrace$. V2's advantage is **2.30×** on Flash and **1.30×** on V3.2, with an overall **1.55×** speedup. HPC-ops retains individual wins on V3.2; Pro is unsupported. +**HPC-ops.** FP32 support covers $K \in \lbrace 512,2048\rbrace$. V2's advantage is **2.37×** on Flash and **1.33×** on V3.2, with an overall **1.59×** speedup. HPC-ops retains individual wins on V3.2; Pro is unsupported. #### Latency Across Row Length and Batch Size ![Cold kernel latency for all six implementations versus valid row length, with separate panels for three models and batch sizes 1 and 1024.](../media/gvr_v2/latency.svg) -*Figure 7. Mean cold kernel time across matching layers. Each row is a model; the columns contrast batch sizes 1 and 1,024. Solid and dashed lines distinguish benchmark runs. Both axes are logarithmic; 1K means 1,024.* +*Figure 7. Mean cold kernel time across matching layers. Each row is a model; the columns contrast batch sizes 1 and 1,024. The solid line shows GVR V2; dashed lines show baselines measured in separate runs. Both axes are logarithmic; 1K means 1,024.* At $B=1$, keeping a short row in registers and exposing parallelism within a longer row matter more than saturating HBM. At $B=1024$, streaming throughput becomes more visible. The different shapes of these curves are why a single average cannot identify every useful operating region. @@ -317,7 +317,7 @@ The **reachable rate** is $P(I)/P_{\mathrm{calibrated}}(I)$, expressed as a perc | Operator | V4 Flash | V4 Pro | V3.2 | | :--- | ---: | ---: | ---: | -| **GVR V2** | **41.6% / 78.0%** | **39.0% / 68.4%** | **41.3% / 65.1%** | +| **GVR V2** | **41.6% / 77.8%** | **39.0% / 68.4%** | **41.5% / 66.5%** | | SGLang, plan + transform | 24.7% / 41.2% | 24.7% / 41.3% | 27.1% / 38.0% | | FlashInfer | 17.5% / 32.0% | 15.8% / 31.9% | 15.1% / 20.3% | | TensorRT-LLM radix CUDA | 7.7% / 16.9% | 7.8% / 16.4% | 8.3% / 17.8% | @@ -326,7 +326,7 @@ The **reachable rate** is $P(I)/P_{\mathrm{calibrated}}(I)$, expressed as a perc *Each cell shows average / peak. HPC-ops does not support the Pro configuration.* -GVR V2 leads both measures on all three models: its average reachable rate is **39.0–41.6%**, with peaks of **65.1–78.0%**. The nearest baseline varies by model. On V3.2, HPC-ops reaches **31.6% / 53.1%**, compared with V2's **41.3% / 65.1%**. On Flash, DeepSelect reaches a **64.4%** peak but averages **21.2%**, while SGLang averages **24.7%**. Reporting both measures captures the best operating point and the performance sustained across the curve. +GVR V2 leads both measures on all three models: its average reachable rate is **39.0–41.6%**, with peaks of **66.5–77.8%**. The nearest baseline varies by model. On V3.2, HPC-ops reaches **31.6% / 53.1%**, compared with V2's **41.5% / 66.5%**. On Flash, DeepSelect reaches a **64.4%** peak but averages **21.2%**, while SGLang averages **24.7%**. Reporting both measures captures the best operating point and the performance sustained across the curve. #### Interpret the Remaining Gap From 4b0f7d42c022fdbc58017b6873a5a3c8056d5faf Mon Sep 17 00:00:00 2001 From: longcheng-nv <243710427+longcheng-nv@users.noreply.github.com> Date: Thu, 17 Sep 2026 06:15:04 +0000 Subject: [PATCH 14/33] [None][doc] Explain GVR V2 threshold quality and candidate work Signed-off-by: longcheng-nv <243710427+longcheng-nv@users.noreply.github.com> --- docs/source/blogs/media/gvr_v2/README.md | 18 +- .../blogs/media/gvr_v2/candidate_work.svg | 630 ++++++++++++++++++ .../source/blogs/media/gvr_v2/plot_results.py | 117 +++- ...ampling_Exact_TopK_for_Sparse_Attention.md | 46 +- 4 files changed, 792 insertions(+), 19 deletions(-) create mode 100644 docs/source/blogs/media/gvr_v2/candidate_work.svg diff --git a/docs/source/blogs/media/gvr_v2/README.md b/docs/source/blogs/media/gvr_v2/README.md index 18e2def64c24..baee31098f78 100644 --- a/docs/source/blogs/media/gvr_v2/README.md +++ b/docs/source/blogs/media/gvr_v2/README.md @@ -19,9 +19,15 @@ With NumPy and Matplotlib installed, run from the repository root: python docs/source/blogs/media/gvr_v2/plot_results.py ``` -The script regenerates `summary.json` and eight SVGs: `speedup.svg`, `evolution.svg`, `algorithm.svg`, `sglang_map.svg`, `deepselect_map.svg`, `latency.svg`, `roofline.svg`, and `integration.svg`. It requires no GPU. The algorithm diagrams are schematic; every performance panel uses the bundled timing observations. +The script regenerates `summary.json` and nine SVGs: `speedup.svg`, `evolution.svg`, `candidate_work.svg`, `algorithm.svg`, `sglang_map.svg`, `deepselect_map.svg`, `latency.svg`, `roofline.svg`, and `integration.svg`. It requires no GPU. The algorithm diagrams are schematic; every performance panel uses the bundled timing observations. -The ninth figure, [temporal_overlap.svg](temporal_overlap.svg), is an author-supplied illustration converted directly from its standalone PDF. Its labels, axes, and plotted contents are preserved. It is not generated by `plot_results.py` or derived from the kernel-timing CSVs. +The remaining figure, [temporal_overlap.svg](temporal_overlap.svg), is an author-supplied illustration converted directly from its standalone PDF. Its labels, axes, and plotted contents are preserved. It is not generated by `plot_results.py` or derived from the kernel-timing CSVs. + +## Candidate-Work Illustration + +`candidate_work.svg` is a schematic, independent of the timing observations. For a finite-score row with K-th-largest boundary $\tau$ and $q\le\tau$, the admitted population obeys $C_p=C(q)=K+E+D(q,\tau)$. Here $E=C(\tau)-K$ counts excess boundary ties and $D$ counts entries with $q\le x_i\lt\tau$. The illustrated curve and bar use consistent relative populations: $C(q)=2.3K$, $E=0.3K$, and $D=K$; these are explanatory values, not benchmark measurements. + +The admission band requires $K\le C(q)\le B_r$. A large tie plateau can leave no threshold in this band; the exact recovery path still applies. In V2, the admitted count describes candidate handling, while only the crossing bin requires the remaining exact selection. The illustration does not imply that every execution family materializes the same buffer or that candidate count alone predicts latency. Its multi-threshold markers denote counts shared through classification, not a scalar fitted search. ## Temporal-Overlap Illustration @@ -95,7 +101,7 @@ Figure 1 intersects all supported implementations within each model: 2,079 Flash SGLang and FlashInfer lack V3.2 layers 0–2 and cover 9,515 cases in total. HPC-ops covers 6,776 Flash/V3.2 cases. GVR, radix, and DeepSelect cover all 9,746 cases. Missing coverage is never filled with estimated timings. -The latency and roofline curves use arithmetic-mean durations over matching layers at each row-length/batch point: 21 layers for Flash, 30 for Pro, and 58 for V3.2. All layers at each plotted point have the same valid width. The SGLang and DeepSelect FP32 heatmaps (Figures 5 and 6) instead geometrically average per-layer speedups at each shape, using each baseline's full paired coverage. DeepSelect therefore includes all 61 V3.2 layers; SGLang includes 58. Both maps share a 0.8–8.0 scale with parity at 1.0, and cell labels round to one decimal place. A shape average can hide individual regressions. +The latency and roofline curves use arithmetic-mean durations over matching layers at each row-length/batch point: 21 layers for Flash, 30 for Pro, and 58 for V3.2. All layers at each plotted point have the same valid width. The SGLang and DeepSelect FP32 heatmaps (Figures 6 and 7) instead geometrically average per-layer speedups at each shape, using each baseline's full paired coverage. DeepSelect therefore includes all 61 V3.2 layers; SGLang includes 58. Both maps share a 0.8–8.0 scale with parity at 1.0, and cell labels round to one decimal place. A shape average can hide individual regressions. Correctness compares selected value multisets with `torch.topk`, allowing tied indices to differ. The capture-grid checks do not establish NaN ordering parity or a universal tie order. The linked implementation PRs additionally cover padding, variable lengths, exceptional values, and graph replay. @@ -113,7 +119,7 @@ The article uses Figure 1 for the model-level comparison. The following table re *Each model column uses the workloads supported by that baseline.* -For a concrete large-batch slice, the following times are at $B=1024$ and $N\approx131{,}072$, averaged over the same layers as Figure 7: +For a concrete large-batch slice, the following times are at $B=1024$ and $N\approx131{,}072$, averaged over the same layers as Figure 8: | Model | GVR V2 | SGLang | FlashInfer | Radix CUDA | DeepSelect FP32 | HPC-ops FP32 | | :--- | ---: | ---: | ---: | ---: | ---: | ---: | @@ -128,9 +134,9 @@ The logical work is `W = B*N` abstract comparisons and the minimum traffic is `Q The full model is `min(R, BW*I)`. The theoretical parameters are `R=37.224960 Tcompare/s` and `BW=8 TB/s`; calibrated parameters are `R=37.047490 Tcompare/s` and `BW=6.912116 TB/s`. Their knees are 4.65312 and approximately 5.35979 compare/byte, above Top-K's ideal `[0.125, 0.25)` intensity range. The semantic comparison convention counts two binary comparisons per FMNMX3 result; it is not FP32 FLOPS. -Figure 8B uses linear axes at B=1024. In this article, a Pareto curve denotes each operator's plotted intensity–throughput curve at that fixed batch. Figure 7 also shows B=1, and both heatmaps cover all 11 batches. +Figure 9B uses linear axes at B=1024. In this article, a Pareto curve denotes each operator's plotted intensity–throughput curve at that fixed batch. Figure 8 also shows B=1, and both heatmaps cover all 11 batches. -Reachable rate is `100 * P / min(R, BW*I)` percent, using the calibrated roof. Compute each point from the arithmetic-mean duration across the same matched layers used in Figure 8B. The average reachable rate is the unweighted arithmetic mean of these point-level percentages, and the peak is their maximum. Flash and Pro each contribute nine intensity points; V3.2 contributes seven. The average is not weighted by row length or serving frequency. Unsupported HPC-ops Pro results remain absent. `summary.json` records the point counts and average/peak percentages under `roofline_reachable_rate`. +Reachable rate is `100 * P / min(R, BW*I)` percent, using the calibrated roof. Compute each point from the arithmetic-mean duration across the same matched layers used in Figure 9B. The average reachable rate is the unweighted arithmetic mean of these point-level percentages, and the peak is their maximum. Flash and Pro each contribute nine intensity points; V3.2 contributes seven. The average is not weighted by row length or serving frequency. Unsupported HPC-ops Pro results remain absent. `summary.json` records the point counts and average/peak percentages under `roofline_reachable_rate`. The read-dominated roof is optimistic; mixed read/write behavior and additional kernel work can lower achievable throughput. Reachable rate describes useful selection work relative to this model, not measured DRAM bandwidth utilization. diff --git a/docs/source/blogs/media/gvr_v2/candidate_work.svg b/docs/source/blogs/media/gvr_v2/candidate_work.svg new file mode 100644 index 000000000000..69f56265591f --- /dev/null +++ b/docs/source/blogs/media/gvr_v2/candidate_work.svg @@ -0,0 +1,630 @@ + + + + + + + + Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. SPDX-License-Identifier: Apache-2.0 + image/svg+xml + + + Matplotlib v3.10.8, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + T + h + r + e + s + h + o + l + d +   +   +   + + t + + + + + + + + + + + + K + + + + + + + + + + + B + r + + + + + + + + + C + a + n + d + i + d + a + t + e + s +   + ( + ) +   + · +   + l + o + g +   + s + c + a + l + e + C + t + + + + + + + + + + + + + + + + + + + + + + + + + + + Over capacity + + + Bounded Top-K + superset + + + Too few candidates + Lower the threshold + + + + + + + + + + A + c + c + e + p + t + e + d +   + q + + + + + + + + + + + + τ + : +   + b + o + u + n + d + a + r + y +   + t + i + e + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + K + + + + + Top-K output + + + + + + E + + + + + Extra ties + + + + + + D + + + + + Boundary shell + + + + + + C + C + q + K + E + D + q + τ + p + = + ( + ) + = + + + + + ( + , + ) + + + + + + + + C + q + ( + ) +   +   + +   +   + c + l + a + s + s + i + f + y +   + a + n + d +   + h + a + n + d + l + e +   + a + d + m + i + t + t + e + d +   + c + a + n + d + i + d + a + t + e + s + + + + + + + + m +   +   +   +   +   +   + +   +   + r + e + f + i + n + e +   + o + n + l + y +   + t + h + e +   + c + r + o + s + s + i + n + g +   + b + i + n +   + i + n +   + V + 2 + + + + + A dense boundary can amplify a small threshold error. + + + + A Thresholds control candidate count + + + Sampled anchors guide exact counts at many boundaries + + + ● Exact counts from shared classification + + + B Where extra candidates come from + + + + + + A + l + l +   + s + c + o + r + e + s +   + a + t +   + o + r +   + a + b + o + v + e +   +   + · +   + s + c + h + e + m + a + t + i + c +   + p + o + p + u + l + a + t + i + o + n + q + + + + + Optimize full-row passes AND candidate work + + + Fewer scans can still leave more work after admission. + + + + + + + + + + + diff --git a/docs/source/blogs/media/gvr_v2/plot_results.py b/docs/source/blogs/media/gvr_v2/plot_results.py index 4dd8b6e4e368..14a6d7dd81ae 100644 --- a/docs/source/blogs/media/gvr_v2/plot_results.py +++ b/docs/source/blogs/media/gvr_v2/plot_results.py @@ -349,6 +349,120 @@ def _evolution(rows: list[dict]) -> None: _save(fig, "evolution") +def _candidate_work() -> None: + """Illustrate tail counts and candidate amplification without measured data.""" + fig = plt.figure(figsize=(16.7, 6.4)) + ink, muted = "#17202b", "#52616f" + green, blue, orange = "#447a00", "#386781", "#b56b0b" + fig.text(0.04, 0.94, "A Thresholds control candidate count", fontsize=17, weight="bold") + fig.text( + 0.04, + 0.885, + "Sampled anchors guide exact counts at many boundaries", + fontsize=12, + color=muted, + ) + ax = fig.add_axes((0.075, 0.26, 0.425, 0.56)) + ax.set(xlim=(0, 9.5), ylim=(0.14, 17), yscale="log") + ax.axhspan(3.5, 17, color="#f6eeee", zorder=0) + ax.axhspan(1, 3.5, color="#edf5df", zorder=0) + ax.axhspan(0.14, 1, color="#fff7e9", zorder=0) + for level in (1, 3.5): + ax.axhline(level, color="#94a3b8", linewidth=1, linestyle=(0, (4, 4))) + thresholds = np.array([0, 1, 2, 2.9, 3.8, 4.8, 5.4, 6.2, 7.1, 7.8, 8.6, 9.5]) + counts = np.array([14, 10, 7.5, 5.5, 3.1, 2.3, 1.8, 1.3, 0.72, 0.42, 0.24, 0.16]) + ax.step(thresholds, counts, where="post", color=ink, linewidth=2.5, zorder=3) + boundaries = np.linspace(3.95, 7.65, 9) + populations = counts[np.searchsorted(thresholds, boundaries, side="left") - 1] + ax.scatter( + boundaries, populations, s=34, color=blue, edgecolor="white", linewidth=0.8, zorder=4 + ) + ax.text(9.15, 8.7, "Over capacity", color="#91515a", fontsize=12, ha="right") + ax.text( + 9.15, 2.55, "Bounded Top-K\nsuperset", color=green, fontsize=12, ha="right", va="center" + ) + ax.text(0.35, 0.31, "Too few candidates\nLower the threshold", color=orange, fontsize=12) + ax.vlines(5, 0.14, 2.3, color=green, linewidth=1.4, linestyles="dashed") + ax.scatter([5], [2.3], s=95, color=green, edgecolor="white", linewidth=1, zorder=5) + ax.annotate( + r"Accepted $q$", + (5, 2.3), + (4.25, 7.6), + color=green, + fontsize=12, + arrowprops={"arrowstyle": "->", "color": green, "connectionstyle": "arc3,rad=-0.2"}, + ) + ax.vlines(7.1, 0.14, 1.3, color="#bd426b", linewidth=1.2, linestyles="dashed") + ax.plot([7.1, 7.1], [0.72, 1.3], color="#bd426b", linewidth=3, zorder=5) + ax.scatter([7.1], [1.3], s=30, color="#bd426b", zorder=6) + ax.scatter([7.1], [0.72], s=30, facecolor="white", edgecolor="#bd426b", zorder=6) + ax.annotate( + r"$\tau$: boundary tie", + (7.1, 1.05), + (8.25, 1.38), + ha="center", + fontsize=10.5, + color="#9d3c5b", + arrowprops={"arrowstyle": "->", "color": "#9d3c5b"}, + ) + ax.set_yticks([1, 3.5], [r"$K$", r"$B_r$"]) + ax.minorticks_off() + ax.set_xticks([]) + ax.set_ylabel(r"Candidates $C(t)$ · log scale", fontsize=12, labelpad=12) + ax.set_xlabel(r"Threshold $t$ →", fontsize=12, labelpad=12) + ax.tick_params(axis="y", length=0, pad=9, labelsize=12) + ax.spines["left"].set_color("#cbd5e1") + ax.spines["bottom"].set_color("#cbd5e1") + fig.text(0.075, 0.155, "● Exact counts from shared classification", fontsize=11, color=blue) + + right = fig.add_axes((0.56, 0.19, 0.4, 0.66)) + right.set(xlim=(0, 10), ylim=(0, 7)) + right.axis("off") + fig.text(0.56, 0.94, "B Where extra candidates come from", fontsize=17, weight="bold") + fig.text( + 0.56, 0.885, r"All scores at or above $q$ · schematic population", fontsize=12, color=muted + ) + segments = [ + (0, 4, "#e3efcd", green, r"$K$", "Top-K output"), + (4, 1.2, "#f6dfe7", "#9d3c5b", r"$E$", "Extra ties"), + (5.2, 4, "#ffe9c9", orange, r"$D$", "Boundary shell"), + ] + for left, width, fill, color, symbol, label in segments: + right.add_patch( + Rectangle((left, 4.6), width, 1.25, facecolor=fill, edgecolor="white", linewidth=2) + ) + right.text( + left + width / 2, 5.22, symbol, fontsize=22, ha="center", va="center", color=color + ) + label_y = 3.8 if symbol == r"$E$" else 4.12 + right.text(left + width / 2, label_y, label, fontsize=11, ha="center", color=color) + right.text(4.6, 3.0, r"$C_p=C(q)=K+E+D(q,\tau)$", fontsize=20, ha="center", color=ink) + right.text( + 0, 2.04, r"$C(q)$ → classify and handle admitted candidates", fontsize=12, color=blue + ) + right.text(0, 1.20, r"$m$ → refine only the crossing bin in V2", fontsize=12, color=green) + right.text( + 0, 0.35, "A dense boundary can amplify a small threshold error.", fontsize=11, color=muted + ) + fig.text( + 0.04, + 0.055, + "Optimize full-row passes AND candidate work", + fontsize=16, + weight="bold", + color=green, + ) + fig.text( + 0.96, + 0.055, + "Fewer scans can still leave more work after admission.", + fontsize=12, + color=muted, + ha="right", + ) + _save(fig, "candidate_work") + + def _algorithm() -> None: fig, ax = plt.subplots(figsize=(14, 9)) ax.set(xlim=(0, 14), ylim=(0, 7)) @@ -921,7 +1035,7 @@ def _speedup_map(rows: list[dict], arm: str, label: str, scope: str) -> None: def main() -> None: - """Validate the frozen dataset, then regenerate statistics and eight figures.""" + """Validate the frozen dataset, then regenerate statistics and nine figures.""" plt.rcParams.update( { "font.family": "DejaVu Sans", @@ -960,6 +1074,7 @@ def main() -> None: ) _overview(rows) _evolution(rows) + _candidate_work() _algorithm() _speedup_map(rows, "sglang", "SGLang", "SGLang plan + transform") _speedup_map(rows, "deepselect", "DeepSelect FP32", "DeepSelect FP32 · unsorted indices") diff --git a/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md b/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md index de094f3cbe16..91d1b466654e 100644 --- a/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md +++ b/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md @@ -27,6 +27,7 @@ On B200, this design delivers **5.05× geometric-mean speedup over TensorRT-LLM - [From Floyd–Rivest SELECT to GPU Top-K](#from-floydrivest-select-to-gpu-top-k) - [From GVR V1 to V2: Why Move Beyond Temporal Hints?](#from-gvr-v1-to-v2-why-move-beyond-temporal-hints) - **[Self-Sampling and Multi-Thresholding](#self-sampling-and-multi-thresholding)** + - [Why Threshold Quality Matters: Passes and Candidate Work](#why-threshold-quality-matters-passes-and-candidate-work) - [Self-Sampling: Calibrate the Search to This Row](#self-sampling-calibrate-the-search-to-this-row) - [Multi-Thresholding: Make Each Full-Row Pass Count](#multi-thresholding-make-each-full-row-pass-count) - [Mapping Selection to Blackwell](#mapping-selection-to-blackwell) @@ -125,6 +126,25 @@ Temporal R0 and tiered GVR achieve **2.59× and 3.47×** speedup over radix CUDA ## Self-Sampling and Multi-Thresholding +### Why Threshold Quality Matters: Passes and Candidate Work + +A useful threshold balances **full-row passes and candidate work**. A loose threshold may save a scan yet admit so many candidates that processing them consumes the saving. Another pass is worthwhile only when the work it removes exceeds its cost. + +For a finite-score row, let $\tau$ be the exact K-th-largest score and $q\le\tau$ an admission threshold. The candidate population decomposes as + +$$ +C_p=C(q)=K+E+D(q,\tau),\qquad +\frac{C_p}{K}=1+\frac{E+D(q,\tau)}{K}. +$$ + +Here $E$ counts excess entries tied at the boundary, and $D$ counts scores in the shell $q\le x_i\lt\tau$. Dense scores near the boundary can turn a small threshold error into large **candidate amplification**. Temporal overlap alone therefore cannot predict refinement work. + +![Two panels connect thresholds to exact candidate counts and decompose the admitted population into K output entries, excess boundary ties, and a below-boundary shell. V2 distinguishes this population from its crossing-bin refinement size.](../media/gvr_v2/candidate_work.svg) + +*Figure 4. A: exact tail counts identify thresholds satisfying $K\le C(q)\le B_r$, where $B_r$ is candidate capacity; failed admission requires continued verification or exact recovery. B: extra ties and the boundary shell enlarge the candidate population. The curve and population sizes are schematic. Exact handling of ties preserves the Top-K value multiset.* + +Self-sampling aims to place admission near the current tail. Multi-thresholding then distinguishes certain winners, the crossing bin, and unnecessary lower bins. The admitted count $C(q)$ governs candidate handling; the crossing population $m$ sets the size of the remaining exact selection problem. V2 controls both, while balancing those costs against full-row reads. Figure 5 shows how these steps fit together. + ### Self-Sampling: Calibrate the Search to This Row V2 takes a small, deterministic sample across the valid row and uses its ranks to estimate the upper tail of the full population. The same rule works without knowing the model, layer, decode step, or previous winners. The sample chooses a starting region; full-row verification determines whether it contains enough candidates. @@ -147,7 +167,7 @@ The proportional ranks connect the small sample to the full-row selection target ![Self-sampling, exact multi-threshold counts, and crossing-bin refinement, with three verification outcomes: refine, lower admission, or exact recovery.](../media/gvr_v2/algorithm.svg) -*Figure 4. The sample histogram estimates a bracket; the verification histogram counts the complete admitted population. The lower panel shows how verification controls refinement and recovery. Bin heights and the 980/73/44 example are illustrative; exact recovery depends on the kernel family.* +*Figure 5. The sample histogram estimates a bracket; the verification histogram counts the complete admitted population. The lower panel shows how verification controls refinement and recovery. Bin heights and the 980/73/44 example are illustrative; exact recovery depends on the kernel family.* ### Multi-Thresholding: Make Each Full-Row Pass Count @@ -184,7 +204,7 @@ The histogram discretizes the search region, not the selected scores. Exact comp #### How Verification Preserves Exactness -**The sample focuses the bins; exact bin counts make the sample safe.** A useful bracket keeps the crossing small, while multi-threshold verification avoids a separate full-row query for every trial boundary. Figure 4 distinguishes the resulting paths: refine a complete admitted set, lower admission when too few scores survive, or recover exactly when staging or bracket checks fail. +**The sample focuses the bins; exact bin counts make the sample safe.** A useful bracket keeps the crossing small, while multi-threshold verification avoids a separate full-row query for every trial boundary. Figure 5 distinguishes the resulting paths: refine a complete admitted set, lower admission when too few scores survive, or recover exactly when staging or bracket checks fail. Two mechanisms have different jobs. The **admission ladder**—the primary threshold, lower floor, and conservative sentinel—widens the candidate region. The **verification bin boundaries** locate rank $K$ within that region. Non-split streaming can rescan at a lower threshold; split-row streaming can stage down to the lower floor within its scan. Overflow requires complete-set or whole-row exact recovery. @@ -243,11 +263,11 @@ The minimum column retains individual regressions. Figure 1 shows the model-leve The comparison changes with the model and shape. Figure 1 shows HPC-ops closest on V3.2 and a larger DeepSelect FP32 gap there. The heatmaps resolve those averages into the row-length and batch regions where each advantage appears. -Figure 5 locates the SGLang gains across the full length–batch grid. +Figure 6 locates the SGLang gains across the full length–batch grid. ![Three heatmaps of GVR V2 speedup over SGLang for every captured row-length bucket and all eleven batch sizes, averaged geometrically across layers.](../media/gvr_v2/sglang_map.svg) -*Figure 5. SGLang plan + transform time divided by GVR V2 time, geometrically averaged across layers at each shape. A value of 1.0 means equal performance. Figures 5 and 6 share the same color scale; row lengths are rounded in the axis labels.* +*Figure 6. SGLang plan + transform time divided by GVR V2 time, geometrically averaged across layers at each shape. A value of 1.0 means equal performance. Figures 6 and 7 share the same color scale; row lengths are rounded in the axis labels.* Long rows at intermediate batch sizes show particularly strong gains: **V4 Pro reaches 4.69× at $N=262{,}127$, $B=64$**. This is the strongest shape-average result in the grid; most regions are around 1.3–2.0×. @@ -255,7 +275,7 @@ DeepSelect FP32 shows a different pattern: V2's strongest gains move toward long ![Three heatmaps of GVR V2 speedup over DeepSelect FP32 across row lengths and all eleven batch sizes, using the same color scale as the SGLang comparison.](../media/gvr_v2/deepselect_map.svg) -*Figure 6. DeepSelect FP32 time divided by GVR V2 time, geometrically averaged across layers at each shape. The layout and color scale match Figure 5: values above 1.0 favor V2, and darker teal indicates a larger gain. Cell labels round to one decimal place.* +*Figure 7. DeepSelect FP32 time divided by GVR V2 time, geometrically averaged across layers at each shape. The layout and color scale match Figure 6: values above 1.0 favor V2, and darker teal indicates a larger gain. Cell labels round to one decimal place.* For **V3.2, the gain reaches 7.58× around 128K scores at batch size 1** and stays above 6× at that row length through batch size 8. Flash and Pro also show broad gains, with peaks of **4.26×** and **4.40×**. The narrowest margin appears for the longest Flash rows at batch size 128, where the shape average is approximately parity (0.993×). @@ -277,7 +297,7 @@ These patterns identify useful operating regions. The native API contracts below ![Cold kernel latency for all six implementations versus valid row length, with separate panels for three models and batch sizes 1 and 1024.](../media/gvr_v2/latency.svg) -*Figure 7. Mean cold kernel time across matching layers. Each row is a model; the columns contrast batch sizes 1 and 1,024. The solid line shows GVR V2; dashed lines show baselines measured in separate runs. Both axes are logarithmic; 1K means 1,024.* +*Figure 8. Mean cold kernel time across matching layers. Each row is a model; the columns contrast batch sizes 1 and 1,024. The solid line shows GVR V2; dashed lines show baselines measured in separate runs. Both axes are logarithmic; 1K means 1,024.* At $B=1$, keeping a short row in registers and exposing parallelism within a longer row matter more than saturating HBM. At $B=1024$, streaming throughput becomes more visible. The different shapes of these curves are why a single average cannot identify every useful operating region. @@ -303,17 +323,17 @@ P_{\mathrm{theory}}(I)=\min(37.225,8I),\qquad P_{\mathrm{calibrated}}(I)=\min(37.047,6.912I). $$ -The calibrated limits are **6.912 TB/s** sustained read bandwidth and **37.047 Tcompare/s** semantic comparison throughput. They meet at **5.36 compare/byte**, more than 21 times the maximum ideal Top-K intensity. The entire workload band sits on the bandwidth slope in Figure 8A. +The calibrated limits are **6.912 TB/s** sustained read bandwidth and **37.047 Tcompare/s** semantic comparison throughput. They meet at **5.36 compare/byte**, more than 21 times the maximum ideal Top-K intensity. The entire workload band sits on the bandwidth slope in Figure 9A. ![A clean two-level roofline: the full B200 hardware model highlights Top-K's narrow bandwidth-limited band; three linear-scale Pareto curve panels compare GVR V2 and five baselines at batch 1024, with GVR V2 highlighted in green.](../media/gvr_v2/roofline.svg) -*Figure 8.* A: the full theoretical and calibrated roofs. B: Pareto curves in the Top-K band at $B=1024$, plotting useful throughput $P=BN/t$ against intensity $I=N/[4(N+K)]$ on linear axes. Green highlights V2; the dotted line is the calibrated bandwidth roof. All kernels share the same minimum-traffic model $Q_{\min}$, while extra reads and output work remain in measured time. +*Figure 9.* A: the full theoretical and calibrated roofs. B: Pareto curves in the Top-K band at $B=1024$, plotting useful throughput $P=BN/t$ against intensity $I=N/[4(N+K)]$ on linear axes. Green highlights V2; the dotted line is the calibrated bandwidth roof. All kernels share the same minimum-traffic model $Q_{\min}$, while extra reads and output work remain in measured time. #### Compare Pareto Curves and Reachable Rates -Each operator's **Pareto curve** in Figure 8B traces useful throughput across intensities at $B=1024$. At fixed $N$ and $K$, every implementation has the same horizontal position; a faster kernel moves **upward**, toward the calibrated roof. Figure 7 retains the contrasting single-row view, and Figures 5 and 6 cover all 11 batch sizes. +Each operator's **Pareto curve** in Figure 9B traces useful throughput across intensities at $B=1024$. At fixed $N$ and $K$, every implementation has the same horizontal position; a faster kernel moves **upward**, toward the calibrated roof. Figure 8 retains the contrasting single-row view, and Figures 6 and 7 cover all 11 batch sizes. -The **reachable rate** is $P(I)/P_{\mathrm{calibrated}}(I)$, expressed as a percentage. The table compares **average / peak reachable rate** along each Pareto curve. The average weights the plotted intensity points equally; the peak is their maximum. Both use the same layer-averaged timings as Figure 8B. +The **reachable rate** is $P(I)/P_{\mathrm{calibrated}}(I)$, expressed as a percentage. The table compares **average / peak reachable rate** along each Pareto curve. The average weights the plotted intensity points equally; the peak is their maximum. Both use the same layer-averaged timings as Figure 9B. | Operator | V4 Flash | V4 Pro | V3.2 | | :--- | ---: | ---: | ---: | @@ -330,7 +350,9 @@ GVR V2 leads both measures on all three models: its average reachable rate is ** #### Interpret the Remaining Gap -The full ideal bound is $T_{\mathrm{roof}}=\max(Q_{\min}/\mathrm{BW},W/R_{\mathrm{compare}})$. Within the Top-K band, traffic dominates. Sampling, histogram updates, candidate staging, exact refinement, and synchronization account for work beyond the ideal minimum. The read-dominated roof is optimistic, especially when $K/N$ is large; the plotted throughput describes useful selection work rather than measured DRAM traffic. +The full ideal bound is $T_{\mathrm{roof}}=\max(Q_{\min}/\mathrm{BW},W/R_{\mathrm{compare}})$. Within the Top-K band, traffic dominates. Sampling, histogram updates, candidate staging, exact refinement, and synchronization account for work beyond the ideal minimum. + +The pass/candidate tradeoff in Figure 4 explains two sources of this gap: another full-row scan adds traffic, while a loose admission threshold adds candidate work even when the scan count stays fixed. V2 uses exact bin populations to restrict the remaining selection to the crossing bin. These costs increase measured time; under the shared minimum-traffic model, they move useful throughput downward at the same intensity. The read-dominated roof is optimistic, especially when $K/N$ is large; the plotted throughput describes useful selection work rather than measured DRAM traffic. ## TensorRT-LLM Integration and Takeaways @@ -346,7 +368,7 @@ TensorRT-LLM separates phase-specific row metadata from shared selection logic. ![Integration diagram: a shared TopK dispatcher feeds decode and prefill row adapters, which reuse GvrMainKernel's streaming selection pipeline; decode also retains register and cluster routes.](../media/gvr_v2/integration.svg) -*Figure 9. Current-row calibration lets both phases enter the same selection core without a temporal-prior lifecycle. The decode arrow shows its streaming route; register and cluster routes remain available under the same output contract. Prefill specializes the streaming implementation at compile time.* +*Figure 10. Current-row calibration lets both phases enter the same selection core without a temporal-prior lifecycle. The decode arrow shows its streaming route; register and cluster routes remain available under the same output contract. Prefill specializes the streaming implementation at compile time.* The adapters preserve each phase's indexing semantics. Decode derives valid prefixes from device KV lengths, multi-token prediction offsets, and compression. Prefill receives `[start, end)` in compressed columns and returns indices relative to `start`. Both write INT32 indices into caller-owned output, with identity indices and `-1` padding for short rows. From 452ce690a9e9c59bf4faa7eb4b1181e846b26a26 Mon Sep 17 00:00:00 2001 From: longcheng-nv <243710427+longcheng-nv@users.noreply.github.com> Date: Thu, 17 Sep 2026 06:21:14 +0000 Subject: [PATCH 15/33] [None][doc] Keep candidate figure math outside caption emphasis Signed-off-by: longcheng-nv <243710427+longcheng-nv@users.noreply.github.com> --- ...og29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md b/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md index 91d1b466654e..7a2d5a560cea 100644 --- a/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md +++ b/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md @@ -141,7 +141,7 @@ Here $E$ counts excess entries tied at the boundary, and $D$ counts scores in th ![Two panels connect thresholds to exact candidate counts and decompose the admitted population into K output entries, excess boundary ties, and a below-boundary shell. V2 distinguishes this population from its crossing-bin refinement size.](../media/gvr_v2/candidate_work.svg) -*Figure 4. A: exact tail counts identify thresholds satisfying $K\le C(q)\le B_r$, where $B_r$ is candidate capacity; failed admission requires continued verification or exact recovery. B: extra ties and the boundary shell enlarge the candidate population. The curve and population sizes are schematic. Exact handling of ties preserves the Top-K value multiset.* +*Figure 4.* A: exact tail counts identify thresholds satisfying $K\le C(q)\le B_r$, where $B_r$ is candidate capacity; failed admission requires continued verification or exact recovery. B: extra ties and the boundary shell enlarge the candidate population. The curve and population sizes are schematic. Exact handling of ties preserves the Top-K value multiset. Self-sampling aims to place admission near the current tail. Multi-thresholding then distinguishes certain winners, the crossing bin, and unnecessary lower bins. The admitted count $C(q)$ governs candidate handling; the crossing population $m$ sets the size of the remaining exact selection problem. V2 controls both, while balancing those costs against full-row reads. Figure 5 shows how these steps fit together. From 9a72d531496b0a85e22d8fd7793288b1c2756823 Mon Sep 17 00:00:00 2001 From: longcheng-nv <243710427+longcheng-nv@users.noreply.github.com> Date: Thu, 17 Sep 2026 06:52:50 +0000 Subject: [PATCH 16/33] [None][doc] Detail GPU self-sampling windows and calibration Signed-off-by: longcheng-nv <243710427+longcheng-nv@users.noreply.github.com> --- docs/source/blogs/media/gvr_v2/README.md | 24 +- .../blogs/media/gvr_v2/gpu_sampling.svg | 469 ++++++++++++++++++ .../source/blogs/media/gvr_v2/plot_results.py | 100 +++- ...ampling_Exact_TopK_for_Sparse_Attention.md | 67 ++- 4 files changed, 634 insertions(+), 26 deletions(-) create mode 100644 docs/source/blogs/media/gvr_v2/gpu_sampling.svg diff --git a/docs/source/blogs/media/gvr_v2/README.md b/docs/source/blogs/media/gvr_v2/README.md index baee31098f78..c6b42ef642b9 100644 --- a/docs/source/blogs/media/gvr_v2/README.md +++ b/docs/source/blogs/media/gvr_v2/README.md @@ -19,10 +19,24 @@ With NumPy and Matplotlib installed, run from the repository root: python docs/source/blogs/media/gvr_v2/plot_results.py ``` -The script regenerates `summary.json` and nine SVGs: `speedup.svg`, `evolution.svg`, `candidate_work.svg`, `algorithm.svg`, `sglang_map.svg`, `deepselect_map.svg`, `latency.svg`, `roofline.svg`, and `integration.svg`. It requires no GPU. The algorithm diagrams are schematic; every performance panel uses the bundled timing observations. +The script regenerates `summary.json` and ten SVGs: `speedup.svg`, `evolution.svg`, `candidate_work.svg`, `algorithm.svg`, `gpu_sampling.svg`, `sglang_map.svg`, `deepselect_map.svg`, `latency.svg`, `roofline.svg`, and `integration.svg`. It requires no GPU. The algorithm diagrams are schematic; every performance panel uses the bundled timing observations. The remaining figure, [temporal_overlap.svg](temporal_overlap.svg), is an author-supplied illustration converted directly from its standalone PDF. Its labels, axes, and plotted contents are preserved. It is not generated by `plot_results.py` or derived from the kernel-timing CSVs. +## GPU Self-Sampling Implementation + +`gpu_sampling.svg` illustrates the public device implementation at [the measured PR #19076 revision](https://github.com/NVIDIA/TensorRT-LLM/blob/be1b9885e8df9bf070e8cb68459e24a7119afaa9/tensorrt_llm/_torch/cute_dsl_kernels/blackwell/top_k/gvr_topk_decode_self_sampling.py). It is schematic and adds no measured performance claim. + +The sampled `main` path uses two adjacent `float4` loads per logical work item. Clustered streaming uses four vectors per location, divided between work items `j` and `j + SMP`; these need not be adjacent lanes or distinct physical threads when the logical sample exceeds the CTA size. In both families, physical threads stride through additional work items. The initial two vectors remain available for the sample histogram; extra work items are reloaded after sample extrema establish the bin scale. Eight retained sample scores are not the kernel's total register count. + +The [CUDA Best Practices Guide](https://docs.nvidia.com/cuda/cuda-c-best-practices-guide/index.html#coalesced-access-to-global-memory) documents 32-byte access granularity and the cost of sparse or misaligned accesses. A 32-byte-aligned eight-score window occupies one sector and a similarly aligned sixteen-score window occupies two. The supported API guarantees vector alignment, not universal 32/64-byte row alignment; a window offset by 16 bytes touches two or three sectors respectively. Cache reuse, warp issue patterns, and replay can further affect traffic. A 64-byte window is a software grouping, not a claim about cache-line size or a single memory instruction. + +The locality/coverage and register-lifetime explanation is an engineering interpretation of this implementation, not a measured 8-versus-16 ablation or evidence that either width is universally optimal. At fixed total sample count, the larger window has fewer distinct locations. Correlated values within a window do not supply independent random observations. + +The runtime geometry starts with a route-dependent budget proportional to `N / aim`, clamps the requested score count, then derives the integer window stride and count. Targets use the actual `SMP*8` or `SMP*16` population after rounding. The 256-score budget floor and 256 histogram bins are separate tuning parameters. The first warp derives variable-length `main` geometry while the others can prefetch the next row slice. Cluster ranks repeat an identical sample; the sample histograms are CTA-local, whereas subsequent verification histograms may be merged across the cluster. + +`scan_cross0` scans eight sample counters per lane with vector shared-memory loads and warp shuffles, extracts up to three rank crossings, and clears the counters. Sample bin lower edges define the admission anchors. `HIC` includes extrapolation and minimum-bin-width headroom, with a clustered heavy-tail cap; it does not discard values above the classification bound. Non-sampled short-row and register routes retain their separate initialization policies. Exact verification and recovery cover sample errors and degenerate brackets. + ## Candidate-Work Illustration `candidate_work.svg` is a schematic, independent of the timing observations. For a finite-score row with K-th-largest boundary $\tau$ and $q\le\tau$, the admitted population obeys $C_p=C(q)=K+E+D(q,\tau)$. Here $E=C(\tau)-K$ counts excess boundary ties and $D$ counts entries with $q\le x_i\lt\tau$. The illustrated curve and bar use consistent relative populations: $C(q)=2.3K$, $E=0.3K$, and $D=K$; these are explanatory values, not benchmark measurements. @@ -101,7 +115,7 @@ Figure 1 intersects all supported implementations within each model: 2,079 Flash SGLang and FlashInfer lack V3.2 layers 0–2 and cover 9,515 cases in total. HPC-ops covers 6,776 Flash/V3.2 cases. GVR, radix, and DeepSelect cover all 9,746 cases. Missing coverage is never filled with estimated timings. -The latency and roofline curves use arithmetic-mean durations over matching layers at each row-length/batch point: 21 layers for Flash, 30 for Pro, and 58 for V3.2. All layers at each plotted point have the same valid width. The SGLang and DeepSelect FP32 heatmaps (Figures 6 and 7) instead geometrically average per-layer speedups at each shape, using each baseline's full paired coverage. DeepSelect therefore includes all 61 V3.2 layers; SGLang includes 58. Both maps share a 0.8–8.0 scale with parity at 1.0, and cell labels round to one decimal place. A shape average can hide individual regressions. +The latency and roofline curves use arithmetic-mean durations over matching layers at each row-length/batch point: 21 layers for Flash, 30 for Pro, and 58 for V3.2. All layers at each plotted point have the same valid width. The SGLang and DeepSelect FP32 heatmaps (Figures 7 and 8) instead geometrically average per-layer speedups at each shape, using each baseline's full paired coverage. DeepSelect therefore includes all 61 V3.2 layers; SGLang includes 58. Both maps share a 0.8–8.0 scale with parity at 1.0, and cell labels round to one decimal place. A shape average can hide individual regressions. Correctness compares selected value multisets with `torch.topk`, allowing tied indices to differ. The capture-grid checks do not establish NaN ordering parity or a universal tie order. The linked implementation PRs additionally cover padding, variable lengths, exceptional values, and graph replay. @@ -119,7 +133,7 @@ The article uses Figure 1 for the model-level comparison. The following table re *Each model column uses the workloads supported by that baseline.* -For a concrete large-batch slice, the following times are at $B=1024$ and $N\approx131{,}072$, averaged over the same layers as Figure 8: +For a concrete large-batch slice, the following times are at $B=1024$ and $N\approx131{,}072$, averaged over the same layers as Figure 9: | Model | GVR V2 | SGLang | FlashInfer | Radix CUDA | DeepSelect FP32 | HPC-ops FP32 | | :--- | ---: | ---: | ---: | ---: | ---: | ---: | @@ -134,9 +148,9 @@ The logical work is `W = B*N` abstract comparisons and the minimum traffic is `Q The full model is `min(R, BW*I)`. The theoretical parameters are `R=37.224960 Tcompare/s` and `BW=8 TB/s`; calibrated parameters are `R=37.047490 Tcompare/s` and `BW=6.912116 TB/s`. Their knees are 4.65312 and approximately 5.35979 compare/byte, above Top-K's ideal `[0.125, 0.25)` intensity range. The semantic comparison convention counts two binary comparisons per FMNMX3 result; it is not FP32 FLOPS. -Figure 9B uses linear axes at B=1024. In this article, a Pareto curve denotes each operator's plotted intensity–throughput curve at that fixed batch. Figure 8 also shows B=1, and both heatmaps cover all 11 batches. +Figure 10B uses linear axes at B=1024. In this article, a Pareto curve denotes each operator's plotted intensity–throughput curve at that fixed batch. Figure 9 also shows B=1, and both heatmaps cover all 11 batches. -Reachable rate is `100 * P / min(R, BW*I)` percent, using the calibrated roof. Compute each point from the arithmetic-mean duration across the same matched layers used in Figure 9B. The average reachable rate is the unweighted arithmetic mean of these point-level percentages, and the peak is their maximum. Flash and Pro each contribute nine intensity points; V3.2 contributes seven. The average is not weighted by row length or serving frequency. Unsupported HPC-ops Pro results remain absent. `summary.json` records the point counts and average/peak percentages under `roofline_reachable_rate`. +Reachable rate is `100 * P / min(R, BW*I)` percent, using the calibrated roof. Compute each point from the arithmetic-mean duration across the same matched layers used in Figure 10B. The average reachable rate is the unweighted arithmetic mean of these point-level percentages, and the peak is their maximum. Flash and Pro each contribute nine intensity points; V3.2 contributes seven. The average is not weighted by row length or serving frequency. Unsupported HPC-ops Pro results remain absent. `summary.json` records the point counts and average/peak percentages under `roofline_reachable_rate`. The read-dominated roof is optimistic; mixed read/write behavior and additional kernel work can lower achievable throughput. Reachable rate describes useful selection work relative to this model, not measured DRAM bandwidth utilization. diff --git a/docs/source/blogs/media/gvr_v2/gpu_sampling.svg b/docs/source/blogs/media/gvr_v2/gpu_sampling.svg new file mode 100644 index 000000000000..878e72799d96 --- /dev/null +++ b/docs/source/blogs/media/gvr_v2/gpu_sampling.svg @@ -0,0 +1,469 @@ + + + + + + + + Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. SPDX-License-Identifier: Apache-2.0 + image/svg+xml + + + Matplotlib v3.10.8, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Spread short sample windows across the current row + + + Window 0 + + + Window 1 + + + Window 2 + + + + + + Window starts use a regular stride; no previous-index lookup or random-number generation. + + + MAIN · 8 scores / 32 bytes + + + float4 · 16 B + + + float4 · 16 B + + + Work item j + + + Two vector loads per work item; eight retained sample scores. + + + CLUS · 16 scores / 64 bytes + + + float4 · 16 B + + + float4 · 16 B + + + float4 · 16 B + + + float4 · 16 B + + + Work item j + + + Work item j + P + + + Two vector loads per work item; eight retained sample scores. + + + 1 REGISTER VALUES + Warp min/max reductions + + + + + + + 2 SHARED HISTOGRAM + 256 bins · atomic increments + + + + + + + 3 WARP-0 SCAN + Rank crossings → anchors + + + P = number of sample windows. CTA threads process work items in strides; a window is not a CUDA block. + + + + + + + + + diff --git a/docs/source/blogs/media/gvr_v2/plot_results.py b/docs/source/blogs/media/gvr_v2/plot_results.py index 14a6d7dd81ae..0bac133d4f1d 100644 --- a/docs/source/blogs/media/gvr_v2/plot_results.py +++ b/docs/source/blogs/media/gvr_v2/plot_results.py @@ -568,6 +568,103 @@ def _algorithm() -> None: _save(fig, "algorithm") +def _gpu_sampling() -> None: + """Show sample-window ownership and the on-chip calibration pipeline.""" + fig, ax = plt.subplots(figsize=(16.7, 7.0)) + fig.subplots_adjust(left=0.025, right=0.985, bottom=0.03, top=0.97) + ax.set(xlim=(0, 16), ylim=(0, 7)) + ax.axis("off") + ink, muted = "#17202b", "#52616f" + blue, purple = "#386781", "#7557a6" + ax.text( + 0.1, 6.68, "Spread short sample windows across the current row", fontsize=21, weight="bold" + ) + windows = (0.7, 5.5, 10.3) + for j, x in enumerate(windows): + ax.add_patch(Rectangle((x, 5.65), 2.4, 0.4, facecolor="#e3efcd", edgecolor="#a7c976")) + ax.text( + x + 1.2, 5.85, f"Window {j}", ha="center", va="center", fontsize=15, color="#447a00" + ) + if j < 2: + ax.plot([x + 2.55, x + 4.65], [5.85, 5.85], color="#b6c0c9", linestyle=(0, (2, 3))) + ax.text(13.05, 5.83, "…", fontsize=22, color=muted) + ax.text( + 0.7, + 5.2, + "Window starts use a regular stride; no previous-index lookup or random-number generation.", + fontsize=15, + color=muted, + ) + + panels = [ + (0.7, "MAIN · 8 scores / 32 bytes", 8, 0.56), + (8.3, "CLUS · 16 scores / 64 bytes", 16, 0.38), + ] + for x, heading, scores, width in panels: + ax.text(x, 4.57, heading, fontsize=19, weight="bold", color=ink) + for i in range(scores): + fill = "#dcebf3" if i < 8 else "#e9dff4" + ax.add_patch( + Rectangle( + (x + i * width, 3.38), + width, + 0.56, + facecolor=fill, + edgecolor="white", + linewidth=1, + ) + ) + for vector in range(scores // 4): + left = x + vector * 4 * width + ax.add_patch( + Rectangle( + (left, 3.38), 4 * width, 0.56, fill=False, edgecolor="#8e9ba7", linewidth=1 + ) + ) + ax.text(left + 2 * width, 4.1, "float4 · 16 B", ha="center", fontsize=13, color=muted) + for worker in range(scores // 8): + start = x + worker * 8 * width + color = blue if worker == 0 else purple + ax.plot( + [start, start, start + 8 * width, start + 8 * width], + [3.21, 3.08, 3.08, 3.21], + color=color, + linewidth=1.2, + ) + label = "Work item j" if worker == 0 else "Work item j + P" + ax.text(start + 4 * width, 2.78, label, fontsize=15, ha="center", color=color) + ax.text( + x, + 2.3, + "Two vector loads per work item; eight retained sample scores.", + fontsize=14, + color=muted, + ) + + stages = [ + (0.2, "1 REGISTER VALUES", "Warp min/max reductions"), + (5.6, "2 SHARED HISTOGRAM", "256 bins · atomic increments"), + (11.0, "3 WARP-0 SCAN", "Rank crossings → anchors"), + ] + for x, heading, description in stages: + _box(ax, (x, 0.63), (4.75, 1.05), heading + "\n" + description, "#f1f5f8", 15) + if x < 11: + ax.annotate( + "", + (x + 5.25, 1.15), + (x + 4.85, 1.15), + arrowprops={"arrowstyle": "->", "color": muted, "lw": 1.5}, + ) + ax.text( + 0.2, + 0.11, + "P = number of sample windows. CTA threads process work items in strides; a window is not a CUDA block.", + fontsize=13, + color=muted, + ) + _save(fig, "gpu_sampling") + + def _integration() -> None: fig, ax = plt.subplots(figsize=(14, 8.4)) ax.set(xlim=(0, 14), ylim=(0, 9)) @@ -1035,7 +1132,7 @@ def _speedup_map(rows: list[dict], arm: str, label: str, scope: str) -> None: def main() -> None: - """Validate the frozen dataset, then regenerate statistics and nine figures.""" + """Validate the frozen dataset, then regenerate statistics and ten figures.""" plt.rcParams.update( { "font.family": "DejaVu Sans", @@ -1076,6 +1173,7 @@ def main() -> None: _evolution(rows) _candidate_work() _algorithm() + _gpu_sampling() _speedup_map(rows, "sglang", "SGLang", "SGLang plan + transform") _speedup_map(rows, "deepselect", "DeepSelect FP32", "DeepSelect FP32 · unsorted indices") _latency(rows) diff --git a/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md b/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md index 7a2d5a560cea..3339af8ad2e9 100644 --- a/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md +++ b/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md @@ -147,27 +147,54 @@ Self-sampling aims to place admission near the current tail. Multi-thresholding ### Self-Sampling: Calibrate the Search to This Row -V2 takes a small, deterministic sample across the valid row and uses its ranks to estimate the upper tail of the full population. The same rule works without knowing the model, layer, decode step, or previous winners. The sample chooses a starting region; full-row verification determines whether it contains enough candidates. +V2 calibrates inside the selection kernel, using the current row's layout to generate sample addresses. It needs neither previous winners nor a separate sampling kernel. The sample estimates a useful starting region; full-row verification determines whether that region contains enough candidates. -In the `main` family, a sample unit is two adjacent `float4` vectors: eight scores loaded together. The clustered streaming family uses four vectors, or sixteen scores. Sample units are regularly spaced across the valid interval. Their addresses follow from the row layout, so sampling does not wait for previous-step indices. Regular spacing is not a guarantee of statistical unbiasedness: it can still miss an unusual tail. Its role is to reduce work, not to decide output membership. +![Self-sampling, exact multi-threshold counts, and crossing-bin refinement, with three verification outcomes: refine, lower admission, or exact recovery.](../media/gvr_v2/algorithm.svg) + +*Figure 5. The sample histogram estimates a bracket; the verification histogram counts the complete admitted population. The lower panel shows how verification controls refinement and recovery. Bin heights and the 980/73/44 example are illustrative; exact recovery depends on the kernel family.* + +#### Load Short Windows, Spread Them Across the Row + +A **sample window** is a contiguous group of scores. A CUDA thread block processes many such windows. The streaming families use these layouts: + +| Family | Scores per window | Loads and logical ownership | +| :--- | :--- | :--- | +| `main` | 8 FP32 scores = 32 bytes | Work item `j` loads two adjacent `float4` vectors | +| `clus` | 16 FP32 scores = 64 bytes | Work items `j` and `j + P` each load two vectors, covering the lower and upper halves; `P` is the number of windows | + +For stride `d` in window units, window `j` begins at score offset `8*j*d` or `16*j*d` from the aligned sampling base. Threads process logical work items in CTA-sized strides when the sample exceeds the block's thread count. The stride and window count come from the valid row extent and sampling budget, with guards keeping every vector load inside the permitted interval. Prefill substitutes a valid score for leading alignment lanes before histogramming. + +**Why eight?** Eight FP32 scores fill a 32-byte memory sector when the window is sector-aligned. A scattered scalar sample can use only four bytes from each fetched sector. Two adjacent, 16-byte-aligned `float4` loads consume the whole window, giving more sample values per touched sector. The implementation issues explicit `ld.global.nc.v4.f32` loads. This is local packing within each window; widely spaced windows still produce strided accesses across the warp. The [CUDA memory-access model](https://docs.nvidia.com/cuda/cuda-c-best-practices-guide/index.html#coalesced-access-to-global-memory) explains the sector granularity. Actual sector traffic also depends on the row's alignment and cache state. -Let $S$ be the sample size and $A\ge K$ the desired full-row candidate population. A **256-bin sample histogram** approximates the score distribution. Descending sample ranks +**Why sixteen in `clus`?** It groups two neighboring 32-byte pieces into one sampled location, divided between two work items. Each retains the same eight-score payload as `main`, avoiding a sixteen-score live payload in one worker. The engineering tradeoff is locality versus coverage: at a fixed sample budget, sixteen-score windows visit half as many locations as eight-score windows. Both aligned layouts can fully use their sectors; the clustered grouping favors wider local coverage at each visited location without doubling the per-worker sample payload. These are implementation tradeoffs, not a statistical guarantee or a universal optimum; a 64-byte window comprises four vector loads. + +![GPU sampling layout: regularly spaced windows, two float4 loads for a main work item, and four float4 loads split across two clustered work items, followed by register reduction, a shared histogram, and a warp-zero scan.](../media/gvr_v2/gpu_sampling.svg) + +*Figure 6. Each outlined memory box holds four FP32 scores. The 8/16-score grouping describes data layout, while CTA threads execute the work items. Register values feed a shared sample histogram; its rank crossings produce calibration anchors. The lower floor is computed where enabled.* + +#### Reduce, Histogram, and Extract the Anchors On Chip + +Each sampling worker keeps its first two vectors in registers. Local minima and maxima reduce within each warp; warp results are published through shared memory and combined after a CTA barrier. These extrema define **256 sample bins**. Workers then increment shared-memory counters for their sample values. Additional windows beyond the initially retained pair are reloaded for histogramming, limiting live register state. + +After another barrier, warp 0 scans the histogram: each lane handles eight counters, and shuffle operations combine their populations. The same scan finds the required rank crossings and clears the counters for the next phase. This avoids sorting the sample or running a separate search for every anchor. + +Let $S$ be the actual sample size and $A\ge K$ the desired full-row candidate population. The launch policy starts with a sample budget proportional to $N/A$, clamps its target between 256 scores and half the row, and rounds to legal windows. It computes target ranks from the resulting $S$, rather than the unrounded budget: $$ -r_A\approx\frac{AS}{N},\qquad r_K\approx\frac{KS}{N},\qquad r_{2A}\approx\frac{2AS}{N} +r_A\approx\frac{AS}{N},\qquad r_K\approx\frac{KS}{N},\qquad r_{2A}\approx\frac{2AS}{N}. $$ -provide three anchors: +The budget therefore targets a usable number of observations in the relevant tail, rather than a fixed sampling percentage. Descending histogram crossings supply: -- **Primary threshold $T$:** aim for roughly $A$ survivors, leaving room around the desired $K$ winners. -- **Upper anchor $T_K$:** estimate the neighborhood of rank $K$; together with $T$, it defines the upper classification bound $H$ (`HIC` in the implementation). -- **Lower floor $T_{\mathrm{floor}}$:** admit a larger population if the first estimate is too aggressive (`TSH` in the implementation). +- **Primary threshold $T$:** the lower edge of the sample bin at rank $r_A$, aiming for roughly $A$ full-row survivors. +- **Upper anchor $T_K$:** the bin edge near rank $r_K$. In `main`, the classification bound `HIC` extends four times the nonnegative distance from $T$ to $T_K$, with at least eight sample-bin widths of headroom. The clustered route also caps this extrapolation using the lower quantile to limit heavy-tail expansion. +- **Lower floor $T_{\mathrm{floor}}$:** the bin edge near rank $r_{2A}$, where enabled, admitting a larger population after an aggressive estimate (`TSH`). -The proportional ranks connect the small sample to the full-row selection target. Unlike SELECT's recursively selected sample pivots, V2 estimates these anchors from histogram bins and budgets them around candidate capacity. Sample sizes, safety margins, and capacity clamps depend on the launch family. The estimate requires neither independent random samples nor a known analytical distribution; exact verification handles a poor estimate. +The sample histogram estimates these anchors without assuming a known score distribution. Regularly spaced windows can still miss an unusual tail or correlate with structured scores. Degenerate samples use conservative recovery paths; exact full-row accounting remains the authority. -![Self-sampling, exact multi-threshold counts, and crossing-bin refinement, with three verification outcomes: refine, lower admission, or exact recovery.](../media/gvr_v2/algorithm.svg) +#### Overlap Calibration with the Upcoming Row Read -*Figure 5. The sample histogram estimates a bracket; the verification histogram counts the complete admitted population. The lower panel shows how verification controls refinement and recovery. Bin heights and the 980/73/44 example are illustrative; exact recovery depends on the kernel family.* +In the variable-length `main` route, warp 0 computes sampling geometry and publishes it through shared memory while the other warps issue L2 prefetch hints for their upcoming row slice. Later prefetches are placed after the sample-reduction barrier to limit overlapping register lifetimes. Clustered streaming deliberately repeats the same full-row sample in each CTA, so all ranks derive the same classification bracket before merging their verification histograms. These choices balance calibration latency, register pressure, and communication with the cost of the full-row pass. ### Multi-Thresholding: Make Each Full-Row Pass Count @@ -263,11 +290,11 @@ The minimum column retains individual regressions. Figure 1 shows the model-leve The comparison changes with the model and shape. Figure 1 shows HPC-ops closest on V3.2 and a larger DeepSelect FP32 gap there. The heatmaps resolve those averages into the row-length and batch regions where each advantage appears. -Figure 6 locates the SGLang gains across the full length–batch grid. +Figure 7 locates the SGLang gains across the full length–batch grid. ![Three heatmaps of GVR V2 speedup over SGLang for every captured row-length bucket and all eleven batch sizes, averaged geometrically across layers.](../media/gvr_v2/sglang_map.svg) -*Figure 6. SGLang plan + transform time divided by GVR V2 time, geometrically averaged across layers at each shape. A value of 1.0 means equal performance. Figures 6 and 7 share the same color scale; row lengths are rounded in the axis labels.* +*Figure 7. SGLang plan + transform time divided by GVR V2 time, geometrically averaged across layers at each shape. A value of 1.0 means equal performance. Figures 7 and 8 share the same color scale; row lengths are rounded in the axis labels.* Long rows at intermediate batch sizes show particularly strong gains: **V4 Pro reaches 4.69× at $N=262{,}127$, $B=64$**. This is the strongest shape-average result in the grid; most regions are around 1.3–2.0×. @@ -275,7 +302,7 @@ DeepSelect FP32 shows a different pattern: V2's strongest gains move toward long ![Three heatmaps of GVR V2 speedup over DeepSelect FP32 across row lengths and all eleven batch sizes, using the same color scale as the SGLang comparison.](../media/gvr_v2/deepselect_map.svg) -*Figure 7. DeepSelect FP32 time divided by GVR V2 time, geometrically averaged across layers at each shape. The layout and color scale match Figure 6: values above 1.0 favor V2, and darker teal indicates a larger gain. Cell labels round to one decimal place.* +*Figure 8. DeepSelect FP32 time divided by GVR V2 time, geometrically averaged across layers at each shape. The layout and color scale match Figure 7: values above 1.0 favor V2, and darker teal indicates a larger gain. Cell labels round to one decimal place.* For **V3.2, the gain reaches 7.58× around 128K scores at batch size 1** and stays above 6× at that row length through batch size 8. Flash and Pro also show broad gains, with peaks of **4.26×** and **4.40×**. The narrowest margin appears for the longest Flash rows at batch size 128, where the shape average is approximately parity (0.993×). @@ -297,7 +324,7 @@ These patterns identify useful operating regions. The native API contracts below ![Cold kernel latency for all six implementations versus valid row length, with separate panels for three models and batch sizes 1 and 1024.](../media/gvr_v2/latency.svg) -*Figure 8. Mean cold kernel time across matching layers. Each row is a model; the columns contrast batch sizes 1 and 1,024. The solid line shows GVR V2; dashed lines show baselines measured in separate runs. Both axes are logarithmic; 1K means 1,024.* +*Figure 9. Mean cold kernel time across matching layers. Each row is a model; the columns contrast batch sizes 1 and 1,024. The solid line shows GVR V2; dashed lines show baselines measured in separate runs. Both axes are logarithmic; 1K means 1,024.* At $B=1$, keeping a short row in registers and exposing parallelism within a longer row matter more than saturating HBM. At $B=1024$, streaming throughput becomes more visible. The different shapes of these curves are why a single average cannot identify every useful operating region. @@ -323,17 +350,17 @@ P_{\mathrm{theory}}(I)=\min(37.225,8I),\qquad P_{\mathrm{calibrated}}(I)=\min(37.047,6.912I). $$ -The calibrated limits are **6.912 TB/s** sustained read bandwidth and **37.047 Tcompare/s** semantic comparison throughput. They meet at **5.36 compare/byte**, more than 21 times the maximum ideal Top-K intensity. The entire workload band sits on the bandwidth slope in Figure 9A. +The calibrated limits are **6.912 TB/s** sustained read bandwidth and **37.047 Tcompare/s** semantic comparison throughput. They meet at **5.36 compare/byte**, more than 21 times the maximum ideal Top-K intensity. The entire workload band sits on the bandwidth slope in Figure 10A. ![A clean two-level roofline: the full B200 hardware model highlights Top-K's narrow bandwidth-limited band; three linear-scale Pareto curve panels compare GVR V2 and five baselines at batch 1024, with GVR V2 highlighted in green.](../media/gvr_v2/roofline.svg) -*Figure 9.* A: the full theoretical and calibrated roofs. B: Pareto curves in the Top-K band at $B=1024$, plotting useful throughput $P=BN/t$ against intensity $I=N/[4(N+K)]$ on linear axes. Green highlights V2; the dotted line is the calibrated bandwidth roof. All kernels share the same minimum-traffic model $Q_{\min}$, while extra reads and output work remain in measured time. +*Figure 10.* A: the full theoretical and calibrated roofs. B: Pareto curves in the Top-K band at $B=1024$, plotting useful throughput $P=BN/t$ against intensity $I=N/[4(N+K)]$ on linear axes. Green highlights V2; the dotted line is the calibrated bandwidth roof. All kernels share the same minimum-traffic model $Q_{\min}$, while extra reads and output work remain in measured time. #### Compare Pareto Curves and Reachable Rates -Each operator's **Pareto curve** in Figure 9B traces useful throughput across intensities at $B=1024$. At fixed $N$ and $K$, every implementation has the same horizontal position; a faster kernel moves **upward**, toward the calibrated roof. Figure 8 retains the contrasting single-row view, and Figures 6 and 7 cover all 11 batch sizes. +Each operator's **Pareto curve** in Figure 10B traces useful throughput across intensities at $B=1024$. At fixed $N$ and $K$, every implementation has the same horizontal position; a faster kernel moves **upward**, toward the calibrated roof. Figure 9 retains the contrasting single-row view, and Figures 7 and 8 cover all 11 batch sizes. -The **reachable rate** is $P(I)/P_{\mathrm{calibrated}}(I)$, expressed as a percentage. The table compares **average / peak reachable rate** along each Pareto curve. The average weights the plotted intensity points equally; the peak is their maximum. Both use the same layer-averaged timings as Figure 9B. +The **reachable rate** is $P(I)/P_{\mathrm{calibrated}}(I)$, expressed as a percentage. The table compares **average / peak reachable rate** along each Pareto curve. The average weights the plotted intensity points equally; the peak is their maximum. Both use the same layer-averaged timings as Figure 10B. | Operator | V4 Flash | V4 Pro | V3.2 | | :--- | ---: | ---: | ---: | @@ -368,7 +395,7 @@ TensorRT-LLM separates phase-specific row metadata from shared selection logic. ![Integration diagram: a shared TopK dispatcher feeds decode and prefill row adapters, which reuse GvrMainKernel's streaming selection pipeline; decode also retains register and cluster routes.](../media/gvr_v2/integration.svg) -*Figure 10. Current-row calibration lets both phases enter the same selection core without a temporal-prior lifecycle. The decode arrow shows its streaming route; register and cluster routes remain available under the same output contract. Prefill specializes the streaming implementation at compile time.* +*Figure 11. Current-row calibration lets both phases enter the same selection core without a temporal-prior lifecycle. The decode arrow shows its streaming route; register and cluster routes remain available under the same output contract. Prefill specializes the streaming implementation at compile time.* The adapters preserve each phase's indexing semantics. Decode derives valid prefixes from device KV lengths, multi-token prediction offsets, and compression. Prefill receives `[start, end)` in compressed columns and returns indices relative to `start`. Both write INT32 indices into caller-owned output, with identity indices and `-1` padding for short rows. From 078877938e8b29d070c730849c0215f7de8395a9 Mon Sep 17 00:00:00 2001 From: longcheng-nv <243710427+longcheng-nv@users.noreply.github.com> Date: Thu, 17 Sep 2026 07:12:59 +0000 Subject: [PATCH 17/33] [None][doc] Correct later temporal V1 multi-threshold comparison Signed-off-by: longcheng-nv <243710427+longcheng-nv@users.noreply.github.com> --- docs/source/blogs/media/gvr_v2/README.md | 4 ++- docs/source/blogs/media/gvr_v2/evolution.svg | 8 +++--- .../source/blogs/media/gvr_v2/plot_results.py | 6 ++-- ...ampling_Exact_TopK_for_Sparse_Attention.md | 28 +++++++++---------- 4 files changed, 24 insertions(+), 22 deletions(-) diff --git a/docs/source/blogs/media/gvr_v2/README.md b/docs/source/blogs/media/gvr_v2/README.md index c6b42ef642b9..5c33f7fbc7d7 100644 --- a/docs/source/blogs/media/gvr_v2/README.md +++ b/docs/source/blogs/media/gvr_v2/README.md @@ -103,7 +103,9 @@ SGLang planning can be amortized across layers in a serving integration. FlashIn ## Temporal GVR and Algorithm Evolution -The temporal R0 and tiered implementations correspond to public [PR #16457](https://github.com/NVIDIA/TensorRT-LLM/pull/16457) and [PR #16877](https://github.com/NVIDIA/TensorRT-LLM/pull/16877). They already include improvements beyond original scalar-search V1, including a threshold ladder and execution specialization. The original scalar-search implementation has no measurement on this grid. The temporal comparisons span full implementations, including scheduling and integration; they are not an isolated self-sampling ablation. +The temporal R0 and tiered implementations correspond to public [PR #16457](https://github.com/NVIDIA/TensorRT-LLM/pull/16457) and [PR #16877](https://github.com/NVIDIA/TensorRT-LLM/pull/16877). Both belong to later temporal V1, which already uses multi-threshold admission. R0 builds a histogram over hint-gathered scores, proposes a rung ladder, and obtains exact counts for multiple rungs in one row scan. Tiered streaming uses sampled ladder counts to choose a pivot and rescue rung, then verifies both exactly in a fused count/collect pass. Its short-row and register routes have different execution strategies; Figure 3 sketches the streaming comparison, while its bars measure complete implementations. + +The original scalar/secant search is historical context, not the algorithm represented by the temporal bars. V2 changes calibration to coalesced current-row sampling and couples it to dense verification-bin counts and crossing-bin refinement; multi-thresholding itself is not a V2-only contribution. The temporal comparisons span full implementations, including scheduling and integration; they are not an isolated self-sampling ablation. The public temporal sources at the article's implementation reference are [the R0 kernel](https://github.com/NVIDIA/TensorRT-LLM/blob/be1b9885e8df9bf070e8cb68459e24a7119afaa9/tensorrt_llm/_torch/cute_dsl_kernels/blackwell/top_k/gvr_topk_decode.py) and [tiered streaming](https://github.com/NVIDIA/TensorRT-LLM/blob/be1b9885e8df9bf070e8cb68459e24a7119afaa9/tensorrt_llm/_torch/cute_dsl_kernels/blackwell/top_k/gvr_topk_decode_tp.py). Figure 3 computes each implementation's speedup directly from its paired radix times. The geometric means are 2.586546× for temporal R0, 3.471858× for tiered temporal GVR, and 5.051864× for V2. Direct temporal/V2 time ratios are 1.953131× and 1.455089×. `summary.json` records these under `evolution_vs_radix` and `temporal_vs_v2`. Historical R0 observations for V3.2 lack explicit N/K metadata; workload identity supplies the join for those records. diff --git a/docs/source/blogs/media/gvr_v2/evolution.svg b/docs/source/blogs/media/gvr_v2/evolution.svg index 2cf0ac245943..62cb3c56f8f7 100644 --- a/docs/source/blogs/media/gvr_v2/evolution.svg +++ b/docs/source/blogs/media/gvr_v2/evolution.svg @@ -108,15 +108,15 @@ z " clip-path="url(#p5b26b816df)" style="fill: #edf5df; stroke: #ccd5dd; stroke-width: 0.8; stroke-linejoin: miter"/> - Original GVR V1: temporal warm start + scalar threshold search + Later temporal V1: hint calibration + multi-thresholding Previous indices → current-score gather - Guess T → full-row count - → adjust T if needed + Hint-derived thresholds + → multiple exact counts Collect candidates @@ -381,7 +381,7 @@ L 964.8 301.536 Design goals: improve the practical performance floor and average latency; remove the temporal prior's framework lifecycle. - Bars compare the temporal R0, temporal tiered, and self-sampling V2 implementations. + Flows show streaming paths; bars compare complete R0, tiered temporal, and V2 implementations. diff --git a/docs/source/blogs/media/gvr_v2/plot_results.py b/docs/source/blogs/media/gvr_v2/plot_results.py index 0bac133d4f1d..fc43fc16d5a2 100644 --- a/docs/source/blogs/media/gvr_v2/plot_results.py +++ b/docs/source/blogs/media/gvr_v2/plot_results.py @@ -256,14 +256,14 @@ def _evolution(rows: list[dict]) -> None: ax.text( 0.2, 5.55, - "Original GVR V1: temporal warm start + scalar threshold search", + "Later temporal V1: hint calibration + multi-thresholding", fontsize=11, weight="bold", color="#7557a6", ) for x, label in [ (0.2, "Previous indices\n→ current-score gather"), - (3.6, "Guess T → full-row count\n→ adjust T if needed"), + (3.6, "Hint-derived thresholds\n→ multiple exact counts"), (7.0, "Collect candidates\n→ exact refinement"), ]: _box(ax, (x, 3.8), (2.8, 1.2), label, "#f2eef9", 10) @@ -342,7 +342,7 @@ def _evolution(rows: list[dict]) -> None: fig.text( 0.035, 0.005, - "Bars compare the temporal R0, temporal tiered, and self-sampling V2 implementations.", + "Flows show streaming paths; bars compare complete R0, tiered temporal, and V2 implementations.", fontsize=9, color="#475569", ) diff --git a/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md b/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md index 3339af8ad2e9..901e1ee8e6f8 100644 --- a/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md +++ b/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md @@ -66,13 +66,15 @@ On a GPU, doing more work on chip can be worthwhile if it avoids another full-ro ### From GVR V1 to V2: Why Move Beyond Temporal Hints? -Original GVR V1 gathers the current scores at the previous step's Top-K indices, estimates a bracket from their minimum, maximum, and mean, then uses a secant-style search on the monotone count function +Temporal GVR V1 gathers current scores at the previous step's Top-K indices to predict admission thresholds. **Later V1 already uses multi-thresholding.** Its [R0 path](https://github.com/NVIDIA/TensorRT-LLM/pull/16457) builds a histogram over those gathered scores, proposes a threshold ladder, and counts its rungs together in one full-row pass. The [tiered streaming path](https://github.com/NVIDIA/TensorRT-LLM/pull/16877) also uses multiple thresholds, including exact counts at a pivot and a rescue rung. These are the temporal implementations compared with V2 below. + +Their admission objective is expressed through the monotone count function $$ C(T)=\sum_{i=0}^{N-1}\mathbf{1}[x_i\ge T]. $$ -It seeks an admission threshold with enough survivors to contain Top-K, but few enough to fit its candidate capacity. A high-quality temporal hint can make this search very short. The difficulty is making that benefit reliable across inference workloads. +An admission threshold should leave enough survivors to contain Top-K, but few enough to fit candidate capacity. A high-quality temporal hint can make admission very cheap. The difficulty is making that benefit reliable across inference workloads, even with several thresholds checked together. #### A Biased Sample with Variable Value @@ -99,30 +101,28 @@ V4 Pro's mean changes from **71.5% to 57.9%** between these inputs, and its rand A row's true hit rate is known only after the current selection is established. Verification can expose a poor threshold, but the hint gather and initial work have already been paid for. Conservative admission, repeated counts, capacity checks, and exact recovery keep weak hints safe; their overhead and extra reads reduce average speedup and make latency less predictable. -V2 calibrates from the **current row**, removing dependence on temporal overlap and the read through old indices. Multi-thresholding addresses the other major cost: repeated scalar threshold queries. Together, they target a stronger practical performance floor and better average latency, without a fixed worst-case latency guarantee. - -V1 already used a histogram for local refinement. V2 moves multi-threshold population information into verification, so refinement starts from an identified crossing bin. +V2 calibrates from the **current row**, removing dependence on temporal overlap and the read through old indices. It combines this calibration with histogram-based multi-threshold verification and crossing-bin refinement. **The defining change from later V1 is the source of the guess and the removal of temporal state; multi-thresholding is part of the design continuity.** These choices target a stronger practical performance floor and better average latency, without a fixed worst-case latency guarantee. #### A Hint That Crosses Framework Boundaries V1's prior also has a lifecycle outside the kernel. Prefill lacks the same previous-decode-step hint, so its seeding policy differs. That phase-dependent history complicates a common selection architecture. V2's current-row calibration removes the Top-K prior dependency, allowing phase differences to stay in dispatch and row-interface adapters. The [integration section](#decode-and-prefill-in-tensorrt-llm) traces the consequences for CUDA Graph preparation and disaggregated serving. -| Algorithm question | Original GVR V1 | Streaming GVR V2 | +| Algorithm question | Later temporal V1: R0 / tiered streaming | Streaming GVR V2 | | :--- | :--- | :--- | | Where does the guess come from? | Current scores gathered through previous-step indices | A coalesced sample of the current row | | What makes the guess useful? | High, stable overlap with previous winners | Coverage of the current row's score distribution | -| What guides admission? | Hint statistics and scalar secant-style count queries | Sample-derived primary threshold, lower safety floor, and upper anchor | -| What does verification learn? | A count for the trial threshold | Exact bin populations and counts at many boundaries | -| Where is the remaining uncertainty? | The admitted candidate set | The crossing bin containing rank $K$ | +| What guides admission? | A hint-derived ladder, with path-specific pivot and rescue choices | Sample-derived primary threshold, lower safety floor, and upper anchor | +| What does verification learn? | Exact counts at multiple admission thresholds | Exact bin populations and counts at many boundaries | +| Where does exact refinement start? | The admitted candidate set, with path-specific local refinement | The crossing bin containing rank $K$ | | What state crosses decode steps? | Per-layer prior indices | No Top-K prior | | How do prefill and decode relate? | Different hint availability and seeding policies | Shared streaming selection with phase-specific row adapters | -| How does a bad guess affect the result? | More verification/refinement work | Lower admission or exact recovery; membership remains exact | +| How does a bad guess affect the result? | More admission/refinement work or recovery; membership remains exact | Lower admission or exact recovery; membership remains exact | -![V1's temporal bias makes threshold quality depend on changing overlap; V2 calibrates from the current row with no temporal prior. Beside these flows, measured bars compare temporal R0, tiered temporal GVR, and V2.](../media/gvr_v2/evolution.svg) +![Later temporal V1 and streaming V2 both use multi-thresholding. V1 calibrates through previous winners; V2 samples the current row without a temporal prior. Measured bars compare temporal R0, tiered temporal GVR, and V2.](../media/gvr_v2/evolution.svg) -*Figure 3. The design shift removes dependence on temporal overlap and prior state while making each verification pass more informative. Original V1 uses scalar threshold search; later temporal R0 and tiered implementations add broader verification and execution specialization. The bars compare those later temporal implementations with V2 over radix CUDA.* +*Figure 3. Multi-thresholding is shared by later temporal V1 and V2. The flows emphasize their calibration and refinement choices on streaming paths; the bars compare complete R0, tiered temporal, and V2 implementations over radix CUDA. V2 removes the temporal-overlap dependency and prior-state lifecycle.* -Temporal R0 and tiered GVR achieve **2.59× and 3.47×** speedup over radix CUDA; V2 reaches **5.05×**. V2 is **1.95× faster than temporal R0** and **1.46× faster than tiered temporal GVR**, combining current-row sampling, multi-threshold verification, and specialized execution paths. +Temporal R0 and tiered GVR achieve **2.59× and 3.47×** speedup over radix CUDA; V2 reaches **5.05×**. V2 is **1.95× faster than temporal R0** and **1.46× faster than tiered temporal GVR**. These gains compare complete implementations, including their calibration, verification, refinement, and execution paths. ## Self-Sampling and Multi-Thresholding @@ -198,7 +198,7 @@ In the variable-length `main` route, warp 0 computes sampling geometry and publi ### Multi-Thresholding: Make Each Full-Row Pass Count -A scalar verification pass answers one question: how many scores exceed $T$? Multi-thresholding obtains a family of answers from the same classification work. +A scalar verification pass answers one question: how many scores exceed $T$? Later V1 already amortizes row reads across several admission thresholds. V2's streaming path uses a verification histogram to obtain a dense family of counts from the same classification work and locate the boundary for exact refinement. Conceptually, divide the bracket $[T,H]$ into $M$ ordered bins, with boundaries $t_0,\ldots,t_M$, and let $h_j$ be the exact population of bin $j$. A descending cumulative scan yields From 3ee254cddad9c05f92696c37e435bca3a5b94e64 Mon Sep 17 00:00:00 2001 From: longcheng-nv <243710427+longcheng-nv@users.noreply.github.com> Date: Thu, 17 Sep 2026 07:36:45 +0000 Subject: [PATCH 18/33] [None][doc] Align GVR blog claims with main and measurement scope Signed-off-by: longcheng-nv <243710427+longcheng-nv@users.noreply.github.com> --- docs/source/blogs/media/gvr_v2/README.md | 10 +++++++-- ...ampling_Exact_TopK_for_Sparse_Attention.md | 22 +++++++++---------- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/docs/source/blogs/media/gvr_v2/README.md b/docs/source/blogs/media/gvr_v2/README.md index 5c33f7fbc7d7..f0a5fc89aef9 100644 --- a/docs/source/blogs/media/gvr_v2/README.md +++ b/docs/source/blogs/media/gvr_v2/README.md @@ -84,9 +84,13 @@ The files contain kernel timings and workload dimensions. They do not contain in Measurements use NVIDIA B200, FP32 indexer scores, and batch sizes from 1 to 1,024. The GVR V2 reference covers 886 row geometries and 9,746 workload/batch cases, all passing tie-aware exactness checks. Each published GVR time is the arithmetic mean of 10 cold-L2 repetitions, rounded to 0.001 µs; five warm-L2 repetitions are excluded from these figures. A 512 MiB cache eviction runs outside the timed region. Compilation, input preparation, allocation during setup, and Python launch overhead are excluded; required device kernels remain timed. +Each workload/batch case repeats one captured layer/step score row into distinct batch rows. This controls the input distribution and valid width while measuring batch scaling; it is not a heterogeneous batch of independent serving requests. GVR uses `next_n=1` and sets `max_seq_len` to that case's valid row length times its compression ratio. A serving graph may use a larger stable envelope and choose a different execution plan. The bundled grid does not independently benchmark ragged mixed-length batches, MTP, or prefill. + The primary reference is the hint-free GVR V2 `run_varlen` implementation from [PR #19076](https://github.com/NVIDIA/TensorRT-LLM/pull/19076), measured at its [final public revision](https://github.com/NVIDIA/TensorRT-LLM/commit/be1b9885e8df9bf070e8cb68459e24a7119afaa9). All FP32 comparisons, including DeepSelect and HPC-ops, match existing baseline observations from separate runs by workload identity and batch size, with shape metadata checked where available. Baseline times are retained as measured; no aggregate correction factor is applied. These comparisons describe the bundled implementations and workloads; they are not a current-release, equal-interface benchmark of entire serving frameworks. -Figures 1, 3, and 5–8 and their numerical summaries all use this PR #19076 reference. B300 measurements are outside the B200 comparison. Historical serving experiments retain their original implementation scope, as described below. +The device kernel and host dispatcher at the [main revision audited on September 17, 2026](https://github.com/NVIDIA/TensorRT-LLM/commit/73c70633b2547eedf0c91f85e760aec534f6af84) are byte-identical to those measured for the reference. This establishes source continuity for those files, not a new whole-framework performance measurement. + +Figures 1, 3, and 7–10 and their numerical summaries all use this PR #19076 reference. B300 measurements are outside the B200 comparison. Historical serving experiments retain their original implementation scope, as described below. | Implementation | Relevant comparison contract | | :--- | :--- | @@ -156,6 +160,8 @@ Reachable rate is `100 * P / min(R, BW*I)` percent, using the calibrated roof. C The read-dominated roof is optimistic; mixed read/write behavior and additional kernel work can lower achievable throughput. Reachable rate describes useful selection work relative to this model, not measured DRAM bandwidth utilization. +The input-read term applies to nontrivial selection with more valid scores than output slots. Short-row identity/padding paths can skip score reads; they are outside the measured grid and should not be evaluated against this traffic bound. + ## Serving Results -Decode TPOT results come from public [PR #18410](https://github.com/NVIDIA/TensorRT-LLM/pull/18410); prefill results come from public [PR #18702](https://github.com/NVIDIA/TensorRT-LLM/pull/18702). These are separate serving experiments, not transformations of the operator speedups. The 2.9–4.5% throughput increase isolates adding V2 prefill to a deployment already using V2 decode. It is not the throughput gain of replacing radix in both phases. +Decode TPOT results come from public [PR #18410](https://github.com/NVIDIA/TensorRT-LLM/pull/18410); prefill results come from public [PR #18702](https://github.com/NVIDIA/TensorRT-LLM/pull/18702). These are separate historical serving experiments, not transformations of the operator speedups or measurements of the current complete framework. The 1.84–2.61× prefill-kernel range compares aggregate rank-0 Top-K kernel durations within measured Flash/Pro prefill windows; it is not the latency of a single Top-K invocation. The 2.9–4.5% throughput increase isolates adding V2 prefill to a deployment already using V2 decode on the tested long-input, batched configurations. It is not the throughput gain of replacing radix in both phases. diff --git a/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md b/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md index 901e1ee8e6f8..a121916a7c09 100644 --- a/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md +++ b/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md @@ -105,7 +105,7 @@ V2 calibrates from the **current row**, removing dependence on temporal overlap #### A Hint That Crosses Framework Boundaries -V1's prior also has a lifecycle outside the kernel. Prefill lacks the same previous-decode-step hint, so its seeding policy differs. That phase-dependent history complicates a common selection architecture. V2's current-row calibration removes the Top-K prior dependency, allowing phase differences to stay in dispatch and row-interface adapters. The [integration section](#decode-and-prefill-in-tensorrt-llm) traces the consequences for CUDA Graph preparation and disaggregated serving. +V1's prior also has a lifecycle outside the kernel. Temporal V1 has no prefill engine: TensorRT-LLM uses radix for prefill and can seed the decode prior from each request's last prefill selection. That phase-dependent history complicates a common selection architecture. V2's current-row calibration removes the Top-K prior dependency, allowing phase differences to stay in dispatch and row-interface adapters. The [integration section](#decode-and-prefill-in-tensorrt-llm) traces the consequences for CUDA Graph preparation and disaggregated serving. | Algorithm question | Later temporal V1: R0 / tiered streaming | Streaming GVR V2 | | :--- | :--- | :--- | @@ -115,7 +115,7 @@ V1's prior also has a lifecycle outside the kernel. Prefill lacks the same previ | What does verification learn? | Exact counts at multiple admission thresholds | Exact bin populations and counts at many boundaries | | Where does exact refinement start? | The admitted candidate set, with path-specific local refinement | The crossing bin containing rank $K$ | | What state crosses decode steps? | Per-layer prior indices | No Top-K prior | -| How do prefill and decode relate? | Different hint availability and seeding policies | Shared streaming selection with phase-specific row adapters | +| How do prefill and decode relate? | Radix prefill; its last selection can seed temporal decode | Shared streaming selection with phase-specific row adapters | | How does a bad guess affect the result? | More admission/refinement work or recovery; membership remains exact | Lower admission or exact recovery; membership remains exact | ![Later temporal V1 and streaming V2 both use multi-thresholding. V1 calibrates through previous winners; V2 samples the current row without a temporal prior. Measured bars compare temporal R0, tiered temporal GVR, and V2.](../media/gvr_v2/evolution.svg) @@ -256,7 +256,7 @@ Register families bypass sparse sampling but retain exact histogram crossing and This explains the two sources of performance improvement: a better starting threshold reduces selection work, and a suitable kernel family reduces the cost of executing that work. Neither eliminates the obligation to examine all valid scores. -[PR #19076](https://github.com/NVIDIA/TensorRT-LLM/pull/19076) extends this execution policy through host dispatch while keeping the device kernels unchanged. It adds register plans for roughly 4K–8K-score rows, sizes register waves using the device's SM count, and includes targeted B300 routing. A common 96-candidate gate also keeps large crossing bins out of the quadratic direct-ranking path, avoiding a long quadratic detour for a difficult row. This makes dispatch part of the same practical performance-floor objective as calibration and recovery. +[PR #19076](https://github.com/NVIDIA/TensorRT-LLM/pull/19076) extends this execution policy through host dispatch while keeping the device kernels unchanged. It adds register plans for roughly 4K–8K-score rows, sizes register waves using the device's SM count, and includes targeted B300 routing. It also sets the direct-ranking gate to **96 candidates across register plans**, limiting quadratic work for difficult crossings. The streaming `main` and `clus` families retain their separate **288-candidate** gate. Dispatch therefore balances refinement cost with each family's execution strategy. ## Performance and Roofline Analysis @@ -264,7 +264,7 @@ This explains the two sources of performance improvement: a better starting thre #### Benchmark Setup -The benchmarks use FP32 indexer scores from the three models below on NVIDIA B200, with batch sizes from 1 to 1,024. GVR V2 uses the merged [PR #19076](https://github.com/NVIDIA/TensorRT-LLM/pull/19076) implementation. Results report cold-L2 GPU kernel time, excluding compilation, input preparation, and Python overhead. Speedups are geometric means over matched workloads from separate benchmark runs. +The benchmarks use FP32 indexer scores from the three models below on NVIDIA B200, repeating each captured row across batch sizes from 1 to 1,024. GVR V2 uses the merged [PR #19076](https://github.com/NVIDIA/TensorRT-LLM/pull/19076) implementation. Results report cold-L2 GPU kernel time, excluding compilation, input preparation, and Python overhead. Speedups are geometric means over matched workloads from separate benchmark runs; this grid measures kernel scaling, while serving results appear separately below. | Model | $K$ | Indexer compression | Valid row lengths $N$ | | :--- | ---: | ---: | :--- | @@ -330,7 +330,7 @@ At $B=1$, keeping a short row in registers and exposing parallelism within a lon ### The Roofline Model: Fewer Passes, More Useful Work -The bar chart shows how much time GVR V2 saves. The roofline asks how much of that time is fundamentally needed to move the input and output. It connects the algorithm's goal—fewer full-row passes—to a hardware limit. +The bar chart shows how much time GVR V2 saves. The roofline compares that time with an ideal one-read, index-write traffic model. It connects the algorithm's goal—fewer full-row passes—to a bandwidth reference. #### Locate Top-K on the Hardware Roof @@ -341,7 +341,7 @@ W=BN,\qquad Q_{\min}=4B(N+K)\ \text{bytes},\qquad I=\frac{W}{Q_{\min}}=\frac{N}{4(N+K)}. $$ -Here one unit of work is one **abstract comparison per input score**. This is a common normalization for every implementation, not its measured instruction count or SELECT's expected comparison formula. Since $1\le K\le N$, ideal Top-K intensity stays within **$0.125\le I\lt 0.25$ compare/byte**. +Each work unit is an **abstract comparison per input score**, shared across implementations; it is neither an instruction count nor SELECT's comparison bound. For nontrivial selection, $1\le K\lt N$, intensity lies in **$0.125\lt I\lt 0.25$ compare/byte**. The theoretical and calibrated B200 roofs, in Tcompare/s, are @@ -350,7 +350,7 @@ P_{\mathrm{theory}}(I)=\min(37.225,8I),\qquad P_{\mathrm{calibrated}}(I)=\min(37.047,6.912I). $$ -The calibrated limits are **6.912 TB/s** sustained read bandwidth and **37.047 Tcompare/s** semantic comparison throughput. They meet at **5.36 compare/byte**, more than 21 times the maximum ideal Top-K intensity. The entire workload band sits on the bandwidth slope in Figure 10A. +The calibrated limits are **6.912 TB/s** sustained read bandwidth and **37.047 Tcompare/s** semantic comparison throughput. Their **5.36 compare/byte** intersection exceeds the maximum ideal Top-K intensity by over 21×, placing the workload band on Figure 10A's bandwidth slope. ![A clean two-level roofline: the full B200 hardware model highlights Top-K's narrow bandwidth-limited band; three linear-scale Pareto curve panels compare GVR V2 and five baselines at batch 1024, with GVR V2 highlighted in green.](../media/gvr_v2/roofline.svg) @@ -377,7 +377,7 @@ GVR V2 leads both measures on all three models: its average reachable rate is ** #### Interpret the Remaining Gap -The full ideal bound is $T_{\mathrm{roof}}=\max(Q_{\min}/\mathrm{BW},W/R_{\mathrm{compare}})$. Within the Top-K band, traffic dominates. Sampling, histogram updates, candidate staging, exact refinement, and synchronization account for work beyond the ideal minimum. +The full ideal bound is $T_{\mathrm{roof}}=\max(Q_{\min}/\mathrm{BW},W/R_{\mathrm{compare}})$. Within the Top-K band, traffic dominates. Sampling, histogram updates, candidate staging, exact refinement, and synchronization account for work beyond the ideal minimum. Short-row identity/padding paths can skip score reads and lie outside this model. The pass/candidate tradeoff in Figure 4 explains two sources of this gap: another full-row scan adds traffic, while a loose admission threshold adds candidate work even when the scan count stays fixed. V2 uses exact bin populations to restrict the remaining selection to the crossing bin. These costs increase measured time; under the shared minimum-traffic model, they move useful throughput downward at the same intensity. The read-dominated roof is optimistic, especially when $K/N$ is large; the plotted throughput describes useful selection work rather than measured DRAM traffic. @@ -409,11 +409,11 @@ Host routing chooses a stable launch envelope; device metadata supplies each row [PR #19076](https://github.com/NVIDIA/TensorRT-LLM/pull/19076) also selects a sampled prefill plan for qualifying small row envelopes. Execution, readiness checks, and warmup share the envelope-dependent plan rule; decode launcher and warmup caches distinguish the device's SM count and architecture. These changes improve plan selection around the shared kernel while keeping graph preparation consistent with execution. -Unsupported layouts use exact native selection. If a prefill specialization is missing during CUDA Graph capture, `TopK` selects radix without compiling inside capture. Both adapters preserve the exact output contract when the fast path is unavailable. +When scores fail the `TopK` module's dtype, stride, or alignment gate, it selects native insertion/radix. Prefill also selects radix for an all-short tile or a missing capture-time specialization. Decode requires its exact launcher key to be warmed before capture; a missing key raises an error. Invalid low-level tensor or storage contracts likewise raise, so fallback is a dispatch policy, not a catch-all for engine errors. #### Serving Gains from the Shared Engine -In B200 profiles, V2 makes prefill Top-K **1.84–2.61×** faster than radix CUDA. Adding V2 prefill to a deployment already using V2 decode improves serving throughput by **2.9–4.5%** on long-input workloads. This is the incremental benefit of the prefill change. +In [PR #18702's B200 profiles](https://github.com/NVIDIA/TensorRT-LLM/pull/18702), the aggregate Top-K kernel time within measured Flash/Pro prefill windows improves by **1.84–2.61×** over radix CUDA. Adding V2 prefill to a deployment already using V2 decode improves serving throughput by **2.9–4.5%** on the tested long-input, batched workloads. These are historical integration results and measure the incremental benefit of the prefill change. For decode, [PR #18410](https://github.com/NVIDIA/TensorRT-LLM/pull/18410) reports **6–19% lower time per output token** on 8×B200 with TP8/EP8 and batch/concurrency 1. The serving benefit depends on Top-K's share of total execution time; the kernel comparisons above do not measure competing serving stacks. @@ -437,7 +437,7 @@ trtllm-serve deepseek-ai/DeepSeek-V4-Flash \ `enable_heuristic_topk` defaults to `false`. Once it is enabled, `use_self_sampling_topk` defaults to `true`; the second field is explicit here for clarity. Supported prefill layers follow the same V2 selection. Setting `use_self_sampling_topk: false` selects temporal GVR for decode, whose prefill path remains radix. -V2 requires CUTLASS DSL, datacenter Blackwell SM100/SM103, $K\in\lbrace 512,1024,2048\rbrace$, and supported indexer compression ratios 1 or 4. The fast path expects FP32 scores with unit inner stride, a row stride divisible by four floats, and a 16-byte-aligned base. Unsupported layouts use exact native fallback selection. The retired `TRTLLM_GVR_SELF_SAMPLING` environment variable is no longer the enablement mechanism, and `use_cute_dsl_topk` is not required to select V2. +The production V2 dispatch requires CUTLASS DSL, datacenter Blackwell SM100/SM103, $K\in\lbrace 512,1024,2048\rbrace$, and indexer compression ratios 1 or 4. The fast path expects FP32 scores with unit inner stride, a row stride divisible by four floats, and a 16-byte-aligned base. A single-row decode input also needs its physical width divisible by four; its valid prefix may be shorter. The retired `TRTLLM_GVR_SELF_SAMPLING` environment variable is no longer the enablement mechanism, and `use_cute_dsl_topk` is not required to select V2. ### Conclusion From 491b95bc5d5d59e9e3c2c67a6829f72b2f7164f5 Mon Sep 17 00:00:00 2001 From: longcheng-nv <243710427+longcheng-nv@users.noreply.github.com> Date: Thu, 17 Sep 2026 07:56:16 +0000 Subject: [PATCH 19/33] [None][doc] Clarify threshold and candidate work in Figure 4 Signed-off-by: longcheng-nv <243710427+longcheng-nv@users.noreply.github.com> --- docs/source/blogs/media/gvr_v2/README.md | 2 + .../blogs/media/gvr_v2/candidate_work.svg | 999 +++++++++--------- .../source/blogs/media/gvr_v2/plot_results.py | 210 ++-- ...ampling_Exact_TopK_for_Sparse_Attention.md | 6 +- 4 files changed, 657 insertions(+), 560 deletions(-) diff --git a/docs/source/blogs/media/gvr_v2/README.md b/docs/source/blogs/media/gvr_v2/README.md index f0a5fc89aef9..18f300c4e585 100644 --- a/docs/source/blogs/media/gvr_v2/README.md +++ b/docs/source/blogs/media/gvr_v2/README.md @@ -41,6 +41,8 @@ The runtime geometry starts with a route-dependent budget proportional to `N / a `candidate_work.svg` is a schematic, independent of the timing observations. For a finite-score row with K-th-largest boundary $\tau$ and $q\le\tau$, the admitted population obeys $C_p=C(q)=K+E+D(q,\tau)$. Here $E=C(\tau)-K$ counts excess boundary ties and $D$ counts entries with $q\le x_i\lt\tau$. The illustrated curve and bar use consistent relative populations: $C(q)=2.3K$, $E=0.3K$, and $D=K$; these are explanatory values, not benchmark measurements. +Both panels are computed from the same finite synthetic row in `plot_results.py`. The tail-count axis is linear, and the stacked bar is proportional to population size. At the exact boundary, the filled marker includes ties and the open marker excludes them; their difference is the entire tied population, of which only the excess contributes to E. + The admission band requires $K\le C(q)\le B_r$. A large tie plateau can leave no threshold in this band; the exact recovery path still applies. In V2, the admitted count describes candidate handling, while only the crossing bin requires the remaining exact selection. The illustration does not imply that every execution family materializes the same buffer or that candidate count alone predicts latency. Its multi-threshold markers denote counts shared through classification, not a scalar fitted search. ## Temporal-Overlap Illustration diff --git a/docs/source/blogs/media/gvr_v2/candidate_work.svg b/docs/source/blogs/media/gvr_v2/candidate_work.svg index 69f56265591f..89267421c697 100644 --- a/docs/source/blogs/media/gvr_v2/candidate_work.svg +++ b/docs/source/blogs/media/gvr_v2/candidate_work.svg @@ -1,7 +1,7 @@ - + @@ -21,610 +21,655 @@ - - +" clip-path="url(#pe39f024172)" style="fill: #f8fafc; stroke: #dce3e9; stroke-width: 0.9; stroke-linejoin: miter"/> - +" clip-path="url(#pe39f024172)" style="fill: #f8fafc; stroke: #dce3e9; stroke-width: 0.9; stroke-linejoin: miter"/> - +" clip-path="url(#pe39f024172)" style="fill: #edf4e5"/> + + + + + + + + + - + + + + + + + + + +" clip-path="url(#p192bf08c57)" style="fill: #eaf3de; stroke: #eaf3de; stroke-linejoin: miter"/> - - - - - T - h - r - e - s - h - o - l - d -   -   -   - - t - + + + + + + + q + + + + + + + + + + + τ + + + + Higher threshold → + - - + + + 0 + + + + + - + - K + K - - - + + + - + - B - r + B + r - - - + + + - C - a - n - d - i - d - a - t - e - s -   - ( - ) -   - · -   - l - o - g -   - s - c - a - l - e - C - t + C + a + n + d + i + d + a + t + e + s +   + ( + ) + C + t - - + + - - + + - + - + - - + - - + - - - - - Over capacity - - - Bounded Top-K - superset - - - Too few candidates - Lower the threshold - - - - + + - - + Over capacity + + + Feasible admission + + + Too few candidates + + + + + + + + + + - A - c - c - e - p - t - e - d -   - q + C + q + K + ( + ) + = + 2 + . + 3 - - - + + - - - + + + - τ - : -   - b - o - u - n - d - a - r - y -   - t - i - e + C + τ + K + ( + ) + = + 1 + . + 3 - +" style="stroke: #ffffff"/> - - - - - - - - - - + + + + + + + + - +" style="stroke: #ffffff; stroke-width: 1.4"/> - - + + - - + + - +" style="stroke: #ad4b70"/> - - + + - +" style="stroke: #ad4b70"/> - - + + - - - + + +" clip-path="url(#p3b82cc5471)" style="fill: #deedc8; stroke: #ffffff; stroke-width: 2; stroke-linejoin: miter"/> - - + +" clip-path="url(#p3b82cc5471)" style="fill: #f3dce5; stroke: #ffffff; stroke-width: 2; stroke-linejoin: miter"/> - - + +" clip-path="url(#p3b82cc5471)" style="fill: #fae6c7; stroke: #ffffff; stroke-width: 2; stroke-linejoin: miter"/> - + - + - K + K - - Top-K output - - - - - - E - - - - - Extra ties - - - + + - D + E - Boundary shell - - - - - - C - C - q - K - E - D - q - τ - p - = - ( - ) - = - + - + - ( - , - ) - - - - - - - - C - q - ( - ) -   -   - -   -   - c - l - a - s - s - i - f - y -   - a - n - d -   - h - a - n - d - l - e -   - a - d - m - i - t - t - e - d -   - c - a - n - d - i - d - a - t - e - s - - - - - - + + - m -   -   -   -   -   -   - -   -   - r - e - f - i - n - e -   - o - n - l - y -   - t - h - e -   - c - r - o - s - s - i - n - g -   - b - i - n -   - i - n -   - V - 2 + D - - A dense boundary can amplify a small threshold error. - + + + Threshold quality sets candidate work + + + A tighter threshold reduces extra candidates; exact counts keep admission safe. + + + A Choose an admission threshold + + + B Explain the admitted population - A Thresholds control candidate count + ● Exact counts from one classification - Sampled anchors guide exact counts at many boundaries + CANDIDATE AMPLIFICATION - ● Exact counts from shared classification + 2.3× - B Where extra candidates come from + + + + C + q + K + ( + ) + / + + - - + + - A - l - l -   - s - c - o - r - e - s -   - a - t -   - o - r -   - a - b - o - v - e -   -   - · -   - s - c - h - e - m - a - t - i - c -   - p - o - p - u - l - a - t - i - o - n - q + K - Optimize full-row passes AND candidate work + Required output - Fewer scans can still leave more work after admission. + 1.0K + + + + + + E + + + + + + + + E + x + c + e + s + s +   + t + i + e + s +   + a + t +   + τ + + + + + 0.3K + + + + + + D + + + + + + + + S + h + e + l + l + : +   + + < + q + x + τ + + + + + 1.0K + + + + + + C + C + q + K + E + D + q + τ + p + = + ( + ) + = + + + + + ( + , + ) + + + + + V2 + + + + + + C + q + ( + ) +   +   + C + a + n + d + i + d + a + t + e +   + h + a + n + d + l + i + n + g + + + + + Exact bin counts + + + + + + m +   +   + C + r + o + s + s + i + n + g + - + b + i + n +   + r + e + f + i + n + e + m + e + n + t + + + + + Schematic finite-score example · population counts only - - + + + + + - - + + diff --git a/docs/source/blogs/media/gvr_v2/plot_results.py b/docs/source/blogs/media/gvr_v2/plot_results.py index fc43fc16d5a2..7141a4d46b84 100644 --- a/docs/source/blogs/media/gvr_v2/plot_results.py +++ b/docs/source/blogs/media/gvr_v2/plot_results.py @@ -351,114 +351,164 @@ def _evolution(rows: list[dict]) -> None: def _candidate_work() -> None: """Illustrate tail counts and candidate amplification without measured data.""" - fig = plt.figure(figsize=(16.7, 6.4)) + fig = plt.figure(figsize=(16.7, 7.5), facecolor="white") ink, muted = "#17202b", "#52616f" - green, blue, orange = "#447a00", "#386781", "#b56b0b" - fig.text(0.04, 0.94, "A Thresholds control candidate count", fontsize=17, weight="bold") + green, blue, orange, rose = "#447a00", "#386781", "#b56b0b", "#ad4b70" + canvas = fig.add_axes((0, 0, 1, 1)) + canvas.set(xlim=(0, 1), ylim=(0, 1)) + canvas.axis("off") + for x, width in ((0.025, 0.47), (0.52, 0.455)): + canvas.add_patch( + FancyBboxPatch( + (x, 0.205), + width, + 0.65, + boxstyle="round,pad=0.008,rounding_size=0.014", + facecolor="#f8fafc", + edgecolor="#dce3e9", + linewidth=0.9, + ) + ) + fig.text( + 0.04, 0.947, "Threshold quality sets candidate work", fontsize=23, weight="bold", color=ink + ) fig.text( 0.04, - 0.885, - "Sampled anchors guide exact counts at many boundaries", - fontsize=12, + 0.90, + "A tighter threshold reduces extra candidates; exact counts keep admission safe.", + fontsize=12.5, color=muted, ) - ax = fig.add_axes((0.075, 0.26, 0.425, 0.56)) - ax.set(xlim=(0, 9.5), ylim=(0.14, 17), yscale="log") - ax.axhspan(3.5, 17, color="#f6eeee", zorder=0) - ax.axhspan(1, 3.5, color="#edf5df", zorder=0) - ax.axhspan(0.14, 1, color="#fff7e9", zorder=0) - for level in (1, 3.5): - ax.axhline(level, color="#94a3b8", linewidth=1, linestyle=(0, (4, 4))) - thresholds = np.array([0, 1, 2, 2.9, 3.8, 4.8, 5.4, 6.2, 7.1, 7.8, 8.6, 9.5]) - counts = np.array([14, 10, 7.5, 5.5, 3.1, 2.3, 1.8, 1.3, 0.72, 0.42, 0.24, 0.16]) - ax.step(thresholds, counts, where="post", color=ink, linewidth=2.5, zorder=3) - boundaries = np.linspace(3.95, 7.65, 9) - populations = counts[np.searchsorted(thresholds, boundaries, side="left") - 1] - ax.scatter( - boundaries, populations, s=34, color=blue, edgecolor="white", linewidth=0.8, zorder=4 + fig.text( + 0.044, 0.80, "A Choose an admission threshold", fontsize=15.5, weight="bold", color=ink ) - ax.text(9.15, 8.7, "Over capacity", color="#91515a", fontsize=12, ha="right") - ax.text( - 9.15, 2.55, "Bounded Top-K\nsuperset", color=green, fontsize=12, ha="right", va="center" + fig.text( + 0.54, 0.80, "B Explain the admitted population", fontsize=15.5, weight="bold", color=ink ) - ax.text(0.35, 0.31, "Too few candidates\nLower the threshold", color=orange, fontsize=12) - ax.vlines(5, 0.14, 2.3, color=green, linewidth=1.4, linestyles="dashed") - ax.scatter([5], [2.3], s=95, color=green, edgecolor="white", linewidth=1, zorder=5) + + # One finite row defines both panels, including the left-continuous tie jump. + scores = np.array([0.8, 1.4, 2.2, 3.0, 3.8, 4.6, 5.4, 6.1, 6.8, 7.5, 8.2, 8.8, 9.4]) + multiplicities = np.array([60, 40, 45, 40, 25, 20, 30, 35, 35, 58, 27, 20, 25]) + row = np.repeat(scores, multiplicities) + k, q, tau = 100, 5.0, 7.5 + admitted = int(np.count_nonzero(row >= q)) + at_boundary = int(np.count_nonzero(row >= tau)) + above_boundary = int(np.count_nonzero(row > tau)) + excess = at_boundary - k + shell = admitted - at_boundary + + ax = fig.add_axes((0.089, 0.32, 0.379, 0.425), facecolor="#f8fafc") + ax.set(xlim=(0, 10), ylim=(0, 4.85)) + ax.axhspan(1, 3.5, color="#eaf3de", zorder=0) + for level in (1, 3.5): + ax.axhline(level, color="#adc096", linewidth=1, linestyle=(0, (4, 4))) + thresholds = np.r_[0, scores, 10] + counts = np.array([np.count_nonzero(row >= t) / k for t in thresholds]) + ax.step(thresholds, counts, where="pre", color=ink, linewidth=2.3, zorder=3) + boundaries = np.array([2.6, 3.4, 4.2, 5.8, 6.4, 7.1, 7.9]) + populations = np.array([np.count_nonzero(row >= t) / k for t in boundaries]) + ax.scatter(boundaries, populations, s=32, color=blue, edgecolor="white", linewidth=1, zorder=4) + ax.text(9.7, 4.3, "Over capacity", color=muted, fontsize=11.5, ha="right") + ax.text(0.25, 1.25, "Feasible admission", color=green, fontsize=11.5) + ax.text(0.25, 0.28, "Too few candidates", color=orange, fontsize=11.5) + ax.vlines(q, 0, admitted / k, color=green, linewidth=1.2, linestyles=(0, (3, 3))) + ax.scatter([q], [admitted / k], s=110, color=green, edgecolor="white", linewidth=1.4, zorder=5) ax.annotate( - r"Accepted $q$", - (5, 2.3), - (4.25, 7.6), + rf"$C(q)={admitted / k:.1f}K$", + (q, admitted / k), + (5.1, 3.0), color=green, - fontsize=12, - arrowprops={"arrowstyle": "->", "color": green, "connectionstyle": "arc3,rad=-0.2"}, + fontsize=14, + ha="center", + bbox={"boxstyle": "round,pad=0.3", "facecolor": "white", "edgecolor": "#c6d9b2"}, + arrowprops={"arrowstyle": "-", "color": green, "lw": 1.2}, ) - ax.vlines(7.1, 0.14, 1.3, color="#bd426b", linewidth=1.2, linestyles="dashed") - ax.plot([7.1, 7.1], [0.72, 1.3], color="#bd426b", linewidth=3, zorder=5) - ax.scatter([7.1], [1.3], s=30, color="#bd426b", zorder=6) - ax.scatter([7.1], [0.72], s=30, facecolor="white", edgecolor="#bd426b", zorder=6) + ax.vlines(tau, 0, at_boundary / k, color=rose, linewidth=1.1, linestyles=(0, (3, 3))) + ax.plot([tau, tau], [above_boundary / k, at_boundary / k], color=rose, linewidth=3, zorder=5) + ax.scatter([tau], [at_boundary / k], s=42, color=rose, zorder=6) + ax.scatter([tau], [above_boundary / k], s=35, facecolor="white", edgecolor=rose, zorder=6) ax.annotate( - r"$\tau$: boundary tie", - (7.1, 1.05), - (8.25, 1.38), + rf"$C(\tau)={at_boundary / k:.1f}K$", + (tau, at_boundary / k), + (8.1, 2.0), ha="center", - fontsize=10.5, - color="#9d3c5b", - arrowprops={"arrowstyle": "->", "color": "#9d3c5b"}, + fontsize=12.5, + color=rose, + arrowprops={"arrowstyle": "-", "color": rose, "lw": 1.1}, ) - ax.set_yticks([1, 3.5], [r"$K$", r"$B_r$"]) - ax.minorticks_off() - ax.set_xticks([]) - ax.set_ylabel(r"Candidates $C(t)$ · log scale", fontsize=12, labelpad=12) - ax.set_xlabel(r"Threshold $t$ →", fontsize=12, labelpad=12) - ax.tick_params(axis="y", length=0, pad=9, labelsize=12) + ax.set_yticks([0, 1, 3.5], ["0", r"$K$", r"$B_r$"]) + ax.set_xticks([q, tau], [r"$q$", r"$\tau$"]) + for tick, color in zip(ax.get_xticklabels(), (green, rose)): + tick.set_color(color) + ax.set_ylabel(r"Candidates $C(t)$", fontsize=12.5, labelpad=10) + ax.set_xlabel("Higher threshold →", fontsize=12, labelpad=7) + ax.tick_params(length=0, pad=7, labelsize=13) ax.spines["left"].set_color("#cbd5e1") ax.spines["bottom"].set_color("#cbd5e1") - fig.text(0.075, 0.155, "● Exact counts from shared classification", fontsize=11, color=blue) + fig.text(0.089, 0.223, "● Exact counts from one classification", fontsize=11.5, color=blue) - right = fig.add_axes((0.56, 0.19, 0.4, 0.66)) - right.set(xlim=(0, 10), ylim=(0, 7)) + fig.text(0.55, 0.732, "CANDIDATE AMPLIFICATION", fontsize=10.5, weight="bold", color=muted) + fig.text(0.55, 0.66, f"{admitted / k:.1f}×", fontsize=33, weight="bold", color=green) + fig.text(0.652, 0.677, r"$C(q)\,/\,K$", fontsize=19, color=ink) + right = fig.add_axes((0.55, 0.564, 0.392, 0.072)) + right.set(xlim=(0, admitted), ylim=(0, 1)) right.axis("off") - fig.text(0.56, 0.94, "B Where extra candidates come from", fontsize=17, weight="bold") - fig.text( - 0.56, 0.885, r"All scores at or above $q$ · schematic population", fontsize=12, color=muted - ) segments = [ - (0, 4, "#e3efcd", green, r"$K$", "Top-K output"), - (4, 1.2, "#f6dfe7", "#9d3c5b", r"$E$", "Extra ties"), - (5.2, 4, "#ffe9c9", orange, r"$D$", "Boundary shell"), + (k, "#deedc8", green, r"$K$", "Required output"), + (excess, "#f3dce5", rose, r"$E$", r"Excess ties at $\tau$"), + (shell, "#fae6c7", orange, r"$D$", r"Shell: $q\leq x<\tau$"), ] - for left, width, fill, color, symbol, label in segments: + left = 0 + for i, (width, fill, color, symbol, label) in enumerate(segments): right.add_patch( - Rectangle((left, 4.6), width, 1.25, facecolor=fill, edgecolor="white", linewidth=2) + Rectangle((left, 0), width, 1, facecolor=fill, edgecolor="white", linewidth=2) ) right.text( - left + width / 2, 5.22, symbol, fontsize=22, ha="center", va="center", color=color + left + width / 2, 0.5, symbol, fontsize=21, ha="center", va="center", color=color + ) + y = 0.499 - i * 0.079 + fig.text(0.555, y, symbol, fontsize=18, color=color, va="center") + fig.text(0.589, y, label, fontsize=13, color=ink, va="center") + fig.text( + 0.94, + y, + f"{width / k:.1f}K", + fontsize=13, + color=color, + ha="right", + va="center", + weight="bold", + ) + canvas.plot([0.55, 0.943], [y - 0.037, y - 0.037], color="#e1e7ec", lw=0.8) + left += width + fig.text(0.746, 0.24, r"$C_p=C(q)=K+E+D(q,\tau)$", fontsize=19, ha="center", color=ink) + + canvas.add_patch( + FancyBboxPatch( + (0.027, 0.07), + 0.941, + 0.096, + boxstyle="round,pad=0.008,rounding_size=0.013", + facecolor="#edf4e5", + edgecolor="none", ) - label_y = 3.8 if symbol == r"$E$" else 4.12 - right.text(left + width / 2, label_y, label, fontsize=11, ha="center", color=color) - right.text(4.6, 3.0, r"$C_p=C(q)=K+E+D(q,\tau)$", fontsize=20, ha="center", color=ink) - right.text( - 0, 2.04, r"$C(q)$ → classify and handle admitted candidates", fontsize=12, color=blue ) - right.text(0, 1.20, r"$m$ → refine only the crossing bin in V2", fontsize=12, color=green) - right.text( - 0, 0.35, "A dense boundary can amplify a small threshold error.", fontsize=11, color=muted + fig.text(0.045, 0.113, "V2", fontsize=17, weight="bold", color=green) + fig.text(0.11, 0.112, r"$C(q)$ Candidate handling", fontsize=14, color=ink) + canvas.annotate( + "", + (0.624, 0.108), + (0.413, 0.108), + arrowprops={"arrowstyle": "->", "color": green, "lw": 1.4}, ) + fig.text(0.515, 0.132, "Exact bin counts", fontsize=10.5, color=green, ha="center") + fig.text(0.65, 0.112, r"$m$ Crossing-bin refinement", fontsize=14, color=green) fig.text( 0.04, - 0.055, - "Optimize full-row passes AND candidate work", - fontsize=16, - weight="bold", - color=green, - ) - fig.text( - 0.96, - 0.055, - "Fewer scans can still leave more work after admission.", - fontsize=12, + 0.025, + "Schematic finite-score example · population counts only", + fontsize=10.5, color=muted, - ha="right", ) _save(fig, "candidate_work") diff --git a/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md b/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md index a121916a7c09..917d7c99fbda 100644 --- a/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md +++ b/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md @@ -139,11 +139,11 @@ $$ Here $E$ counts excess entries tied at the boundary, and $D$ counts scores in the shell $q\le x_i\lt\tau$. Dense scores near the boundary can turn a small threshold error into large **candidate amplification**. Temporal overlap alone therefore cannot predict refinement work. -![Two panels connect thresholds to exact candidate counts and decompose the admitted population into K output entries, excess boundary ties, and a below-boundary shell. V2 distinguishes this population from its crossing-bin refinement size.](../media/gvr_v2/candidate_work.svg) +![Threshold admission and candidate amplification for one schematic score row. A staircase tail count marks feasible admission and boundary ties; a proportional bar splits 2.3K candidates into K output, 0.3K excess ties, and a K-sized shell.](../media/gvr_v2/candidate_work.svg) -*Figure 4.* A: exact tail counts identify thresholds satisfying $K\le C(q)\le B_r$, where $B_r$ is candidate capacity; failed admission requires continued verification or exact recovery. B: extra ties and the boundary shell enlarge the candidate population. The curve and population sizes are schematic. Exact handling of ties preserves the Top-K value multiset. +*Figure 4.* A: exact tail counts identify thresholds satisfying $K\le C(q)\le B_r$, where $B_r$ is candidate capacity; failed admission requires continued verification or exact recovery. B: the same schematic row yields 2.3× candidate amplification, split into required output, excess ties, and the boundary shell. Exact handling of ties preserves the Top-K value multiset. -Self-sampling aims to place admission near the current tail. Multi-thresholding then distinguishes certain winners, the crossing bin, and unnecessary lower bins. The admitted count $C(q)$ governs candidate handling; the crossing population $m$ sets the size of the remaining exact selection problem. V2 controls both, while balancing those costs against full-row reads. Figure 5 shows how these steps fit together. +Self-sampling aims to place admission near the current tail; multi-thresholding separates certain winners, the crossing bin, and lower bins. V2 balances full-row reads against candidate handling over $C(q)$ entries and exact refinement over $m$ crossing-bin candidates (Figure 5). ### Self-Sampling: Calibrate the Search to This Row From 17d920febfb697a3862c55fba8302ea4465725d3 Mon Sep 17 00:00:00 2001 From: longcheng-nv <243710427+longcheng-nv@users.noreply.github.com> Date: Thu, 17 Sep 2026 08:14:37 +0000 Subject: [PATCH 20/33] [None][doc] Use trtllm-bench in GVR V2 enablement example Signed-off-by: longcheng-nv <243710427+longcheng-nv@users.noreply.github.com> --- ...VR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md b/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md index 917d7c99fbda..40459b347d09 100644 --- a/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md +++ b/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md @@ -428,11 +428,13 @@ sparse_attention_config: use_self_sampling_topk: true ``` -Use `algorithm: dsa` for DeepSeek-V3.2. The checkpoint supplies the model's Top-K width. For example: +Use `algorithm: dsa` for DeepSeek-V3.2. The checkpoint supplies the model's Top-K width. With a prepared benchmark dataset in `dataset.jsonl`, run: ```bash -trtllm-serve deepseek-ai/DeepSeek-V4-Flash \ - --config gvr_v2.yaml --tp_size 8 --ep_size 8 +trtllm-bench --model deepseek-ai/DeepSeek-V4-Flash throughput \ + --dataset dataset.jsonl \ + --config gvr_v2.yaml \ + --tp 8 --ep 8 ``` `enable_heuristic_topk` defaults to `false`. Once it is enabled, `use_self_sampling_topk` defaults to `true`; the second field is explicit here for clarity. Supported prefill layers follow the same V2 selection. Setting `use_self_sampling_topk: false` selects temporal GVR for decode, whose prefill path remains radix. From d2d31f0eeb083cf6b8a916862584ecc5b2be8753 Mon Sep 17 00:00:00 2001 From: longcheng-nv <243710427+longcheng-nv@users.noreply.github.com> Date: Thu, 17 Sep 2026 08:40:02 +0000 Subject: [PATCH 21/33] [None][doc] Align heatmap introduction with plotted baselines Signed-off-by: longcheng-nv <243710427+longcheng-nv@users.noreply.github.com> --- ...29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md b/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md index 40459b347d09..5545a89fc644 100644 --- a/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md +++ b/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md @@ -288,9 +288,7 @@ The minimum column retains individual regressions. Figure 1 shows the model-leve #### The Gains Extend Beyond an Average -The comparison changes with the model and shape. Figure 1 shows HPC-ops closest on V3.2 and a larger DeepSelect FP32 gap there. The heatmaps resolve those averages into the row-length and batch regions where each advantage appears. - -Figure 7 locates the SGLang gains across the full length–batch grid. +The gains over SGLang and DeepSelect FP32 vary with the model and shape. Figure 7 compares GVR V2 with SGLang, and Figure 8 compares it with DeepSelect FP32. Together, the heatmaps show where each advantage appears across row lengths and batch sizes. ![Three heatmaps of GVR V2 speedup over SGLang for every captured row-length bucket and all eleven batch sizes, averaged geometrically across layers.](../media/gvr_v2/sglang_map.svg) From 3a6f90b2407dc38c464319f29192a78866091e62 Mon Sep 17 00:00:00 2001 From: longcheng-nv <243710427+longcheng-nv@users.noreply.github.com> Date: Thu, 17 Sep 2026 09:01:12 +0000 Subject: [PATCH 22/33] [None][doc] Strengthen GVR V2 narrative and performance evidence Signed-off-by: longcheng-nv <243710427+longcheng-nv@users.noreply.github.com> --- docs/source/blogs/media/gvr_v2/README.md | 40 ++++- ...ampling_Exact_TopK_for_Sparse_Attention.md | 140 +++++++++++------- 2 files changed, 117 insertions(+), 63 deletions(-) diff --git a/docs/source/blogs/media/gvr_v2/README.md b/docs/source/blogs/media/gvr_v2/README.md index 18f300c4e585..332ffcb870b9 100644 --- a/docs/source/blogs/media/gvr_v2/README.md +++ b/docs/source/blogs/media/gvr_v2/README.md @@ -23,19 +23,32 @@ The script regenerates `summary.json` and ten SVGs: `speedup.svg`, `evolution.sv The remaining figure, [temporal_overlap.svg](temporal_overlap.svg), is an author-supplied illustration converted directly from its standalone PDF. Its labels, axes, and plotted contents are preserved. It is not generated by `plot_results.py` or derived from the kernel-timing CSVs. -## GPU Self-Sampling Implementation +## GPU Sampling Implementation `gpu_sampling.svg` illustrates the public device implementation at [the measured PR #19076 revision](https://github.com/NVIDIA/TensorRT-LLM/blob/be1b9885e8df9bf070e8cb68459e24a7119afaa9/tensorrt_llm/_torch/cute_dsl_kernels/blackwell/top_k/gvr_topk_decode_self_sampling.py). It is schematic and adds no measured performance claim. -The sampled `main` path uses two adjacent `float4` loads per logical work item. Clustered streaming uses four vectors per location, divided between work items `j` and `j + SMP`; these need not be adjacent lanes or distinct physical threads when the logical sample exceeds the CTA size. In both families, physical threads stride through additional work items. The initial two vectors remain available for the sample histogram; extra work items are reloaded after sample extrema establish the bin scale. Eight retained sample scores are not the kernel's total register count. +Both streaming families use packed/vectorized current-row windows. Let `d = SS2` be the integer stride in window units and `SMP` the number of windows. The score offsets below are relative to the aligned sampling base, with `0 <= j < SMP`: + +| Family | Window start | Loads and logical ownership | +| :--- | :--- | :--- | +| `main` | `8*j*d` | Work item `j` loads two adjacent `float4` vectors, covering eight FP32 scores | +| `clus` | `16*j*d` | Work item `j` loads the lower eight scores and `j + SMP` loads the upper eight, using two `float4` vectors each | + +The clustered work items need not be adjacent lanes or distinct physical threads when the logical sample exceeds the CTA size. In both families, physical threads stride through additional work items in CTA-sized increments. Vector loads use `ld.global.nc.v4.f32`; the stride and count guards keep them inside the permitted interval. Prefill substitutes a valid score for leading alignment lanes before histogramming. The initial two vectors remain available for the sample histogram; extra work items are reloaded after sample extrema establish the bin scale. Eight retained sample scores are not the kernel's total register count. The [CUDA Best Practices Guide](https://docs.nvidia.com/cuda/cuda-c-best-practices-guide/index.html#coalesced-access-to-global-memory) documents 32-byte access granularity and the cost of sparse or misaligned accesses. A 32-byte-aligned eight-score window occupies one sector and a similarly aligned sixteen-score window occupies two. The supported API guarantees vector alignment, not universal 32/64-byte row alignment; a window offset by 16 bytes touches two or three sectors respectively. Cache reuse, warp issue patterns, and replay can further affect traffic. A 64-byte window is a software grouping, not a claim about cache-line size or a single memory instruction. The locality/coverage and register-lifetime explanation is an engineering interpretation of this implementation, not a measured 8-versus-16 ablation or evidence that either width is universally optimal. At fixed total sample count, the larger window has fewer distinct locations. Correlated values within a window do not supply independent random observations. -The runtime geometry starts with a route-dependent budget proportional to `N / aim`, clamps the requested score count, then derives the integer window stride and count. Targets use the actual `SMP*8` or `SMP*16` population after rounding. The 256-score budget floor and 256 histogram bins are separate tuning parameters. The first warp derives variable-length `main` geometry while the others can prefetch the next row slice. Cluster ranks repeat an identical sample; the sample histograms are CTA-local, whereas subsequent verification histograms may be merged across the cluster. +The runtime geometry starts with a route-dependent budget proportional to `N / aim`, clamps the requested score count between 256 scores and half the row, then derives the integer window stride and count. Targets use the actual `S = SMP*8` or `S = SMP*16` population after rounding. For desired candidate population `A = aim`, the descending target ranks are approximately `A*S/N`, `K*S/N`, and `2*A*S/N`; the third target is implemented as twice the first integer target. The 256-score budget floor and 256 histogram bins are separate tuning parameters. + +Sample extrema reduce within each warp, pass through shared memory, and combine across warps after a CTA barrier to establish the 256 sample bins. Workers increment shared-memory counters, then synchronize before warp 0 calls `scan_cross0`. Each lane scans eight counters using two vector shared-memory loads and warp shuffles. This single scan extracts up to three rank crossings and clears the counters; a caller-side barrier publishes its results. + +Sample-bin lower edges define the primary threshold `T` near rank `A*S/N`, the upper anchor `T_K` near rank `K*S/N`, and the lower anchor `T_3` near rank `2*A*S/N`. For sample-bin width `w`, sampled `main` sets `HIC = max(T + 4*max(T_K - T, 0), T + 8*w)`: fourfold extrapolation of the nonnegative upper gap with at least eight bin widths of headroom. In `clus`, when a valid lower anchor satisfies `T_3 < T`, the upper gap is first capped at `2*(T - T_3)` before applying that same extrapolation and headroom. `HIC` tightens the classification bound; scores above it saturate into the top bin and remain candidates. + +Where enabled and valid, `T_3` supplies the lower admission floor `TSH`. Non-split streaming can retry with this floor after an aggressive primary threshold; the gated split-row route can stage down to the floor during its scan so the merged histogram already includes that wider admitted set. Sample misses, incomplete staging, and degenerate brackets still require exact verification or recovery. Non-sampled short-row and register routes retain their separate initialization policies. -`scan_cross0` scans eight sample counters per lane with vector shared-memory loads and warp shuffles, extracts up to three rank crossings, and clears the counters. Sample bin lower edges define the admission anchors. `HIC` includes extrapolation and minimum-bin-width headroom, with a clustered heavy-tail cap; it does not discard values above the classification bound. Non-sampled short-row and register routes retain their separate initialization policies. Exact verification and recovery cover sample errors and degenerate brackets. +In variable-length `main`, warp 0 derives sampling geometry and publishes it through shared memory while the other warps issue register-free L2 prefetch hints for their CTA's upcoming row slice. Later register preloads and L2 hints are placed after the sample-reduction publication barrier, limiting overlap between live sample-reduction state and prefetched values. Cluster ranks repeat an identical full-row sample and prime their row slices after the corresponding barrier. Their sample histograms are CTA-local; subsequent verification histograms may be merged across the cluster. The prefetch placement is an implementation detail, not an independently measured contribution to speedup. ## Candidate-Work Illustration @@ -111,13 +124,22 @@ SGLang planning can be amortized across layers in a serving integration. FlashIn The temporal R0 and tiered implementations correspond to public [PR #16457](https://github.com/NVIDIA/TensorRT-LLM/pull/16457) and [PR #16877](https://github.com/NVIDIA/TensorRT-LLM/pull/16877). Both belong to later temporal V1, which already uses multi-threshold admission. R0 builds a histogram over hint-gathered scores, proposes a rung ladder, and obtains exact counts for multiple rungs in one row scan. Tiered streaming uses sampled ladder counts to choose a pivot and rescue rung, then verifies both exactly in a fused count/collect pass. Its short-row and register routes have different execution strategies; Figure 3 sketches the streaming comparison, while its bars measure complete implementations. -The original scalar/secant search is historical context, not the algorithm represented by the temporal bars. V2 changes calibration to coalesced current-row sampling and couples it to dense verification-bin counts and crossing-bin refinement; multi-thresholding itself is not a V2-only contribution. The temporal comparisons span full implementations, including scheduling and integration; they are not an isolated self-sampling ablation. The public temporal sources at the article's implementation reference are [the R0 kernel](https://github.com/NVIDIA/TensorRT-LLM/blob/be1b9885e8df9bf070e8cb68459e24a7119afaa9/tensorrt_llm/_torch/cute_dsl_kernels/blackwell/top_k/gvr_topk_decode.py) and [tiered streaming](https://github.com/NVIDIA/TensorRT-LLM/blob/be1b9885e8df9bf070e8cb68459e24a7119afaa9/tensorrt_llm/_torch/cute_dsl_kernels/blackwell/top_k/gvr_topk_decode_tp.py). +The original scalar/secant search is historical context, not the algorithm represented by the temporal bars. V2 changes calibration to packed/vectorized current-row windows and couples it to dense verification-bin counts and crossing-bin refinement; multi-thresholding itself is not a V2-only contribution. The temporal comparisons span full implementations, including scheduling and integration; they are not an isolated self-sampling ablation. The public temporal sources at the article's implementation reference are [the R0 kernel](https://github.com/NVIDIA/TensorRT-LLM/blob/be1b9885e8df9bf070e8cb68459e24a7119afaa9/tensorrt_llm/_torch/cute_dsl_kernels/blackwell/top_k/gvr_topk_decode.py) and [tiered streaming](https://github.com/NVIDIA/TensorRT-LLM/blob/be1b9885e8df9bf070e8cb68459e24a7119afaa9/tensorrt_llm/_torch/cute_dsl_kernels/blackwell/top_k/gvr_topk_decode_tp.py). Figure 3 computes each implementation's speedup directly from its paired radix times. The geometric means are 2.586546× for temporal R0, 3.471858× for tiered temporal GVR, and 5.051864× for V2. Direct temporal/V2 time ratios are 1.953131× and 1.455089×. `summary.json` records these under `evolution_vs_radix` and `temporal_vs_v2`. Historical R0 observations for V3.2 lack explicit N/K metadata; workload identity supplies the join for those records. +The direct V2 comparison also exposes the lower end of the measured speedup distribution: + +| Temporal baseline | V2 speedup, geometric mean | V2 speedup, P5 | V2 wins / cases | V2 win rate | +| :--- | ---: | ---: | ---: | ---: | +| R0 | 1.953131× | 1.348807× | 9,745 / 9,746 | 99.989739% | +| Tiered | 1.455089× | 1.095922× | 9,704 / 9,746 | 99.569054% | + +These P5 values are percentiles across per-case `temporal_us / gvr_v2_us` mean-time ratios, not runtime tail latencies or percentiles of individual timing repetitions. They describe the bundled case distribution and do not establish a worst-case latency guarantee. + ## Aggregation and Coverage -Speedup is the geometric mean of per-case `baseline_us / gvr_v2_us` ratios. Every case has equal weight. A win is a ratio above one; minima and percentiles also use individual ratios. No slower case is discarded. +Speedup is the geometric mean of per-case `baseline_us / gvr_v2_us` ratios. Every case has equal weight. A win is a ratio strictly above one; minima and percentiles also use individual ratios of case-level mean durations. `_stats` in `plot_results.py` calls `numpy.percentile` without a method override, using its default linear interpolation between adjacent sorted ratios at fractional index `(cases - 1)*p/100` for percentile `p`. No slower case is discarded. Figure 1 intersects all supported implementations within each model: 2,079 Flash, 2,970 Pro, and 4,466 V3.2 cases. V2 is fixed at 1.00; shorter bars mean less time. Pro omits unsupported HPC-ops. These values are recorded under `comparison_common_cases`. The article's overall and per-model tables use each baseline's full paired coverage. @@ -152,14 +174,16 @@ For a concrete large-batch slice, the following times are at $B=1024$ and $N\app ## Roofline Definitions -The logical work is `W = B*N` abstract comparisons and the minimum traffic is `Q = 4*B*(N+K)` bytes. Operational intensity is `I = W/Q`; measured useful throughput is `P = B*N/(time_us*1e6)` Tcompare/s. Every kernel uses this same normalization. Extra outputs, padding, staging, repeated scans, and synchronization remain in measured time but do not enlarge the ideal work or minimum-traffic terms. The plotted throughput is not a hardware instruction rate or measured DRAM bandwidth. +The logical work is `W = B*N` abstract comparisons and the minimum traffic is `Q_min = 4*B*(N+K)` bytes, accounting for FP32 score reads and INT32 index writes. Operational intensity is `I = W/Q_min`; measured useful throughput is `P = B*N/(time_us*1e6)` Tcompare/s. Every kernel uses this same normalization. Extra outputs, padding, staging, repeated scans, and synchronization remain in measured time but do not enlarge the ideal work or minimum-traffic terms. The plotted throughput is not a hardware instruction rate or measured DRAM bandwidth. The full model is `min(R, BW*I)`. The theoretical parameters are `R=37.224960 Tcompare/s` and `BW=8 TB/s`; calibrated parameters are `R=37.047490 Tcompare/s` and `BW=6.912116 TB/s`. Their knees are 4.65312 and approximately 5.35979 compare/byte, above Top-K's ideal `[0.125, 0.25)` intensity range. The semantic comparison convention counts two binary comparisons per FMNMX3 result; it is not FP32 FLOPS. -Figure 10B uses linear axes at B=1024. In this article, a Pareto curve denotes each operator's plotted intensity–throughput curve at that fixed batch. Figure 9 also shows B=1, and both heatmaps cover all 11 batches. +Figure 10B uses linear axes at B=1024. In this article, a Pareto curve denotes each operator's measured intensity–throughput trace across row lengths at that fixed batch. The points connect in intensity order; the curve is not a computed nondominated frontier or a search over configurations. Figure 9 also shows B=1, and both heatmaps cover all 11 batches. Reachable rate is `100 * P / min(R, BW*I)` percent, using the calibrated roof. Compute each point from the arithmetic-mean duration across the same matched layers used in Figure 10B. The average reachable rate is the unweighted arithmetic mean of these point-level percentages, and the peak is their maximum. Flash and Pro each contribute nine intensity points; V3.2 contributes seven. The average is not weighted by row length or serving frequency. Unsupported HPC-ops Pro results remain absent. `summary.json` records the point counts and average/peak percentages under `roofline_reachable_rate`. +Every plotted point lies on the bandwidth branch of the roof. With elapsed time `t` and consistent units, the fractional reachable rate simplifies to `(W/t)/(BW*W/Q_min) = Q_min/(BW*t)`; multiply by 100 for percent. This is the ideal minimum-traffic time `Q_min/BW` divided by measured time. The cancellation of `W` explains why the comparison convention does not change the reachable rate on this branch. Additional traffic and kernel work remain in `t`, so the rate does not measure actual DRAM bytes transferred or bandwidth utilization. + The read-dominated roof is optimistic; mixed read/write behavior and additional kernel work can lower achievable throughput. Reachable rate describes useful selection work relative to this model, not measured DRAM bandwidth utilization. The input-read term applies to nontrivial selection with more valid scores than output slots. Short-row identity/padding paths can skip score reads; they are outside the measured grid and should not be evaluated against this traffic bound. diff --git a/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md b/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md index 5545a89fc644..53ad75af2578 100644 --- a/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md +++ b/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md @@ -11,7 +11,7 @@ By NVIDIA TensorRT-LLM Team Selecting 1,024 INT32 indices from 131,072 FP32 scores writes just **4 KiB of output**, yet one complete read of the scores moves **512 KiB**. Every additional full-row pass pays that input cost again. For a sparse-attention indexer, finding the Top-K boundary can therefore cost far more than emitting the winners. -GVR V2 makes each full-row pass more useful without depending on the previous decode step to predict the current one. **Self-sampling estimates where the current row's Top-K boundary lies; multi-thresholding derives many exact population counts from one classification pass.** Together, they concentrate exact refinement on the small group of scores still competing for the final slots. The sampling idea builds on Floyd–Rivest SELECT, adapted to the memory traffic and parallel execution costs of GPU Top-K. +GVR V2 makes each full-row pass more useful without depending on the previous decode step to predict the current one. **Self-sampling estimates where the current row's Top-K boundary lies; multi-thresholding derives many exact population counts from one classification pass.** Together, they concentrate exact refinement on the small group of scores still competing for the final slots. Removing the Top-K prior also lets prefill and decode share a streaming selection core, with phase differences handled by row adapters. On B200, this design delivers **5.05× geometric-mean speedup over TensorRT-LLM radix CUDA and 1.70× over SGLang v2**, with **2.06× over FlashInfer, 2.42× over DeepSelect FP32, and 1.59× over HPC-ops FP32**. The workloads span DeepSeek-V3.2, DeepSeek-V4 Flash, and DeepSeek-V4 Pro indexers. The SGLang result includes planning; the transform-only comparison is **1.46×**. @@ -19,13 +19,15 @@ On B200, this design delivers **5.05× geometric-mean speedup over TensorRT-LLM *Figure 1. Kernel time relative to GVR V2, geometrically averaged over the same workloads within each model; shorter is faster. The temporal bars show the R0 and tiered implementations. SGLang includes planning; HPC-ops does not support Pro.* +**The operator contract.** Given FP32 indexer scores and valid-row metadata, Top-K returns unordered INT32 positions for sparse attention's KV selection. With finite scores and at least $K$ entries, it selects an exact value multiset through $K$ distinct indices; ties can choose different positions. [Enablement](#enable-gvr-v2) lists hardware, shape, and configuration requirements. + [The original GVR blog](blog21_Temporal_Correlation_Meets_Sparse_Attention.md) described a temporal shortcut: the previous decode step's selected indices predict the next step's winners. Experience with V1 exposed two limits: hint quality varies sharply, and maintaining the hint couples selection to the serving framework. V2 makes the current row the source of the guess, targeting **a stronger performance floor and better average latency**, while enabling **one selection core for prefill and decode**. The **Guess–Verify–Refine** exactness contract remains. **Table of Contents** - **[Motivation and Design Foundations](#motivation-and-design-foundations)** - - [From Floyd–Rivest SELECT to GPU Top-K](#from-floydrivest-select-to-gpu-top-k) - [From GVR V1 to V2: Why Move Beyond Temporal Hints?](#from-gvr-v1-to-v2-why-move-beyond-temporal-hints) + - [From Floyd–Rivest SELECT to GPU Top-K](#from-floydrivest-select-to-gpu-top-k) - **[Self-Sampling and Multi-Thresholding](#self-sampling-and-multi-thresholding)** - [Why Threshold Quality Matters: Passes and Candidate Work](#why-threshold-quality-matters-passes-and-candidate-work) - [Self-Sampling: Calibrate the Search to This Row](#self-sampling-calibrate-the-search-to-this-row) @@ -41,29 +43,6 @@ On B200, this design delivers **5.05× geometric-mean speedup over TensorRT-LLM ## Motivation and Design Foundations -### From Floyd–Rivest SELECT to GPU Top-K - -GVR V2's self-sampling was inspired by Floyd and Rivest's 1975 paper, [*Expected Time Bounds for Selection*](https://people.csail.mit.edu/rivest/pubs/FR75a.pdf). Its theoretical SELECT algorithm draws a random sample, chooses two sample order statistics to bracket the desired rank, partitions the full input, and continues exactly in the partition containing that rank. If the bracket misses, selection continues in the appropriate outer partition. Sampling reduces expected work without making the answer approximate. - -The classical expected comparison bound for ascending rank $i$ among $n$ elements is - -$$ -n+\min(i,n-i)+o(n). -$$ - -This belongs to a comparison model with random-sampling assumptions; the original treatment assumes distinct keys. [Kiwiel's later analysis](https://arxiv.org/abs/cs/0312055) establishes rigorous bounds for SELECT variants, including repeated keys. These results motivate **using sample ranks to narrow an exact selection problem**. - -GVR V2 carries that principle into a different cost model: - -| Design choice | Floyd–Rivest theoretical SELECT | GVR V2 streaming | -| :--- | :--- | :--- | -| Primary objective | Expected element comparisons | Kernel latency: input passes, memory traffic, and parallel work | -| Calibration | Random sample and sample order statistics | Regularly spaced, coalesced sample and histogram quantiles | -| Remaining selection | Exact partitioning and recursive selection | Exact bin counts, crossing-bin refinement, and recovery | -| Result | An element at the requested rank | An exact set of $K$ indices, without requiring sorted output | - -On a GPU, doing more work on chip can be worthwhile if it avoids another full-row read. V2 therefore couples sampling to candidate capacity, coalesced loads, and multi-threshold counts; its launch families balance that work against synchronization and available parallelism. **The inherited idea is sample-guided exact selection; the optimization target is GPU execution cost.** V2's deterministic sampling policy does not inherit SELECT's randomized comparison bound. Its exactness follows from full-row accounting and exact refinement or recovery, while its performance is evaluated below. - ### From GVR V1 to V2: Why Move Beyond Temporal Hints? Temporal GVR V1 gathers current scores at the previous step's Top-K indices to predict admission thresholds. **Later V1 already uses multi-thresholding.** Its [R0 path](https://github.com/NVIDIA/TensorRT-LLM/pull/16457) builds a histogram over those gathered scores, proposes a threshold ladder, and counts its rungs together in one full-row pass. The [tiered streaming path](https://github.com/NVIDIA/TensorRT-LLM/pull/16877) also uses multiple thresholds, including exact counts at a pivot and a rescue rung. These are the temporal implementations compared with V2 below. @@ -109,7 +88,7 @@ V1's prior also has a lifecycle outside the kernel. Temporal V1 has no prefill e | Algorithm question | Later temporal V1: R0 / tiered streaming | Streaming GVR V2 | | :--- | :--- | :--- | -| Where does the guess come from? | Current scores gathered through previous-step indices | A coalesced sample of the current row | +| Where does the guess come from? | Current scores gathered through previous-step indices | Packed sample windows spread across the current row | | What makes the guess useful? | High, stable overlap with previous winners | Coverage of the current row's score distribution | | What guides admission? | A hint-derived ladder, with path-specific pivot and rescue choices | Sample-derived primary threshold, lower safety floor, and upper anchor | | What does verification learn? | Exact counts at multiple admission thresholds | Exact bin populations and counts at many boundaries | @@ -124,8 +103,52 @@ V1's prior also has a lifecycle outside the kernel. Temporal V1 has no prefill e Temporal R0 and tiered GVR achieve **2.59× and 3.47×** speedup over radix CUDA; V2 reaches **5.05×**. V2 is **1.95× faster than temporal R0** and **1.46× faster than tiered temporal GVR**. These gains compare complete implementations, including their calibration, verification, refinement, and execution paths. +The improvement also extends to the lower end of the measured speedup distribution: + +| Temporal V1 baseline | Geomean speedup | P5 speedup | Minimum speedup | V2 faster | +| :--- | ---: | ---: | ---: | ---: | +| R0 | **1.95×** | **1.35×** | 0.999× | 99.99% | +| Tiered streaming | **1.46×** | **1.10×** | 0.689× | 99.57% | + +P5 is the fifth percentile across workload-level speedups, each computed from mean kernel times. These results support broad improvement across tested workloads while retaining local regressions. Runtime P95/P99 latency and a fixed worst-case bound require different evidence; the stronger performance floor remains a design objective. + +### From Floyd–Rivest SELECT to GPU Top-K + +GVR V2's self-sampling was inspired by Floyd and Rivest's 1975 paper, [*Expected Time Bounds for Selection*](https://people.csail.mit.edu/rivest/pubs/FR75a.pdf). Its theoretical SELECT algorithm draws a random sample, chooses two sample order statistics to bracket the desired rank, partitions the full input, and continues exactly in the partition containing that rank. If the bracket misses, selection continues in the appropriate outer partition. Sampling reduces expected work without making the answer approximate. + +The classical expected comparison bound for ascending rank $i$ among $n$ elements is + +$$ +n+\min(i,n-i)+o(n). +$$ + +This belongs to a comparison model with random-sampling assumptions; the original treatment assumes distinct keys. [Kiwiel's later analysis](https://arxiv.org/abs/cs/0312055) establishes rigorous bounds for SELECT variants, including repeated keys. These results motivate **using sample ranks to narrow an exact selection problem**. + +GVR V2 carries that principle into a different cost model: + +| Design choice | Floyd–Rivest theoretical SELECT | GVR V2 streaming | +| :--- | :--- | :--- | +| Primary objective | Expected element comparisons | Kernel latency: input passes, memory traffic, and parallel work | +| Calibration | Random sample and sample order statistics | Regularly spaced, packed sample windows and histogram quantiles | +| Remaining selection | Exact partitioning and recursive selection | Exact bin counts, crossing-bin refinement, and recovery | +| Result | An element at the requested rank | An exact set of $K$ indices, without requiring sorted output | + +On a GPU, doing more work on chip can be worthwhile if it avoids another full-row read. V2 couples sampling to candidate capacity, vectorized loads, and multi-threshold counts. **The inherited idea is sample-guided exact selection; the optimization target is GPU execution cost.** Its deterministic sampling policy does not inherit SELECT's randomized comparison bound. Exactness follows from full-row accounting and exact refinement or recovery. + ## Self-Sampling and Multi-Thresholding +For nontrivial selection, the sampled streaming paths follow three steps. Register-resident families bypass sparse sampling and use a different initial bracket, while retaining exact classification and refinement; the dispatcher chooses among these execution families for each workload. + +1. **Guess:** sample packed windows of the current row to place admission and verification bins near its tail. +2. **Verify:** account for every valid score and establish a complete admitted population containing at least K candidates. Too few survivors require wider admission; incomplete staging requires exact recovery. +3. **Refine:** emit winners above the crossing bin and select the remaining slots exactly from that bin. + +![Self-sampling, exact multi-threshold counts, and crossing-bin refinement, with three verification outcomes: refine, lower admission, or exact recovery.](../media/gvr_v2/algorithm.svg) + +*Figure 4. The sample histogram estimates a bracket; the verification histogram counts the complete admitted population. The lower panel shows how verification controls refinement and recovery. Bin heights and the 980/73/44 example are illustrative; exact recovery depends on the kernel family.* + +For example, with $K=1024$, suppose 980 scores lie above the crossing bin and 73 lie inside it. Emit the 980 directly and select the best **44 of those 73**. A useful sample keeps this boundary problem small; complete counts and exact refinement make the answer correct. + ### Why Threshold Quality Matters: Passes and Candidate Work A useful threshold balances **full-row passes and candidate work**. A loose threshold may save a scan yet admit so many candidates that processing them consumes the saving. Another pass is worthwhile only when the work it removes exceeds its cost. @@ -141,30 +164,26 @@ Here $E$ counts excess entries tied at the boundary, and $D$ counts scores in th ![Threshold admission and candidate amplification for one schematic score row. A staircase tail count marks feasible admission and boundary ties; a proportional bar splits 2.3K candidates into K output, 0.3K excess ties, and a K-sized shell.](../media/gvr_v2/candidate_work.svg) -*Figure 4.* A: exact tail counts identify thresholds satisfying $K\le C(q)\le B_r$, where $B_r$ is candidate capacity; failed admission requires continued verification or exact recovery. B: the same schematic row yields 2.3× candidate amplification, split into required output, excess ties, and the boundary shell. Exact handling of ties preserves the Top-K value multiset. +*Figure 5.* A: exact tail counts identify thresholds satisfying $K\le C(q)\le B_r$, where $B_r$ is candidate capacity; failed admission requires continued verification or exact recovery. B: the same schematic row yields 2.3× candidate amplification, split into required output, excess ties, and the boundary shell. Exact handling of ties preserves the Top-K value multiset. -Self-sampling aims to place admission near the current tail; multi-thresholding separates certain winners, the crossing bin, and lower bins. V2 balances full-row reads against candidate handling over $C(q)$ entries and exact refinement over $m$ crossing-bin candidates (Figure 5). +Self-sampling aims to place admission near the current tail; multi-thresholding separates certain winners, the crossing bin, and lower bins. V2 balances full-row reads against candidate handling over $C(q)$ entries and exact refinement over $m$ crossing-bin candidates. ### Self-Sampling: Calibrate the Search to This Row V2 calibrates inside the selection kernel, using the current row's layout to generate sample addresses. It needs neither previous winners nor a separate sampling kernel. The sample estimates a useful starting region; full-row verification determines whether that region contains enough candidates. -![Self-sampling, exact multi-threshold counts, and crossing-bin refinement, with three verification outcomes: refine, lower admission, or exact recovery.](../media/gvr_v2/algorithm.svg) - -*Figure 5. The sample histogram estimates a bracket; the verification histogram counts the complete admitted population. The lower panel shows how verification controls refinement and recovery. Bin heights and the 980/73/44 example are illustrative; exact recovery depends on the kernel family.* - #### Load Short Windows, Spread Them Across the Row A **sample window** is a contiguous group of scores. A CUDA thread block processes many such windows. The streaming families use these layouts: | Family | Scores per window | Loads and logical ownership | | :--- | :--- | :--- | -| `main` | 8 FP32 scores = 32 bytes | Work item `j` loads two adjacent `float4` vectors | -| `clus` | 16 FP32 scores = 64 bytes | Work items `j` and `j + P` each load two vectors, covering the lower and upper halves; `P` is the number of windows | +| `main` | 8 FP32 scores = 32 bytes | One work item loads two adjacent `float4` vectors | +| `clus` | 16 FP32 scores = 64 bytes | Two work items each load two vectors, covering the lower and upper halves | -For stride `d` in window units, window `j` begins at score offset `8*j*d` or `16*j*d` from the aligned sampling base. Threads process logical work items in CTA-sized strides when the sample exceeds the block's thread count. The stride and window count come from the valid row extent and sampling budget, with guards keeping every vector load inside the permitted interval. Prefill substitutes a valid score for leading alignment lanes before histogramming. +Regular spacing spreads the windows across the valid row. The sampling budget sets their count and spacing, while bounds and alignment handling keep loads valid for each phase. A thread block processes more windows in iterations when the sample exceeds its parallel capacity. -**Why eight?** Eight FP32 scores fill a 32-byte memory sector when the window is sector-aligned. A scattered scalar sample can use only four bytes from each fetched sector. Two adjacent, 16-byte-aligned `float4` loads consume the whole window, giving more sample values per touched sector. The implementation issues explicit `ld.global.nc.v4.f32` loads. This is local packing within each window; widely spaced windows still produce strided accesses across the warp. The [CUDA memory-access model](https://docs.nvidia.com/cuda/cuda-c-best-practices-guide/index.html#coalesced-access-to-global-memory) explains the sector granularity. Actual sector traffic also depends on the row's alignment and cache state. +**Why eight?** Eight FP32 scores fill a 32-byte memory sector when the window is sector-aligned. A scattered scalar sample can use only four bytes from each fetched sector. Two adjacent, 16-byte-aligned `float4` loads consume the whole window, giving more sample values per touched sector. This is local packing within each window; widely spaced windows still produce strided accesses across the warp. The [CUDA memory-access model](https://docs.nvidia.com/cuda/cuda-c-best-practices-guide/index.html#coalesced-access-to-global-memory) explains the sector granularity. Actual sector traffic also depends on the row's alignment and cache state. **Why sixteen in `clus`?** It groups two neighboring 32-byte pieces into one sampled location, divided between two work items. Each retains the same eight-score payload as `main`, avoiding a sixteen-score live payload in one worker. The engineering tradeoff is locality versus coverage: at a fixed sample budget, sixteen-score windows visit half as many locations as eight-score windows. Both aligned layouts can fully use their sectors; the clustered grouping favors wider local coverage at each visited location without doubling the per-worker sample payload. These are implementation tradeoffs, not a statistical guarantee or a universal optimum; a 64-byte window comprises four vector loads. @@ -176,7 +195,7 @@ For stride `d` in window units, window `j` begins at score offset `8*j*d` or `16 Each sampling worker keeps its first two vectors in registers. Local minima and maxima reduce within each warp; warp results are published through shared memory and combined after a CTA barrier. These extrema define **256 sample bins**. Workers then increment shared-memory counters for their sample values. Additional windows beyond the initially retained pair are reloaded for histogramming, limiting live register state. -After another barrier, warp 0 scans the histogram: each lane handles eight counters, and shuffle operations combine their populations. The same scan finds the required rank crossings and clears the counters for the next phase. This avoids sorting the sample or running a separate search for every anchor. +After another barrier, warp 0 scans the histogram using vector counter loads and warp shuffles. One scan finds all required rank crossings and clears the counters for the next phase, avoiding a sample sort or a separate search for every anchor. Let $S$ be the actual sample size and $A\ge K$ the desired full-row candidate population. The launch policy starts with a sample budget proportional to $N/A$, clamps its target between 256 scores and half the row, and rounds to legal windows. It computes target ranks from the resulting $S$, rather than the unrounded budget: @@ -184,17 +203,17 @@ $$ r_A\approx\frac{AS}{N},\qquad r_K\approx\frac{KS}{N},\qquad r_{2A}\approx\frac{2AS}{N}. $$ -The budget therefore targets a usable number of observations in the relevant tail, rather than a fixed sampling percentage. Descending histogram crossings supply: +The intuition is to keep enough observations in the relevant tail: as its target fraction $A/N$ shrinks, increasing $S$ maintains roughly $AS/N$ tail observations, before clamping and window rounding. Descending histogram crossings supply: - **Primary threshold $T$:** the lower edge of the sample bin at rank $r_A$, aiming for roughly $A$ full-row survivors. -- **Upper anchor $T_K$:** the bin edge near rank $r_K$. In `main`, the classification bound `HIC` extends four times the nonnegative distance from $T$ to $T_K$, with at least eight sample-bin widths of headroom. The clustered route also caps this extrapolation using the lower quantile to limit heavy-tail expansion. -- **Lower floor $T_{\mathrm{floor}}$:** the bin edge near rank $r_{2A}$, where enabled, admitting a larger population after an aggressive estimate (`TSH`). +- **Upper anchor $T_K$:** the bin edge near rank $r_K$, used to choose the verification histogram's upper bound with headroom for sampling error. Values beyond that bound remain candidates. +- **Lower floor $T_{\mathrm{floor}}$:** the bin edge near rank $r_{2A}$, where enabled, admitting a larger population after an aggressive estimate. The sample histogram estimates these anchors without assuming a known score distribution. Regularly spaced windows can still miss an unusual tail or correlate with structured scores. Degenerate samples use conservative recovery paths; exact full-row accounting remains the authority. #### Overlap Calibration with the Upcoming Row Read -In the variable-length `main` route, warp 0 computes sampling geometry and publishes it through shared memory while the other warps issue L2 prefetch hints for their upcoming row slice. Later prefetches are placed after the sample-reduction barrier to limit overlapping register lifetimes. Clustered streaming deliberately repeats the same full-row sample in each CTA, so all ranks derive the same classification bracket before merging their verification histograms. These choices balance calibration latency, register pressure, and communication with the cost of the full-row pass. +In the variable-length `main` route, warp 0 prepares sampling geometry while other warps can prefetch their upcoming row slice. The schedule limits overlapping register lifetimes. Clustered streaming repeats the same sample in each CTA so that all ranks derive a common bracket before merging verification histograms. These choices trade a little repeated calibration work for simpler communication. Exact address formulas, prefetch placement, and anchor constants are retained in the [implementation companion](../media/gvr_v2/README.md#gpu-sampling-implementation). ### Multi-Thresholding: Make Each Full-Row Pass Count @@ -225,13 +244,13 @@ $$ \quad\cup\quad \mathrm{Top}_{K-a}(\text{crossing bin}). $$ -For $K=1024$, suppose 980 scores lie above the crossing bin and 73 lie inside it. Emit the 980 directly and select the best **44 of those 73**. The remaining ranking problem has shrunk from the full row to a narrow boundary population. If the entire crossing bin is needed, it can be emitted directly. Small crossings use direct ranking; larger ones use exact order-preserving FP32 key refinement. +If the entire crossing bin is needed, it can be emitted directly. Small crossings use direct ranking; larger ones use exact order-preserving FP32 key refinement. The same decomposition underlies the 980-plus-44 example in Figure 4. The histogram discretizes the search region, not the selected scores. Exact comparisons within the crossing bin resolve its coarse boundaries, including ties. Thus fewer passes do not require approximate Top-K membership. #### How Verification Preserves Exactness -**The sample focuses the bins; exact bin counts make the sample safe.** A useful bracket keeps the crossing small, while multi-threshold verification avoids a separate full-row query for every trial boundary. Figure 5 distinguishes the resulting paths: refine a complete admitted set, lower admission when too few scores survive, or recover exactly when staging or bracket checks fail. +**The sample focuses the bins; exact bin counts make the sample safe.** A useful bracket keeps the crossing small, while multi-threshold verification avoids a separate full-row query for every trial boundary. Figure 4 distinguishes the resulting paths: refine a complete admitted set, lower admission when too few scores survive, or recover exactly when staging or bracket checks fail. Two mechanisms have different jobs. The **admission ladder**—the primary threshold, lower floor, and conservative sentinel—widens the candidate region. The **verification bin boundaries** locate rank $K$ within that region. Non-split streaming can rescan at a lower threshold; split-row streaming can stage down to the lower floor within its scan. Overflow requires complete-set or whole-row exact recovery. @@ -264,7 +283,7 @@ This explains the two sources of performance improvement: a better starting thre #### Benchmark Setup -The benchmarks use FP32 indexer scores from the three models below on NVIDIA B200, repeating each captured row across batch sizes from 1 to 1,024. GVR V2 uses the merged [PR #19076](https://github.com/NVIDIA/TensorRT-LLM/pull/19076) implementation. Results report cold-L2 GPU kernel time, excluding compilation, input preparation, and Python overhead. Speedups are geometric means over matched workloads from separate benchmark runs; this grid measures kernel scaling, while serving results appear separately below. +The benchmarks use FP32 indexer scores from the three models below on NVIDIA B200. Batch size $B$ counts score rows: each case repeats one captured row across 1 to 1,024 batch rows to measure kernel scaling. It does not represent heterogeneous serving concurrency. GVR V2 uses the merged [PR #19076](https://github.com/NVIDIA/TensorRT-LLM/pull/19076) implementation. Results report cold-L2 GPU kernel time, excluding compilation, input preparation, and Python overhead. Speedups are geometric means over matched workloads from separate benchmark runs. The grid uses single-token decode and case-matched launch envelopes; ragged batches, MTP, and prefill require separate evaluation. Historical serving results appear in the [integration section](#serving-gains-from-the-shared-engine). | Model | $K$ | Indexer compression | Valid row lengths $N$ | | :--- | ---: | ---: | :--- | @@ -352,13 +371,20 @@ The calibrated limits are **6.912 TB/s** sustained read bandwidth and **37.047 T ![A clean two-level roofline: the full B200 hardware model highlights Top-K's narrow bandwidth-limited band; three linear-scale Pareto curve panels compare GVR V2 and five baselines at batch 1024, with GVR V2 highlighted in green.](../media/gvr_v2/roofline.svg) -*Figure 10.* A: the full theoretical and calibrated roofs. B: Pareto curves in the Top-K band at $B=1024$, plotting useful throughput $P=BN/t$ against intensity $I=N/[4(N+K)]$ on linear axes. Green highlights V2; the dotted line is the calibrated bandwidth roof. All kernels share the same minimum-traffic model $Q_{\min}$, while extra reads and output work remain in measured time. +*Figure 10.* A: theoretical and calibrated roofs. B: Pareto curves at $B=1024$, plotting useful throughput $P=BN/t$ against ideal intensity $I=N/[4(N+K)]$. Green highlights V2; the dotted line is the calibrated bandwidth roof. All kernels share $Q_{\min}$; extra work remains in measured time. This measures useful work relative to ideal traffic, not actual DRAM utilization. #### Compare Pareto Curves and Reachable Rates -Each operator's **Pareto curve** in Figure 10B traces useful throughput across intensities at $B=1024$. At fixed $N$ and $K$, every implementation has the same horizontal position; a faster kernel moves **upward**, toward the calibrated roof. Figure 9 retains the contrasting single-row view, and Figures 7 and 8 cover all 11 batch sizes. +Each operator's **Pareto curve** in Figure 10B is its measured intensity–throughput trace across row lengths at $B=1024$. At fixed $N$ and $K$, every implementation has the same horizontal position; a faster kernel moves **upward**, toward the calibrated roof. Figure 9 retains the contrasting single-row view, and Figures 7 and 8 cover all 11 batch sizes. + +The **reachable rate** is useful throughput divided by the calibrated roof, expressed as a percentage. Throughout the plotted bandwidth branch, its underlying ratio simplifies to -The **reachable rate** is $P(I)/P_{\mathrm{calibrated}}(I)$, expressed as a percentage. The table compares **average / peak reachable rate** along each Pareto curve. The average weights the plotted intensity points equally; the peak is their maximum. Both use the same layer-averaged timings as Figure 10B. +$$ +\rho=\frac{P(I)}{P_{\mathrm{calibrated}}(I)} +=\frac{Q_{\min}}{\mathrm{BW}\,t}. +$$ + +It measures efficiency relative to the ideal traffic bound. The table compares **average / peak reachable rate** along each Pareto curve: the average weights the plotted intensity points equally, and the peak is their maximum. Both use the same layer-averaged timings as Figure 10B. | Operator | V4 Flash | V4 Pro | V3.2 | | :--- | ---: | ---: | ---: | @@ -375,17 +401,21 @@ GVR V2 leads both measures on all three models: its average reachable rate is ** #### Interpret the Remaining Gap -The full ideal bound is $T_{\mathrm{roof}}=\max(Q_{\min}/\mathrm{BW},W/R_{\mathrm{compare}})$. Within the Top-K band, traffic dominates. Sampling, histogram updates, candidate staging, exact refinement, and synchronization account for work beyond the ideal minimum. Short-row identity/padding paths can skip score reads and lie outside this model. +The full ideal bound is $T_{\mathrm{roof}}=\max(Q_{\min}/\mathrm{BW},W/R_{\mathrm{compare}})$. Within the Top-K band, the bandwidth term sets this bound. A kernel's actual bottleneck can also involve histogram updates, synchronization, register pressure, candidate staging, or exact refinement. Attributing the measured gap to these mechanisms requires counters or ablations beyond the latency comparisons. Short-row identity/padding paths can skip score reads and lie outside this model. -The pass/candidate tradeoff in Figure 4 explains two sources of this gap: another full-row scan adds traffic, while a loose admission threshold adds candidate work even when the scan count stays fixed. V2 uses exact bin populations to restrict the remaining selection to the crossing bin. These costs increase measured time; under the shared minimum-traffic model, they move useful throughput downward at the same intensity. The read-dominated roof is optimistic, especially when $K/N$ is large; the plotted throughput describes useful selection work rather than measured DRAM traffic. +The pass/candidate tradeoff in Figure 5 explains two sources of this gap: another full-row scan adds traffic, while a loose admission threshold adds candidate work even when the scan count stays fixed. V2 uses exact bin populations to restrict the remaining selection to the crossing bin. These costs increase measured time; under the shared minimum-traffic model, they move useful throughput downward at the same intensity. The read-dominated roof is optimistic, especially when $K/N$ is large; the plotted throughput describes useful selection work rather than measured DRAM traffic. ## TensorRT-LLM Integration and Takeaways ### Decode and Prefill in TensorRT-LLM -Self-sampling changes the integration boundary as well as the threshold estimate. A temporal prior makes selection depend on state produced by an earlier call. Its buffers, initialization, request alignment, and write-back must remain valid through CUDA Graph warmup and replay; disaggregated prefill/decode also needs a policy for making the prior available at the handoff. Prefill and decode do not naturally obtain that hint in the same way. These extra lifecycle rules create maintenance work and opportunities for inconsistent state. +The integration follows three boundaries: remove the Top-K prior lifecycle, adapt each phase's row metadata, and prepare launch specializations before graph capture. + +#### Remove the Top-K Prior Lifecycle + +A temporal prior carries state from an earlier selection. Its buffers, initialization, request alignment, and write-back must stay valid through CUDA Graph warmup and replay. Disaggregated prefill/decode also needs a policy for providing that prior at the phase handoff. -V2 derives its bracket from the current scores in both phases. Selection therefore needs the current row and its metadata, with no previous-step Top-K buffer, prefill-to-decode prior seeding, or prior write-back. This removes a Top-K-specific state dependency from graph preparation and phase handoffs. [PR #18446](https://github.com/NVIDIA/TensorRT-LLM/pull/18446) limits prior ownership to the temporal engine. +V2 derives its bracket from the current scores in both phases. This removes the previous-step Top-K buffer, prefill-to-decode prior seeding, and prior write-back from the V2 call contract. Request metadata and launch preparation remain, but they no longer maintain a selection history. [PR #18446](https://github.com/NVIDIA/TensorRT-LLM/pull/18446) confines prior ownership to the temporal engine. #### One Selection Core, Two Row Interfaces @@ -403,9 +433,9 @@ This separation keeps phase-specific decisions in the wrapper, dispatch, and com #### Stable Launches, Dynamic Row Lengths -Host routing chooses a stable launch envelope; device metadata supplies each row's actual length. The physical memory bound remains separate from the bound used to select an execution plan. Warmup prepares exact-row decode launchers and a bounded set of prefill tiers and width buckets, with distinct compilation-cache keys for the two phase specializations. [PR #18683](https://github.com/NVIDIA/TensorRT-LLM/pull/18683) and [PR #18702](https://github.com/NVIDIA/TensorRT-LLM/pull/18702) establish these rules. +Host routing chooses a stable launch envelope; device metadata supplies each row's actual length. The physical memory bound remains separate from the bound used to select an execution plan. Before capture, warmup must prepare exact-row decode launchers and a bounded set of prefill tiers and width buckets, using the same envelope-dependent plan rule as execution and readiness checks. -[PR #19076](https://github.com/NVIDIA/TensorRT-LLM/pull/19076) also selects a sampled prefill plan for qualifying small row envelopes. Execution, readiness checks, and warmup share the envelope-dependent plan rule; decode launcher and warmup caches distinguish the device's SM count and architecture. These changes improve plan selection around the shared kernel while keeping graph preparation consistent with execution. +Prefill and decode have distinct specialization keys; decode launcher and warmup caches also distinguish SM count and architecture. This lets dispatch tune execution, including sampled prefill plans for qualifying small envelopes, while preserving the graph's prepared launch contract. These rules are implemented through [PR #18683](https://github.com/NVIDIA/TensorRT-LLM/pull/18683), [PR #18702](https://github.com/NVIDIA/TensorRT-LLM/pull/18702), and [PR #19076](https://github.com/NVIDIA/TensorRT-LLM/pull/19076). When scores fail the `TopK` module's dtype, stride, or alignment gate, it selects native insertion/radix. Prefill also selects radix for an all-short tile or a missing capture-time specialization. Decode requires its exact launcher key to be warmed before capture; a missing key raises an error. Invalid low-level tensor or storage contracts likewise raise, so fallback is a dispatch policy, not a catch-all for engine errors. @@ -417,7 +447,7 @@ For decode, [PR #18410](https://github.com/NVIDIA/TensorRT-LLM/pull/18410) repor #### Enable GVR V2 -On a TensorRT-LLM revision containing the linked integration PRs, save the following as `gvr_v2.yaml`: +Use a TensorRT-LLM revision containing [PR #19076](https://github.com/NVIDIA/TensorRT-LLM/pull/19076). The production V2 dispatch requires CUTLASS DSL, datacenter Blackwell SM100/SM103, $K\in\lbrace 512,1024,2048\rbrace$, and indexer compression ratios 1 or 4. Save the following as `gvr_v2.yaml`: ```yaml sparse_attention_config: @@ -437,7 +467,7 @@ trtllm-bench --model deepseek-ai/DeepSeek-V4-Flash throughput \ `enable_heuristic_topk` defaults to `false`. Once it is enabled, `use_self_sampling_topk` defaults to `true`; the second field is explicit here for clarity. Supported prefill layers follow the same V2 selection. Setting `use_self_sampling_topk: false` selects temporal GVR for decode, whose prefill path remains radix. -The production V2 dispatch requires CUTLASS DSL, datacenter Blackwell SM100/SM103, $K\in\lbrace 512,1024,2048\rbrace$, and indexer compression ratios 1 or 4. The fast path expects FP32 scores with unit inner stride, a row stride divisible by four floats, and a 16-byte-aligned base. A single-row decode input also needs its physical width divisible by four; its valid prefix may be shorter. The retired `TRTLLM_GVR_SELF_SAMPLING` environment variable is no longer the enablement mechanism, and `use_cute_dsl_topk` is not required to select V2. +The fast path expects FP32 scores with unit inner stride, a row stride divisible by four floats, and a 16-byte-aligned base. A single-row decode input also needs its physical width divisible by four; its valid prefix may be shorter. The retired `TRTLLM_GVR_SELF_SAMPLING` environment variable is no longer the enablement mechanism, and `use_cute_dsl_topk` is not required to select V2. ### Conclusion From 66324a418cf01a87a4e2b367a8154786f4fa5d13 Mon Sep 17 00:00:00 2001 From: longcheng-nv <243710427+longcheng-nv@users.noreply.github.com> Date: Thu, 17 Sep 2026 13:44:25 +0000 Subject: [PATCH 23/33] [None][doc] Focus GVR V2 comparisons on four baselines Signed-off-by: longcheng-nv <243710427+longcheng-nv@users.noreply.github.com> --- docs/source/blogs/media/gvr_v2/README.md | 24 +- .../blogs/media/gvr_v2/flash_timings.csv.gz | Bin 60722 -> 55118 bytes docs/source/blogs/media/gvr_v2/latency.svg | 1041 ++++++++--------- .../source/blogs/media/gvr_v2/plot_results.py | 34 +- .../blogs/media/gvr_v2/pro_timings.csv.gz | Bin 78996 -> 77922 bytes .../source/blogs/media/gvr_v2/provenance.json | 8 +- docs/source/blogs/media/gvr_v2/roofline.svg | 188 +-- docs/source/blogs/media/gvr_v2/speedup.svg | 487 ++++---- docs/source/blogs/media/gvr_v2/summary.json | 52 +- .../blogs/media/gvr_v2/v32_timings.csv.gz | Bin 137060 -> 124154 bytes ...ampling_Exact_TopK_for_Sparse_Attention.md | 22 +- 11 files changed, 779 insertions(+), 1077 deletions(-) diff --git a/docs/source/blogs/media/gvr_v2/README.md b/docs/source/blogs/media/gvr_v2/README.md index 332ffcb870b9..680c978f0e7e 100644 --- a/docs/source/blogs/media/gvr_v2/README.md +++ b/docs/source/blogs/media/gvr_v2/README.md @@ -101,7 +101,7 @@ Measurements use NVIDIA B200, FP32 indexer scores, and batch sizes from 1 to 1,0 Each workload/batch case repeats one captured layer/step score row into distinct batch rows. This controls the input distribution and valid width while measuring batch scaling; it is not a heterogeneous batch of independent serving requests. GVR uses `next_n=1` and sets `max_seq_len` to that case's valid row length times its compression ratio. A serving graph may use a larger stable envelope and choose a different execution plan. The bundled grid does not independently benchmark ragged mixed-length batches, MTP, or prefill. -The primary reference is the hint-free GVR V2 `run_varlen` implementation from [PR #19076](https://github.com/NVIDIA/TensorRT-LLM/pull/19076), measured at its [final public revision](https://github.com/NVIDIA/TensorRT-LLM/commit/be1b9885e8df9bf070e8cb68459e24a7119afaa9). All FP32 comparisons, including DeepSelect and HPC-ops, match existing baseline observations from separate runs by workload identity and batch size, with shape metadata checked where available. Baseline times are retained as measured; no aggregate correction factor is applied. These comparisons describe the bundled implementations and workloads; they are not a current-release, equal-interface benchmark of entire serving frameworks. +The primary reference is the hint-free GVR V2 `run_varlen` implementation from [PR #19076](https://github.com/NVIDIA/TensorRT-LLM/pull/19076), measured at its [final public revision](https://github.com/NVIDIA/TensorRT-LLM/commit/be1b9885e8df9bf070e8cb68459e24a7119afaa9). All FP32 comparisons match existing baseline observations from separate runs by workload identity and batch size, with shape metadata checked where available. Baseline times are retained as measured; no aggregate correction factor is applied. These comparisons describe the bundled implementations and workloads; they are not a current-release, equal-interface benchmark of entire serving frameworks. The device kernel and host dispatcher at the [main revision audited on September 17, 2026](https://github.com/NVIDIA/TensorRT-LLM/commit/73c70633b2547eedf0c91f85e760aec534f6af84) are byte-identical to those measured for the reference. This establishes source continuity for those files, not a new whole-framework performance measurement. @@ -114,11 +114,10 @@ Figures 1, 3, and 7–10 and their numerical summaries all use this PR #19076 re | FlashInfer 0.6.14 | Native `top_k` returns FP32 values and INT64 indices and scans a padded row | | TensorRT-LLM radix CUDA | Production dispatcher, including short-row insertion and long-row split-work paths | | DeepSelect v1.0.0 | Unsorted INT32 indices only; FP32 K=2048 emphasizes correctness coverage | -| HPC-ops FP32 | K=512 or 2048, with recommended workspace; K=1024 is unsupported | -The public baseline revisions for DeepSelect and HPC-ops are [8e70df71d2](https://github.com/deepseek-ai/DeepSelect/tree/8e70df71d2) and [2a2e265624](https://github.com/Tencent/hpc-ops/tree/2a2e265624). Complete build revisions for the historical SGLang and radix observations are unavailable in the timing export. +The public DeepSelect baseline revision is [8e70df71d2](https://github.com/deepseek-ai/DeepSelect/tree/8e70df71d2). Complete build revisions for the historical SGLang and radix observations are unavailable in the timing export. -SGLang planning can be amortized across layers in a serving integration. FlashInfer's additional outputs and padded-row scan remain part of its timed native API. DeepSelect and HPC-ops receive preallocated output or workspace. The historical BF16 comparison remains separate from the PR #19076 FP32 reference. It uses its own paired `gvr_bf16_run_us` reference and preconverted BF16 input for DeepSelect; conversion time is excluded. Each dtype is checked against its own `torch.topk` result, so BF16 speed does not establish preservation of FP32 Top-K membership. +SGLang planning can be amortized across layers in a serving integration. FlashInfer's additional outputs and padded-row scan remain part of its timed native API. DeepSelect receives preallocated output. The historical BF16 comparison remains separate from the PR #19076 FP32 reference. It uses its own paired `gvr_bf16_run_us` reference and preconverted BF16 input for DeepSelect; conversion time is excluded. Each dtype is checked against its own `torch.topk` result, so BF16 speed does not establish preservation of FP32 Top-K membership. ## Temporal GVR and Algorithm Evolution @@ -141,9 +140,9 @@ These P5 values are percentiles across per-case `temporal_us / gvr_v2_us` mean-t Speedup is the geometric mean of per-case `baseline_us / gvr_v2_us` ratios. Every case has equal weight. A win is a ratio strictly above one; minima and percentiles also use individual ratios of case-level mean durations. `_stats` in `plot_results.py` calls `numpy.percentile` without a method override, using its default linear interpolation between adjacent sorted ratios at fractional index `(cases - 1)*p/100` for percentile `p`. No slower case is discarded. -Figure 1 intersects all supported implementations within each model: 2,079 Flash, 2,970 Pro, and 4,466 V3.2 cases. V2 is fixed at 1.00; shorter bars mean less time. Pro omits unsupported HPC-ops. These values are recorded under `comparison_common_cases`. The article's overall and per-model tables use each baseline's full paired coverage. +Figure 1 intersects all supported implementations within each model: 2,079 Flash, 2,970 Pro, and 4,466 V3.2 cases. V2 is fixed at 1.00; shorter bars mean less time. These values are recorded under `comparison_common_cases`. The article's overall and per-model tables use each baseline's full paired coverage. -SGLang and FlashInfer lack V3.2 layers 0–2 and cover 9,515 cases in total. HPC-ops covers 6,776 Flash/V3.2 cases. GVR, radix, and DeepSelect cover all 9,746 cases. Missing coverage is never filled with estimated timings. +SGLang and FlashInfer lack V3.2 layers 0–2 and cover 9,515 cases in total. GVR, radix, and DeepSelect cover all 9,746 cases. Missing coverage is never filled with estimated timings. The latency and roofline curves use arithmetic-mean durations over matching layers at each row-length/batch point: 21 layers for Flash, 30 for Pro, and 58 for V3.2. All layers at each plotted point have the same valid width. The SGLang and DeepSelect FP32 heatmaps (Figures 7 and 8) instead geometrically average per-layer speedups at each shape, using each baseline's full paired coverage. DeepSelect therefore includes all 61 V3.2 layers; SGLang includes 58. Both maps share a 0.8–8.0 scale with parity at 1.0, and cell labels round to one decimal place. A shape average can hide individual regressions. @@ -159,17 +158,16 @@ The article uses Figure 1 for the model-level comparison. The following table re | FlashInfer 0.6.14 | 2.18× | 2.20× | 1.93× | | TensorRT-LLM radix CUDA | 4.88× | 4.87× | 5.25× | | DeepSelect FP32 | 2.03× | 2.13× | 2.85× | -| HPC-ops FP32 | 2.37× | Unsupported | 1.33× | *Each model column uses the workloads supported by that baseline.* For a concrete large-batch slice, the following times are at $B=1024$ and $N\approx131{,}072$, averaged over the same layers as Figure 9: -| Model | GVR V2 | SGLang | FlashInfer | Radix CUDA | DeepSelect FP32 | HPC-ops FP32 | -| :--- | ---: | ---: | ---: | ---: | ---: | ---: | -| V4 Flash | **113.1 µs** | 196.8 µs | 275.4 µs | 461.3 µs | 190.5 µs | 199.2 µs | -| V4 Pro | **132.8 µs** | 199.1 µs | 298.3 µs | 477.7 µs | 209.1 µs | — | -| V3.2 | **124.0 µs** | 211.0 µs | 388.7 µs | 496.6 µs | 419.6 µs | 159.7 µs | +| Model | GVR V2 | SGLang | FlashInfer | Radix CUDA | DeepSelect FP32 | +| :--- | ---: | ---: | ---: | ---: | ---: | +| V4 Flash | **113.1 µs** | 196.8 µs | 275.4 µs | 461.3 µs | 190.5 µs | +| V4 Pro | **132.8 µs** | 199.1 µs | 298.3 µs | 477.7 µs | 209.1 µs | +| V3.2 | **124.0 µs** | 211.0 µs | 388.7 µs | 496.6 µs | 419.6 µs | ## Roofline Definitions @@ -180,7 +178,7 @@ The full model is `min(R, BW*I)`. The theoretical parameters are `R=37.224960 Tc Figure 10B uses linear axes at B=1024. In this article, a Pareto curve denotes each operator's measured intensity–throughput trace across row lengths at that fixed batch. The points connect in intensity order; the curve is not a computed nondominated frontier or a search over configurations. Figure 9 also shows B=1, and both heatmaps cover all 11 batches. -Reachable rate is `100 * P / min(R, BW*I)` percent, using the calibrated roof. Compute each point from the arithmetic-mean duration across the same matched layers used in Figure 10B. The average reachable rate is the unweighted arithmetic mean of these point-level percentages, and the peak is their maximum. Flash and Pro each contribute nine intensity points; V3.2 contributes seven. The average is not weighted by row length or serving frequency. Unsupported HPC-ops Pro results remain absent. `summary.json` records the point counts and average/peak percentages under `roofline_reachable_rate`. +Reachable rate is `100 * P / min(R, BW*I)` percent, using the calibrated roof. Compute each point from the arithmetic-mean duration across the same matched layers used in Figure 10B. The average reachable rate is the unweighted arithmetic mean of these point-level percentages, and the peak is their maximum. Flash and Pro each contribute nine intensity points; V3.2 contributes seven. The average is not weighted by row length or serving frequency. `summary.json` records the point counts and average/peak percentages under `roofline_reachable_rate`. Every plotted point lies on the bandwidth branch of the roof. With elapsed time `t` and consistent units, the fractional reachable rate simplifies to `(W/t)/(BW*W/Q_min) = Q_min/(BW*t)`; multiply by 100 for percent. This is the ideal minimum-traffic time `Q_min/BW` divided by measured time. The cancellation of `W` explains why the comparison convention does not change the reachable rate on this branch. Additional traffic and kernel work remain in `t`, so the rate does not measure actual DRAM bytes transferred or bandwidth utilization. diff --git a/docs/source/blogs/media/gvr_v2/flash_timings.csv.gz b/docs/source/blogs/media/gvr_v2/flash_timings.csv.gz index 893e911eafb1eeeee8a09968eee564cee06e2b89..7aee7c1a57987aa128d61407ebfa5dc130962c04 100644 GIT binary patch literal 55118 zcmV)7K*zryiwFP!000021B|_0&n3-q9C+_vL12N!F7W6SOWo1T2M*eTV`j7woFaPV0zx#)O{MTRo zAHV%Sf0aUNzxpr#&tLtgzxvBx{l~xgZ~ygg{@Y*vkH7kx|MIK<{a1hapa1h;{qHqzUzy95CfBD0oe))^P z`nzBL@UOr7```WY$N%eBfB7%J`Rzac@)zkl{DMgU;g#$_rLjHzx?s*Z-4Wzzx~IrKYabu*FXIGAAkMt>DT}Er?0>J<(Gf?(=WgO z<+uNeKmGAHfA_op@7KTmx4-)h{`9AR`2BDG@DHc|_pg8a%^&{s_y7FI|B1i*```cO zPyhJ4Km7eKf5e|)@o)b=wqO78-~Qn2@~{8xPyd1c;MXyv@=w41>yTvNi+}z~U-2uo z6jT4IF@25iT+>%c-|Mfw%J}ZFe5J7d=PS1FJik)@o)MqQ`75XI+{TObbhTb{g!MYs zL;80g6V}rhFkfUouaC7DX+Gr_^W|)QF7vS7>wxt+`^oxf>xY)_lIHqcFY(X&`r~Xr zhV>o!gcb)@CxnbAlw~^hwQ_s{9<)B$NB{GFLTs03tbdXlf5lqp+P`C1zheC<;YnfH z&hf)Ca(@rY8=%Oi4fk67QW;I6_S*XQ$h!+Na`t__#-cZ#nIl`d~%eaX<)+gQs{ z)*CMKyVUtL)|*~`9A$m=^)J?Hj);%OwS{x}j-|hC*m`*%t*ymQ~5-PU8*r_1`E8opzEdnsI}(_4va+po7A`})UgW$M}jWo@&xmTeup zxR$La9L=@uQsu|v`UbOp*VmVW|GhkG&hIwXU(I!>BerW@yQz(}P-_*}$?o{M?W?!C zzSH`db8ySYzD|DdPb-(Fm8(OUYa^@;T)ziSe)~?X;jFa0e!@B{>j14kjR4;;^1yy5 zwY@wbxd)Vn2f&%E2eh>bmdU!jNvz*t?QJ|@z0~=gXg~M-V!yaUpVkts2jDv|w-T32 zjNHQ!YyY)gL@G_rq2U2F&zA>Wy~;WQeeeN=4+!fGETh=C>j`rm%k`&@BOiHW@reHV z60Tk)f7hh9P`+wg8?3LFx*TQ4Pr>0); zZEf+j=IiUji>*Il=i;QU57vrDv_4)Qv3nK#%Lf0o&I8W-%y_LcuJ>NyHB047PHQRG zWfEUsg?B3JxR>R)!*Z^PP9?0@y_`zV@F_X1L$My*`ANR-7^|en1Cj83);g^iV|}np`RBJEv3ZlazFS79R=y^zAxO!LdDlNd z0Kq$$PCa3l;kdjl)aFlGW2nq~X$1xu{$vGRYga9YGS;t#Ls`yieYCHCwIYdiEx+wo z=TMeoho^{g-iUz^u``yGL+KqaWBrWWxqfRGl;vJxd3n(0P}X&edujden9HH8>#7B8 z;Iw>gr56|(dulmQ1P<77%N4^3ydUx#mr{A(E$=n(J64oRUo!IgfooMqT(D zP$|N!X)>LM?^Y9E>RhLK-b3x?%uiuirX9TP9+z;gJqyLz6#`TjWHI^&-!n3 zFfU1X3u_mYx3|1`6-05cvwY<8Ck-i2oy>e)LN`57?XvjXtF? zLWhGXj7^ZHz#+%wLFs#YdwbD$dCyAxR>*?@am7UIOpg`+uJeYpCoo&7D{ahlC5(;R z+iu+>l(m7lD0t=TofrBOBvs3uL}Z6>X6q^IvvIvQoVoJ$n46p@;+ilwQDKsYZD@C` zAR)lHFaHr6zQMXLSD4>dBo^Y^vfU&-9b0bYY!wGPAos1AAbyW$D=xEL;vTYvOvk7AUywF&|X?%__H0NMN6yD1?j$$UTCS=r4ye^Ry0`k?*X zcoY#Xt_LvVTBm97g9u-+JLcOHHirVIvBHQtqqN9pbmfRc2c$;C#>=%-KEq!lH!s4wm6j$Sva*I1bK_*U_~14EnKr<`K)zk4TKrO%RXzjgCX)JfW5Kf!#X-CZaIg|v zf%n9npI(2(T{e`Ey-&Cogv0A{ZV17Vyw@X*K{gbL=CtCEM7a+MSWT7Knp9QA2qL?Rv3cw_4a;MQDTG7(lo_)<^_=!jO!O8M8F*#)pnz-{ZudW0%o;hb2! zZ>dc=Yh%C~7*%yJxlET4ZR?uV_5@60i8FclLo3T*HY{m^X(a%Z&7NGRTtU>kBF4J$sZ%{WAu`7 zDDQ6l{Y7j@%Siei4bEjC9A2^6P&9^gzsX^)PZpk+@%oJ2xmXQmMM!O(kM%ZMB)qx~ zQ5IYUcL49w_{28q+e0?*(w6U959y4(1GmmPAcF}KUQ%KG0~LVva{z;QVC`nHw&10y zLIzh@EAdpMMr#Sjy5Mme0?|?tb67TkJ9r-dXu?{e&d&HXy!(d#OYq@??ey zkh5gO>u=Aw!CD#)I!b&iqF>wVJHV5{5#WfdCo_{@zjGpqvP$Ft*89G4H?a$0`Q@8C zE~_w^yuiD(0q=s8c>NTdC2X|ydBhd);mzkpS7ax)EjJ2$Nj1~Gge<>;IB4C%3|wkK zl^L}(Y`y$uKi%3djbIBrRTK&xi(sii#C6LZB!>m3hd4GdpZZf;7V!g$?OH<{78jIy8#?EAVFZ^(JUyR1z&bhTs^ z@zzm_udjXgF395h${>Ik&UHmj)th5hYJ|cX5{5j9y;R2LX}&$@uH1}lZlzU$kqhV& zpP*p^QN}+o2obw`{miwd;dR+=aF+x(6$pZ^pHTRJP!Z~Q8OyVzfLe&a3Pw*nP$+!) zgyM?w#2v<6Nghtkdf9X>y!3&EF0Y*##t0U{YNobVKK2JV-;%_@ST}zW63PcOUHK|K zH+~L*%X;X{Zx7f4mqOQqGmg+GF$)TjPO?wB$Amiu@hy{!@cM{7ZqczvVmEZlOePM1 zr&J+oO@T|&Bf{%C-Ia*4s^)8V^-0jP$9e$KfW1akiHMFSl-J*}`4*l?A?R(AD+6N5 ziosh_8EgnYveXN2zr8)=#<$d?FwDROkzEk#H4&i_o0zK1qreW_V)MoOdTs6n?_E&^ zVwbpn)2PhJaAMZqcKUdJG82ejkAB^~yL+K`iAb(c|7BjH!V!WOlpi9Zw6*QvT~=(f zqL=9_sQZI%q8EXu>r{iuv`+IxTrn*s2DA$gQ-J-b_>6>qIntcp*Y3v0OssqyDQI~qw9ZU!)eF@Jb7zr!wkKpSGp1s?fPm>lIHACpyu z&dMr0Yi57O7Qhrfqo`Um8CoQPM?*#E)cLtataACZ*Vo{wa$U=`;?oL@Mf@Sv=vDY& zrkn^XCf)#VkJvm+8N5)i;hL_@1^|Rqx!%tXX3D|D@%D_(!4$*{l{hsVOI&9Vnb9P@ z3zglHRW8y;6M~u7wc6ZE6=)ll@4&VngYinpEJUxR?O;66y&!b~*z|fXZoJF-r=9e- zV^Y-A-zm6g;+&y3GA zP9x{xb?vs~Xzfz0305&7If7$0a!V%if&vCEBGfa0`eL6KW+Lukj+?ikx`<#=a4I}C z{4L9c@#HtA0053rpk`X(VUgXu$6avAti8o^KV+PzzIIwi*^T9k#F*pFx~H~aHAt2M zJ9et*ML1*x`ml_`cc2eLHsPzQ`vW#^3s42?;33v1}ChpnIqnV65bZ$WK9;17B~Qz)tpIo!a2-_2u6bjNp}` zm1t^h1g;n`Fcj~K@j#BRDj1D*W>#i2`ukbGaV!ytT16@X@4p;WK#DN}Q*Km@a08WW z73Jky0R1&ws6ME;f;?#hb%7JWUuKfmhd3y>S7PNZh=ju|zQL}3eSohQF>#rl1t}JY zI@!6AB~=C$bT0&T?>6-IfGuw6`~``r5oppVc_mVPTkBs&E(FIeiDTE^p0GO@JRvFh zDuD!9(A>bH8AM$QNf7I;^G8%48sEGI?_UsTWg+PYH`WS)6VWdL)}{bQ47K1<%Kagm zf60SyyV1RbwNxd1#xEE%e`biqr5(1PmD5osX(E@*jR!0y7F;4*7@w~2dvmW z>ysHYt2uvZc1hmu#2F7c_rdh`fYXtz?wLMC$$qWTNmN%{RfY^ZJ$yp!o) zfWIOXz_XBi^PUe=JUS9i%NBoc&)7>w!q}(yE-lc%pgL5MI!egP12p*;z%+!nrhnWO zyT1 zQPi!1SkKWCM;(ovau1cNZ* zc}h)>eufnYV$q^@!hkz_eG^;hC^HMgf-!*MX${0*z#mJE?ALq{P^)L|?2p(yOlMVK z?VkY;1FUtOjJzU^men~9{Hq_I1Pijh{*FC>(L)&K1x1(WFhchq{#@{$iZ)bHlLlb^ z@w#4{o59Zj=LChw743tOw1Suz)Cs-Z!T?;I@fkL8kks|MeRtxExc7tytLi(*gsX@z zB?yp3aNE@Qgfz#;75js3z}*QHfBox(%tZ0 zSb#uo87zcBpa}$~04(ifL<4{UTO>~7r`EO;YV#HF$;qckKz2Z);PEU`T}6aRlJ%_y zW=MlOVQi;!v+pt_5HquqF95J2&|0$*c5_k>&-z3Y!oT^j?Fn~X0a;DgMSTEZj3kwg z)d1Z@t2;nUpCj$h@IHo&%yEFc1abqT@7V1|V38d8`Bb6e^=It8Mj$n*FAKCyltYm? zsf$V6jizKOtMSNJCHH6CL@|6u6=pEV2SaY!3V$0*h>Vnq+9`8;d&C~YRCe;M^MD?G zY|K#9!h{aSb?`;uPonbybn`9IH*0n4UJ9x>x?HPKUBX9bVL7#?(lmgSbsvw{oxAHS zth}WU)p5rZ-8@E?^~if+01K|G`pefpEH^~N{YiHajG{4=59<2gUX>w@DffaRct#A< z)SCnpZj8NE>t^Y03)AawUa{(*k{XJ{| z?_?qd-(Izyh)t>afbOINA2W^$7xC>GJHES)3y2z(hyl=c^#3Lj-!ouiol^!dtQn8@ z_r1B7-07x}(<4U$1*|jXp5i{PO()(9`tE_ic$(|YV(mGSprnz-#{fNlC}l#9g#2L; zctu3mSqj^z!8coX^Dmih7{3TP5*r%9os@GyfL~X5G1zZ}-G$I)yuSLI42iwh$dI7% z0I`jx@=*kqJexQh%MY+sAWH0LK&s^R_1x;XP#*|=zXW(EiCYX>tS0~jvNH0gKf8eq zS9jJ}zQR3uQ(b_r4&D|;7h17CBkH)20?`=&>i3}4IlkHV=t~_3KcSe^LQ}zbJs=m+ zUke+b4DEY+z+H8^vj{@UB=auBD(g*uS`J8gA+Mv%*A?=<1yycbmm+1#0h1(6XCH-= zvdE-dzrVkOjq)rh` z)sWwWoDtGlb3v@>y>8mwudFn?D;q-G0`JInfN60Hf+k)D5`K{=$Lou~aV$s|qiHCi zRhoAQvLRl+R-s^FshUzlhwH5EeV5%h7F-^vO9zy2&?{XT;Gv176M6xnTXND#oyJsc zc}M#573#?j*;SP&59;Z_wV1$CW?2`(L=<^Rl#(=V60hwE&bNSdjwf`nrK4o0CKZ;f zRMqLcVwm?y%k~84TuNfjf)K)TmT1g9U}CIP4JgksCmOxKnctM>#671jU#D=3mFpoO z!62qGFzU+eW_f+W=2{@mmqp8CC);4uGE@PVLKQ9<$@itXm!|e-?5<@JsK8roA|6&$ z4uK_pD_@MG9+fGml)dhy9dtopG|2~`Zdqbgx)9#&rf!I~9!a>txwO}%+G7@K8Bv`8 zzGcX_u>O$QYS8twvdRXTrJmPKyXQn8y$o_F>02n%6q!Ph^g>`4fR(i8f}G3y=Dk5& z$N;Ir-YO7O{F!~AP2PoSS4M+2M*1LM?RE8TFc&aS6Xo)7<+iDOybC;{cLBLJTfYZPm1;nzQRxm8e#9=ld|Cp^E^WC#WcM(gIyeZitW&yL zxKs>V5HOb6D~P^$?~M0{?BR<_!O%>cBJa(_#Tx=Ap>Zm_dMYN{koKG9y3u)Q)Oj(X z7dA0&@sf!GT> zH>wcvAUz!frCt@QTw$KF!MZq?g>V=+se=JamLFipreuq(dm}+H^z8x8#Q<9a9@UBK zMrp9Lm?aR&V-()syVT?`62U>wx)NxpDS*mOjdmq`&#Y>S>uALQ*B-pAl| zuV+v`s>wADx#Gs>6M8|_kc>+F4$rT;c@y5ppahM&!CHw5i3hbyD?%DVTS8)8r-@In zDbwu_*_#3;-#DlMO*v!>L`#zm@k{gGnaIbqM@Ig0D8Z-ctLrUqb4 zkC@mjpw4M_>OGoH7t;a^&>oWq*YEwu{}!-ngKeaEo}P zC-@UUe8H|LNtH+I<7!>Crc8aaiX<^nl+T(2qNI!3_n}!gpBKDcj2BUg343<(TcOxQ zvX=N$Xqxcxs@(dt|4`Ml`TZ9}G6yId5pGf+;~myXex2KZo<+V4pU`PO_pulpcw zWjz)xSwH<$YFBbSx=06m{~{$=o|h(_7oOxuV-PkdTvsDrW_2^*4y7=!u_&>He&nF{ zJF=b^pQSdbn|DN0Q8$8Jc1W-?A+^jlPh1)KdE3y-eayqBhN-&r`rhga&hk%4GeGQB z37dqUV$x^ND-_cC4Vc~@A{W(HCu@ih>M7)1Gww7h24F&*L^3I_Pbuf86z3DVnwc95 zz32^#x_O2=A=aygM-a>FL?OGioGyFc`he7hI@SHx8+8~4y$!GtaF-M?wDxHG>Jpex zG!fJWQwV&$+6*p+!Y5vU8miZS$&a?3LugqmLfeBpL^8Le?|_X6_7^oO<3;rJez~t6 z0k4j|-DH4{DTyUDE+Ty_L}U%M3TMT&TkFmvuqM!W9U`8P^rYxpR4RyaNuB+N0GQ`| zH19n^kti5SABlwX^?mc?+dLG9(XC@_EtK=0*T%bqlBEHPChthX-*O3w#8ScZ%Wdj~ z0CvS|etE*?695p92}rGPl9(p>**r&NF{Uh;2@yi$cznR-74Qlg$67?3)Y#Qh$^aC7 z_6SwQGNxGJI14`CFOu^LgUX_SZGdT@cWJIIUjchl2_v)Y-7|L>^Hn;a>oeN<8O`|w zx`D!$i_92<*A+8@!VB6?8O3irVe2&KL2vLvE$?}(pGkx_5l(taUE;$LxKL%{GfShK8tKeM1ci^*olnRbEr1r2tiCBE5;V?X0F4-va79T=Jz94z zfgV<}0xc?s6yXV1N1QrV^~(}7a7ka5W{VOe=TjLZfc=S;Vhx1VD)4JQJ)jH{Ubdrm z2tBZs2*C(27wX^?#!hSiFXj%qzQ##C{nq^E4l1td#*73}0#HHpYjiRns$L3G?xccJ zCYSPgg*JbHYPt;$L9Y=2SGBBF)$n>&L29yu1(NM_i!{!U7#DY7`Ff?AnssLZLnN~- zE5Al4TPZ}3MxXd-`|1x!ul;U=#R$IYKn=XlegRYgPK(5CA1z5L{=z)FI^ukU!4I1BdiCzI0CtQu_aXEjL+L}3k)W&Xy`{z z#P34EB#yz}sl=*&mh2gA~H ztD=5srW_q!ReyN}n_ED=s#Z%kknpipAybJaPr~OmrAZpxC#AWcEYlVrRHD6jAMgoq z^)0e-w~E`{5g{|#Ep!QWxO02KDWZoJi>jYpstr-$HKzzjBTWrNP1?4QIvmf|9kOT* z|BcXM79xa7f@xGIGP#>-*$5u`vvmg~s2LYO0Vj;cD@6r*Q9McGt+MbQOK%sD9 zOa-STA(mvG44s3HSnc4=yJ2~qXlUopmq!IAm}m>eGS(9mxv@#@dxUaFKe?o2Td#irGe<8 z2E=LHhh4~wa!6&4XF=7U?8-f0p!f(H)c`M2LX}4qQA(hyOH)@gg%Jt{JUu^R^9^W! z293NhcWCPMrjAEuX`oo4E3%agy^(LLwEG6~Jd31XXOMKKL@BBe=HAKW$dl|8s^qxe zaRDr1*&>D}PG_Qf(1-_UUXr^UrH7}T#pp5w8q(ElmN?f=0#!<>IN23J33-D+cAw3AKp`@_ zLOqgI2jlCi0?_PCGeI1Nn!aq99b~NI5WcILF;q>bkhqq$O+_p70+Na^TXG87q2ibfnxw)B#|(HLdxqF za-LyQFnBiAP1poXsX9!pGUb=95>Xae5lkWQG#l3NtOiUi$L=c~G^m?CP)=ZjMX;r!#slxJX`sx?B$w4MEmZ`?`(zpT=eaw_S z99Xy6cKL+DSPERA`+~www3MdZY%DQMnMQx{jyq{f%TpLtuPbfk7{q< z-6M@!7^*-PHoxLX@d!nYWQHsthi#Gg^dNFi_(b1_oTy z25QC&lo7{W%s?FrUh6|+D5ILvjHpnlZUXorgF$#}BqK2H+CQYjh zRHX83|KcAEEUknbp;Dvw(B?rfk5WdH0DU|&!GE$id)Oe!Z0vFs9qPg8D23e2VT>0s zFmii&w|m&YN(3Y+kWkF}83r%uDC*C00|evghnE%Fyu(zN525jS$RZ$3JEqVG~j#Vji>>Z}<$yo!fhw6@v5t4(CS%u)}f3=T5YsA-TIGQmi}Jj1~mn|&WV1R)HOQ|+k0 zsRW66oRmyh!bxJN~asg2`k3W1TzHI=Y9RlEu(Yw?!g{3kU+ zJezj4%E_Pvv8-v&P8Ly2bVok3vOPM64X53Vmz^nCSzI#3Y$l-m=0YM1y;@ZH)y0LI z@vCphysR)^sJ!l7L9273_aLYgpf#_dsNc0wP(qEUGI;MS@9_%HY|g zYYqC*+v0e~kR@h>LTlAUvIX8yyzT(a?4Al^_$?0MNj?Qc(+|jb8pwb}CtiNGZmC^)i8 zmkXk}MuuRvFjKB)wzo~WMGP1gn;`BF#b1)8SniM(%8%luQA7Q8=NJ};S5OBgB$fR0|?2?TXzXkXDvu)=YjA18&lK^*sen*lR<#X~hLj1Gst79NPU!~%~ zZaeXXe{i4$!`q02{%m^eCs&zPw&Wzx-AD~Jim+mo%S-p(PZqrGJr|}N+Z8J0!)>;s zbcr>$E{`@|7RF~2Lin*503t)b@FsNM$3etW(2^q!ZuWhRLOSl?8X!tmjUv{A?h!@l zw9kvCLAO=fQVC-3gVmulr5u4&0^-qw zgt5-fGn6?8V+PMYO&2&Lc^J|lC9uScv|Mctk2F!^rUd77v)YT; zGv0L$*vn|M%{EsmqS3lXym*2}2a-JCB8Z}L^eyffH zna7n=h=QKWT~pS+B{$bli9&)aIEz&B7_!neXwU`+uB|2GD*9O8KVZuxAijL4uw?>* zncP3>PM}s$D=U{-2!rcT+1F`9PaTpP(TqScFOEe9Q)fB@@k>TZQL+b&|rhU2ladh}<8cmM&Be!6K-g|k-Wy>;gn zBy@|C9}pIEExi-O;Qc%4b2#HNY;^a{x^oMH7mJ{mmhG`DRJoFgACcE zLTJ^K87pr*=A&4%l;3QF&Q2w06sa1X4cdYpM*r_DX!1rOwP zS*pXCISgP;j^WnX=|65CwhR9VDJ-;R1sOz2ZHoy*k;_7C$hHX zP^0y%hfKGWxK;b8oOHqVzV>X~5gRy_h9g_@IC>{JMN>_YiIgb8iCC8UY}}<3`sT)z zX72K#Jn5^0<}5}atD5s=(XY&dw3H}WCL>!3r($>e%RBWMg&@=*uCzLW z6b@1^1C*z)A3bOB+4hZVsNeO}Wu1QXutp7Tw8BJ!2-M5E?D2xIkW6Twec^@rRn)~9 z(zD1)Co}{zzwAiw7&ww;veGxBngXWg!w4o{L5ZQl6#Uw&2HPWcTEh@ano^S}-vEFt zQg?;JPV9N5Sae5b6T-`nxFI!QOr|PPX{cTR1hR7I4d_k?Nt6#$M0`I07c3)t05a+7 z?TVR)GB~OSs*^TSP_ikL-&qZtb)QV|_Cjp%VRaI99D>(WV{beK1U~1pbr&`arO@I+ zrmALcjQTvRtA*l7k?McW*E2-u8xW1H<~!q8N-1 zDf(h%KGCA_CgQXGyTGBagAl|9QH+~t219eU(E!yc{e7eIu-U)UVPIRJh4m zV(ctKS?g1)FW-MJQHbn~bIkj$imt36cXYZ4Aw5MjlQLgk@XnUDLDrMg+&EuHdRK4< zrAf(5Y-vS9j(fH}VV7e7jW|gy1gz;wC((xFnL8)Lf*nuXlJv~@c7AVbms1b`00#uJ zO^l5yg~^_6-Xh;j&0Di>zMvY}b0U)_gJjbjR2%dpuWg6}i{?d(<8eshvvpU&jP1~2 zL-&@P1aw+H(gyGtAHMXfbyvcaI31^jp{3H&lP{(4i7>YP!f+mBe{b9KB2|eCT^U|G zy9faeU<``&y>}PxtL|Kc?j=J@SO?8&gO8efR9RlMelJ9A&*nD|!K)CAX`M3WDpSlV zhRT58Owc7_RQt1e$9!VVTXMtAsMzZ3GP)U>l^}hljFgw@%j#@R*u5R?kTnXat?Hx$ zr!jHX!R$uUHNW(-F};J}h$eZRX}LyFGm(wVom8(PcuCybBQx70cJ@=Hz7|s!WEV}d zlsZ+lFetN{@Ju>pv(2|RvAYN|bFCbX(QH76ThP$@&US$@Ifldr*ZmNA~^L zmM@}I4IYAGx6IDwq1a(i{3NLPE%;E^Tlclhu5gi8z0D9y68bmh3PK_c=Lvf}>a9B; zp)qJiZ#HlvwG%zEF-oa-wU*7c6KP-tlDuQIx0Yit+4xq!MkP7YxZu9lvah)#Kz_kn>6gDi%3+}jftrL(=h|i z(uYXo`z1H)4u3GVjFK4hFtOVhGdhPs{NaX+u$jK8SV+5w+1QY8fa#{43QS$%H#@y* zGwytY<_mNUm6@uE5(-u(meh%O6f~nluJ$$e9arhN#S!|cs&1+?L(Bn1R!x#Q?d8k+ z_+j!I1e>tfIK)CZ=$MXz16npXKvw>tJ=^#7%*r?%HLa#mM$r&Z%`CLJ-i8TbI!An2 zo}KJKm=F}OszIz^M=Ha>DMoKa7@wvqAb~GGVGkf?KH8s9xXAq@_omP&Nz0L{6r$^l zmtV1?5X*IRHp6YsLpN z-f3J(_B`WbI>pu9!kcl&co%bwiehd^0I6t^b3E~SM8UM4h{q(*&|ncEg%Z4bB?gA}}t+=8l7h4DCgwE_Qh zO@54gV&3{<_chu)!vq^9iey z7%PpA%=5678>4C8!jtm0cyW!tzLFs$QRBioMm<**Zj4^G8blf-?tKjHus*6k`ft{$vjk8kD6;aCFdN}~Z4@4B=240u+u zZ}4wV-_;%8!NwC#3yEazNoTCG?{_fM+sdSlof-zp`07F$qGDkjXNac7|)wF1-e2bW+S(YpktHv>g5*t`t%V%wOf(2a087U5%__7`N?RyUhULT2r7+>I>);q zvTBVNtC>j<^nNf}+&9%CWKBR|(4=e3E@U;lu_f-o==Bnw*1`oHRH_#tD=Y*BOtJ2p z$09tLydL0Kjcb{C!BD}37cdp7Fe3E0)IxbMdOg6<+Gs2yGP22^$OcXD$~UFdSkJ}K z8?)CFT*xL(JisW9DLf_1ju$X*$|Aq;xB}M`EO~rnznFx_fKIxaI>9)Y%xjpEKkX`i z11kf=E^5>tg`Qa9w-zImf_v4t^K8oI#sS)W1Q@d>j_rW%z&?QVl#5O&%FjQdi7hd z*XhCN;>fFk7WnptR)fCA?tp+|W&cECJXc1M`Fq^7W9 z3eps4c@!Ob(eUL-i8sk#J?-1=2nPZnVCL?yO$68>lR7zRA34*by`pbRha`U*a)AN@hH+>g5!J z;Yv|LxSQ4uwo++brN(0Mv62~^C0N-p|f6L4WQw4TMIZ+F-AEW;Im)sb-< z56a{Qmi?oq%aGnf92o`HC&TV26TEL~DL_rhnu%3aP32SG8JaZ*D?`t1LE)nld{+{4GYf1EQ^oNyj6EGXC{};qF~zXpBogR zVWBK2R^@RG+|A4+g(7)}*+Lkq5#8d%Izld6aJ?;pyPK!R!7#Xn+&-znYh74eBt?MU{SEt^>rFA z{0!p^@Gyxhh451(gm&ZS%?M7389yDZ;-qr;iLql(~Ph`P6i= zjwh>^{T3*Gh7>DnAsXAXGOVU7Gfim^SJb|<=3Le{q+8oR`Ab z5G^0`aRvNIChQe>lGR?P!r90+1xEUw8y>!GtUb`?)m({t0lKb)HXXfD z!c15>RN0J*+oR!N(&Em9pv#HneP{KWFbAT{3NBT;X!K#3!2Mu~iW+h`OV{15>-7}V z?M=aHxe4q`A2&9#{LStgoK<&-SyKSSg$RP*P}o-{T{hWOFMRRItUJbu#6qEzM1?J7 zMvwgiqoV6md+F_BY{_!tDFY!Hm+@e;e5}ls(d3s+ zyEaK=j8nYN4@l>1JO#%B;qe-(AG2X{=+;c6AM@G-y>ZKtyj7Pg(>-XOV4)7B%wjL= z&WG?cLiX}x^m-TbnwbiNE4}TcGZ&o1!QE7oujipYcV@4*aX*!2qbS|X2{VzJrV=`R zTd9xhdJV1#%>|QVZUm_SNIhkI+3|@V7ZqPZyeq=2=x@I+F&G0 zdfZ>vh)uenIB*lFg;o!L9+E30xs^t#NiqiCxbB6e~Oo@`zV z%Dg|1UOMmu~lo4C&;vYunY19x@{aclzc)f|XHSn~MX5Gp~A?x7Puk=Xcu{6xM zp63AHZZ5|RiTPlLph}4Fx-kvUDppNGUV*>r@eBJTx!Kqsz+U+?C8da!%!ZP#`7W_a zb?kXLHeyKOwTWKkR0Pw4*fkkngCD|)pTfO#mK`FP&S`jZxYrPIr*v`6IRwJ^QPw$_ z&E3~4bl|NfUsyGABCd6T{HOq9iD%Dtgf4^4?u=d!GV|)v*w7c*7;e`+>!AsII1m}{ zu|HY89%bHi2qkSJt6`f#gXQ7)J;*T9{WiFU2~^1c)1RT74!wo83>d%}W)ct@*wj=?X7VKc5Nxc@?gQdFmDh<38GH6LpN3 z7e0r{j9i!g_{z4kEO{{$rGOGJ%&tUZRP~*;8`{>+lGt~q{c$d&jI$du8$VOHC#4TL z6BMg5G-xIO418RXo#;i8yfVnsgxqbCKrqQCB6g>KbT;ESyEl2x$5V3|v!W*|RfFR#>gC%W7~T$k?PHNzBADuKv6Xt}4X}*-Qq0 zF*4zj4^o#~ZN?ZS0`R!OT;?qOa9sRd%j;6{eyG@UO@3y`$KLC^n<(8YKpiC~KMsrZGk=;{;>-z~!8qCrA7mLhq+_ zWfz04Wm2Nqj2Vk#x_G14^USWnpti-%RFQE2I%KF;1zD_}OXh8sn;d_Pqo?HPbSNUV zTiv#cIQV4tdOs7EnVMB=Y$uh2Nr^=71M0R+@E#ZSCe&^p^7$}lgoN)X1{-IjJ}!Za zwXMUA4SbQ1xV~)XNLq2FGo5L0r^DHG_j5gh?Zz6l$lOZ4hLKqdF|l=@Jg$NZw)uT= zkrg$f4JM(-noQOwJHPMCp7p0WTR#{C*1M#4GVh8Z5vo`ZqJBF!&EJ{!XttD}+45YZ z+Z=@p+VspMwO?^wNE>;4gF6x?xD~k4`c<4-kqU8FT-1$)W|PRRJkIS}_R8n%JUb+e z)2u{}Y}80mm#+~WIPuP4ZwFd=t2eBXBqx!^=h9OxC2`xu_-9zXoaj1_9*?Xn6n?pW z%<{eus@z^tAaC_@pxgLyk;t=Xi_nTh$Dr1 z4U?}om1I?wLS3+O(jmRGdcC2EyyG=mta()FfGVt*MMZHEsh_{APoayk8_2&Lw$~1` z;3*gDX`21<+qyeiyge~6K~I|x zA6LO$(JUO0My9c=o#~6(B*w9|h%Gq6=(fRp4sD9CIMImM(Ywt2Lz3Z<37YVO8Sp19Q{JvW&e1d<*l|MsB^z66ZU=ux zMd$jw2s;g|QL?@0x)~Oh3{rhEkqObXUDMRI!LBznIw+$A2T-bt;AuCOJM27XetV$k z2=5=a*~TCF47O*nYMf@|8Vig=RIB=ydwo7{TmGzLfzBh|&rKtrDqEM6+Qy5TF4%5K zfwRjK&KY`kh?pq7Q{>UkqW@s5SQI0cFX?pdp|P{NHC>4Go^>;Su;}@viNWypdp+A5 zz2ae{1+YfkxHr@Sd6b^5dEoVnUYnPRJ%ewU*=&6PcbPxGFp#K3R?_2=UXOB~KdR0{ z&5tCzsHTe~`e0Hzwyd}7&T_KLhF_M1cSXg8*zOQ+scN=6bEdGb(Y3b;>==oSf%>Ls8#L6bNWJSIW2i>b+%l6@W>Jd_ z?c~DDb84Q)9YZ@yvm`Ps8PXgm^+TaRlDo&m&TMk!VO>FRZDeSV(LP-2Y?t?|%_~8h zeL^7e!RNI4ss2bUMK(a<&Y7h~%o+ z9NIPa_A!Dw^%5#;tDC$9MD%B}|+*K~TmJ}7j6EMLz{!f8f>NZ1#K9tCwi%^|q ze;tn`(KE%@;50-VM`fLhkqjt)cWUB3u7*FuIIkdOQ|~BJ#F;IS{g@kl@Hw#up|*T| zh2@-%7l(eK;aGi00#zENjE;&AI~u44g)YfQtCu5Oi6W}z6**@_^jrD`Dh#z;_l7BN z^V-Cmh7}NDlq$O1e2gz)ac+paw|DJd9tQ(X4y&5md?v2L0tt5<4+WJU!xOJ;^QUgel{0xQO6ELSFm zx9YZBIx1ZUCf6k@qv^YS+F>u?4?dZ_A!g6~Id&XGZ>QF58({LP~-#k#p=$I~0qhLT{*|`tZ zY37lzIC9~(3SL%(t)nWZNr?gs1~8Spr_h^%y@7qJXhItr!h)ujh@iHCc=#(5tZfF-dt8&~{R1NY?s9 zO$s1M<@f<>9nSh;_#PIq zRpop0IbFm*9o zVJrvWNKR{z7I=7muW$pWCy1w%)a~Aa_PWCLqyYp4iXW6b&0Rvn&kuk<`0)S^6V+@L z_E!Zayk5k8iaRKvaXtA{9>7ln>-j4#OXGlM34Yob)9$bJ!CG3t0U zesvJIhfrYnQIfzD zioVW+J_-@-QciQ!ezHi;JE&k0vvg52Vu%T`;YEZC@P& zng}TC#Cfa18qJM{ICypg`6)o~U_Cs4a~C?O0oFzuOsU$;VF#n?);e0&E~Bu2vgFP) z$YtU;U^+~z7JhL2UZ*PfV3X`j7F0Z1_nv_PE9?|x4sr~GwHFR@5n?fpnK83GZ^v{d<{5-qRU9OUS>tdfNsu57NL_ara2(RT<9J^E z%`uR85KTKf2-C;1_o-WN%#E>~s zoWwz}={?-QkG5UNFckD_APLacsEZJzbm?`(#<6+g#h+Zi;8(v8mB&p@OUqKYw9>HL zSP(5$nbD(Z=MG|` zr=a07R1BjK_4CSjrvMGJq#25E3X@khWj_D!0{KR*8UgYNMhaT-+UPVJ_^1^6C7CpzhBEwQnKrM$ z0k>t4TARVT&U6ca>SvH|3J{k2o8jLM6mYP_EV%?3WUxiJmw!8Btc& z+aloHwSnV!w(g>aWF6{ER%~LOWOAYn1(iCA3EHIiZ2jsS*kC_3;B9JNZz2z!vhlQ@ z6}wCwzWi)`TwPB~nnA@$jYES|m_}PGlGM?v318;^vh3~Re2SE@0C>VZbctANJPVR` zrs?D8qe8SfpY30Kgjy3!T(7iaua`8`+{8AF5u}e-?((6{zV{N~gHRVxphMw|K&9wO zrLU=$=`5tmAFzFayqB25<}1cRDZoNtANflVxMkob<1?z6x7W+&+=2%i1Wql~$WR2c zz$T}Fq5K7LfU5k1GXAN*EYs#Epbycj;*+5O5h+sONKp!BB+a@|ZL+Z2>}91kN5Og6 znbqQ43en$Lxr3($C-J|opVf@D*-w(k_LK{_5t9!f#3k%P2AVY7QA?ZR_$lQ2L=fY} zxQieP^V7sfS5TTJRB^ltb7GiAJOX z?aSJD2Z3TG&tyNQ^dh+s*qVL}6|!N?{Uqo1vt8+NNi6HSx#_HtL?q zIiWDUEdPc|!W9ox@Yia0(tr>|Oa>9u2oQ_{G7nOjb{f6(vsKzaNe;6tAX%YXIdHJn zWIF?*h)PnT^i*2rEUa-B=(WdOz>Qd36alJSR86)7HZ?+8I&SGjd z{pue0uco?crc?r=N%~|#o>@)k($o4;>->pzSGOn{;xOoa^s3RiGua{(v+?R!%%Rlh zvvKDiVpr!dG0&=n0r_I8|4PMsG5-10-hog(eOio*M3o_#Hm3ye!b>A`qo;R|}DVlk1y8nswvR7pTqZ^b?E@T8cc*!=0Lc8-5nGWWFC|Z)n8c1DaUxls2&bY1B>-U2K|YB zk4LDm15Rt{WF{qrC%_|w>PdpRuu$9T%ZuFriCp9m8gTk4JdtR}&_ky3vZ9FSZQnR2 zQCMQZH^%1H?4YFH5|%e3KuQjY&&;ZrnbnuA=@Sj=ajLyNawxOpB~ZnS+@D3;iL$FU z%JlgWTcSaF=OA}I4(6>@lc6ga$~|kyU+0%7XCmp()@e&Kc=cu*4~$_^>-w1hCW%L& zfDzT2)2ar_k~VUE$_4a@!}$o7qXNYkG6yU1GUmA9A%S>Ok*4m0<`>Buzq*JnK`)Rw zvU)No9ELaoDrKZii`fy$AbPg#vWyx9%FDTFwl~tdsW}yya&XK>5T|?Z7*nLKi81DsF|!mjW^^iZ-C!s-&ZjN zMt~Gtnh>{0v3oo;a!ltK!^mZkaKf|wJ=35Y7z87RPHq)cNxgHaG6T99gjRlZ7yN92 zypM=RR6w7;Q6NAK`FJ{;iKK?CI5vjJzBM;2g3iA&9LFUV7j#%|ocQnElF0pS_|kLm67?ob5N-b(5=ikxw3UUOxY zlVA`~x{f#k@0?k~UcO;KkTER`cFC~wO^zBK)2#b5u#Eys}y;yfpgbMw*N{V)D z6sKttLclpjB9m2on6*9|chw9vQBxl=XhOS+GMf8LWc(1p#a2o$U)@C!Ro6V)d;=RW zqGXXjNJpV0du-|(bD{3O>{llNj5Y}(Miil5(yD??7Ga8G9y|3Q5MDoTT<@bGG?lA->87pw38#p4HNF|hPr+S8_X?)>+K}DmmCB9R~ z`1+J94a*ZKqxu!?1T)%AtTs&cjs7U>butB~BNJ@aJwqxUu{2@`g$;qjc$y&{VmWGH zcXN30X5Dir<=c4AGxSgFdYbHKi`jG?rm)HtUOXGW%`#X5&RMDs72aWrt(ADr~}u9Jfq0n7X@V zZ{ItIZhio}71a_tpCVz$UNjK6nj{qiAeZ0m%kz^Q1Fig%xOq}{G5!u0nkHqCrB)cB zl$R&$3@K(9#H_;nHW&hNw3Oh%kPr0BSX#*>}E&^d@ z>dBsr)T@wnFk3&7x~m6lw!M2$s;Uz6v=bbW$%`NhucHt+^7}sSD1_mgYIcXzgcqoa3L4s>!$Mm!L4X2bzgx*aO_$WN+ zE?`9?u)8B_LNJG^y{ymXAQ+IuAW8&KhayGWM6z#E0VS3rVe;hsePeD&WyX;dKPPD5 zeO9YqV4(zgtIoz0$9lGx9dzR%SkH`zaE1owR!ZZMDfQLmK(kc4OWl3YwoF?!WAbv5 z)E+3-v5^x2fO{q>6DhbQ2$4v!4*nLtKpn{gl{4#R$>f~U#7gLXY02S1jLU4RK|GB+WypOtz$dcwUnN% zJ0L<)dbJ!t0&<)StRl1Z7_(D_GG8yt?wo{R#G=4W#hfHC6rAYTj+R0lgxX%rZ&8Hw z>Y&ynorDD3BpuXfI0=+Hhx&MDe0i-qOv%Fo0j_2Q40M-IbuCCszRgb`Mm;s`{%n1` zlOVfUVOs;w0y#z|6agqP0o!A0Ctg-+FE4k;ASMHaN*|%#4(Je9HX<8)5Qo~R6Ntj{ z^CNZ_QF&*hGXgLrr`%0OSyka-M^S*hDZHW*PfEu>Tc$nB2sV`#Ig)yQC-SdG`V=SA zXN_pp;K{zjq3Hs3Bo9;~-b{if@f9`pHcCb*D$lFbh3KkW#TVAhL zM6y&7P}L)z+Xa7OzU&Szeyg=jB=0HmoE%!YS@*qKJO|)$7mX~j=|)kb zdrgDN`tMTyM$>1<1Km>~ItOn3TVq;yS?Ksf3KpPm5`K37^OO1m`Vll9t z#cmSHE5LQkx9xd{Rw5p!pFrA$SOQ5s9AE@?Xn06x>)7zV+CN|iE1@dOK1hHO5OqP# z6KP2&LOrAzmj%6-eCk2{*(z&h}@csgmfnR3*aXZeq;^0ZW`;`ISB0Xlzf3a zvIi?otpWVxEJ+vCGXmiPDIHEuTw~t=#x0j;>mICB6QMe)s-}}gr7}}Rhb)By-j}&P z8+X~pab=|sLoqV7pX}*pLLf!FD(f#_-K86*f75;x&sl_-R56U%=8o8;!|IOkzUo&O zF@)$95l?eFzHQWo#N9}3{UNNf_W5kyc?g?~ILNJRR<@hzm`xrBugsyYHmVanoA(|< zF$oEE4LBeCgFzroPtK;%P4Dj;jQ7>?{-Fv9KpxY82>qa6lZq$Ga+G*LJWsj%*|yxU zN+e=Y^zA5E7Y+jFOj3tM+m?jyAvot{|Lg_NNLi*vI6_1h!V!}louI`f4a^doyu_1& z>(3Tyk0dzeYq0wx^Rg^(5%{m@=;X%b%yaAS>eSD@KIH;>WRF)CVP|kN#kj?~9HP+} zljU5$h=a;A-cMLb#bP*K;f(E6NZC-eQ0aMm?F& z6m#NT27cMgw|6}nb%=n(9b>2j`G|_QvG&yaq9E6v&+KdO2$tj1WQiSFt*S93heti! z$r0K{TysIjmvEE1^&q8#!~?NWKs~5%?Kqd5$#|w<`{|r9dfxDcYY#g zX|(bnQyo?T=u~Cf$Pq!8v#T9$wtc=a)CNM^O4&5e-5m92@ttDjWMcA3f{j zO;rWfsu54tk1D+nlbfv}elzdAgE<;hNB~GQM&c%;5Um$qAC%rlb*1usac;XiBX45h z5lxZA%o=hB(6S37>x#Pa%ZuIPh^+n?^j?};KsF~4)jXrlJ=Ql9wW94~q9)ag%{w|(^uxX%x6Wn|q4sep)6B49H> zp-#=8Vcd6rt3O+3jM@*8UCsF7QlRI@q~sHNeKzi}h=X}_ay&Dt0WB(Tsr?YohrZm~ zn!7w>j1!?FtLZGa4{0Q7f`IA9K=D03+uzC>s(TJN2p-^1hej1=D|Qkq*=HUd?Q65X zg%2v4;7S_Q145$Fq)pb;s;#wR;MF#I_r5%Pi-uGgz`u^1GRss$-DrbiE6ioGuCV_7 zvi^J3Gl_|ig+vUpj#dO0k3^%H`~@M4#CdwpkJvl7(7`jmZb4@ z5=R_LpQaBEw*}h52sM06I*D0?Ru*L$n4G5Z^-;2eY;$Wbn{&%Da{e$=um~tHWK#Ee zDYF=fGf2JjXspiXXWaV7lUE*_;iyo(d6r++_$?cii{zOBK9ciT_8O=83oDVS)2K^H-9LzMl{{&5Q-+uPOGDi0|%l0__KA-jL=<0 zntf35rAa{&U~!ZX@~6w(D;;gt_aGw4FVlQEYCGr?Yor8)FZJF;&I5f}cjq1~QkR@j zl;lJ&MBbVp(xH;4U^styZT7u;kmL*J0DlUsLr4T9s42lS2w8~fo$9mw4T><)xe5oN z{!8_2P-Gb(s}hpVBp|x@a9^GcsATSsle9cUtX1Uh_-VcRNWgZ=7)Eo)VJT&`eh~W9|Gzk*4P-+<=rTLXZL?+1G*nTb#Pl43*R%s6( zKv6DTjb{btU*t+vGZ+qqL|moW;9GJs>@hi=MKIT&C|GKTF-ZawEvK zQgDB2aO!y6U1^-n_G6R-haPvzfCcLI6WiCy>Y8dNCAr%jR!i6;+(fs#)H-CdCufGMt#+6ZO`opBX|q&EpY6^gVoD{E^HuA zngkVv+K;bxln7~4XF5LFyq@O5epXP&@-YXzGO$V76_f!XUjZ6E4`#2283^h;CYVE^ z2RChzf;u-_w4rI|rk6Xj?Xs{l9t3klr(oXDNt$$6W$IGNmO87G+^)j)G_$M}h*dxx zje9Ln@_mRH);bw9{0XrWDW`F8eLtId3V$vIC+hKlSY0pdf9V%nhMFsXriIsBrbq07c~Jnj|Zd0 zyB*Ew&c`@=3h?vdh!UZy8f27HeXx2x%2H5Hnv%d?!o&$?RqkGcVKhE1_or38Ud^1b zP;BfWPaSW%AQ*rHl{*K_l&4p9J<5G_(@U@!9C|`i-cneXtu_#|=lEdvdN1RG8xl`z z+(^TQQkYsea!}1kuP2_#?IK*yvg)nmt4iKc`ihP9C~>tp?T}vnX>(mqa#8a+is#+X zyFe<`V5nsk!NFn6XtsN>d_Bp5KvND>xQa!J0~DGhI@^jEpu?u33LSr14u6t4nk6$7 z#O!iw;h>7LslynqtfyV*|{F!phl`lpn@?P@j8wdZsX3?U(H^29YVCJ z8QWqmnkp2PG1yDYS$({go{W}jNUZi|dI-f@Rbi_2Cu4p~;~nDex~owaXH%c4@+@;G z5aTQxj}0EXoj6#H<7r(lhZ&)@be~|i4I>fPgG$_+O>5zAc`)maGb2@8$u_)vz4W9h z9$9L6&7xb%3qRO($C+%*p?%QU0h!qXmPIE*d9vCtl{ueQ!Nu7*9#nAL%>2S_)T3<# zARCh!@;_5~dTl<=4lLy$_=8qy`m|;b$!}}I!D_QPS$WBLdcrZM*h%YwsORDdop@G)FK_RJET!m zV6YvbunemqRE=k_<@#jxda9M>Qe1`^sN7nU2)rulx@zEso|pFKSQi2ag+MpdyW6*P zVH*Qup6rmHjJn*pb>lB(jY=8>ZJLHCU;r&|XO6FPKFAw($#a>e8e=jVstcf}ke5@; zHk!1a=uG#k;Epw~Ph9myEe7iI6p8bL-7>$4<#Bo4sb(+1V7oyd2e}lq{Q0e7vh<&b zf}_{}$+SP!kWj!bi{jy0_ajEc!&xw+r3`i8WF1LpJg$kqsR2!b1PwA)O_IIumQb^# zfjB?uqbXgR8T5p6iXI&#)+mAq{5F%I@zoDFg{4TFf15eT%>hl`?lsxVOv*S+IZ~TP z1N@GWwUhHir^b@@C$r_6Lt^hujlq#LVTX-wPN>TszHELndO6pfOuwmdp@Wxob zp6q&9j3Ed{m-c$BC&OiSsTI>L z)l~K(O#?)2)XIB(W!Gb!_;tI6v=+joJZIMbP#GG9p=&!mE`z(U(?@C@y5PiD22rso zkvcGL+h?kJdE8~!Q{8QLvBn-%L2-i^Y7}9sb9g$5>fcu=z?;6FYf12DA+i{%8Y@K; z$>FVPJp#Rqd73o3eh7))uZoYvft~{<1Ik?k7lT(eZ)_3RInHBBwj3$U#r`>Wj}9h7 zxINXWRM|w)E$Aj15Gji%%;+q!aclQ_u=6o(B@6oOWTtCwA?)g!qBD1H)S2DOSkzkM z*6Rm&BYsNj-G-qOp?$J?jl^|QbhAPOmJ`_PF`jcK%R+8qX1})AgB>&78~4W~!Z4Mc zW@~@^k>m9EWY?W+zBGJ0oNP{M4LpKIM2Pf6J=s zw#0o~2%ln?L;Jj_qsh?ULz#gQKNIYDMH;qU<}&O;nkU+4yHrnXuG^4?QD)(7u!hr5 z1dvBcPn;nNHp0}P4(5zCmxqN4}ph}IVJsRJxYqWAVO$)`aWcC>~G61dXs6VJ!Z#x-OWyOpdY+X5M_NdQi zoxj*0m-ZToL%)rO1#3H|RkW(~zNF-)S?E08PlkPxjU+N9duj7i(@G{2)PDH4$9Lv{ zvnjbJrcar($+Je6>+or8J(>{e>mKugI7L~lC7pmqpvM@h5(Nh3=nG`<^|;M$lWfW) z%|qlpGSZ*QcLHmvO)8AeX*kP*dyVQoqVtp%ku?2}K>YEW?JrPOa}J*za8^l9%_#VSDO{n74CBe{^<3+! zlIO3i{#T~c)D@LRl45Cci=OOWL-Ar#JXxn>FkEV!TVWWNI)GlyjveC4YN-e;!1UOU zuPXt>!eNkGeQ#Uc%h85nu7)mTF-(Td1#H}-Yevg5q1?-|Qky{vy}{u4_9pj;N^(*7Q9 za=WvecFCedf*@Elb~@J?b72nWd6&6zwMIrl_Xbq3i1!yxduhyCQHnxLyd3x0>exer z6o9g$@iNcyu?}j60yv;XW$om+#NMsRUS%wS1e=Xd$a#z>i`x|gqKt!0`KIGaZ-Kb< zMIxgRBo1xLoW{axUCwjB7$pyrEAhmI+~SZk&N&oSUU6LK#5;?-f=J zat&rOx_TLd$1*u^#u*tZkdqtG-2LI~I@pW_qNLpbm+p+&sw8~@Z4fczG2j1K3C|O4 zlr`4aO~UMhnu=f#17>HDyzybNo%fjw!c#MKf3}2bCtRvuQ!}JZu1@n9qPM&eQjq*4 zUZy0Zgl;;(T4aqq>0LNo(M+wg>-i`gw^7lc0z~29qEMd>o*gLr8ZXBELwEI9SLT_% zM~9k45*#|u=*CJ+skdZ>Np4KgtcH_W=h!eC*+YZ9A(aG8TZIdbdgDbtGID0uhH@xz{%eTyhxVEalOsAW&6pns9 zE`;;!9Hw9ebREeAV=2E&jw6%3o(YS`>$oGlXKThBI&la3^ws)Go@nUG+<9Lm)w$Zq zv=77W5{VQRRUi;FPAwFTZK$(|-6a#9>v7j@u8kO`N@*ImHgyT4nGmU3gh-r0jWX<~ zHme@+%;2L#&N?G;@|C40MOlm+;YwMQNd}^85yG2Y17NOaHylmgi#=~b$ zl{-VGFpK8kv^~c*yxQIi*{pyviv1i*Y=vwTI}alGN9)cE5-Vb>)p1=m|E|=m0wXL! zi7SX0UfDi!N$k0CKA@CJlPlS!XC|Kv*%SZ!201 znndAh1bQl;7bGV(H{d7gJ=tAvZ}OIr#in9PuXW7M^=O4wal~CQ+ne1kZy}Wka|xo_ zZIZ33$?KIwbjJYNR@dF$(Jqdpk?xHFh7hzukf*5n&_g(x^>;VR!J&SExoemdN1-xP z5qGDr$DFt7oI9|o>QdV>-#m_6`AewI?A>zs*|rMKxd#!yO!!R2<;H%hOTAkbFczj3 z=k@hhcVN_t3#v;{4-}O!fpN7ph_BK-nCMM!4Ih<~m8bx+;UnwnE=BETx@K#6RK3z4 zdt>YQKvWD$e8TVd^8VDrgr zU(K=x3Wb9-CFE@pOxj=J{&=a9Z;QKnHpy~i3Y5myK%xOdux(USK1r)5v##hRmYCY^ z%(JEJ*A$5gL>oIw;_Z6hrWPa)IyiS~)&j#ia}XnnsrJs-+1BBesDiQuoSUF()f^;w z;Kc(^sEp&5Zad9g+)~MmMAD=)Q%Okg=5Fkc8P-{F+-%;rA^n()lMZ#*&heo`RDYng zfVTvuDMX0r?0H*rW@96D?b)Jo^3N!!lWoWoa1#*5D=%$FdPvWVJ~=Qgv$%n{l-G(8 zODlVLLa?Tz*wq$&vg$7FVo+LP@vAW|s?xNd9bK{-S8&*y&3hjuj!i4~Xaw8cO4{qA z-#VSlzVK9VXCcOgLbv6Xvo)MBnyORzI=-&+Y!=EX1yW2wQiM4a>uwUZ4$kkS&{xBr zTAFyjD#{=&L#QG-?uE$ljS(E}I^U-1w^d6@GjfBK(-bU_d%N{@ZR_9@Zo~t)?*XMT zL=q+JiYE3~Y@Shl$o0JMvv(-12076*}iNVS8R?V)Io4&H@UPY=B zHXN1uxLG2?sv>b#!|~NO&t{9Rm|^g2=m23tk2SHJSf=$dYm^FWS9WfRLc;l4XoXX)#5*Ojxo7PL79n@!@CFi$hw zs7r3KGj0y_K^NaTvui<{1y=IqR8?)3FpSFzyA)mMuXAlvYp|WJUvxgON_I5o;-fdPu5|H2_5K~B`+U(j)mYX!SXLRE6GUL_{LrjWI<*V|p$rIFh&t5|-OSt^d2pgl=Grus^C1cxxyi7-mv%WXfG_CgHG9%DxDBrk+*B7;|sexdwfX)NKR+jQffa| z15`b*uT7TQLikHt(*qJ&XeC!8e^yOTW4D4t_B>T(+hmTalE&$u2UI3DTREZTzU*}LZU@r~KTVTpIJS&EK+y)DYdR>8y_3I8I~296ZfUx8tF zoei87x!d5)2sZ1w|MD}J&z^@yAQwa$D{eP7D1Sp-RY*mPOeeE1P1$wbwDk(Kl1|^=OK}v!IqTLiHtE+G4Y{TG^5FOpxyhosyB7;g$P_LGpztp%4@C&2%~U$5S-cWojW>Kv{l!*DK>8nT!M6G2Nmxx^dZn>YbF zn8tCS_J(e5LD_}1%OM|M)4pvfUcDQ_6Iql^iMxL10&|8qG0_;0i|li4>Gb2fb<+@^ zO(6zm;{xwi;dR0j-u6}mGj>!KlE%I(&YWf+r`ogQSB}pk*xRD)&0Z1BUKil+qH7fw zH(@lC+Hz3_&@~EtBai22HlO3pT+xvBBqil$Ls@vY1fx~pH?cG6WOu{J2VKO%yV=5+ z73%BsFLBrT@Mc|C$fLjwK22v?jlzJuV^ysZgp`iU(03`ep?teBd>%=a0){WtV8~K{ zX~)HN98=^w{V5|ug}+G#rCz4p+>TY@4SSL)5jt_w&^0$Xgw+N`e|zeCKAH9OaVZy} zO;*aV-C9A0#%HVdy{n&WRTtnc>fvW~S(Q7Te(=eGudq_N(TcyRu)ed4l^o#BUC z#0MMPu?i?G>%&9WQ;YC>`;^BzW-^=xGX!1b-PCu;L&W~cyh+K<`)O0mvfJjs^;+kk z>c|s2X0^IA+JU;6690bw^;di>X(g5x2bIr_i8I(EA0!|YRpYCS4oSajPt*BpIzRmq zv#RNr8hZITOSevh>n?FkKN+3o8m2+1_-S&wbC+Zlu}~<5(IAJ?{!?glC2=>J-R6Q zff=0)ORJ`LvI>HP=l450x6DN?D#VAlkfm6%taC(^is$gg-KKL*q8~wb+oky}{OM66 zBl(^XB|`Q8_fL1eSxih(4cX09F)kjVG1EDDLanFfx`kHf45ZfJBQ!$!oo*zRC`F!` zTpMhQ-=Apl&ceVI?qdURG^meyvL+Uq$&0?&3s~+L^X2zD?_|Bn2DLSbZVXaKf=2K% zN@j};N2{YC{j^=bw(IJiHBBCZN*O9pW*cb==qZwggl?Jo)8w+N077R9qfL`K)BE(9F|8|C*)E;~wq4_3LDMpICTi*{ZyPnvFF`BzNY=EQj6T>Ygoh+f$I8VFHe`v{M?F4nHmSpB7i= zRC2B9@fQK4(s^;(Ezf8niXISt|LoN{2W#X>r9hoViDy3Ns>OM6*82N*`-^kT7FUr9 zg`#!NW34>(I4T8g);~@9dvj1!JxH+!R6Og~AL<=e-|uAP)c~kL8YRm-cQ1QxMLVV{50n-P1+Mhx=UPn@{&c} zPh|7s()|5~>#bP@TSu!cYk4_5#50- zV*LHX-Nnh>SlP%FnGF=KMN?n~l?Yz0h~wi=n_EE3cG_xvOl*L)UL$;>#PTnZzn>PJ zYwC#1HkYN63YamVxbnngQdE2Yy^Y+(NwP*% z*Cb;lqyJH`8JUdw^r_YI)2P2VrO?fBu#w&!G}LSmqY1P4i2s7Ue!rK%-<*ZXWwjA0 zO-)^y&dOP4l_;E)5OH%Z*W9f4h0I7AT0+>GfK7>s-!|8~Q$5b= zYGJb2ySNw03QUQ@jqv2(Ci9xc{!{Nsq1d+s%d=_314$7FAK-WVZF1RHC>JRek#s4P zDgWh3GUP2%cs8twv0u#f_QYf`rogHwsp(L%N7}cE1tBz){I=;XP^z2-0B}H$znykE zgn4#UmWw&inl&GY<{rM#>ZqiqDhyX8O5Gti7lrSpf zQRQ-ab4~5AmsVGe>OkgkLSa8vGo)K5nzY!36oCJ2)%hwpl7du%$?653^T4H=ko=if zQ16!l z)!7F8+vdxaTBVw)TadRM(Mjxzqy}mPg1=3!SL!3K755+r4jQu!H?bWcyAZ|MT<=t6 za2!8gZ;KLGK%$>Ct>?ef@Aj!EV+o}TIy_^%-y8GMh|rLa{oCftjoM?q??2RMCF5K* z5^~~L`S6}D7j67q(q^d9=7vq9gGV2ss2WbceGhkM+Ra7n?17?Kk6J=M;k2Td!#;9% zs-$cNP23c?LSSC%mRaN3AA|W`tZvz8(sb0kU#hAyCB3?C?ta*$+pRiS?7=||Jrgh# zy2Lv%#+`o3v?nxO>rcy%L^n9FsK#XQL$%>3L2y=>|Nq2vpR=%j+gz_y9i%$`HML|k zBPUTlb_S_oUE0;;8msYqyA<+X5^lSL)X3BpETa5qUwbjR=A-F`Na3H=LMREa6X3X* zLyq-0b!)kLDIu(IDHtb@iGJRB3RJ>Rpej;M;kQxero8S0uW2(nn2IrS1=CLukPm&G zQ5X9PGb-`^^_-w)zkU$VYdlHol8yVH??9uVp0;|oB#@7SD_Zj<5+&AnbszSU^VCR! z3ZaaV#cpSV#*j=2lO4vszfJnol$enzVhr&yD#wd-2?P>5r5sEN@$mD#kK*kidCkkT zD**07kdiLbi=h##*;G?}8h<3cp{})-ro@i~8qHNz%|SOp;@ktY30ep0_be&f)OmS4XY7*)$iBLWNe;Dukq=e?u`D~IJ) z&7Nsel)MvFAahaG5=Amp3R#RllHlNwB;4#P-h_Zo{ za#j6{D;<_{y;OPAYt&O>r?0IgqZQz&iLBKv_Favxu3BWGD@3`=Fsf$_hLnn8(&?MK zJ5|U-omp?wfuIPRgHsGWF4y5b-(z3yq(Y`kGVwGnMEE|p99Gm{sYG0vo?fbwsy{Kb zJNDIM7f9OKbZ%-&ee9N!aGELAQqdq3iz2bMNH7l@YP(ev+XOK23XyLh+bSwyMbR*- zt-_iuNqKk}kB|H}ULNpGH&P>dAbYV4PpVnLuOij(+vb|0GG&^hhLm2+K~j=+NLD;u ztFO+c%TZ;MZ8_zxZL;DAG&vFQ&ggghZE@LFSDiIO4SZ3FR5CjnJekN32e5cr&BasI zg%d>L;q5f;I~I_r-H_|YcNU$SGFoFydR?u;MX2ZuhL-TVrvSIK{8P8|zD!ac;F8j)2WeVXcuT<5Vbn=vQGx<^ zHIX)nB&HmGy^DRredc!t)Y=N2LOwcmcp$Xa4|~Z+zU&=Qlzw#+4JqWcOC&cD0OEo0 z+p6=`Y93kGnm?6UDH4QQSJ0J^Nmb}8Nbi@xN51O3%cV_qPm`O4uWA-^7LQZeZI89&SLJpzE(#CI_>$R#n1sC_CgNFEJ@Fvl1^IlYNHWy53u=d$_sYub`YQj}C zubL6Uo>w`OE2P8^EYicJ@bcyYWX6@o2_EUNm@A+ZhpBT-lR2a>8=4#}@te!KSy!X} zRvm=C%C|%-XN`iX`hD{rm(yLV{6@qfC2duNEHK9uQ!-!HP<{CI?pAFUHC9vRt^|4q zk3u6b4^co4Tglz39JZ#8{Kn4f@%2-o$>vn`w@rViN`AAd0fmaQH!CS?<{{(2D%!)E zP`MS@;G`r{eUeUHQ-95%JVxe)t9A#fM|&<+d?dlq!$|_TdAT&<3k-@bMsIQf1wwJD zRXdw&ktT>RVw`nt+KEes!(I9->bn21717eL9`beSq&6v+QPkJ)Kvbu@WZ zjdg>*oKcsnvO6}!i6!d-q%ygxmf{zB;)DP3j`+Y47$gcZ*Xc@#Nx+YyyO8kL4!hH{ z9@NXqAK#132R9*a4FG^f0OOw*Y`Ic8&qc;weFfpb-y z{Bdw)0X@Z-5%_8eE=Gkqt-&D|Ssq-K!+WloDqX0AZbjc2 zri)Ie1Le|2NQbqod+|ebM^j!?l=kYmb)ZMAgGDf31sts@QkX29BgL6F? zb$2RBz3RxuPiKAB;vv5L(#SFms*LYplT%7y#kReg?1fe$s^b~X&F7fD^d*_yYi2++T+ zZrHB|K^A4FYG_OB%8{Cz++wivIoEbr1kcE~@U}^PU6RREx>s{+tcEV)Ad?W-)A%C+ zPWhGc8=A3^bUoeOG6a+i1IY)Q%kH|^5*^s(AyV$eRIR6OQ>GF}CHq3Xv$=A9Q@P(t za;-@e60wRWlABuiZSV#8?HYMizU?xdwJGpEX3U=!VzOV%6;R66RF`m+nE0@TC+%DB zO$+qtEILnZ;ihD3j<+nT?XEl`>BCC;R@2!As-mB6dcC%EmhMn`;n4bD9v$6lPO7W3 z%2no2vqr||WG2_8qseb1*EgfF6s1~UEoTEtM40TCI3`J__HvV+u5ozFtwuBH{;GgSf=QZ>M^2sf>uhqL*L`>KdUx|j8I$yLd7X{y!r!!P%ghiv14^>G@hFKUnHXdQM& zZq!7-kKBz)u?%(3Xed-tGF5^VQ?p{getJ_+_r2(+K@&pJYYnv?$}lKqm3T_wN_T%y zyG8J@FIvDmSMrmhQZ#F@Fm38iQQR721@zN}otqx%Z}MOglfTXyNUq}xCJ|sjKUtLQ zHWYb(+uWLHX3Kfz!5wB6VGYF5n!5YKr*Ss3mswE$BQX}$YGxw{Qp{*Iz`jr(oz1mJ zobA`r@E1g(z*0;&)Y~Hc0X+%fu%2s{Dkl(mn)jY@X)|w`tKBS;75Q~W-|DFmCeyW=)wr-!ll*UAomFvZB5;sdsp+AbJOf}oa%n2%yQB?c8pX|&JTb~N-Hd;i@vTNZ^b6Sa7IK*LYljr4A_1k8gVD9S zL)85$IBx}Yp55Zc{7qCkY(-)Y#{A6|3^LGu*v^k6I6FK^I`@|(QARhIdGbFMTB@LW zEhIf>Gx`%iay%kItG1ABsu<{h6U)6q{cUrNf5*2{q4<{|VrC^oVY*_L>+qIq%NyUx z0$>6ux}A7k6=GCG>es#mzm{wGs}o)YAKuqRKU@_H#p!(SrDNRLTpcyHFD*rIQW3?~ zSXJyF;!>Q}@=eh}>K~%h7WJVsRUM2{)MLA%-u}nC2-wu3zq5YYnE0u>#!bPcjKfB9 z@h^wms35D9S7YOFhj(jKxWe8!?yPQHLTZXPP0B&~OrgVm6ZF+!)py+2uYiw!1Nr$E z{gNW$oo7FSUuhBd$=(dim!GB|DRA}-rLNkRwWT$7R?I6^)TBDBcz|<)}?4gn4yW6SW#@>*1I8y_i_4i3&Cz{5FSukfK)E zv$s|#{95jzuS&?I5L+Oi4l>NW`|m~7!C7=&sq}I|zS#NtKHu9kS?4MVVZV*K*f%|z zB{<*8BvMkoC6SZ><B?C~?Dl zir|*rABhJ>;iLzcqE#wjZNLUMMW%(i|U< zmW2VIs`vV4Z5&sU07 zWh7i$d8E`xCA)BGx=_+^Rm@uW<5y^L?q^h`(w~23{RE1GfzxEA^%*YC7>`#_Mu!P4 zpPQpTz_A~T#be^Rr6TDNp?4nWxdscmA-4VTwDAc+@KJInuO$Qqivc^!fB5`-R9;Vv zPR*XEsRB7^*ohq#(t=agtFd;PB7C&&4h-m3p$?sJ95KfiPmUUsWL|RYj+9qpINQ#v zZK#8QH#TUyf2-($Kwq#1$4g^NLkmaa?!3VDj28!4JhHkKB$q&-Qe&Ptd|YE3VvOfS z-wuo}U+7$!MwkWtgh6-`8bGA@HEd4Ajn=(CU^_6VW;-;#;bK=xwjyodSsjDQ7#Goz zh_dy0_4fm#k`Is1&_sz%8lIhSsIpaHjs-pA9-O$(|stf*5Lfhdwe`bGLXdr9g z_^(g+{W;+fNQXJA_fj*`=fC(owBgUOeE6^a*sO2I1(c(CJfKihx^Dep6CH+F#xV{~ z%LEfVp^eRG}||AVE}%&-Xzl6C}C=#Vw9q8utW;ck}MZ z0BQ4M9%|3H*pfJK3XV#d`X-I6Us(6<;Md(B89?;3y*arH{t+fWDEA+q$lSaA?Z8N^%%JGolExvc7MnzwO`L=r)La^$ zT&f=nw4E1KcUh27IRf3!hu}r8X;4M;ucC%bMru5tx91jNAgw6Y1&G;Qz?an>g*m(J z--y(LNu5{;CtRK%u?H9(arK40Sa@XMa|RoX$pC|VzaY)MMrKQ8SaV*jmm`CsI31Je zK1o>_Y#I$it^7DT5U=&f<^i5C7o$2b6xT=f=cBqmG2l#MhUUaVL6F`mcB;*k0UU|2 zHGK8K-%Y#o0>#-V0OI2ka54*<0;5#rX`DF0kN$^opN=$kPXqGHB9mK`Oy+x-!zs}O z&Nol_Xx#@GO7zK<^Kghsz~e8hfWTv&w5Zun0|(vTov**VTwTMe@nPy?t&w7ni(#6K2m zJ1}tmqpJQnf^daa4ekg7G-&*9b=SrWewa=S75Kw{Zq;tdEkcuN>?(XFW_sq2h| zMrEH((5a@)b^6BD`q{oaHUQK|E8$rTQ;6#ZLWrT-Ja-1J44%*CeVmbv)W_GSN(z%% znr9Cb>D`SC$cTeHp6&ZUgYtvm%EG)}m{LsY77CgG-32^^ZO`tj?~e|=Yc#zeNwWks z{{;>ufvY8@Lg@X08@WBZJz_gN(99Fn+gjvuMK|Z?pO|||pbW>%Mc@98Ecx+>m;5A7 zjq#RA-Aa-GNUELQJnA|)FPt|n>0S5R1PkhISOg?e{5BE zf~cndSsb3$i0dyMA*hXOGT6scSwG?5^5?~NeuzIqG};+>pvr}$$=x!R}Y`wq0thzNm)`1h)SWOO=VOYbN_h_MylpOzK<=5jQ z@?_$zD$GG(34a5R+QHNiLk5twa5DS(0o&n`?C!r9d5|HcqBgz-pa-NvcOL};gZ9TG z_FN?tHBb=SsKhoR$QUZ1etaIY5rdS>5g4RD_RoHHL}e=!B?&45U1U>RERe;0=3fex z{$m&I_y$xMiztgYI@tfKmKr-cnoZ9FXQ*(@+8=JVBOHwf1o$5~I3m5^BBK$p2VmZS za~FY+h>pmY${&mMlB_iB{DHXkvrrX?N@tQnG2f9Wmh{O~KA%Ui2hlW6l6BvH!BRrr z(iM$Zr!bhhQ*f`=Hm8f?vIS<@7#n=$bADL&6%@F(@i2@^B{n!a-^Y}$Xe_5{!u8p{ zi#;r{P4op*?uVurv}$M_lKDzw@%Dch_eGS!ahL2zi|EY-^izn=u*FEFOwIWISpRA& z|62L&sN>W!`!l!8GN9=hEAhLnM z(O58q9!=0F$GHo8|NK9uPJl&F^8!Zu$6{?qM`2tRn)0n&D|;dVl@cQuYQc!Tu;C;G zHMxWfQ$1ZkxL_(_!$$F@u}dH&vV<0>-KfEdVa{B`$pn1PUrOG(KRPbP91w(H+)v*w zk~a^^kvObK2O(g_vw0VE@VZz157=uVGQ$%js^*1ZXqq^rIeGpN_x3&DQ57yI6@9Uox8qHc3BYw4QR2izt}3+nTK>nf|1fRpTM ze|&~L@PJrt(gD{m3XEc51bTpR239iDy1}7|DD?laQTIY@qqF9rLM;2mB({#^;^WvK zZ?iwecS3OW$JgFdmZ-XG1orbep#TEnpWz=kJ}v_AnJoadOHJ=N4g1$}y}%xwl5A>! zL}^7M^Q56j*aMN=XFpsFJ*X8BB9Hm?Sqs7vHlQ?1V9H8cN>b3bitAOn%ax~ zUgHrdo*%I%F2!apu_()fPExr_@58huxq41qu$8!BrmQL!Mt_LSJ0na8*0R(qY4&E-nE2pQ z|F9lk;FL0Jk5mB?;}d6x4G&L+)1nLQJ6_pl-=7^6MHLIuGKbnOo6ID&4x%_)c(AigPa`S_Wd89Z zUcgcfeN5;`x;Q5S=LW__42jY-a)YA5%Gsx<`zGDu4)Ewppdd2<4{B;kTptO>XNPu{ zP^a#?sB(jH3-2~kIyw)IK?JaHUS#d8s$(#%t7h-(^%8h6ernQK z0tE~#5hN^7ieW&4fUra<+XXdB;8nhZS?ysf-E2ck!S9Pww#L<`@ybcCCcy~}WU$68 zPWL$5cgF|%?qX+G4lW0kW)Ub@791p^B5o)9Y0l=|>497uh~~x9BiOj}YUwyh@SQ{0 zfHFr820GjKk%s`kNb?sHxglx_f`UxFCWM{;%gSt73swWxgWx8OM=j*9akY!e@}Gl+ zJh1DJrP*VSq_yv4j)KooOvX?wq{xx&!bV8!+;*ye#LMBq$P!hYR&HiTj4DNBxOoy2 ztOaF7<&Q<$&JI3eFm&k`(e-?(=wWl`6)`h98HOSKu|;>Z6nHW^2Zj!h%*oOq?AAzG zCU`Z}LmSWfw1?o^L-x}HP1!mnl(hsVEkN9nwD9GtXkt~$y_GlDAM5oJbyR@tT@BSB zcd)*RC`8c*{)^8YD7FcqO(ZR0_l*T$i5py6luS~$0|&Rl<=*EM;h^E=YD$ev0nYY4 z#RJ&;MVcyj1vc?8N+sVS55gWpENIX3-0W|)7F}+t1vC0K#yt51%mJ=2d8F)jJ==F@ zM=H$OaRp_iz8sQ6`%RFny7B1h@sG8yzD&`ptg}*!;bELeXF|sjkO#o6pl(Vg6z3=G zq%ed67mEd-1A_w1pMQxQPpzMbXL@)*t7V*@u$Nlk#TSh=su3gf2tWnY{my|SVb=a* zeavb6wM;KOj|`9!07?^q?Q?v5zID>5_>51YGA+X(UkTnf>3(>?+vjLO>$6f(;&XW5 z;_H!grzF-A7%cUVpRpev5eIdUObSkqKMG~^a&4!Fpwf6H zqA0n5GBHFABb!uGk`ZZs(i=ohub`gA`mhCGiFH3dR4W`JCRf4`U|z8pndbQMrsje8 zm{s?~z6U*MU62P{Af(wCJFQc7p$aW8Bc84Mz(a8jS_`s?E$07pHbv!J9TarzmXG!3 z5ZTST&s#2gds-hVgG3>+#7ptqt{`w{FYGJt^Og~amvS6x;t~W+iP7Yq$&v@`J2_%<_n?OA z_*DJ&JC!`k%H={8_W6Z3E6EuY)N+JUHlaANX z{`dv%08xW608=0zI#U681nX{O;uI`oW1CF&nT3DC3n_gl{`8N8c#&OK!u|8 z+2Q!obg-|}9(|yT?&5fx4(CvTO|JS&3WQLRP4WEEwo z8i6Qgjrdk=CgqL)xjp3t`ABLV!Fi5~Z4HKe7-R~5382gf`MySPuk5q@W5HfnVq|O$ z2>FO5ma9s&5H`gL5+FGcG}(d7RFc2B)0T&&1!hSbY>I+*xC~RRO7b=S7Ce0Ui6f;f-siYBRc}c%E`!7v!uwO-GH55?k1&bDf2?rHKHJC{` z2j~O?=yJC1u@8`k0;5^-K*eO}a&FSTQ4HQS?+8}i=+}J^N5q7Mh zL#Pv1K$C0!V{v={QV9)FZ%R88rHsheXWv?*iwnSuoSFN_;%^yD=jl3hx)M&21_EV>-r9P3-@Vo%+f( ztx6SHvQ-Gu)fk63vrvnSxlTf7oDV>@XY45q+2F_&nm8Y^DT82Ae2Eg08>eR?gTWCt zwzl$pyw=Msd+ z%(^Obmq2K^5c9${&%1Bbv+;Mi4yqo;8PyEcB9o}znVboze8RrNHaGj8GS=7&Ofm6D z)_Rb_DqH)C@DFyP$QQq=J3s8Z0|c}M*cVxr=w@Pi8l)PgCT`Q%?~_e`yXqxr!Se0K!%Fi3kI}Y3@$A<%4rIB5Y2mP3;x=t zd*K$qvgz)0O28q1f!>~)P?{*_$p)jOO}Jxw#tUH#*Yl;JNL22KN?*!U20?I;Dv6s_ zRmBQc;a{8TwaMl4ue#01`uv0os2VsQT>uD##A8DIq3#xd3%Ijf;WI5@ORAfAM`wx; zVYi&6aH8Rx(ASVWk7lYCaVni=&Su^>xs-GhDig_DI6oM~aqKl?9a84w>;3J``}jj| zj~f=wr&8ioX7g&8<3=oY@*CG%_nC{}8{B!B{TV!*Hdz&jJ`%Bm*#6i-`}xsH zX@#sa`0CKfg$yrp7ZM!U;A`Fc&+$gTR%xf3HU=@kHaqB3}fC ziF=Lug|%+Yqx*urX?f_hxFCO56$av;vpQV@aC>~Rq`zjVAwCB>+M^brC2jaAVNpWQ znZ*fa7e$<_QfB2=EE?jQ`E1^kJ_>K|qULd4?ttNFnwipKbmdi-JEM<12s zg{nSS8yLwleI(t0$Emf;#yx8G*4^>J0*J`;S=!{mqCM;1sGL!1=S+OeQu(#`{`fF8 zayBJIifISQh-(r%?^ALD|5Kk__L+r$!k)VXmZz{L<>EP)C6b4Bxk{s)27gh^6g4D& z|M*AjbW=M63wdK*B0!w7BwPgBRJ1V_c(%l1Tc#KEl!W*}iR1rT|yT!(;)FeUmMcAn|$^EsL_Sl1h5vKQp*rO!n86e!VC_}m+ zx|Ne+4=I;jfBcp=(ir-MLHt1Go2`B%RgWrF4@B(+v*l)ET_@wzmEQ7#v*f)=zpF_< zF#x=*lUjKHrJnZ-(omA!!98;}?|byShRq3hOs4J8m>JFH5sHT~35Q&4I@|ZaDKTu0 z-DHn@(QamLlr@8(P?x?LC$0SP{{1DmsiaS26GD*eGYO;OmZNK&*9YF;U99`^Z?w~k zUHY6qi}PCy`!SS+H4XmK^GGrNubv;U9UlN?qeg_GxdHv!npTSAR;|17`-f0X{NpF= z0w1d22srJ+O%r2}DlsJ-zu3}E$cH;)_ceMc-BwlTmAh01ALJAb7IaYfu2LuId1v74 zyL3A|A`Xv8>0)Y#MU`IAb;7gjleuIm0#O*~IdA*NGhRXuPK8tdDR7Tsp$DhhT-}Op z^*_-*idBDH7`3m~8*mB_YvN23IGtjHm)Pn6A`+Zmkq2T=0QRn`kQaz0@33hw!k`%0 z(ylPUJ5={5T;HB7wR;_UPW_@;P$Y9XHft zTbZ^Xk;JtPE@5QPOA<}-6M4k($4+`7oJMKzR4dwY77kF4qKE_uQ9wG`37Rr#${SZ= zU$3{rV@NlwAkwTwbgm&ra2PDDeZECx)gqVx1mN5-=G|KJQyjHslQ^!aPi5w;AtWeB zC4B*$g9&92(oIEQFJ$|0w(h}lTr9H|gav2AcB6hoQ^%`%@K9qX0fbEXgWc@jSkfBe zHRhX?-DhKdrNTbI78uS4!+kMay7m5!DbmNjk5KTpy+@-5zV9 zHjs;Jfy!X#KmpTX#E3l!g`5^6#l>|PF0!To45WrBpjcR?T9ao;~ z9MnB0*aptt)HKG-^|nK*L)W9v2YeLdtoc%DB}WvQJAIkPRNpH z+0hf}^SAv--bz!?_$Lfv@{%Pe3q=uiAa)j%VoN5fw%E@P``LLqliw&spvo{=^x7_Q zkw9P@GRP9Oi3h{0qqo`A9$~l!e74GYW_lvRS&fhEk9pH?cC+)xU^*Mz+3BB&yZon; zswR%Rg1INYb2diw2v1THe*ifl~#gRy^v}jhuSUTm2`FG;5$4avM}ztSmL zLIsuj;jCST@L-v}ncw^zz5FPA(l9z(B?LYzy2)A)g^xiv<>-da%{BL>2SLRU3rlR> zLsf60C+U_{ZT#l$_3PsS)%m#;HBmsNJ{#PIt)xbUMCG+GYVVJkb#G?fb*}#$U1m5w zIKdl`o0?562F58v9(O(1UA=s0XiHX~0;o#kKh9XQ@Pm~sVh7}hAMEz^$_*2GNa`gW z;NY~6J0GtSHMw+;aOYA9>7Qi#1F?cicoRN;`gYq@eyNwvG{ZD) z9ih`84~DJ4YLmu3jHl1H-{nRi!zQyi(NyV}d|q<2STK;-(dip*9?nT7k)SsyQqbZB zVB4v*G}NKnQ(=AAF56WOjgF=fi4-c2U3J;cYeyolR8c7mgh1d}ov}Y2(0$ad zhOof@PK0wFMUtH%r4+ln^Y+Q^i>`*9m#aq{r>5QI#JyQn;3}ivkw<#}&b)dv>#lOe zzmY^0W=Lp(`lksZ>`71G@YgxxYS-Q6K}XM^lx3QZgK2-4OWD2Z9+B|H zkOUCRznb6;&;b7`oEGCfVh7Qp5(WwsDa93l52y&InVxw{C)4{?u8XWd4vzE8{rD+VBdLqB3cWe74b*r^jqHM(pe>cO3k!g{e7dKwzcE&K3R`NR_>-uv|QsLvQhq%U=zjGd_$)nzr2x{5(`GQIkG zR{4_c%;+RZbiVtYxv`|LRaxQPf^2Wu=jc4^&{f4G zMmvahlEU{fY)bu>NN)@6?sbLL0962ebpZ<;8OI&T`SjvPrBqLb{k=}j)&Hc+)Q6fo zc_NWfUWlnphyM=zel_hpUUUcqM~S2;qd0W6ofR82UCGNRa!i-GkUMl zW+im%I7D&myzv&NA5%ddix8E9WC@8x)mX@8WE#nR7?0m^^Z2H`nc`$rLeRgsJV3z12V&bD|cfE%>89b@EZ!k{jrj~;it-{H6S%dF43461_148ARH0*L?d#MTda_A|c#CrUK&gDlClvuNbofz_nSI&7c zl!LIby8Xc~dS4NrvJ11t83@_=i|&U^dguhGOd=EyjE5$~`_}U}J^Oake-W(@Syh-M zh$xwHO;C!;SH9en#2>vC>fbdB1EyebO{HvQPoY zlQ@PAm~2o`CsHCEL1S?*Pk15&!6S5*p|d4blfdr{nUh70*^s>cm|_2FI=XCFS+)Y@ zs@M<=7V!m1@qvRD9y4ny7ol+?EAvIh{67GnH?Hm^Q>GZ%6Jitx3PxcF{*%&lMcp{Wgpy&AOMUd34&0pB32_g z3g7S~kE3ay#9Q8w==Ur!2F}awsuL9(?_M}~(O)=zLHuRk`sA`_6UYJ45ZFc)R5zH# zUqd1PapU>BzO$$rh{$tzt_GHxHk&5@4T(a=?VNSS_q#rndqgB@_J8 zM#AK7Ru|K8Wwy&6=Sj<~`{A~~#9+HFHj91UC~NKnut3c=ThpKL1PX!&>o}T5vxkzl z9IiK(S#q?2b=_)CIPK%fbbPxxudWm}C4LL-av^IM;leIz^2zXe*|Y2XqF@>fXAAGK z?Yg>=SaG_D8jO?O^{UrE*db7Zwam*r#j-(&VhdUCJ_+1b*dqyBK4&U3MNZ!)c>~(M(Rv?MO8b1CvrBFOJ!U=!j^~M##@F-M-^E$6 zQk4haEfWs!E?9no2El`OO(z}N#?T$X{0a46Vy`M~C%gYT>b57#tIJbOK~Vxnr7_d$ zcWw-eszp<;?_}3`d^i23Dvz(<@cvQ|ZbPD*rfr-oJD(3hwL>0KJhHC;1Z1jCr=w)N z1w4L{oy(Uom2#8nc{fjh^sXXB4pxjQX>+pee4ZUHk^2xRsY-oNY!w5a8d|WO4LUh~ zLJ#6;j54}Tm`(C@)s%rDA*x7-W02ZZucPhF?MX6W&X?Fwx#j*@6iQl&wFUv1FG zadkGo$EN9;qX#grNmH|rBwajeLZ~i>l}r?Hd_EyQp@VpB6?i&MY2w;&*93-Z0`iz5 zbBG!05+}QHKTs~pt0j%S9Sk%jH}I|OvtYd5K;E!}?KSlUpAdm^Zr?Yy5vBMC4Y7L8 zF?==cfV>iCs=zW@78IORWwxG!YDdA*t`F`t<_gsin=uoNbat2F!vlO=^J8z@hxdZm zn%HqeKS4a6t`-T9lRkf^)S(~Wdjs!<680HHGGIxFps&k@6ama@QC0urlK8ZqlB!aj zuo@4V3whf!x|g)q02BPU?e;Q!(!@2&8C===^)P9s(iq6bj*IcG)5TU!hF=qUWKD^ZheYzp=FycJMBAff$5r!|vtyL0#M)$- z_huzauc-uxffYYkaNcrv?xS}W;8u-msFxOXBl0x42z4G8!(aAUu&CN)=%j=9dY5c8 zc{e00IHsYu>w|ma?OCc5ELo#vLHGaezNK({VISJ3KGF3gEl)#y2azKHgb61}V+7Hh zyZgo1f_tLdNs881(nSn~Nt0c3h5j|;TBLUTf}6`HH69^UgMx_^Y}llpG{6BUqS63% zKl@^df57JRn8%`WU;rmr1#+^cvGAbYG{Kyd6nJz%y|2wqzQGJzNoB+;%rSFn8prei zU`xdEqSzt$JY#*t6EcV%#A^}@LIFN$LJc!|f-;Jg5rEH_HoN1>nRem5z*26SLjL`* ztCthW$Oovb-4i`H8TJ{yb|YUo2)2s!OWt_uFO*<9qUUk4?BaVP@icO3d5#M(#TzQA zF!CJ#)p40ump9}X`xBg6t#jqYTTFTd4wUFXxg5XX7T$~M(1;IKohO9}e3xKuBT29j z^T;EeY-(fpFy z6VG3CzvoeSMQD$zK+PO7WVN5c>4eZ|deCt=?sa*>6Euh($Fuqt$V|7Se zSv4n=mrjKszs<~^f$9Hx`I{}PTMKb#8W$-ZzF#-}QX&01! zJehV?yQHuu5aI~5oSVs}ad*HjSEq*KD*L4Vu@-4OdJ2;ItsxpzjS7|1ahbQ0UA`rd zZZ2LB?bQ_U84)mTDCzjtKD5t*w$T97#L*9?71>p$ufr;P46=?3;=I0H*7--|-rzJc zuu(peI7hR)BDv_>@4JnFmz(7M3$J=5Pbu63ls<8Upj7JEg~!a8SNl5$uTf`%XaIF6 ziQVItWT9R{b3=XTkqP~E9Y5*r^(Yv(N@yNlKSmIeN1=PbGv%{fQn;@{MB8e%9deqn$7&rACU>_CEMaE%&H0|78W%EmKMV0%&lHh&Wqe{Sv`m(8%@cZ-Qs)UnuDFOQ9Kp_ z>?jokDw0(OL_}$hi{V|qYO*@UR5p&CA^k}a4$ncsY#EsLnrA&$C;o!WF*3SuL^Hwdq&kJx#)V`G4e1f#6eJ5g@<`GoXD4ASNDd8$i^5@AgqI%zckhck)FKhfAZrtf6g1^2pt zvIxR~oQqmjjh`ds#M#;EfZlL^VX`78OhTrJ`rL$Ggj0xEBph-w>ymkkODZ|NiK*+j zMBKlL!a^ah)Q>CdoIUY{aZEk>XjmVKnjY7a@_7q_PPTnMZ>SFAiA+MUqn z6$|s0-(Y*KCiR2A&_**MBbEW1iUjSvAU?8hHYtkmw_&=41zj+%;FG1XV~z>^@gwf} zJVWf#$i6LuQPibLWX#aoq%VbL3DGpiwScx;+iuik8aUN*i`R>26 zVqM@Y-bBhCj)8t$kd2blOkrObo`i5MHH+#Ru6;IXum${Rek0|KLJ(b3y_h(GaW9t- zQZeenXsm!R!tntwtb1t5Bu@SW5s%ZCE}{stgAQ6iv-5Vh~DmDO3*y}OMfVdkMze@*`s>&8hnl_%=oD2;g@b%ZR&IqXkYlJ zMBdS9vOqNH2^FNRXVxYpRo{7KPzhw*r^)CI zjBhJ@pePxCvh4b1twT)>29?b_Jx_LvZutq>r{f!Yhwsn0-U{POQ7hRbnm-kD0;*3 zjmDpnSa=oRt|&7uQX*&jPG_6ywPL2;a(*lNhd|2^+!#s_(znK2tQ-AWEA!s4f-IIAd9!Z-}IH`at>|IO--|j z5n;3`hiC@0(Rzc8^ZED-UPySElPe)MgoHkJ*62pC)cs$^*+$4-{kwUM!1EI^$k#@= z*Hv-ps!+>kzQJ#4M~$%4Hoe&wu`9ccn|Ki7iP@AV4j8cjBIc9b7p}cBDL7`-%@!W` z9a76%U1yC7y=iyRbJzpx!C$_868A>z@Ghc)IuFBfH9QHg8R#f3zb@o*-7-5Wu-#$A z`L(wO`Z9IJsxtVCeFw(xLmkErhmC^gEqkxGjHc#^;RPzNb_rW3%bJ{=dfs%t!KSyH zlA{iP9xu%02RrCn88$zQGenMCZ;S3*7pOMq^j&hUxlOi6yzb+1Qm~G1zgOx4^#%tO zPNeL^06)zxn>ri!3nv9VhLOB4&*t=>&)J%W%+x_;psYBHxC*D9Vpz?X0T@$@Z zeNm1dGzlzmp;00TRU9R$cC9r)Z`r%OGAZC0Jh=4c}Fj)zr zYVpe-MEx>|Y*Z=Zu-(Ypf_TqY_Zf&_0Pi)A0V)xLwVrs9Wg(wp(s|r_o9AClwW%Lc z7;=8aGonZ|P3;q46EhObh}KAbj$*829%A;0{uI^gQn!pKDo_y=LhpDxrik#V=ic`9TGIw7SoX075 z`O&bmo9v5849DSkFg2iv1Cl8U*(lACh(geV@MV&Naq*}x6xid(N*$RN z9QF9qWLj1d2`<{;VX@(VvTzzWyb&2p;t(egO@11z%TjixD4C5&XfM;Q(OWlCFrY>E zj|7w7KRZ6wGS7rcS{wYav8V%EQ=~q=p;?iSA)_xlsMM#?`zX&m9*Xr~OBsAH>|5~E(ZJV?f@<3k0u9-u^K`e zoE@NBad61*bzFQCOGwhYCN5NtjRobsQAs3Gc$vuSPlL`g`5kiqei;NznLa;la!Sa9 z2DjT>ol}Y>nX!<_#BAcEtaTGlkRUAE#(w{B=beSr1p<<$hl8=C>?WGt$%#=2PJeG9 z=bb8;2Ik^Y>hinG+Hnb``4qu{4e@0^izIkm!BHr~}Wm_?cAmqWxgfD->+0q2}m zJusyGaPoAZPPfh#!0sgeG5e?wYGHpW*mY@0?zh}EL?3BvsPFZpP2^-LzI z30l}pRus=FRcT`3s*@i~x1T0g->jyDp+b)69GSOr+8kWchJO66unw9I=tlg~faLWug8-@83rv;(X_0yuiHL>OKs?{zKPF>&>xyE@L zm@$ig(eh7|?%ph1N$znW3xU78Q#BMHdb(x{zn9XxW}X}aDN=}BU8r9#23w|!K@|6} zhn#B`ae=5D7>kGi`QOwogAZx&AL5GNKYzP8120YkI<4ZZ{yR1yw;4hf(Q6Ki;JuUV zmZFOp=gRm`yjcW%80_5v@sVLtzm1vwDLdCC{`lMiT*yMAbLDx@YYI2B!~hc4270*l zr^RJcp;Az|c@*VPSFEtzMtw3Q|K^8g@osS4QdE{m46|F{i!wMvBcrxgVy8|1R;G4~ zi*tfuVbNk`izR3DSxl>KPpaR8wg0k=b-m^o9X7`DSN+-)cajn4#X~CfpC(uDR0l7J zCY8PXRTsq-x@jpSPOE?LzjlkOb8@5s#cxzHtCSg&yikL&M0A8f?JXgL49gI3?P)}BDE(8*h@JW`rLH6Ks55or-FCbLuyQ z@lQIz67)#K|4DECZF1RFS9!!^EzwCE&(h3>qQM}LHbeYvbG2hF`o!(Iqk1GA2fS`Lax2tomzoG{M+H z=QWDMr0V6XndSYo2tmIsfpb+R2Z0HE=u}}3A~yvaUV9M$G$0+v!MxjUS7>VU7DZvE`RNSiem=e5l+e1vv?PL9KQMx`V-RU7~zvbH#|Xvr0D{S&Ac{ zTZEx`>O52ESnDO=Z1&y%lND?5@tKD&dps=W>Z;7W6hGrgQ5kI7q%g0+yGWfG%3p8sm`c#Rfan?eq-oB$fXf_s{HKy7uR7qy{A^? zqWPbZmDu1_80?^f81^n6{Np+-=>`?4Xai3TWAgcwmIEU#ddn@~byl6LvJl)^Ib_YU z%;6I3(o>TMqqanu$2H>h%iu#^VCa#WOaTNT;zS%h(g>C$6zlp|Pcke>RCpx2!2w1W zwGRyz>jv>;^2<1DE0KCfWs%<&AL{_T|6eh)i8@0#PSlpBZZ0bcfIalvouMJI?7+}R7f|_ab9L1!0FS<^M%OBM6gPEj-;*yN zKKkOS8eC_9nY^iSAGCM_2c4+ig5mppwEAgfTTM(uKa`OAsETGIv!6~fmXh=G7pnXD&P6%S&E&(oI-163am$2_Y=-zyn>TUUr}0O|8ys#_ zcrSsKIm0UodR$CgP^uRq4a_|KHo3-XJly;E)*liflfl3rp$rG5|H}^vuNRwn2T`<9 zE3eh8gPEIw7nKSmVZHrUlWTrz7l_o8t7Nm;9zdGDoZ~rf?rka8k_$K1xT5j4B_WvE zSJ0TN-I4F=_p8y>MY|vuh9^N4B8DgU(M=-D_Tb!q+jJ>vGK^iEZq;EYN?zzrgnPat z@ZNsAue&JvWZcUiKaUn&`iP9RzK3n(5>z;2ym%B z?(CoKXsOP4K&z|rBgaZ(w}$@P<{I_}#vmA!YFAyBkHv78G0}9rdH!m14SPqpQ7K`@ z=m?cd2=+{TBIhdnwz;OLOea-_5b+S>zI0?wM79KhXNTonaU?>WnPakK6NkOxvRN*X zPr1BzHR@7S;ax;fbV(JZWl41%2Ggl;=#(?+Je4H&%95K^uNhmY2-BFLtNOSWVf@d3 z^VK#)jhZQsL=7-HEAyoBh_v5L&RNT?6WCaQYZj&i4j=$3lMS^>z5X`q{Z-~ zhNZ5_xwF~#vZmtl#M{N74-JhYd4p_F)VdF=x%#R?69JP<^COc%1%FkvgSrzLoYAy} zD3fNA`HK_1_hP+_t>?C&<*=a6Rjrhr4Fzo!p`E{;Ao8VhM@oku?|@%I$0{{8!rX;( zmm-CM27|X0gsvSnlXF$cHU|<`G*+%r-UZ3j(5nuHfor|gS@p=T(nonJ@7ILDn)=YD zF~*~j)Prwh#M>HpPwhn_1D!W&B0G{Jjk*TbTyym6rEyFvs2ZPKiRd%bW@BU}D_f~b zGgDMHE75TY2mQ9WcA~Q95Dx-JK#m1Sj?AJ#U937NY^0-TXEG7rhc-U+e z#1tx6j-vh4?i0Lt=_v`H<94t66u#P}1OB(i~FzCY7pr;W)@4{Wj?mRgwAX zK9fseFbTu87JplOsis~`f3Gkrv|p2Av-0*j{qT*( zn=O^1;CmyVZBU;*4n?Z0(DcJnx?<|TDV}rj!UIk%*h3r_YwG;=w!D~hu`hAWAc7og zJ_O};pW@3;8t-W>U#c@#m|XtGzV1xkL(>2w67ra|AAY$@Qt6T+URpdYXflz&OgfU7 znBnlEzB)q|zxc&LQYGUi3KlXXTaNpEx*GMx86L0Sxz#pAX^1Qsr|O>Q;^S<3XA34G zzmbe5wq<<|lP=^pvXn};hNJ`Yf`r9K0vsKrbP3(&)>IRBW~s}Nf9}02Z`3(wGHx*{ zKq}21k|2qI0WEei(C*uE{bF(rd&lI`h&=|IEKoA2qVPId3KgGM`%_(5=` z5>AG5F$(%^)J48pQSz%pee?ySdQ8qkp6&7sc;YFRRa*kM6(^r<`Mos*u{FzG9Nf&yEOCy5th_PY+R^ z7n|$miutCD%mxgmRlyXG6A>0hV82bS=r2pCpt;$Yqe4z2=q1x+WVLp20cUZ&P}Tdx z1gEjdpbU|3b)!~0A~J{uhs9h&U#9b8JZhdr31u-swnQB#$NF(L{hb=_YE&TpWl1W} zzRB^WtEPid7yFXP5=cyo41Gi*8BEbDNuFab&iWtk0i`BFAG33+;H5iD?aZK}(X|dM z>RffOY>K{H$vZT@`;;zJn~}C}S`ZIs)dNa4VbX*Ws!7w&YU;dYbRHZHZ?SJ>r3RJ% zAW;Jb=$xg)S+kLjN{N~3Q1J9ffRjU$GV7BUzgtoniGC^;DD)I2&v#*IIg@cOe_Ygm z6FXN_f=VVK&lTR{Oj&;0blC6BPRK+mtdy3&#U!RbF&*Br?_nwfU**1{WssbQ<1Vqb zoFB6%-j>o8Q+)(H33;-+}8dMm>#i7E@KNx1TP>Wl+Fo!@%d<{%zB< z2($4=z#r{*CLyD&rV5{~r{(m)FPT{u{E{@#`j_l!_0-h2_{?u57yVK^CZ=vUq{M2b zs+sEijdBX{wC8<}%Ihp^EMij&dlZW>sTWsxSfuXV+A8B$!8fu+@*Wy5Q7RM+>Co!@ z`}iL)&Yh^24*&b;R z{Y!gT0v2a;y;2J^D_V$I9jC_dwe)hvm7yPgd-wIJc~{A1Q5z5I6c_oqg>N30INh)3 zdZ{vX8n?>p>a9@?XauS9LI7|^owpXT5~|IJnibW?s#;|9-&jsw0e@%I-KwgbN6AD# z+?5rT%mCQh+QQ+}JAaKtcEo@6upC6;6^wtH!BK_sYgd#KF{hi3n6 zGw;1)s?rP<0*KAP*Ba;DPIA;*s&qD2^f%l%t@u+juq3pi*Hnk>!J@laiGHf|)91vZ z2~!n$RolYf)#B=?VkxLbOWto&M|_b=0;$Qw0_x$5`{0*}NwEN;8uJlpPP6d*y7p?S z|KTq9?P60D7UgHMUS`bN$)K^YykUnS31$FT&9>k2(gXz^#Q72WK8?sZ#ycLOBT*R16{SlWV{!&4BThGErBAmKM ze}iR#N}?OXY$5iQ2f)Nv)*_&@xn8YITI8mYU=S%f!F{qx)@E^M z@{RqVEASHD#}A@xHMVwR-+Ad#aYkJj%rp8D&08F@(hXvmEy#AD#)Hv~sgxdxPq+MX zo&$J_$JzjyZjnT3p58x*S1@Q`v zhCdA4GWd)&3kGhg)?~4jI_s)vMvcRCXE_tLx@0gv(&6msN+JT4o2?Xy2VUyf9XGXL zt${j=YXgWe3q=ZPrp-5raD}y6u>kYJ0&zB93id_pQo2^Zi3RFY5lEKC;dl4FCpV6I zvouPt4HRjQ&^`K`k+T#Q3x{%HUJ!hnNOf5GxqnYGq3?#&d)vLDjz86rU( zjBb6Z54sW|<)VC&B#2I)mg3;N9M#V1j~;SqEZJbLtif?MMWNPw2f`^Iw(3^20X82M zYIhBrrYK90#D(3iHxW25CqaIs#CZXjB0EQCIG9*o>9toPhEaFxSh?lZo@+*_j2=VbOa0$Y*`TyxVs7zIGe7iCQe}4dO)npCg1d0 zU9M~0#xLhiSTY?2a`YKeidu{?5n;u~19BFV%PYPewK>f5baLw@%`ks?{%zFLmBfOm zMyV3-e{vwj0ry}LB}Z8@O;f&QmF%KQ7J=h3 zl&-6rcPR!rv%YQ<*j9dNFdu{BDE-1qlDgRk3M(tL=0l9l2m`o38F XU;VM literal 60722 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 - @@ -136,11 +136,11 @@ L -3.5 0 " style="stroke: #000000; stroke-width: 0.8"/> - + - 10 + 10 @@ -151,98 +151,77 @@ L -2 0 " style="stroke: #000000; stroke-width: 0.6"/> - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - + @@ -250,16 +229,16 @@ L -2 0 Mean kernel time (µs) - + - - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + @@ -491,12 +434,12 @@ z - + - + @@ -506,12 +449,12 @@ L 453.345546 50.76 - + - + @@ -521,12 +464,12 @@ L 528.323995 50.76 - + - + @@ -536,12 +479,12 @@ L 603.302444 50.76 - + - + @@ -551,12 +494,12 @@ L 678.280893 50.76 - + - + @@ -570,13 +513,13 @@ L 753.259342 50.76 - - + + - + @@ -585,13 +528,13 @@ L 768.243437 188.65386 10 - - + + - + @@ -600,13 +543,13 @@ L 768.243437 124.306739 100 - - + + - + @@ -615,141 +558,141 @@ L 768.243437 59.959617 1000 - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + @@ -759,7 +702,7 @@ L 768.243437 59.959617 Mean kernel time (µs) - + - + - + - + - + - - - - - - - - - - - - - - - + +" clip-path="url(#pbce5ff656d)" style="fill: none; stroke: #b0b0b0; stroke-opacity: 0.18; stroke-width: 0.8; stroke-linecap: square"/> - + @@ -937,12 +857,12 @@ L 57.672819 289.144158 - + +" clip-path="url(#pbce5ff656d)" style="fill: none; stroke: #b0b0b0; stroke-opacity: 0.18; stroke-width: 0.8; stroke-linecap: square"/> - + @@ -952,12 +872,12 @@ L 132.651268 289.144158 - + +" clip-path="url(#pbce5ff656d)" style="fill: none; stroke: #b0b0b0; stroke-opacity: 0.18; stroke-width: 0.8; stroke-linecap: square"/> - + @@ -967,12 +887,12 @@ L 207.629717 289.144158 - + +" clip-path="url(#pbce5ff656d)" style="fill: none; stroke: #b0b0b0; stroke-opacity: 0.18; stroke-width: 0.8; stroke-linecap: square"/> - + @@ -982,12 +902,12 @@ L 282.608166 289.144158 - + +" clip-path="url(#pbce5ff656d)" style="fill: none; stroke: #b0b0b0; stroke-opacity: 0.18; stroke-width: 0.8; stroke-linecap: square"/> - + @@ -1001,13 +921,13 @@ L 357.586614 289.144158 - - + + +" clip-path="url(#pbce5ff656d)" style="fill: none; stroke: #b0b0b0; stroke-opacity: 0.18; stroke-width: 0.8; stroke-linecap: square"/> - + @@ -1016,78 +936,78 @@ L 372.57071 379.333894 10 - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + @@ -1097,7 +1017,7 @@ L 372.57071 379.333894 Mean kernel time (µs) - + - +" clip-path="url(#pbce5ff656d)" style="fill: none; stroke: #579600; stroke-width: 2.3; stroke-linecap: square"/> + @@ -1120,7 +1040,7 @@ L 357.583107 384.617872 - + - +" clip-path="url(#pbce5ff656d)" style="fill: none; stroke-dasharray: 5.92,2.56; stroke-dashoffset: 0; stroke: #7557a6; stroke-width: 1.6"/> + @@ -1143,7 +1063,7 @@ L 357.583107 349.090357 - + - +" clip-path="url(#pbce5ff656d)" style="fill: none; stroke-dasharray: 5.92,2.56; stroke-dashoffset: 0; stroke: #007e91; stroke-width: 1.6"/> + @@ -1166,7 +1086,7 @@ L 357.583107 347.10556 - + - +" clip-path="url(#pbce5ff656d)" style="fill: none; stroke-dasharray: 5.92,2.56; stroke-dashoffset: 0; stroke: #64748b; stroke-width: 1.6"/> + @@ -1189,7 +1109,7 @@ L 357.583107 296.272871 - + - +" clip-path="url(#pbce5ff656d)" style="fill: none; stroke-dasharray: 5.92,2.56; stroke-dashoffset: 0; stroke: #d97416; stroke-width: 1.6"/> + @@ -1237,12 +1157,12 @@ z - + +" clip-path="url(#p27aae1265d)" style="fill: none; stroke: #b0b0b0; stroke-opacity: 0.18; stroke-width: 0.8; stroke-linecap: square"/> - + @@ -1252,12 +1172,12 @@ L 453.345546 289.144158 - + +" clip-path="url(#p27aae1265d)" style="fill: none; stroke: #b0b0b0; stroke-opacity: 0.18; stroke-width: 0.8; stroke-linecap: square"/> - + @@ -1267,12 +1187,12 @@ L 528.323995 289.144158 - + +" clip-path="url(#p27aae1265d)" style="fill: none; stroke: #b0b0b0; stroke-opacity: 0.18; stroke-width: 0.8; stroke-linecap: square"/> - + @@ -1282,12 +1202,12 @@ L 603.302444 289.144158 - + +" clip-path="url(#p27aae1265d)" style="fill: none; stroke: #b0b0b0; stroke-opacity: 0.18; stroke-width: 0.8; stroke-linecap: square"/> - + @@ -1297,12 +1217,12 @@ L 678.280893 289.144158 - + +" clip-path="url(#p27aae1265d)" style="fill: none; stroke: #b0b0b0; stroke-opacity: 0.18; stroke-width: 0.8; stroke-linecap: square"/> - + @@ -1316,13 +1236,13 @@ L 753.259342 289.144158 - - + + +" clip-path="url(#p27aae1265d)" style="fill: none; stroke: #b0b0b0; stroke-opacity: 0.18; stroke-width: 0.8; stroke-linecap: square"/> - + @@ -1331,13 +1251,13 @@ L 768.243437 429.255724 10 - - + + +" clip-path="url(#p27aae1265d)" style="fill: none; stroke: #b0b0b0; stroke-opacity: 0.18; stroke-width: 0.8; stroke-linecap: square"/> - + @@ -1346,13 +1266,13 @@ L 768.243437 364.402608 100 - - + + +" clip-path="url(#p27aae1265d)" style="fill: none; stroke: #b0b0b0; stroke-opacity: 0.18; stroke-width: 0.8; stroke-linecap: square"/> - + @@ -1361,141 +1281,141 @@ L 768.243437 299.549491 1000 - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + @@ -1505,7 +1425,7 @@ L 768.243437 299.549491 Mean kernel time (µs) - + - +" clip-path="url(#p27aae1265d)" style="fill: none; stroke: #579600; stroke-width: 2.3; stroke-linecap: square"/> + @@ -1528,7 +1448,7 @@ L 753.255834 341.190949 - + - +" clip-path="url(#p27aae1265d)" style="fill: none; stroke-dasharray: 5.92,2.56; stroke-dashoffset: 0; stroke: #7557a6; stroke-width: 1.6"/> + @@ -1551,7 +1471,7 @@ L 753.255834 326.952087 - + - +" clip-path="url(#p27aae1265d)" style="fill: none; stroke-dasharray: 5.92,2.56; stroke-dashoffset: 0; stroke: #007e91; stroke-width: 1.6"/> + @@ -1574,7 +1494,7 @@ L 753.255834 319.712423 - + - +" clip-path="url(#p27aae1265d)" style="fill: none; stroke-dasharray: 5.92,2.56; stroke-dashoffset: 0; stroke: #64748b; stroke-width: 1.6"/> + @@ -1597,7 +1517,7 @@ L 753.255834 296.272871 - + - +" clip-path="url(#p27aae1265d)" style="fill: none; stroke-dasharray: 5.92,2.56; stroke-dashoffset: 0; stroke: #d97416; stroke-width: 1.6"/> + @@ -1645,12 +1565,12 @@ z - + +" clip-path="url(#ped3c3c86c8)" style="fill: none; stroke: #b0b0b0; stroke-opacity: 0.18; stroke-width: 0.8; stroke-linecap: square"/> - + @@ -1660,12 +1580,12 @@ L 56.564957 527.528317 - + +" clip-path="url(#ped3c3c86c8)" style="fill: none; stroke: #b0b0b0; stroke-opacity: 0.18; stroke-width: 0.8; stroke-linecap: square"/> - + @@ -1675,12 +1595,12 @@ L 161.900208 527.528317 - + +" clip-path="url(#ped3c3c86c8)" style="fill: none; stroke: #b0b0b0; stroke-opacity: 0.18; stroke-width: 0.8; stroke-linecap: square"/> - + @@ -1690,12 +1610,12 @@ L 267.235459 527.528317 - + +" clip-path="url(#ped3c3c86c8)" style="fill: none; stroke: #b0b0b0; stroke-opacity: 0.18; stroke-width: 0.8; stroke-linecap: square"/> - + @@ -1709,13 +1629,13 @@ L 372.57071 527.528317 - - + + +" clip-path="url(#ped3c3c86c8)" style="fill: none; stroke: #b0b0b0; stroke-opacity: 0.18; stroke-width: 0.8; stroke-linecap: square"/> - + @@ -1724,85 +1644,85 @@ L 372.57071 639.416481 10 - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + @@ -1812,7 +1732,7 @@ L 372.57071 639.416481 Mean kernel time (µs) - + - +" clip-path="url(#ped3c3c86c8)" style="fill: none; stroke: #579600; stroke-width: 2.3; stroke-linecap: square"/> + @@ -1831,7 +1751,7 @@ L 336.828122 639.460226 - + - +" clip-path="url(#ped3c3c86c8)" style="fill: none; stroke-dasharray: 5.92,2.56; stroke-dashoffset: 0; stroke: #7557a6; stroke-width: 1.6"/> + @@ -1850,7 +1770,7 @@ L 336.828122 610.468197 - + - +" clip-path="url(#ped3c3c86c8)" style="fill: none; stroke-dasharray: 5.92,2.56; stroke-dashoffset: 0; stroke: #007e91; stroke-width: 1.6"/> + @@ -1869,7 +1789,7 @@ L 336.828122 607.35441 - + - +" clip-path="url(#ped3c3c86c8)" style="fill: none; stroke-dasharray: 5.92,2.56; stroke-dashoffset: 0; stroke: #64748b; stroke-width: 1.6"/> + @@ -1888,7 +1808,7 @@ L 336.828122 555.378376 - + - +" clip-path="url(#ped3c3c86c8)" style="fill: none; stroke-dasharray: 5.92,2.56; stroke-dashoffset: 0; stroke: #d97416; stroke-width: 1.6"/> + @@ -1907,25 +1827,6 @@ L 336.828122 557.962967 - - - - - - - - - - - - - + +" clip-path="url(#p7cd5b2c887)" style="fill: none; stroke: #b0b0b0; stroke-opacity: 0.18; stroke-width: 0.8; stroke-linecap: square"/> - + @@ -1966,12 +1867,12 @@ L 452.237685 527.528317 - + +" clip-path="url(#p7cd5b2c887)" style="fill: none; stroke: #b0b0b0; stroke-opacity: 0.18; stroke-width: 0.8; stroke-linecap: square"/> - + @@ -1981,12 +1882,12 @@ L 557.572936 527.528317 - + +" clip-path="url(#p7cd5b2c887)" style="fill: none; stroke: #b0b0b0; stroke-opacity: 0.18; stroke-width: 0.8; stroke-linecap: square"/> - + @@ -1996,12 +1897,12 @@ L 662.908187 527.528317 - + +" clip-path="url(#p7cd5b2c887)" style="fill: none; stroke: #b0b0b0; stroke-opacity: 0.18; stroke-width: 0.8; stroke-linecap: square"/> - + @@ -2015,13 +1916,13 @@ L 768.243437 527.528317 - - + + +" clip-path="url(#p7cd5b2c887)" style="fill: none; stroke: #b0b0b0; stroke-opacity: 0.18; stroke-width: 0.8; stroke-linecap: square"/> - + @@ -2030,85 +1931,85 @@ L 768.243437 612.555209 100 - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + @@ -2118,7 +2019,7 @@ L 768.243437 612.555209 Mean kernel time (µs) - + - +" clip-path="url(#p7cd5b2c887)" style="fill: none; stroke: #579600; stroke-width: 2.3; stroke-linecap: square"/> + @@ -2137,7 +2038,7 @@ L 732.50085 594.748088 - + - +" clip-path="url(#p7cd5b2c887)" style="fill: none; stroke-dasharray: 5.92,2.56; stroke-dashoffset: 0; stroke: #7557a6; stroke-width: 1.6"/> + @@ -2156,7 +2057,7 @@ L 732.50085 569.218626 - + - +" clip-path="url(#p7cd5b2c887)" style="fill: none; stroke-dasharray: 5.92,2.56; stroke-dashoffset: 0; stroke: #007e91; stroke-width: 1.6"/> + @@ -2175,7 +2076,7 @@ L 732.50085 540.360653 - + - +" clip-path="url(#p7cd5b2c887)" style="fill: none; stroke-dasharray: 5.92,2.56; stroke-dashoffset: 0; stroke: #64748b; stroke-width: 1.6"/> + @@ -2194,7 +2095,7 @@ L 732.50085 534.65703 - + - +" clip-path="url(#p7cd5b2c887)" style="fill: none; stroke-dasharray: 5.92,2.56; stroke-dashoffset: 0; stroke: #d97416; stroke-width: 1.6"/> + @@ -2213,25 +2114,6 @@ L 732.50085 565.227776 - - - - - - - - - - - - Latency across row lengths and batch sizes - - + - GVR V2 + GVR V2 - - + - SGLang v2 (plan + transform) + SGLang v2 (plan + transform) - - + - FlashInfer 0.6.14 + FlashInfer 0.6.14 - - + - TensorRT-LLM radix CUDA + TensorRT-LLM radix CUDA - - + - DeepSelect FP32 - - - - - - HPC-ops FP32 + DeepSelect FP32 @@ -2313,16 +2186,16 @@ L 544.256719 772.740312 - + - + - + - + diff --git a/docs/source/blogs/media/gvr_v2/plot_results.py b/docs/source/blogs/media/gvr_v2/plot_results.py index 7141a4d46b84..f433bb411446 100644 --- a/docs/source/blogs/media/gvr_v2/plot_results.py +++ b/docs/source/blogs/media/gvr_v2/plot_results.py @@ -25,7 +25,7 @@ COPYRIGHT = ( "Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. SPDX-License-Identifier: Apache-2.0" ) -ARMS = ["sglang", "flashinfer", "radix_cuda", "deepselect", "hpc_ops"] +ARMS = ["sglang", "flashinfer", "radix_cuda", "deepselect"] MODELS = { "flash": "DeepSeek-V4 Flash · K=512", "pro": "DeepSeek-V4 Pro · K=1024", @@ -37,7 +37,6 @@ "flashinfer": "FlashInfer 0.6.14", "radix_cuda": "TensorRT-LLM radix CUDA", "deepselect": "DeepSelect FP32", - "hpc_ops": "HPC-ops FP32", } COLORS = { "gvr_v2": "#579600", @@ -47,7 +46,6 @@ "flashinfer": "#007e91", "radix_cuda": "#64748b", "deepselect": "#d97416", - "hpc_ops": "#bd426b", } CROSS_CAMPAIGN = set(ARMS) REACHABLE_BW = 6.912116 @@ -118,9 +116,7 @@ def _comparison(rows: list[dict]) -> dict: "cases": len(matched), "layers": len({r["layer"] for r in matched}), "latency_relative_to_v2": { - arm: _stats(matched, arm)["geomean"] - for arm in COMPARISON_ARMS - if not (model == "pro" and arm == "hpc_ops") + arm: _stats(matched, arm)["geomean"] for arm in COMPARISON_ARMS }, } return result @@ -138,18 +134,14 @@ def _overview(rows: list[dict]) -> None: "FlashInfer", "TRT-LLM radix CUDA", "DeepSelect FP32", - "HPC-ops FP32", ] - positions = [8.1, 6.8, 5.8, 4.5, 3.5, 2.5, 1.5, 0.5] + positions = [7.1, 5.8, 4.8, 3.5, 2.5, 1.5, 0.5] for ax, (model, title) in zip(axes, MODELS.items()): panel = data[model] - ax.axhspan(7.55, 8.65, color="#edf5df", zorder=0) + ax.axhspan(6.55, 7.65, color="#edf5df", zorder=0) ax.axvline(1, color="#579600", alpha=0.55, linewidth=1, linestyle=(0, (2, 3))) for y, arm in zip(positions, COMPARISON_ARMS): - value = panel["latency_relative_to_v2"].get(arm) - if value is None: - ax.text(0.15, y, "Not supported", fontsize=10, color="#88939f", va="center") - continue + value = panel["latency_relative_to_v2"][arm] ax.barh(y, value, height=0.63, color=COLORS[arm], zorder=3) ax.text( value + 0.10, @@ -170,7 +162,7 @@ def _overview(rows: list[dict]) -> None: fontsize=9.5, color="#52616f", ) - ax.set(xlim=(0, 5.95), ylim=(-0.1, 8.7), xticks=[0, 1, 2, 3, 4, 5]) + ax.set(xlim=(0, 5.95), ylim=(-0.1, 7.7), xticks=[0, 1, 2, 3, 4, 5]) ax.xaxis.set_major_formatter(FuncFormatter(lambda value, _: f"{value:g}×")) ax.set_yticks(positions, labels, fontsize=10.5) ax.tick_params(axis="both", length=0, pad=8) @@ -211,7 +203,7 @@ def _overview(rows: list[dict]) -> None: fig.text( 0.035, 0.032, - "SGLang includes plan + transform. HPC-ops supports K=512 and K=2048.", + "SGLang includes plan + transform.", fontsize=9, color="#52616f", ) @@ -843,7 +835,7 @@ def _integration() -> None: def _matching(rows: list[dict], model: str) -> list[dict]: - required = ["gvr_v2", *ARMS] if model != "pro" else ["gvr_v2", *ARMS[:-1]] + required = ["gvr_v2", *ARMS] return [ r for r in rows if r["model"] == model and all(r[a + "_us"] is not None for a in required) ] @@ -874,7 +866,7 @@ def _legend(fig: plt.Figure) -> None: fig.legend( handles=handles, loc="lower center", - ncol=3, + ncol=5, frameon=False, bbox_to_anchor=(0.5, 0.01), fontsize=10, @@ -888,8 +880,6 @@ def _latency(rows: list[dict]) -> None: for j, batch in enumerate((1, 1024)): ax = axes[i, j] for arm in ["gvr_v2", *ARMS]: - if model == "pro" and arm == "hpc_ops": - continue x, y = _line_data(matched, arm, batch) ax.plot( x, @@ -925,8 +915,6 @@ def _roofline_reachable_rates(rows: list[dict]) -> dict: k = matched[0]["k"] by_model[model] = {} for arm in ["gvr_v2", *ARMS]: - if model == "pro" and arm == "hpc_ops": - continue widths, times = _line_data(matched, arm, 1024) rates = [] for n, us in zip(widths, times): @@ -1024,8 +1012,6 @@ def _roofline(rows: list[dict]) -> None: ax.fill_between(xroof, xroof * bw, 1.95, color="#f2f5f7", zorder=0) ax.plot(xroof, xroof * bw, color="#273746", linestyle=(0, (2, 2)), linewidth=1.5) for arm in [*ARMS, "gvr_v2"]: - if model == "pro" and arm == "hpc_ops": - continue widths, times = _line_data(matched, arm, 1024) x = [n / (4 * (n + k)) for n in widths] y = [1024 * n / (us * 1e6) for n, us in zip(widths, times)] @@ -1096,7 +1082,7 @@ def _roofline(rows: list[dict]) -> None: fig.legend( handles=handles, loc="lower center", - ncol=3, + ncol=5, frameon=False, bbox_to_anchor=(0.53, 0.077), fontsize=10, diff --git a/docs/source/blogs/media/gvr_v2/pro_timings.csv.gz b/docs/source/blogs/media/gvr_v2/pro_timings.csv.gz index 6f3090014fe07a3d84331b15e9d8d668e5f06396..e70bcf9c2421d100b5aa5c1ef1242c8854ebf996 100644 GIT binary patch literal 77922 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 +u$=9kT4C<#TY`FGD&Kji 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 diff --git a/docs/source/blogs/media/gvr_v2/provenance.json b/docs/source/blogs/media/gvr_v2/provenance.json index 25e3770d7d1b..291106287764 100644 --- a/docs/source/blogs/media/gvr_v2/provenance.json +++ b/docs/source/blogs/media/gvr_v2/provenance.json @@ -11,7 +11,6 @@ "hardware": "NVIDIA B200 (SM100)", "baseline_versions": { "deepselect": "v1.0.0, 8e70df71d2", - "hpc_ops": "2a2e265624", "flashinfer": "0.6.14", "sglang": "Top-K v2", "radix_cuda": "Production insertion/radix/split-work dispatcher", @@ -20,7 +19,6 @@ }, "pairing": { "deepselect": "cross-campaign; existing FP32 baseline matched by workload and batch to PR #19076", - "hpc_ops": "cross-campaign; existing FP32 baseline matched by workload and batch to PR #19076", "radix_cuda": "cross-campaign", "sglang": "cross-campaign; plan + transform", "sglang_transform": "cross-campaign; transform only", @@ -30,9 +28,9 @@ "temporal_tiered": "cross-campaign, same (cell, batch), not an isolated algorithm ablation" }, "published_files": { - "flash_timings.csv.gz": "b4fd49550dfcc0d9edc61a7dd37af8f00ff1ea9df13ecdabc5fe81171238eb0e", - "pro_timings.csv.gz": "3473208ed857807a87a5f18cac4608f2052d72459a232b39e1bc3e919cea1d99", - "v32_timings.csv.gz": "052fbf1333c9ee839938d378366528ee59bfcd1e5608fd7c8eb030e510f370f8", + "flash_timings.csv.gz": "6ba9512ebdfbf93d5923fbd5248beaef36d0720f4a51b961a64b8dae3fc296c5", + "pro_timings.csv.gz": "bce5e0cb029df863e674993711b2bb9a8fb4d1ec8fad892c8856748de05656d6", + "v32_timings.csv.gz": "3eec2da81ead5fe425dc2f3ba163d886e5e56c81ee77bb543bd4908873c8073d", "temporal_comparison.csv.gz": "0a0973e218209d1f2e4db89e9539a3736753073ad72dc16a30288e79fa9309bb" }, "scope": "Per-case cold kernel means with PR #19076 as the FP32 GVR V2 reference; all FP32 baseline comparisons are cross-campaign. Blank entries are missing/unsupported, never zero latency. Historical BF16 timings retain their separate paired reference.", diff --git a/docs/source/blogs/media/gvr_v2/roofline.svg b/docs/source/blogs/media/gvr_v2/roofline.svg index 2960f68924c3..2819c095b953 100644 --- a/docs/source/blogs/media/gvr_v2/roofline.svg +++ b/docs/source/blogs/media/gvr_v2/roofline.svg @@ -775,49 +775,13 @@ z - - - - - - - - - - - - - - - - - Calibrated roof DeepSeek-V4 Flash · K=512 - + - + .125 - + .175 - + .225 - + .250 @@ -1105,51 +1069,51 @@ z - + - + 0 - + - + 0.5 - + - + 1.0 - + - + 1.5 - + - + - + - + - + DeepSeek-V4 Pro · K=1024 - + - + .125 - + .175 - + .225 - + .250 @@ -1632,51 +1596,51 @@ z - + - + 0 - + - + 0.5 - + - + 1.0 - + - + 1.5 - + - + - + - + - + - - - - - - - - - - - - DeepSeek-V3.2 · K=2048 - + Line styles distinguish benchmark runs. Work throughput uses the same logical task for every kernel. - - + - GVR V2 + GVR V2 - - + - SGLang v2 (plan + transform) + SGLang v2 (plan + transform) - - + - FlashInfer 0.6.14 + FlashInfer 0.6.14 - - + - TensorRT-LLM radix CUDA + TensorRT-LLM radix CUDA - - + - DeepSelect FP32 - - - - - - HPC-ops FP32 + DeepSelect FP32 diff --git a/docs/source/blogs/media/gvr_v2/speedup.svg b/docs/source/blogs/media/gvr_v2/speedup.svg index df3657395e80..351663d602cc 100644 --- a/docs/source/blogs/media/gvr_v2/speedup.svg +++ b/docs/source/blogs/media/gvr_v2/speedup.svg @@ -38,10 +38,10 @@ z " style="fill: #ffffff"/> - @@ -117,53 +117,47 @@ L 361.125968 92.704875 - GVR V2 + GVR V2 - Temporal GVR · R0 + Temporal GVR · R0 - Temporal GVR · tiered + Temporal GVR · tiered - SGLang v2 + SGLang v2 - FlashInfer + FlashInfer - TRT-LLM radix CUDA + TRT-LLM radix CUDA - DeepSelect FP32 - - - - - - HPC-ops FP32 + DeepSelect FP32 - + @@ -174,102 +168,91 @@ L 399.643902 342.184875 " style="fill: none; stroke: #d5dce3; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> - - - 1.00× + + 1.00× - - - 2.09× + + 2.09× - - - 1.53× + + 1.53× - - - 1.83× + + 1.83× - - - 2.18× + + 2.18× - - - 4.88× + + 4.88× - - - 2.03× - - - - - - 2.37× + + 2.03× - + K=512 - + DeepSeek-V4 Flash - + - - + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + + + + @@ -372,112 +358,103 @@ L 636.144017 92.704875 - - - - - - - + - + - - + - - 1.00× + + 1.00× - - + - - 2.16× + + 2.16× - - + - - 1.54× + + 1.54× - - + - - 1.81× + + 1.81× - - + - - 2.20× + + 2.20× - - + - - 4.87× + + 4.87× - - + - - 2.13× - - - Not supported + + 2.13× - + K=1024 - + DeepSeek-V4 Pro - + - - + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + + + + + + + @@ -577,135 +560,115 @@ L 911.162066 92.704875 - - - - - - - - - - + - + - - + - - 1.00× + + 1.00× - - + - - 1.78× + + 1.78× - - + - - 1.37× + + 1.37× - - + - - 1.58× + + 1.58× - - + - - 1.93× + + 1.93× - - + - - 5.25× + + 5.25× - - + - - 2.85× - - - - - - 1.33× + + 2.85× - + K=2048 - + DeepSeek-V3.2 - + One view of the competition — and the GVR evolution - + Geometric-mean kernel time relative to GVR V2 · shorter is faster · B200 / FP32 - + Same workloads within each panel. GVR V2 (PR #19076) = 1.00×. - + Temporal GVR: R0 threshold ladder and tiered execution. V2: current-row self-sampling. - - SGLang includes plan + transform. HPC-ops supports K=512 and K=2048. + + SGLang includes plan + transform. diff --git a/docs/source/blogs/media/gvr_v2/summary.json b/docs/source/blogs/media/gvr_v2/summary.json index 975e66de8acc..d7e44f1204c4 100644 --- a/docs/source/blogs/media/gvr_v2/summary.json +++ b/docs/source/blogs/media/gvr_v2/summary.json @@ -52,17 +52,6 @@ "win_percent": 99.620357069567, "baseline_median_us": 26.854, "gvr_median_us": 9.6435 - }, - "hpc_ops": { - "cases": 6776, - "geomean": 1.5854641934414742, - "minimum": 0.7191312922503, - "p5": 1.0725354119733659, - "p95": 3.3893380735586316, - "wins": 6688, - "win_percent": 98.7012987012987, - "baseline_median_us": 15.2865, - "gvr_median_us": 10.0685 } }, "comparison_common_cases": { @@ -76,8 +65,7 @@ "sglang": 1.832846308120955, "flashinfer": 2.177976616444322, "radix_cuda": 4.875738163985888, - "deepselect": 2.0333546984325714, - "hpc_ops": 2.3687699378490183 + "deepselect": 2.0333546984325714 } }, "pro": { @@ -103,8 +91,7 @@ "sglang": 1.5766773265824163, "flashinfer": 1.9260906164150302, "radix_cuda": 5.251958628200303, - "deepselect": 2.8495190179213177, - "hpc_ops": 1.3277233518189635 + "deepselect": 2.8495190179213177 } } }, @@ -153,17 +140,6 @@ "win_percent": 99.03799903799904, "baseline_median_us": 16.634, "gvr_median_us": 6.608 - }, - "hpc_ops": { - "cases": 2079, - "geomean": 2.3687699378490183, - "minimum": 1.1533789329685362, - "p5": 1.5438957493794887, - "p95": 5.4378585199743545, - "wins": 2079, - "win_percent": 100, - "baseline_median_us": 16.144, - "gvr_median_us": 6.608 } }, "pro": { @@ -210,9 +186,6 @@ "win_percent": 99.42760942760943, "baseline_median_us": 18.569499999999998, "gvr_median_us": 6.979 - }, - "hpc_ops": { - "cases": 0 } }, "v32": { @@ -259,17 +232,6 @@ "win_percent": 100, "baseline_median_us": 45.325, "gvr_median_us": 10.768 - }, - "hpc_ops": { - "cases": 4697, - "geomean": 1.3273267533814441, - "minimum": 0.7191312922503, - "p5": 1.0487701175120445, - "p95": 1.6321223815497354, - "wins": 4609, - "win_percent": 98.12646370023418, - "baseline_median_us": 14.95, - "gvr_median_us": 10.768 } } }, @@ -349,11 +311,6 @@ "points": 9, "average_percent": 21.163519529351618, "peak_percent": 64.37510759356354 - }, - "hpc_ops": { - "points": 9, - "average_percent": 23.01430056542999, - "peak_percent": 40.99358662670424 } }, "pro": { @@ -408,11 +365,6 @@ "points": 7, "average_percent": 14.419005752929042, "peak_percent": 34.77047716555635 - }, - "hpc_ops": { - "points": 7, - "average_percent": 31.59216128492162, - "peak_percent": 53.07637384676913 } } } diff --git a/docs/source/blogs/media/gvr_v2/v32_timings.csv.gz b/docs/source/blogs/media/gvr_v2/v32_timings.csv.gz index 412dee2dedd23b71a0bc1dc00f41b2bebd2e6a49..6dae4e58d413ca7a75ae820ddb40799a5efb2a96 100644 GIT binary patch literal 124154 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 literal 137060 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 mJ Date: Fri, 18 Sep 2026 00:55:56 +0000 Subject: [PATCH 24/33] [None][doc] Focus GVR V2 performance on V1 and native radix Signed-off-by: longcheng-nv <243710427+longcheng-nv@users.noreply.github.com> --- docs/source/blogs/media/gvr_v2/README.md | 48 +- .../blogs/media/gvr_v2/deepselect_map.svg | 1665 ----------------- .../blogs/media/gvr_v2/flash_timings.csv.gz | Bin 55118 -> 19600 bytes docs/source/blogs/media/gvr_v2/latency.svg | 1187 +++++------- .../source/blogs/media/gvr_v2/plot_results.py | 73 +- .../blogs/media/gvr_v2/pro_timings.csv.gz | Bin 77922 -> 27944 bytes .../source/blogs/media/gvr_v2/provenance.json | 16 +- .../{sglang_map.svg => radix_cuda_map.svg} | 574 +++--- docs/source/blogs/media/gvr_v2/roofline.svg | 477 ++--- docs/source/blogs/media/gvr_v2/speedup.svg | 740 +++----- docs/source/blogs/media/gvr_v2/summary.json | 236 +-- .../blogs/media/gvr_v2/v32_timings.csv.gz | Bin 124154 -> 43676 bytes ...ampling_Exact_TopK_for_Sparse_Attention.md | 64 +- 13 files changed, 1392 insertions(+), 3688 deletions(-) delete mode 100644 docs/source/blogs/media/gvr_v2/deepselect_map.svg rename docs/source/blogs/media/gvr_v2/{sglang_map.svg => radix_cuda_map.svg} (76%) diff --git a/docs/source/blogs/media/gvr_v2/README.md b/docs/source/blogs/media/gvr_v2/README.md index 680c978f0e7e..a6bb833ecbcd 100644 --- a/docs/source/blogs/media/gvr_v2/README.md +++ b/docs/source/blogs/media/gvr_v2/README.md @@ -19,7 +19,7 @@ With NumPy and Matplotlib installed, run from the repository root: python docs/source/blogs/media/gvr_v2/plot_results.py ``` -The script regenerates `summary.json` and ten SVGs: `speedup.svg`, `evolution.svg`, `candidate_work.svg`, `algorithm.svg`, `gpu_sampling.svg`, `sglang_map.svg`, `deepselect_map.svg`, `latency.svg`, `roofline.svg`, and `integration.svg`. It requires no GPU. The algorithm diagrams are schematic; every performance panel uses the bundled timing observations. +The script regenerates `summary.json` and nine SVGs: `speedup.svg`, `evolution.svg`, `candidate_work.svg`, `algorithm.svg`, `gpu_sampling.svg`, `radix_cuda_map.svg`, `latency.svg`, `roofline.svg`, and `integration.svg`. It requires no GPU. The algorithm diagrams are schematic; every performance panel uses the bundled timing observations. The remaining figure, [temporal_overlap.svg](temporal_overlap.svg), is an author-supplied illustration converted directly from its standalone PDF. Its labels, axes, and plotted contents are preserved. It is not generated by `plot_results.py` or derived from the kernel-timing CSVs. @@ -101,23 +101,20 @@ Measurements use NVIDIA B200, FP32 indexer scores, and batch sizes from 1 to 1,0 Each workload/batch case repeats one captured layer/step score row into distinct batch rows. This controls the input distribution and valid width while measuring batch scaling; it is not a heterogeneous batch of independent serving requests. GVR uses `next_n=1` and sets `max_seq_len` to that case's valid row length times its compression ratio. A serving graph may use a larger stable envelope and choose a different execution plan. The bundled grid does not independently benchmark ragged mixed-length batches, MTP, or prefill. -The primary reference is the hint-free GVR V2 `run_varlen` implementation from [PR #19076](https://github.com/NVIDIA/TensorRT-LLM/pull/19076), measured at its [final public revision](https://github.com/NVIDIA/TensorRT-LLM/commit/be1b9885e8df9bf070e8cb68459e24a7119afaa9). All FP32 comparisons match existing baseline observations from separate runs by workload identity and batch size, with shape metadata checked where available. Baseline times are retained as measured; no aggregate correction factor is applied. These comparisons describe the bundled implementations and workloads; they are not a current-release, equal-interface benchmark of entire serving frameworks. +The primary reference is the hint-free GVR V2 `run_varlen` implementation from [PR #19076](https://github.com/NVIDIA/TensorRT-LLM/pull/19076), measured at its [final public revision](https://github.com/NVIDIA/TensorRT-LLM/commit/be1b9885e8df9bf070e8cb68459e24a7119afaa9). Its FP32 comparisons with GVR V1 R0, tiered GVR V1, and TensorRT-LLM radix CUDA match observations from separate runs by workload identity and batch size, with shape metadata checked where available. All four implementations cover the same 9,746 cases. Baseline times are retained as measured; no aggregate correction factor is applied. These comparisons describe the bundled kernel implementations and workloads, rather than the performance of entire serving frameworks. The device kernel and host dispatcher at the [main revision audited on September 17, 2026](https://github.com/NVIDIA/TensorRT-LLM/commit/73c70633b2547eedf0c91f85e760aec534f6af84) are byte-identical to those measured for the reference. This establishes source continuity for those files, not a new whole-framework performance measurement. -Figures 1, 3, and 7–10 and their numerical summaries all use this PR #19076 reference. B300 measurements are outside the B200 comparison. Historical serving experiments retain their original implementation scope, as described below. +Figures 1, 3, and 7–9 and their numerical summaries all use this PR #19076 reference. B300 measurements are outside the B200 comparison. Historical serving experiments retain their original implementation scope, as described below. | Implementation | Relevant comparison contract | | :--- | :--- | | GVR V2 | FP32 scores, valid row lengths, unordered INT32 indices | -| SGLang Top-K v2 | Main comparison includes plan + transform; transformation-only results are separate | -| FlashInfer 0.6.14 | Native `top_k` returns FP32 values and INT64 indices and scans a padded row | +| GVR V1 R0 | Temporal-prior threshold ladder; complete implementation paired by workload and batch | +| GVR V1 tiered streaming | Temporal-prior pivot/rescue admission; complete implementation paired by workload and batch | | TensorRT-LLM radix CUDA | Production dispatcher, including short-row insertion and long-row split-work paths | -| DeepSelect v1.0.0 | Unsorted INT32 indices only; FP32 K=2048 emphasizes correctness coverage | -The public DeepSelect baseline revision is [8e70df71d2](https://github.com/deepseek-ai/DeepSelect/tree/8e70df71d2). Complete build revisions for the historical SGLang and radix observations are unavailable in the timing export. - -SGLang planning can be amortized across layers in a serving integration. FlashInfer's additional outputs and padded-row scan remain part of its timed native API. DeepSelect receives preallocated output. The historical BF16 comparison remains separate from the PR #19076 FP32 reference. It uses its own paired `gvr_bf16_run_us` reference and preconverted BF16 input for DeepSelect; conversion time is excluded. Each dtype is checked against its own `torch.topk` result, so BF16 speed does not establish preservation of FP32 Top-K membership. +The temporal implementation references appear below. Complete build revisions for the historical radix observations are unavailable in the timing export. ## Temporal GVR and Algorithm Evolution @@ -140,45 +137,42 @@ These P5 values are percentiles across per-case `temporal_us / gvr_v2_us` mean-t Speedup is the geometric mean of per-case `baseline_us / gvr_v2_us` ratios. Every case has equal weight. A win is a ratio strictly above one; minima and percentiles also use individual ratios of case-level mean durations. `_stats` in `plot_results.py` calls `numpy.percentile` without a method override, using its default linear interpolation between adjacent sorted ratios at fractional index `(cases - 1)*p/100` for percentile `p`. No slower case is discarded. -Figure 1 intersects all supported implementations within each model: 2,079 Flash, 2,970 Pro, and 4,466 V3.2 cases. V2 is fixed at 1.00; shorter bars mean less time. These values are recorded under `comparison_common_cases`. The article's overall and per-model tables use each baseline's full paired coverage. - -SGLang and FlashInfer lack V3.2 layers 0–2 and cover 9,515 cases in total. GVR, radix, and DeepSelect cover all 9,746 cases. Missing coverage is never filled with estimated timings. +Figure 1 uses the same cases for all four implementations within each model: 2,079 Flash, 2,970 Pro, and 4,697 V3.2 cases, totaling 9,746. V2 is fixed at 1.00; shorter bars mean less time. These values are recorded under `comparison_common_cases`. The article's overall and per-model tables use this same full paired coverage. -The latency and roofline curves use arithmetic-mean durations over matching layers at each row-length/batch point: 21 layers for Flash, 30 for Pro, and 58 for V3.2. All layers at each plotted point have the same valid width. The SGLang and DeepSelect FP32 heatmaps (Figures 7 and 8) instead geometrically average per-layer speedups at each shape, using each baseline's full paired coverage. DeepSelect therefore includes all 61 V3.2 layers; SGLang includes 58. Both maps share a 0.8–8.0 scale with parity at 1.0, and cell labels round to one decimal place. A shape average can hide individual regressions. +The latency and roofline curves use arithmetic-mean durations over all captured layers at each row-length/batch point: 21 layers for Flash, 30 for Pro, and 61 for V3.2. All layers at each plotted point have the same valid width. The radix CUDA comparison heatmap (Figure 7) instead geometrically averages per-layer `radix_cuda_us / gvr_v2_us` ratios at each shape, using the same layers. It contains 275 cells: 99 each for Flash and Pro, and 77 for V3.2, covering all 11 batch sizes. The panels share a 1–21× color scale with parity at 1.0, and cell labels round to one decimal place. The cell values range from 1.522571× to 20.182551×, with no clipping by the color scale. A shape average can hide variation among individual cases. Correctness compares selected value multisets with `torch.topk`, allowing tied indices to differ. The capture-grid checks do not establish NaN ordering parity or a universal tie order. The linked implementation PRs additionally cover padding, variable lengths, exceptional values, and graph replay. ## Additional Numerical Views -The article uses Figure 1 for the model-level comparison. The following table retains each baseline's full paired coverage; Figure 1 instead uses the common intersection within each model. +The article uses Figure 1 for the model-level comparison. The following table uses the same full paired coverage and reports geometric-mean speedups of V2 over each baseline. | Baseline | V4 Flash, $K=512$ | V4 Pro, $K=1024$ | V3.2, $K=2048$ | | :--- | ---: | ---: | ---: | -| SGLang v2, plan + transform | 1.83× | 1.81× | 1.58× | -| FlashInfer 0.6.14 | 2.18× | 2.20× | 1.93× | +| GVR V1 R0 | 2.09× | 2.16× | 1.78× | +| GVR V1 tiered streaming | 1.53× | 1.54× | 1.37× | | TensorRT-LLM radix CUDA | 4.88× | 4.87× | 5.25× | -| DeepSelect FP32 | 2.03× | 2.13× | 2.85× | -*Each model column uses the workloads supported by that baseline.* +*Each model column uses the same workloads for all three baselines.* -For a concrete large-batch slice, the following times are at $B=1024$ and $N\approx131{,}072$, averaged over the same layers as Figure 9: +For a concrete large-batch slice, the following times are at $B=1024$ and $N\approx131{,}072$, averaged over the same layers as Figure 8: -| Model | GVR V2 | SGLang | FlashInfer | Radix CUDA | DeepSelect FP32 | -| :--- | ---: | ---: | ---: | ---: | ---: | -| V4 Flash | **113.1 µs** | 196.8 µs | 275.4 µs | 461.3 µs | 190.5 µs | -| V4 Pro | **132.8 µs** | 199.1 µs | 298.3 µs | 477.7 µs | 209.1 µs | -| V3.2 | **124.0 µs** | 211.0 µs | 388.7 µs | 496.6 µs | 419.6 µs | +| Model | GVR V2 | GVR V1 R0 | GVR V1 tiered | Radix CUDA | +| :--- | ---: | ---: | ---: | ---: | +| V4 Flash | **113.1 µs** | 269.3 µs | 138.4 µs | 461.3 µs | +| V4 Pro | **132.8 µs** | 233.4 µs | 146.1 µs | 477.7 µs | +| V3.2 | **123.9 µs** | 243.7 µs | 166.0 µs | 496.7 µs | ## Roofline Definitions -The logical work is `W = B*N` abstract comparisons and the minimum traffic is `Q_min = 4*B*(N+K)` bytes, accounting for FP32 score reads and INT32 index writes. Operational intensity is `I = W/Q_min`; measured useful throughput is `P = B*N/(time_us*1e6)` Tcompare/s. Every kernel uses this same normalization. Extra outputs, padding, staging, repeated scans, and synchronization remain in measured time but do not enlarge the ideal work or minimum-traffic terms. The plotted throughput is not a hardware instruction rate or measured DRAM bandwidth. +The logical work is `W = B*N` abstract comparisons and the minimum traffic is `Q_min = 4*B*(N+K)` bytes, accounting for FP32 score reads and INT32 index writes. Operational intensity is `I = W/Q_min`; measured useful throughput is `P = B*N/(time_us*1e6)` Tcompare/s. Every kernel uses this same normalization. Temporal-prior accesses, padding, staging, repeated scans, and synchronization remain in measured time but do not enlarge the ideal work or minimum-traffic terms. The plotted throughput is not a hardware instruction rate or measured DRAM bandwidth. The full model is `min(R, BW*I)`. The theoretical parameters are `R=37.224960 Tcompare/s` and `BW=8 TB/s`; calibrated parameters are `R=37.047490 Tcompare/s` and `BW=6.912116 TB/s`. Their knees are 4.65312 and approximately 5.35979 compare/byte, above Top-K's ideal `[0.125, 0.25)` intensity range. The semantic comparison convention counts two binary comparisons per FMNMX3 result; it is not FP32 FLOPS. -Figure 10B uses linear axes at B=1024. In this article, a Pareto curve denotes each operator's measured intensity–throughput trace across row lengths at that fixed batch. The points connect in intensity order; the curve is not a computed nondominated frontier or a search over configurations. Figure 9 also shows B=1, and both heatmaps cover all 11 batches. +Figure 9B uses linear axes at B=1024. In this article, a Pareto curve denotes each operator's measured intensity–throughput trace across row lengths at that fixed batch. The points connect in intensity order; the curve is not a computed nondominated frontier or a search over configurations. Figure 8 also shows B=1, and the Figure 7 heatmap covers all 11 batches. -Reachable rate is `100 * P / min(R, BW*I)` percent, using the calibrated roof. Compute each point from the arithmetic-mean duration across the same matched layers used in Figure 10B. The average reachable rate is the unweighted arithmetic mean of these point-level percentages, and the peak is their maximum. Flash and Pro each contribute nine intensity points; V3.2 contributes seven. The average is not weighted by row length or serving frequency. `summary.json` records the point counts and average/peak percentages under `roofline_reachable_rate`. +Reachable rate is `100 * P / min(R, BW*I)` percent, using the calibrated roof. Compute each point from the arithmetic-mean duration across the same 21/30/61 layers used in Figure 9B for Flash/Pro/V3.2. The average reachable rate is the unweighted arithmetic mean of these point-level percentages, and the peak is their maximum. Flash and Pro each contribute nine intensity points; V3.2 contributes seven. The average is not weighted by row length or serving frequency. `summary.json` records the point counts and average/peak percentages under `roofline_reachable_rate`. Every plotted point lies on the bandwidth branch of the roof. With elapsed time `t` and consistent units, the fractional reachable rate simplifies to `(W/t)/(BW*W/Q_min) = Q_min/(BW*t)`; multiply by 100 for percent. This is the ideal minimum-traffic time `Q_min/BW` divided by measured time. The cancellation of `W` explains why the comparison convention does not change the reachable rate on this branch. Additional traffic and kernel work remain in `t`, so the rate does not measure actual DRAM bytes transferred or bandwidth utilization. diff --git a/docs/source/blogs/media/gvr_v2/deepselect_map.svg b/docs/source/blogs/media/gvr_v2/deepselect_map.svg deleted file mode 100644 index 5ba2bff0b16e..000000000000 --- a/docs/source/blogs/media/gvr_v2/deepselect_map.svg +++ /dev/null @@ -1,1665 +0,0 @@ - - - - - - - - Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. SPDX-License-Identifier: Apache-2.0 - image/svg+xml - - - Matplotlib v3.10.8, https://matplotlib.org/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - - - - - - - - - - 2 - - - - - - - - - - 4 - - - - - - - - - - 8 - - - - - - - - - - 16 - - - - - - - - - - 32 - - - - - - - - - - 64 - - - - - - - - - - 128 - - - - - - - - - - 256 - - - - - - - - - - 512 - - - - - - - - - - 1024 - - - - Batch size B - - - - - - - - - - - - - - 1K - - - - - - - - - - 2K - - - - - - - - - - 4K - - - - - - - - - - 8K - - - - - - - - - - 16K - - - - - - - - - - 32K - - - - - - - - - - 64K - - - - - - - - - - 128K - - - - - - - - - - 256K - - - - Valid row length N (rounded) - - - - - - - - - - 1.5 - - - 1.5 - - - 1.5 - - - 1.5 - - - 1.4 - - - 1.4 - - - 1.4 - - - 1.3 - - - 2.2 - - - 3.2 - - - 4.3 - - - 1.6 - - - 1.6 - - - 1.6 - - - 1.5 - - - 1.4 - - - 1.4 - - - 1.4 - - - 1.4 - - - 2.1 - - - 2.8 - - - 3.2 - - - 1.5 - - - 1.4 - - - 1.5 - - - 1.4 - - - 1.4 - - - 1.3 - - - 1.3 - - - 1.3 - - - 1.9 - - - 2.4 - - - 2.7 - - - 2.1 - - - 2.1 - - - 2.1 - - - 2.1 - - - 2.0 - - - 1.9 - - - 1.9 - - - 1.8 - - - 2.4 - - - 3.0 - - - 3.2 - - - 2.0 - - - 2.0 - - - 2.0 - - - 2.0 - - - 1.9 - - - 1.9 - - - 1.8 - - - 1.7 - - - 2.3 - - - 3.1 - - - 3.0 - - - 2.6 - - - 2.6 - - - 2.4 - - - 2.3 - - - 2.3 - - - 2.2 - - - 2.0 - - - 1.6 - - - 2.3 - - - 2.7 - - - 2.6 - - - 3.3 - - - 3.1 - - - 3.0 - - - 2.8 - - - 2.6 - - - 2.5 - - - 2.0 - - - 1.6 - - - 1.9 - - - 2.1 - - - 2.1 - - - 3.7 - - - 3.7 - - - 3.5 - - - 3.3 - - - 2.3 - - - 2.5 - - - 2.1 - - - 1.4 - - - 1.5 - - - 1.6 - - - 1.7 - - - 3.9 - - - 3.8 - - - 3.4 - - - 3.1 - - - 2.6 - - - 2.6 - - - 1.6 - - - 1.0 - - - 1.1 - - - 1.1 - - - 1.2 - - - DeepSeek-V4 Flash · K=512 - - - - - - - - - - - - - - - - - - 1 - - - - - - - - - - 2 - - - - - - - - - - 4 - - - - - - - - - - 8 - - - - - - - - - - 16 - - - - - - - - - - 32 - - - - - - - - - - 64 - - - - - - - - - - 128 - - - - - - - - - - 256 - - - - - - - - - - 512 - - - - - - - - - - 1024 - - - - Batch size B - - - - - - - - - - - 1K - - - - - - - - - - 2K - - - - - - - - - - 4K - - - - - - - - - - 8K - - - - - - - - - - 16K - - - - - - - - - - 32K - - - - - - - - - - 64K - - - - - - - - - - 128K - - - - - - - - - - 256K - - - - Valid row length N (rounded) - - - - - - - - - - 1.5 - - - 1.5 - - - 1.5 - - - 1.5 - - - 1.4 - - - 1.4 - - - 1.4 - - - 1.4 - - - 1.9 - - - 2.9 - - - 3.8 - - - 1.6 - - - 1.6 - - - 1.6 - - - 1.6 - - - 1.5 - - - 1.4 - - - 1.4 - - - 1.4 - - - 2.0 - - - 2.6 - - - 3.1 - - - 1.5 - - - 1.5 - - - 1.4 - - - 1.5 - - - 1.4 - - - 1.4 - - - 1.4 - - - 1.3 - - - 1.9 - - - 2.5 - - - 2.9 - - - 2.3 - - - 2.2 - - - 2.2 - - - 2.2 - - - 2.1 - - - 2.1 - - - 2.0 - - - 1.9 - - - 2.6 - - - 2.9 - - - 3.0 - - - 2.2 - - - 2.2 - - - 2.2 - - - 2.2 - - - 2.1 - - - 2.0 - - - 2.0 - - - 1.9 - - - 2.5 - - - 3.2 - - - 3.1 - - - 3.0 - - - 2.9 - - - 2.8 - - - 2.7 - - - 2.7 - - - 2.5 - - - 2.3 - - - 1.6 - - - 2.5 - - - 2.9 - - - 2.9 - - - 3.5 - - - 3.4 - - - 3.3 - - - 3.1 - - - 2.9 - - - 2.7 - - - 2.2 - - - 1.6 - - - 2.0 - - - 2.3 - - - 2.3 - - - 3.9 - - - 3.8 - - - 3.7 - - - 3.5 - - - 2.4 - - - 2.4 - - - 2.3 - - - 1.4 - - - 1.4 - - - 1.5 - - - 1.6 - - - 4.4 - - - 4.2 - - - 3.8 - - - 3.5 - - - 2.9 - - - 2.7 - - - 1.9 - - - 1.1 - - - 1.1 - - - 1.2 - - - 1.2 - - - DeepSeek-V4 Pro · K=1024 - - - - - - - - - - - - - - - - - - 1 - - - - - - - - - - 2 - - - - - - - - - - 4 - - - - - - - - - - 8 - - - - - - - - - - 16 - - - - - - - - - - 32 - - - - - - - - - - 64 - - - - - - - - - - 128 - - - - - - - - - - 256 - - - - - - - - - - 512 - - - - - - - - - - 1024 - - - - Batch size B - - - - - - - - - - - 4K - - - - - - - - - - 8K - - - - - - - - - - 16K - - - - - - - - - - 32K - - - - - - - - - - 64K - - - - - - - - - - 128K - - - - - - - - - - 160K - - - - Valid row length N (rounded) - - - - - - - - - - 1.4 - - - 1.3 - - - 1.3 - - - 1.3 - - - 1.2 - - - 1.2 - - - 1.2 - - - 1.2 - - - 1.7 - - - 1.8 - - - 1.7 - - - 2.3 - - - 2.3 - - - 2.3 - - - 2.3 - - - 2.2 - - - 2.2 - - - 2.1 - - - 2.0 - - - 2.7 - - - 3.0 - - - 3.0 - - - 2.1 - - - 2.0 - - - 2.0 - - - 1.9 - - - 1.9 - - - 1.8 - - - 1.8 - - - 1.7 - - - 2.8 - - - 3.4 - - - 3.3 - - - 4.8 - - - 4.7 - - - 4.4 - - - 4.3 - - - 4.0 - - - 3.5 - - - 3.3 - - - 3.0 - - - 4.2 - - - 4.5 - - - 4.4 - - - 5.4 - - - 5.4 - - - 5.1 - - - 4.9 - - - 4.3 - - - 3.8 - - - 3.3 - - - 2.9 - - - 3.6 - - - 4.0 - - - 3.9 - - - 7.6 - - - 7.3 - - - 6.9 - - - 6.1 - - - 5.2 - - - 4.5 - - - 3.5 - - - 2.8 - - - 3.2 - - - 3.4 - - - 3.4 - - - 4.6 - - - 4.5 - - - 4.1 - - - 3.7 - - - 3.2 - - - 2.6 - - - 2.1 - - - 1.6 - - - 1.8 - - - 1.9 - - - 1.9 - - - DeepSeek-V3.2 · K=2048 - - - - - - - - - - - - - - - - 0.8 - - - - - - - - - - 1.0 - - - - - - - - - - 2.0 - - - - - - - - - - 4.0 - - - - - - - - - - 6.0 - - - - - - - - - - 8.0 - - - - DeepSelect FP32 time / GVR V2 time · geometric mean across layers - - - - - - - - - - GVR V2 vs DeepSelect FP32: gains across the full length–batch grid - - - DeepSelect FP32 · unsorted indices · 1.0× is parity · shared color scale across both baseline maps. - - - - - - - - - - - - - - diff --git a/docs/source/blogs/media/gvr_v2/flash_timings.csv.gz b/docs/source/blogs/media/gvr_v2/flash_timings.csv.gz index 7aee7c1a57987aa128d61407ebfa5dc130962c04..33c0b9e954f19cc613b3a5e86489446be3b4bb41 100644 GIT binary patch literal 19600 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 LQgQq_)3N~o5L)yO literal 55118 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 XU;VM diff --git a/docs/source/blogs/media/gvr_v2/latency.svg b/docs/source/blogs/media/gvr_v2/latency.svg index 49153525000d..c1a7405efbb8 100644 --- a/docs/source/blogs/media/gvr_v2/latency.svg +++ b/docs/source/blogs/media/gvr_v2/latency.svg @@ -266,18 +266,18 @@ z - + - +" style="stroke: #7395ab"/> - - - - - - - - - + + + + + + + + + - + - +" style="stroke: #386781"/> - - - - - - - - - + + + + + + + + + @@ -373,42 +373,6 @@ z - - - - - - - - - - - - - - - - - - + - + @@ -449,12 +413,12 @@ L 453.345546 50.76 - + - + @@ -464,12 +428,12 @@ L 528.323995 50.76 - + - + @@ -479,12 +443,12 @@ L 603.302444 50.76 - + - + @@ -494,12 +458,12 @@ L 678.280893 50.76 - + - + @@ -514,12 +478,12 @@ L 753.259342 50.76 - + - + @@ -529,12 +493,12 @@ L 768.243437 188.65386 - + - + @@ -544,12 +508,12 @@ L 768.243437 124.306739 - + - + @@ -559,140 +523,140 @@ L 768.243437 59.959617 - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -702,7 +666,7 @@ L 768.243437 59.959617 Mean kernel time (µs) - + + + + + + + + + + + + + + + - + - - - - - - - - - + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + @@ -857,12 +798,12 @@ L 57.672819 289.144158 - + - + @@ -872,12 +813,12 @@ L 132.651268 289.144158 - + - + @@ -887,12 +828,12 @@ L 207.629717 289.144158 - + - + @@ -902,12 +843,12 @@ L 282.608166 289.144158 - + - + @@ -922,12 +863,12 @@ L 357.586614 289.144158 - + - + @@ -937,77 +878,77 @@ L 372.57071 379.333894 - + - + - + - + - + - + - + - + - + - + - + @@ -1017,7 +958,7 @@ L 372.57071 379.333894 Mean kernel time (µs) - + - - + + - - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + - - - - - - - - - - - - - - - + - + @@ -1172,12 +1090,12 @@ L 453.345546 289.144158 - + - + @@ -1187,12 +1105,12 @@ L 528.323995 289.144158 - + - + @@ -1202,12 +1120,12 @@ L 603.302444 289.144158 - + - + @@ -1217,12 +1135,12 @@ L 678.280893 289.144158 - + - + @@ -1237,12 +1155,12 @@ L 753.259342 289.144158 - + - + @@ -1252,12 +1170,12 @@ L 768.243437 429.255724 - + - + @@ -1267,12 +1185,12 @@ L 768.243437 364.402608 - + - + @@ -1282,140 +1200,140 @@ L 768.243437 299.549491 - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -1425,7 +1343,7 @@ L 768.243437 299.549491 Mean kernel time (µs) - + - - + + - - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + - - - - - - - - - - - - - - - + - + @@ -1580,12 +1475,12 @@ L 56.564957 527.528317 - + - + @@ -1595,12 +1490,12 @@ L 161.900208 527.528317 - + - + @@ -1610,12 +1505,12 @@ L 267.235459 527.528317 - + - + @@ -1630,101 +1525,80 @@ L 372.57071 527.528317 - - + - + - + - 10 + 10 - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - + - + @@ -1732,99 +1606,80 @@ L 372.57071 639.416481 Mean kernel time (µs) - + - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + +L 336.828122 534.666597 +" clip-path="url(#ped3c3c86c8)" style="fill: none; stroke-dasharray: 5.92,2.56; stroke-dashoffset: 0; stroke: #64748b; stroke-width: 1.6"/> - - - - - - - + + + + + + + @@ -1852,12 +1707,12 @@ z - + - + @@ -1867,12 +1722,12 @@ L 452.237685 527.528317 - + - + @@ -1882,12 +1737,12 @@ L 557.572936 527.528317 - + - + @@ -1897,12 +1752,12 @@ L 662.908187 527.528317 - + - + @@ -1916,102 +1771,102 @@ L 768.243437 527.528317 - - - + + - + - + - 100 + 100 - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + @@ -2019,101 +1874,82 @@ L 768.243437 612.555209 Mean kernel time (µs) - + - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + - - - - - - + + + + + + - - - - - - - - - - - - Latency across row lengths and batch sizes - - + - GVR V2 + GVR V2 - - + + - SGLang v2 (plan + transform) + GVR V1 · R0 - - + + - FlashInfer 0.6.14 + GVR V1 · tiered - - + - TensorRT-LLM radix CUDA - - - - - - DeepSelect FP32 + TensorRT-LLM radix CUDA diff --git a/docs/source/blogs/media/gvr_v2/plot_results.py b/docs/source/blogs/media/gvr_v2/plot_results.py index f433bb411446..7e2841ea1efe 100644 --- a/docs/source/blogs/media/gvr_v2/plot_results.py +++ b/docs/source/blogs/media/gvr_v2/plot_results.py @@ -16,7 +16,7 @@ matplotlib.use("Agg") import matplotlib.pyplot as plt import numpy as np -from matplotlib.colors import TwoSlopeNorm +from matplotlib.colors import Normalize from matplotlib.lines import Line2D from matplotlib.patches import FancyBboxPatch, Rectangle from matplotlib.ticker import FuncFormatter @@ -25,7 +25,7 @@ COPYRIGHT = ( "Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. SPDX-License-Identifier: Apache-2.0" ) -ARMS = ["sglang", "flashinfer", "radix_cuda", "deepselect"] +ARMS = ["radix_cuda"] MODELS = { "flash": "DeepSeek-V4 Flash · K=512", "pro": "DeepSeek-V4 Pro · K=1024", @@ -33,23 +33,19 @@ } LABELS = { "gvr_v2": "GVR V2", - "sglang": "SGLang v2 (plan + transform)", - "flashinfer": "FlashInfer 0.6.14", + "temporal_r0": "GVR V1 · R0", + "temporal_tiered": "GVR V1 · tiered", "radix_cuda": "TensorRT-LLM radix CUDA", - "deepselect": "DeepSelect FP32", } COLORS = { "gvr_v2": "#579600", "temporal_r0": "#7395ab", "temporal_tiered": "#386781", - "sglang": "#7557a6", - "flashinfer": "#007e91", "radix_cuda": "#64748b", - "deepselect": "#d97416", } -CROSS_CAMPAIGN = set(ARMS) REACHABLE_BW = 6.912116 TEMPORAL = ["temporal_r0", "temporal_tiered"] +CROSS_CAMPAIGN = set(TEMPORAL + ARMS) COMPARISON_ARMS = ["gvr_v2", *TEMPORAL, *ARMS] @@ -124,21 +120,18 @@ def _comparison(rows: list[dict]) -> dict: def _overview(rows: list[dict]) -> None: data = _comparison(rows) - fig, axes = plt.subplots(1, 3, figsize=(14, 6.3), sharey=True) - fig.subplots_adjust(left=0.185, right=0.97, bottom=0.23, top=0.78, wspace=0.14) + fig, axes = plt.subplots(1, 3, figsize=(14, 5.2), sharey=True) + fig.subplots_adjust(left=0.185, right=0.97, bottom=0.23, top=0.73, wspace=0.14) labels = [ "GVR V2", - "Temporal GVR · R0", - "Temporal GVR · tiered", - "SGLang v2", - "FlashInfer", + "GVR V1 · R0", + "GVR V1 · tiered", "TRT-LLM radix CUDA", - "DeepSelect FP32", ] - positions = [7.1, 5.8, 4.8, 3.5, 2.5, 1.5, 0.5] + positions = [3.8, 2.6, 1.6, 0.4] for ax, (model, title) in zip(axes, MODELS.items()): panel = data[model] - ax.axhspan(6.55, 7.65, color="#edf5df", zorder=0) + ax.axhspan(3.3, 4.3, color="#edf5df", zorder=0) ax.axvline(1, color="#579600", alpha=0.55, linewidth=1, linestyle=(0, (2, 3))) for y, arm in zip(positions, COMPARISON_ARMS): value = panel["latency_relative_to_v2"][arm] @@ -162,7 +155,7 @@ def _overview(rows: list[dict]) -> None: fontsize=9.5, color="#52616f", ) - ax.set(xlim=(0, 5.95), ylim=(-0.1, 7.7), xticks=[0, 1, 2, 3, 4, 5]) + ax.set(xlim=(0, 5.95), ylim=(-0.15, 4.35), xticks=[0, 1, 2, 3, 4, 5]) ax.xaxis.set_major_formatter(FuncFormatter(lambda value, _: f"{value:g}×")) ax.set_yticks(positions, labels, fontsize=10.5) ax.tick_params(axis="both", length=0, pad=8) @@ -174,7 +167,7 @@ def _overview(rows: list[dict]) -> None: fig.text( 0.035, 0.935, - "One view of the competition — and the GVR evolution", + "The GVR evolution: V1, V2, and radix CUDA", fontsize=20, weight="bold", color="#17202b", @@ -196,14 +189,7 @@ def _overview(rows: list[dict]) -> None: fig.text( 0.035, 0.067, - "Temporal GVR: R0 threshold ladder and tiered execution. V2: current-row self-sampling.", - fontsize=9, - color="#52616f", - ) - fig.text( - 0.035, - 0.032, - "SGLang includes plan + transform.", + "GVR V1: R0 threshold ladder and tiered execution. V2: current-row self-sampling.", fontsize=9, color="#52616f", ) @@ -835,7 +821,7 @@ def _integration() -> None: def _matching(rows: list[dict], model: str) -> list[dict]: - required = ["gvr_v2", *ARMS] + required = COMPARISON_ARMS return [ r for r in rows if r["model"] == model and all(r[a + "_us"] is not None for a in required) ] @@ -861,12 +847,12 @@ def _legend(fig: plt.Figure) -> None: linestyle="--" if a in CROSS_CAMPAIGN else "-", label=LABELS[a], ) - for a in ["gvr_v2", *ARMS] + for a in COMPARISON_ARMS ] fig.legend( handles=handles, loc="lower center", - ncol=5, + ncol=4, frameon=False, bbox_to_anchor=(0.5, 0.01), fontsize=10, @@ -879,7 +865,7 @@ def _latency(rows: list[dict]) -> None: matched = _matching(rows, model) for j, batch in enumerate((1, 1024)): ax = axes[i, j] - for arm in ["gvr_v2", *ARMS]: + for arm in COMPARISON_ARMS: x, y = _line_data(matched, arm, batch) ax.plot( x, @@ -914,7 +900,7 @@ def _roofline_reachable_rates(rows: list[dict]) -> dict: matched = _matching(rows, model) k = matched[0]["k"] by_model[model] = {} - for arm in ["gvr_v2", *ARMS]: + for arm in COMPARISON_ARMS: widths, times = _line_data(matched, arm, 1024) rates = [] for n, us in zip(widths, times): @@ -1011,7 +997,7 @@ def _roofline(rows: list[dict]) -> None: xroof = np.linspace(0.125, 0.25, 100) ax.fill_between(xroof, xroof * bw, 1.95, color="#f2f5f7", zorder=0) ax.plot(xroof, xroof * bw, color="#273746", linestyle=(0, (2, 2)), linewidth=1.5) - for arm in [*ARMS, "gvr_v2"]: + for arm in [*TEMPORAL, *ARMS, "gvr_v2"]: widths, times = _line_data(matched, arm, 1024) x = [n / (4 * (n + k)) for n in widths] y = [1024 * n / (us * 1e6) for n, us in zip(widths, times)] @@ -1077,12 +1063,12 @@ def _roofline(rows: list[dict]) -> None: linestyle="--" if a in CROSS_CAMPAIGN else "-", label=LABELS[a], ) - for a in ["gvr_v2", *ARMS] + for a in COMPARISON_ARMS ] fig.legend( handles=handles, loc="lower center", - ncol=5, + ncol=4, frameon=False, bbox_to_anchor=(0.53, 0.077), fontsize=10, @@ -1108,8 +1094,8 @@ def _roofline(rows: list[dict]) -> None: def _speedup_map(rows: list[dict], arm: str, label: str, scope: str) -> None: fig, axes = plt.subplots(1, 3, figsize=(14, 5.8)) batches = sorted({r["batch"] for r in rows}) - norm = TwoSlopeNorm(vmin=0.8, vcenter=1, vmax=8) - cmap = plt.get_cmap("BrBG") + norm = Normalize(vmin=1, vmax=21) + cmap = plt.get_cmap("YlGnBu") for ax, (model, title) in zip(axes, MODELS.items()): selected = [r for r in rows if r["model"] == model and r[arm + "_us"] is not None] buckets = sorted({r["isl_bucket"] for r in selected}, key=lambda s: int(s[:-1])) @@ -1156,19 +1142,19 @@ def _speedup_map(rows: list[dict], arm: str, label: str, scope: str) -> None: ) fig.subplots_adjust(left=0.06, right=0.99, top=0.87, bottom=0.34, wspace=0.27) cax = fig.add_axes((0.34, 0.09, 0.32, 0.026)) - bar = fig.colorbar(graphic, cax=cax, orientation="horizontal", ticks=[0.8, 1, 2, 4, 6, 8]) + bar = fig.colorbar(graphic, cax=cax, orientation="horizontal", ticks=[1, 5, 10, 15, 21]) bar.set_label(f"{label} time / GVR V2 time · geometric mean across layers", fontsize=9) fig.text( 0.06, 0.17, - f"{scope} · 1.0× is parity · shared color scale across both baseline maps.", + f"{scope} · 1.0× is parity · shared color scale across all three models.", fontsize=9, ) _save(fig, arm + "_map") def main() -> None: - """Validate the frozen dataset, then regenerate statistics and ten figures.""" + """Validate the frozen dataset, then regenerate statistics and nine figures.""" plt.rcParams.update( { "font.family": "DejaVu Sans", @@ -1188,8 +1174,6 @@ def main() -> None: "by_model": { m: {a: _stats([r for r in rows if r["model"] == m], a) for a in ARMS} for m in MODELS }, - "sglang_transform_only": _stats(rows, "sglang_transform"), - "deepselect_bf16": _stats(rows, "deepselect_bf16", "gvr_bf16_run"), "temporal_vs_v2": {a: _stats(rows, a) for a in TEMPORAL}, "roofline_reachable_rate": _roofline_reachable_rates(rows), "evolution_vs_radix": { @@ -1210,8 +1194,7 @@ def main() -> None: _candidate_work() _algorithm() _gpu_sampling() - _speedup_map(rows, "sglang", "SGLang", "SGLang plan + transform") - _speedup_map(rows, "deepselect", "DeepSelect FP32", "DeepSelect FP32 · unsorted indices") + _speedup_map(rows, "radix_cuda", "radix CUDA", "TensorRT-LLM production dispatcher") _latency(rows) _roofline(rows) _integration() diff --git a/docs/source/blogs/media/gvr_v2/pro_timings.csv.gz b/docs/source/blogs/media/gvr_v2/pro_timings.csv.gz index e70bcf9c2421d100b5aa5c1ef1242c8854ebf996..7daaa1773cf1a549373cca97290806849c7e2084 100644 GIT binary patch literal 27944 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 +u$=9kT4C<#TY`FGD&Kji z-xLUQe(J8tUOh0sSax}q=%K`6E~p#AcPC#?FCWCYA8Vd=Zc#L)mz0$CQFG^PZ)Kbk z)OFf0!mpbN$w=&5EP*b!c=>&g6H%UdMIsPxQ8ua4v@@AoiSt+9xZla3E~(`8`D4%T zEcjJyiFUm+o1zU$L(k{GQubfU^8wMSQqM}$d+{^RGFjXrV&P_@tj)wWx1U7^r5a74 zfT4JC^E}l2<&Ti5w{6Xh>*_Ir;l(F!Lq1&Wt%{4a%Zj?xks9d`3ts6M&DGvAh>^3!u&$7p^!!E*JGP+)<-RZa*I+&L zYJ^8RmB3;&lG7Q>zGFlb4#}DhB7Xa-^$7lQ zX)fBQIgh#hWa4!E&qar8brH0gZ0`JTO#=t*{dJtf0I?Hv8=w1smkFjV+3EE44+I-g zPq9?P(+JjgRe9zkz*K~xXtm-ue;HM1T9F#bfksK?XJ><5qt9d%Yo?eVituD`)zBc# z(IjnzSZM`vFUBO0^A$&$%&n8ceiV0+!y!@-7x1S(m`eJ1`+W6aFlT3ltT1kZAMcDJ zzHj<$2$&D>>A05^JDofQdPZKp=zhnux9Pm8*w#m*xh}$6n63x*FQ`v@Hn@>%lA$(QZPSO;ET3#+-tnt|I)CA{aZx3q zL8YDETR|lMDxkV$AY;BUD{50*p9wAu6rziPE0MhRZ=s18YUhFf+|Ws#2gM}d%lN +iVBORw0KGgoAAAANSUhEUgAAAXAAAAE0CAYAAAA10GhFAAAGQklEQVR4nO3WvY5lxRmG0W93n57GaJxYEFm+DW7cd+B4kC3ILCSLgAAxIxhp8Hj652wHHRBDUvVIa13Bq6p9nlPHv97+/ZzFjmP1ghd/ul1+FPNqgw0zM+e5/lI+Pq9e8OL+ZvWCmftNvovH6/rv4nmDo/jwuP4cZmY2+DQB+CMEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiLk/n6gkzxwYbZmY+HasXzDyfG4yYmS8+W38p103O4peH9Tv+9nr9fczMnLN+x+cbPDs/u11/DjNe4ABZAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOEHV5/3Cs3jD3m/yNPJ+rF8zcrr+OmZn56X+rF8z892mPw9jhN/KXx/UbZmY+Pq9esIen6x73sUk6Afi9BBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABoi6P12P1hrmeqxe8uFl/FHMeexzGr4/rD+PD0/oNMzP/fn9ZPWH++vnD6gkzM/PdBmfxy8P672KHbs54gQNkCThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRF3ubs7VG+bmWL3gxeP6o5jrucdhvLpdfxivL+s3zMx89eXj6gnz88Me38U3P19WT5h/vrtfPWGe9vg0vcABqgQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIub97erd4wl2P1gn3cbnIWf747V0+Yu5v1G2ZmLhs8c94/7PFhfP3ufvWE+c+P68/i3dvr6gkz4wUOkCXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhB1+f7DZfWGuRyrF7y42WDHq5tz9YSZmXl9d109Ye42eV7scCc/frxdPWFmZr79bv1ZXP/xw+oJ8/HrN6snzIwXOECWgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRB2fnt6cq0ecs3zCzMwcc6yesI9j/Vm4j/0cG7z5ns9PqydsY/1tAPCHCDhAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRF3OOVdvmGOO1RNmZmaHs9jFDnfiPn6zw33MzFznefWEeTo/rZ4w1/Nx9YSZ8QIHyBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4j6PyofhLE3Rjy/AAAAAElFTkSuQmCC" id="image8943cbd918" transform="scale(1 -1) translate(0 -221.76)" x="51.926719" y="-69.408" width="264.96" height="221.76"/> @@ -272,301 +272,301 @@ L 316.740278 291.168 " style="fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> - 2.1 + 1.9 - 2.0 + 1.9 - 2.0 + 1.9 - 2.0 + 1.9 - 1.9 + 1.8 - 1.9 + 1.8 - 1.9 + 1.7 - 1.8 + 1.7 - 1.9 + 1.7 2.4 - 2.9 + 2.7 - 2.0 + 1.9 - 2.0 + 1.9 - 1.9 + 1.8 - 1.9 + 1.8 - 1.9 + 1.7 - 1.9 + 1.7 - 1.8 + 1.7 - 1.7 + 1.6 - 1.7 + 1.6 2.0 - 2.0 + 1.9 - 1.8 + 9.3 - 1.8 + 9.2 - 1.8 + 9.1 - 1.7 + 8.9 - 1.8 + 8.4 - 1.7 + 8.2 - 1.7 + 8.0 - 1.6 + 8.9 - 1.6 + 13.0 - 1.7 + 16.2 - 1.8 + 19.8 - 1.8 + 8.2 - 1.7 + 8.0 - 1.8 + 8.0 - 1.7 + 7.9 - 1.7 + 7.5 - 1.7 + 7.3 - 1.6 + 7.1 - 1.6 + 7.7 - 1.4 + 10.3 - 1.5 + 12.2 - 1.4 + 13.4 - 1.8 + 6.3 - 1.8 + 6.3 - 1.8 + 6.2 - 1.7 + 6.2 - 1.7 + 5.8 - 1.7 + 5.7 - 1.6 + 5.6 - 1.5 + 6.0 - 1.4 + 8.3 - 1.7 + 10.2 - 1.6 + 10.4 - 1.8 + 6.5 - 1.8 + 6.4 - 1.7 + 6.0 - 1.7 + 5.8 - 2.1 + 5.7 - 2.0 + 6.3 - 1.8 + 7.7 - 1.5 + 4.9 - 1.4 + 6.7 - 1.6 + 7.3 - 1.5 + 7.5 - 1.9 + 6.4 - 1.8 + 6.1 - 1.8 + 5.8 - 1.7 + 5.6 - 1.8 + 5.0 - 2.7 + 5.7 - 2.2 + 6.3 - 1.8 + 4.4 - 1.5 + 5.0 - 1.6 + 5.1 - 1.5 + 5.2 - 1.9 + 5.6 - 1.8 + 5.5 - 1.8 + 5.2 - 1.7 + 5.0 - 1.4 + 3.6 - 4.2 + 4.5 - 2.6 + 5.5 - 1.9 + 3.7 - 1.7 + 4.1 - 1.6 + 3.8 - 1.7 + 4.1 - 2.0 + 5.4 - 2.0 + 5.3 - 1.8 + 4.7 - 1.7 + 4.3 - 1.6 + 4.4 - 4.5 + 5.1 - 4.5 + 4.6 - 2.3 + 4.1 - 1.7 + 4.4 - 1.7 + 4.6 - 1.9 + 5.4 DeepSeek-V4 Flash · K=512 @@ -583,7 +583,7 @@ z +iVBORw0KGgoAAAANSUhEUgAAAXAAAAE0CAYAAAA10GhFAAAGNElEQVR4nO3WPW4eVRiG4fezJzhJgYQoECyBLbBsFkBFwZ8oaJCgQDSJlAgIRDhx7G8ojFDa0Jy5petawaOZc+6Z07fPPt9nse20esG9h5fLH8VcXa5ecBw359UL7h3heD7a1p/NmZn9ADOOcCyub49wKmYuVg8A4P8RcIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeI2s776gkzNwfYMDOzz2n1hLk5r15w7+PH64e8ulu94N6Tv9f/53xwdYxLcoRebBfr7+nj7QAPYvyBA2QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThA1PbiZn3DL0776gkzM/PocvWCme3iGM/i6fVp9YS5vl2/YWbm+av1d+STx+fVE2Zm5uWb9e/kCDfkdl//HGb8gQNkCThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRG2v71ZPmJk5rR7wr331gLnaj/Es7tY/inlxc4z/i5//3FZPmE8/uF09YWZmfnl5uXrC/PVm/R25vl2/YcYfOECWgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThA1HZ1uXoCb3uzr15w7wjH4sOr8+oJMzPz2Uc3qyfMk7+P8a/1w2/b6gnz44v3Vk+Y24Pc02OcCgDemYADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QNT21bMHqzfMg4t99YTDOMoX9f331r+Tq4Oci+0AL+WPm9PqCTMz8/Xzh6snzPPX61/Iy7+OcTbXPwkA/hcBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScICo7en15eoNh/mKbBf76gmznVYvuPf6fF49YR4c4H3MzFwd4IA+vT7AiJn5/qf17+T8xa+rJ8zv3325esLMHKedALwjAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiDq9uv1mXz2C4zmdfNuP5DSn1RNmZuY0l6snzN1+s3rCYbilAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABR2+oB986rB/zL9+w/+756AW/Z5xjv43Raf0fO+5vVE+Zuf716wswoFkCWgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThA1D8UY3rf/iV1NwAAAABJRU5ErkJggg==" id="image0b4b0a9b41" transform="scale(1 -1) translate(0 -221.76)" x="388.239939" y="-69.408" width="264.96" height="221.76"/> @@ -806,64 +806,64 @@ L 653.053498 291.168 " style="fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> - 2.1 + 1.9 2.0 - 2.0 + 1.9 - 2.0 + 1.9 1.9 - 1.9 + 1.8 - 1.9 + 1.8 - 1.9 + 1.8 - 1.7 + 1.6 - 2.1 + 2.2 2.6 - 2.0 + 1.9 1.9 - 2.0 + 1.9 1.9 - 1.9 + 1.8 1.8 - 1.8 + 1.7 1.7 - 1.6 + 1.5 1.9 @@ -872,235 +872,235 @@ L 653.053498 291.168 1.9 - 1.8 + 9.2 - 1.8 + 9.2 - 1.8 + 9.0 - 1.8 + 8.9 - 1.7 + 8.3 - 1.7 + 8.2 - 1.7 + 7.9 - 1.6 + 8.8 - 1.6 + 13.0 - 1.8 + 16.4 - 1.9 + 20.2 - 1.8 + 8.3 - 1.8 + 8.1 - 1.8 + 8.1 - 1.8 + 8.0 - 1.8 + 7.6 - 1.7 + 7.4 - 1.7 + 7.2 - 1.6 + 7.7 - 1.4 + 10.2 - 1.4 + 11.0 - 1.3 + 11.8 - 1.8 + 6.4 - 1.8 + 6.4 - 1.8 + 6.4 - 1.7 + 6.3 - 1.7 + 5.9 - 1.7 + 5.7 - 1.6 + 5.6 - 1.6 + 6.0 - 1.5 + 8.0 - 1.7 + 9.6 - 1.5 + 9.8 - 1.9 + 6.7 - 1.9 + 6.7 - 1.9 + 6.3 - 1.8 + 6.1 - 2.1 + 5.9 - 2.0 + 6.5 - 1.8 + 7.9 - 1.3 + 4.3 - 1.4 + 6.5 - 1.6 + 7.0 - 1.5 + 7.3 - 1.9 + 6.4 - 1.9 + 6.3 - 1.9 + 6.1 - 1.8 + 5.8 - 1.9 + 5.2 - 2.7 + 5.8 - 2.2 + 6.6 - 1.7 + 4.1 - 1.5 + 4.9 - 1.6 + 4.9 - 1.4 + 5.1 - 1.8 + 5.8 - 1.8 + 5.8 - 1.8 + 5.5 - 1.7 + 5.2 - 1.3 + 3.6 - 3.6 + 4.2 - 2.7 + 5.8 - 1.8 + 3.6 - 1.5 + 3.8 - 1.4 + 3.4 - 1.5 + 3.7 - 2.0 + 5.6 - 1.9 + 5.4 - 1.8 + 4.9 - 1.6 + 4.4 - 1.6 + 4.4 - 4.2 + 4.8 4.7 - 2.3 + 4.2 - 1.6 + 4.2 - 1.5 + 4.3 - 1.7 + 4.9 DeepSeek-V4 Pro · K=1024 @@ -1117,7 +1117,7 @@ z +iVBORw0KGgoAAAANSUhEUgAAAXAAAAE0CAYAAAA10GhFAAAFv0lEQVR4nO3WQY4cRRRF0V9VSbctlsD+N8AOWARMYIoETAyWwW13VxWDtpibScSVzlnBU2TkzTz99O77+yx2Xj3gi4fL6gUzD+flj2Nm9jiL0+oBX3y6rl4w8/bY4zSeruvv58MGwbitP4aZ2aedAHwlAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScIAoAQeIEnCAKAEHiBJwgCgBB4gScICo435fPWHmflq94NXzbfWCmfMmZ3FscC9uG2yYmXm+rX8ob3Z4UWfmusE78rx6wMzs8TT8gQNkCThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANEHYeE/+e0esDMXG87rJi5nu+rJ8z1tnrBqw8vqxfMPF5WL3j198v6+7l+wcx1/esxM/7AAbIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaIEHCBKwAGiBBwgSsABogQcIErAAaKOy2n1hJkNJszMzGmXIRt4vq1eMHO/7/FAnl7W77g/3ldPmJmZd5/W//PdNjiKj9f1d2LGHzhAloADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThA1HFavWAjO5zF6XRfPWFm9viyPxx7nMV3367f8fm2esGr3z+uvxm//rN+w8tth1rs8Z4C8D8IOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QdP7+/rN4wt/vqBa/Op9UL9vF4Wf9QdnkeD+f1Z/HX5z3+tX7881g9YT48r78YT9c9nsceKwD4agIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUQIOECXgAFECDhAl4ABRAg4QJeAAUccv7y+rN8w3m3xGHs/31RO28fZYfxbn0+oFr44NdvzxtMdL8sNvb1dPmDeX9Xfzw8sGl2L8gQNkCThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANECThAlIADRAk4QJSAA0QJOECUgANE/Qv0ZVqWayxAJwAAAABJRU5ErkJggg==" id="imaged8c050ce35" transform="scale(1 -1) translate(0 -221.76)" x="724.553159" y="-69.408" width="264.96" height="221.76"/> @@ -1320,235 +1320,235 @@ L 989.366719 291.168 " style="fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> - 1.8 + 7.8 - 1.7 + 7.6 - 1.7 + 7.4 - 1.7 + 7.3 - 1.7 + 7.0 - 1.6 + 7.0 - 1.6 + 6.8 - 1.6 + 7.6 - 1.6 + 10.8 - 1.4 + 10.5 - 1.3 + 11.0 - 1.6 + 6.5 - 1.6 + 6.6 - 1.6 + 6.5 - 1.6 + 6.5 - 1.6 + 6.3 - 1.6 + 6.2 - 1.5 + 6.0 - 1.5 + 6.5 - 1.4 + 8.3 - 1.3 + 8.7 - 1.2 + 9.1 - 1.4 + 4.5 - 1.4 + 4.5 - 1.3 + 4.4 - 1.3 + 4.4 - 1.4 + 4.3 - 1.3 + 3.9 - 1.3 + 3.9 - 1.3 + 4.3 - 1.4 + 6.8 - 1.6 + 7.8 - 1.4 + 7.9 - 1.4 + 4.6 - 1.3 + 4.6 - 1.3 + 4.5 - 1.3 + 4.5 - 1.6 + 4.3 - 1.5 + 4.4 - 1.4 + 5.7 - 1.3 + 4.0 - 1.4 + 6.0 - 1.5 + 6.1 - 1.5 + 6.4 - 1.5 + 4.8 - 1.5 + 4.8 - 1.5 + 4.7 - 1.4 + 4.5 - 1.4 + 4.0 - 2.0 + 4.2 - 1.8 + 5.2 - 1.7 + 3.9 - 1.5 + 5.0 - 1.6 + 4.9 - 1.5 + 5.1 - 1.8 + 5.1 - 1.7 + 5.0 - 1.7 + 4.8 - 1.5 + 4.3 - 1.5 + 3.8 - 3.8 + 3.9 - 2.0 + 4.4 - 1.8 + 3.5 - 1.7 + 4.2 - 1.6 + 3.9 - 1.7 + 4.0 - 1.7 + 5.0 - 1.7 + 4.9 - 1.6 + 4.5 - 1.5 + 4.1 - 1.5 + 3.7 - 3.5 + 3.6 - 2.1 + 4.1 - 2.0 + 3.5 - 1.7 + 4.0 - 1.7 + 3.6 - 1.8 + 3.8 DeepSeek-V3.2 · K=2048 @@ -1564,7 +1564,7 @@ z " style="fill: #ffffff"/> +iVBORw0KGgoAAAANSUhEUgAAAcAAAAAPCAYAAABz7B+mAAABbklEQVR4nO3V0WHDMAhFUdz9F+ww4eUjloQE9gLc8xPHCIxUp1zSv8zMZLIfN2lcy55i69747us65efYVvOspRzLa0LNIpbvjYq2IoorzKRrdZViOc/L2LXleYwVz62eM76PWl7G9h5GHZeZ33kfHTF7iWldf8ZzY8xeYjNv3FtrPqm/ECt6GGty3oqde1aomc9jnWFVK8eO/T2sH2tUrF/nktfPPRy9KHyu6/3dlYe/+1ueK8Wq9TPPH55X5XnIe+pTZj5f2mPzkl3nSx8P43ixr7jhs5n4w7hjZe3z0GLtp5pF3hVrPv1wtx980VPV+/gszmrmzR6q/RU9pOfteb+9Fz2M3ubf1O+0+1Oa9yzFvFif83LM54Hs9/b/5XWszttm1Zlnq88/AwCgIQYgAKAlBiAAoCUGIACgJQYgAKAlBiAAoCUGIACgJQYgAKAlBiAAoCUGIACgJQYgAKAlBiAAoCUGIACgJQYgAKClL7Ch36mYtoCnAAAAAElFTkSuQmCC" id="imageb5e4c6627e" transform="scale(1 -1) translate(0 -10.8)" x="334.08" y="-384.48" width="322.56" height="10.8"/> @@ -1573,61 +1573,51 @@ iVBORw0KGgoAAAANSUhEUgAAAcAAAAAPCAYAAABz7B+mAAABa0lEQVR4nO3VSXLDIBCF4Qdy7pPD+P43 - 0.8 + 1 - + - 1.0 + 5 - + - 2.0 + 10 - + - 4.0 + 15 - - - - - - 6.0 - - - - - - 8.0 + + 21 - - SGLang time / GVR V2 time · geometric mean across layers + + radix CUDA time / GVR V2 time · geometric mean across layers @@ -1644,11 +1634,11 @@ z " style="fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> - - GVR V2 vs SGLang: gains across the full length–batch grid + + GVR V2 vs radix CUDA: gains across the full length–batch grid - - SGLang plan + transform · 1.0× is parity · shared color scale across both baseline maps. + + TensorRT-LLM production dispatcher · 1.0× is parity · shared color scale across all three models. diff --git a/docs/source/blogs/media/gvr_v2/roofline.svg b/docs/source/blogs/media/gvr_v2/roofline.svg index 2819c095b953..eee3e7020d53 100644 --- a/docs/source/blogs/media/gvr_v2/roofline.svg +++ b/docs/source/blogs/media/gvr_v2/roofline.svg @@ -632,18 +632,18 @@ L 311.438281 534.140719 " style="fill: none; stroke: #d5dce3; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> - + - +" style="stroke: #7395ab; stroke-opacity: 0.8"/> - - - - - - - - - + + + + + + + + + - + - +" style="stroke: #386781; stroke-opacity: 0.8"/> - - - - - - - - - + + + + + + + + + @@ -739,49 +739,13 @@ z - - - - - - - - - - - - - - - - - Calibrated roof DeepSeek-V4 Flash · K=512 - + - + .125 - + .175 - + .225 - + .250 @@ -1069,51 +1033,51 @@ z - + - + 0 - + - + 0.5 - + - + 1.0 - + - + 1.5 - + - - + + - - - - - - - - - + + + + + + + + + - - + + - - - - - - - - - + + + + + + + + + - + - - - - - - - - - - - - - - DeepSeek-V4 Pro · K=1024 - + - + .125 - + .175 - + .225 - + .250 @@ -1596,51 +1537,51 @@ z - + - + 0 - + - + 0.5 - + - + 1.0 - + - + 1.5 - + - - + + - - - - - - - + + + + + + + - - + + - - - - - - - + + + + + + + - - + - - - - - - - - - - - - - - - - - - - + + + + + + + DeepSeek-V3.2 · K=2048 - - + - - - - - - - + + + + + + + @@ -1871,50 +1793,41 @@ L 914.04562 443.579584 Line styles distinguish benchmark runs. Work throughput uses the same logical task for every kernel. - - + - GVR V2 + GVR V2 - - + + - SGLang v2 (plan + transform) + GVR V1 · R0 - - + + - FlashInfer 0.6.14 + GVR V1 · tiered - - + - TensorRT-LLM radix CUDA - - - - - - DeepSelect FP32 + TensorRT-LLM radix CUDA diff --git a/docs/source/blogs/media/gvr_v2/speedup.svg b/docs/source/blogs/media/gvr_v2/speedup.svg index 351663d602cc..eaf4b4ccb573 100644 --- a/docs/source/blogs/media/gvr_v2/speedup.svg +++ b/docs/source/blogs/media/gvr_v2/speedup.svg @@ -1,7 +1,7 @@ - + @@ -21,95 +21,95 @@ - - - +" clip-path="url(#pe069962719)" style="fill: #edf5df; stroke: #edf5df; stroke-linejoin: miter"/> - + - + - + - + - + - + - + - + - + - + - + - + @@ -117,569 +117,431 @@ L 361.125968 92.704875 - GVR V2 + GVR V2 - Temporal GVR · R0 + GVR V1 · R0 - Temporal GVR · tiered + GVR V1 · tiered - SGLang v2 - - - - - - FlashInfer - - - - - - TRT-LLM radix CUDA - - - - - - DeepSelect FP32 + TRT-LLM radix CUDA - - + + - - +" clip-path="url(#pe069962719)" style="fill: #579600"/> - - 1.00× + + 1.00× - +" clip-path="url(#pe069962719)" style="fill: #7395ab"/> - - 2.09× + + 2.09× - +" clip-path="url(#pe069962719)" style="fill: #386781"/> - - 1.53× + + 1.53× - - - - 1.83× +" clip-path="url(#pe069962719)" style="fill: #64748b"/> - - - - - 2.18× - - - - - - 4.88× - - - - - - 2.03× + + 4.88× - - K=512 + + K=512 - - DeepSeek-V4 Flash + + DeepSeek-V4 Flash - - + - - + +" clip-path="url(#p64bdd76c9c)" style="fill: #edf5df; stroke: #edf5df; stroke-linejoin: miter"/> - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - - - - - - - - - - + + - - + + - - + + - - + + - - + + - - + - - - - - 1.00× - - - - - - 2.16× - - - - - - 1.54× - - - + +" clip-path="url(#p64bdd76c9c)" style="fill: #579600"/> - - 1.81× + + 1.00× - - + +" clip-path="url(#p64bdd76c9c)" style="fill: #7395ab"/> - - 2.20× + + 2.16× - - + +" clip-path="url(#p64bdd76c9c)" style="fill: #386781"/> - - 4.87× + + 1.54× - - + +" clip-path="url(#p64bdd76c9c)" style="fill: #64748b"/> - - 2.13× + + 4.87× - - K=1024 + + K=1024 - - DeepSeek-V4 Pro + + DeepSeek-V4 Pro - - + - - + +" clip-path="url(#p554de4aea7)" style="fill: #edf5df; stroke: #edf5df; stroke-linejoin: miter"/> - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - - - - - - - - - - + + - - + + - - + + - - + + - - + + - - + - - - - - 1.00× - - - - - - 1.78× - - - - - - 1.37× - - - + +" clip-path="url(#p554de4aea7)" style="fill: #579600"/> - - 1.58× + + 1.00× - - + +" clip-path="url(#p554de4aea7)" style="fill: #7395ab"/> - - 1.93× + + 1.78× - - + +" clip-path="url(#p554de4aea7)" style="fill: #386781"/> - - 5.25× + + 1.37× - - + +" clip-path="url(#p554de4aea7)" style="fill: #64748b"/> - - 2.85× + + 5.25× - - K=2048 + + K=2048 - - DeepSeek-V3.2 + + DeepSeek-V3.2 - - One view of the competition — and the GVR evolution - - - Geometric-mean kernel time relative to GVR V2 · shorter is faster · B200 / FP32 + + The GVR evolution: V1, V2, and radix CUDA - - Same workloads within each panel. GVR V2 (PR #19076) = 1.00×. + + Geometric-mean kernel time relative to GVR V2 · shorter is faster · B200 / FP32 - - Temporal GVR: R0 threshold ladder and tiered execution. V2: current-row self-sampling. + + Same workloads within each panel. GVR V2 (PR #19076) = 1.00×. - - SGLang includes plan + transform. + + GVR V1: R0 threshold ladder and tiered execution. V2: current-row self-sampling. - - + + - - + + - - + + diff --git a/docs/source/blogs/media/gvr_v2/summary.json b/docs/source/blogs/media/gvr_v2/summary.json index d7e44f1204c4..ed5588cc9cb5 100644 --- a/docs/source/blogs/media/gvr_v2/summary.json +++ b/docs/source/blogs/media/gvr_v2/summary.json @@ -9,28 +9,6 @@ "commit": "be1b9885e8df9bf070e8cb68459e24a7119afaa9" }, "overall": { - "sglang": { - "cases": 9515, - "geomean": 1.7014384894837788, - "minimum": 0.9428939906877946, - "p5": 1.3001369745640126, - "p95": 2.317691250588399, - "wins": 9508, - "win_percent": 99.92643194955335, - "baseline_median_us": 14.365, - "gvr_median_us": 9.61 - }, - "flashinfer": { - "cases": 9515, - "geomean": 2.062996980118572, - "minimum": 1.2160371452420702, - "p5": 1.4397936353872656, - "p95": 3.2003547933365404, - "wins": 9515, - "win_percent": 100, - "baseline_median_us": 16.902, - "gvr_median_us": 9.61 - }, "radix_cuda": { "cases": 9746, "geomean": 5.051863720455904, @@ -41,17 +19,6 @@ "win_percent": 100, "baseline_median_us": 46.3535, "gvr_median_us": 9.6435 - }, - "deepselect": { - "cases": 9746, - "geomean": 2.4246256183291397, - "minimum": 0.8345965469121953, - "p5": 1.2680811414029267, - "p95": 5.269482214016592, - "wins": 9709, - "win_percent": 99.620357069567, - "baseline_median_us": 26.854, - "gvr_median_us": 9.6435 } }, "comparison_common_cases": { @@ -62,10 +29,7 @@ "gvr_v2": 1.0, "temporal_r0": 2.08799443828557, "temporal_tiered": 1.5270656764856136, - "sglang": 1.832846308120955, - "flashinfer": 2.177976616444322, - "radix_cuda": 4.875738163985888, - "deepselect": 2.0333546984325714 + "radix_cuda": 4.875738163985888 } }, "pro": { @@ -75,50 +39,22 @@ "gvr_v2": 1.0, "temporal_r0": 2.155315379850125, "temporal_tiered": 1.54320332519381, - "sglang": 1.8110566539219024, - "flashinfer": 2.202184109396619, - "radix_cuda": 4.871976103268161, - "deepselect": 2.127220937729447 + "radix_cuda": 4.871976103268161 } }, "v32": { - "cases": 4466, - "layers": 58, + "cases": 4697, + "layers": 61, "latency_relative_to_v2": { "gvr_v2": 1.0, - "temporal_r0": 1.780045220393957, - "temporal_tiered": 1.370402573082146, - "sglang": 1.5766773265824163, - "flashinfer": 1.9260906164150302, - "radix_cuda": 5.251958628200303, - "deepselect": 2.8495190179213177 + "temporal_r0": 1.7817473025441366, + "temporal_tiered": 1.3723454906900026, + "radix_cuda": 5.250852136354158 } } }, "by_model": { "flash": { - "sglang": { - "cases": 2079, - "geomean": 1.832846308120955, - "minimum": 1.077920656634747, - "p5": 1.4549824545771106, - "p95": 2.6442971958910717, - "wins": 2079, - "win_percent": 100, - "baseline_median_us": 11.911, - "gvr_median_us": 6.608 - }, - "flashinfer": { - "cases": 2079, - "geomean": 2.177976616444322, - "minimum": 1.3678796169630645, - "p5": 1.7868236472748813, - "p95": 3.0966706173286083, - "wins": 2079, - "win_percent": 100, - "baseline_median_us": 15.267, - "gvr_median_us": 6.608 - }, "radix_cuda": { "cases": 2079, "geomean": 4.875738163985888, @@ -129,42 +65,9 @@ "win_percent": 100, "baseline_median_us": 39.606, "gvr_median_us": 6.608 - }, - "deepselect": { - "cases": 2079, - "geomean": 2.0333546984325714, - "minimum": 0.8345965469121953, - "p5": 1.2718755476500327, - "p95": 3.58100364778223, - "wins": 2059, - "win_percent": 99.03799903799904, - "baseline_median_us": 16.634, - "gvr_median_us": 6.608 } }, "pro": { - "sglang": { - "cases": 2970, - "geomean": 1.8110566539219024, - "minimum": 0.9428939906877946, - "p5": 1.4159648911660379, - "p95": 2.639499335056157, - "wins": 2963, - "win_percent": 99.76430976430977, - "baseline_median_us": 12.790500000000002, - "gvr_median_us": 6.979 - }, - "flashinfer": { - "cases": 2970, - "geomean": 2.202184109396619, - "minimum": 1.2160371452420702, - "p5": 1.7908103368572619, - "p95": 3.139525524746378, - "wins": 2970, - "win_percent": 100, - "baseline_median_us": 15.795, - "gvr_median_us": 6.979 - }, "radix_cuda": { "cases": 2970, "geomean": 4.871976103268161, @@ -175,42 +78,9 @@ "win_percent": 100, "baseline_median_us": 42.3375, "gvr_median_us": 6.979 - }, - "deepselect": { - "cases": 2970, - "geomean": 2.127220937729447, - "minimum": 0.863119682677618, - "p5": 1.2984786476378885, - "p95": 3.7923390954150102, - "wins": 2953, - "win_percent": 99.42760942760943, - "baseline_median_us": 18.569499999999998, - "gvr_median_us": 6.979 } }, "v32": { - "sglang": { - "cases": 4466, - "geomean": 1.5766773265824163, - "minimum": 1.0017473532737178, - "p5": 1.2598374022022603, - "p95": 2.0360758744487986, - "wins": 4466, - "win_percent": 100, - "baseline_median_us": 17.1005, - "gvr_median_us": 10.7775 - }, - "flashinfer": { - "cases": 4466, - "geomean": 1.9260906164150302, - "minimum": 1.2687127188762748, - "p5": 1.3887920766440032, - "p95": 3.35022468036877, - "wins": 4466, - "win_percent": 100, - "baseline_median_us": 18.2675, - "gvr_median_us": 10.7775 - }, "radix_cuda": { "cases": 4697, "geomean": 5.250852136354158, @@ -221,42 +91,9 @@ "win_percent": 100, "baseline_median_us": 49.974, "gvr_median_us": 10.768 - }, - "deepselect": { - "cases": 4697, - "geomean": 2.8471544583323984, - "minimum": 1.1209530738450346, - "p5": 1.2609337008410433, - "p95": 6.136549264193189, - "wins": 4697, - "win_percent": 100, - "baseline_median_us": 45.325, - "gvr_median_us": 10.768 } } }, - "sglang_transform_only": { - "cases": 9515, - "geomean": 1.4571889153853919, - "minimum": 0.9224298976795349, - "p5": 1.123068045548716, - "p95": 2.1337606011346444, - "wins": 9455, - "win_percent": 99.36941671045717, - "baseline_median_us": 12.397, - "gvr_median_us": 9.61 - }, - "deepselect_bf16": { - "cases": 9746, - "geomean": 1.4046594964449852, - "minimum": 0.5546046749265552, - "p5": 0.9265655269109043, - "p95": 2.7501870173571765, - "wins": 8384, - "win_percent": 86.02503591216909, - "baseline_median_us": 14.144, - "gvr_median_us": 9.661 - }, "temporal_vs_v2": { "temporal_r0": { "cases": 9746, @@ -292,25 +129,20 @@ "average_percent": 41.56601571959186, "peak_percent": 77.81571160254971 }, - "sglang": { + "temporal_r0": { "points": 9, - "average_percent": 24.722370525640997, - "peak_percent": 41.20468486380641 + "average_percent": 20.189567701246013, + "peak_percent": 40.6975234111354 }, - "flashinfer": { + "temporal_tiered": { "points": 9, - "average_percent": 17.530384259598836, - "peak_percent": 31.973142176533667 + "average_percent": 26.123944119758303, + "peak_percent": 63.276309173607764 }, "radix_cuda": { "points": 9, "average_percent": 7.73037106360671, "peak_percent": 16.904373664943286 - }, - "deepselect": { - "points": 9, - "average_percent": 21.163519529351618, - "peak_percent": 64.37510759356354 } }, "pro": { @@ -319,52 +151,42 @@ "average_percent": 39.00405637364329, "peak_percent": 68.39789370398464 }, - "sglang": { + "temporal_r0": { "points": 9, - "average_percent": 24.712160489392073, - "peak_percent": 41.256004328890995 + "average_percent": 19.692718835069805, + "peak_percent": 36.52586883421088 }, - "flashinfer": { + "temporal_tiered": { "points": 9, - "average_percent": 15.824095934200326, - "peak_percent": 31.904758031346407 + "average_percent": 25.39201270408693, + "peak_percent": 58.92620571524122 }, "radix_cuda": { "points": 9, "average_percent": 7.832445928048165, "peak_percent": 16.38668927402192 - }, - "deepselect": { - "points": 9, - "average_percent": 19.2699960099983, - "peak_percent": 56.36077032065703 } }, "v32": { "gvr_v2": { "points": 7, - "average_percent": 41.46850757505675, - "peak_percent": 66.471336883724 + "average_percent": 41.47747500688756, + "peak_percent": 66.53750601976955 }, - "sglang": { + "temporal_r0": { "points": 7, - "average_percent": 27.070908293403967, - "peak_percent": 37.95389274750273 + "average_percent": 22.1752578474719, + "peak_percent": 34.125595313436996 }, - "flashinfer": { + "temporal_tiered": { "points": 7, - "average_percent": 15.121383923634395, - "peak_percent": 20.294356158047773 + "average_percent": 27.779057298223755, + "peak_percent": 51.13105668384031 }, "radix_cuda": { "points": 7, - "average_percent": 8.288326206074565, - "peak_percent": 17.77349626674448 - }, - "deepselect": { - "points": 7, - "average_percent": 14.419005752929042, - "peak_percent": 34.77047716555635 + "average_percent": 8.28762774707847, + "peak_percent": 17.75730356940984 } } } diff --git a/docs/source/blogs/media/gvr_v2/v32_timings.csv.gz b/docs/source/blogs/media/gvr_v2/v32_timings.csv.gz index 6dae4e58d413ca7a75ae820ddb40799a5efb2a96..b5ef92ff0946afc106fc442ae1c9914d66c71e08 100644 GIT binary patch literal 43676 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 Q?*I4y0o!+Lw`ZUO0M4b)9smFU literal 124154 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 diff --git a/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md b/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md index 805127868362..dd36b1a7c744 100644 --- a/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md +++ b/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md @@ -13,11 +13,11 @@ Selecting 1,024 INT32 indices from 131,072 FP32 scores writes just **4 KiB of ou GVR V2 makes each full-row pass more useful without depending on the previous decode step to predict the current one. **Self-sampling estimates where the current row's Top-K boundary lies; multi-thresholding derives many exact population counts from one classification pass.** Together, they concentrate exact refinement on the small group of scores still competing for the final slots. Removing the Top-K prior also lets prefill and decode share a streaming selection core, with phase differences handled by row adapters. -On B200, this design delivers **5.05× geometric-mean speedup over TensorRT-LLM radix CUDA and 1.70× over SGLang v2**, with **2.06× over FlashInfer and 2.42× over DeepSelect FP32**. The workloads span DeepSeek-V3.2, DeepSeek-V4 Flash, and DeepSeek-V4 Pro indexers. The SGLang result includes planning; the transform-only comparison is **1.46×**. +On B200, this design delivers **5.05× geometric-mean speedup over TensorRT-LLM radix CUDA**, with **1.95× over GVR V1 R0 and 1.46× over tiered GVR V1**. All comparisons use the same 9,746 workloads spanning DeepSeek-V3.2, DeepSeek-V4 Flash, and DeepSeek-V4 Pro indexers. -![Three horizontal bar-chart panels compare GVR V2, temporal GVR R0 and tiered versions, SGLang, FlashInfer, radix CUDA, and DeepSelect FP32 on common cases per model. GVR V2 is 1.00; shorter bars mean less kernel time.](../media/gvr_v2/speedup.svg) +![Three horizontal bar-chart panels compare GVR V2, GVR V1 R0, tiered GVR V1, and TensorRT-LLM radix CUDA on the same cases per model. GVR V2 is 1.00; shorter bars mean less kernel time.](../media/gvr_v2/speedup.svg) -*Figure 1. Kernel time relative to GVR V2, geometrically averaged over the same workloads within each model; shorter is faster. The temporal bars show the R0 and tiered implementations. SGLang includes planning.* +*Figure 1. Kernel time relative to GVR V2, geometrically averaged over the same workloads within each model; shorter is faster. The temporal bars show the R0 and tiered GVR V1 implementations. All four implementations cover the full 9,746-case grid.* **The operator contract.** Given FP32 indexer scores and valid-row metadata, Top-K returns unordered INT32 positions for sparse attention's KV selection. With finite scores and at least $K$ entries, it selects an exact value multiset through $K$ distinct indices; ties can choose different positions. [Enablement](#enable-gvr-v2) lists hardware, shape, and configuration requirements. @@ -34,7 +34,7 @@ On B200, this design delivers **5.05× geometric-mean speedup over TensorRT-LLM - [Multi-Thresholding: Make Each Full-Row Pass Count](#multi-thresholding-make-each-full-row-pass-count) - [Mapping Selection to Blackwell](#mapping-selection-to-blackwell) - **[Performance and Roofline Analysis](#performance-and-roofline-analysis)** - - [Performance Against Four Baselines](#performance-against-four-baselines) + - [Performance Against GVR V1 and Radix CUDA](#performance-against-gvr-v1-and-radix-cuda) - [The Roofline Model: Fewer Passes, More Useful Work](#the-roofline-model-fewer-passes-more-useful-work) - **[TensorRT-LLM Integration and Takeaways](#tensorrt-llm-integration-and-takeaways)** - [Decode and Prefill in TensorRT-LLM](#decode-and-prefill-in-tensorrt-llm) @@ -279,7 +279,7 @@ This explains the two sources of performance improvement: a better starting thre ## Performance and Roofline Analysis -### Performance Against Four Baselines +### Performance Against GVR V1 and Radix CUDA #### Benchmark Setup @@ -297,48 +297,35 @@ The benchmarks use FP32 indexer scores from the three models below on NVIDIA B20 | Baseline | Geomean speedup | Minimum speedup | GVR V2 faster | | :--- | ---: | ---: | ---: | -| SGLang v2, plan + transform | **1.70×** | 0.94× | 99.93% | -| FlashInfer 0.6.14 `top_k` | **2.06×** | 1.22× | 100.00% | +| GVR V1 R0 | **1.95×** | 0.999× | 99.99% | +| GVR V1 tiered streaming | **1.46×** | 0.689× | 99.57% | | TensorRT-LLM radix CUDA dispatch | **5.05×** | 1.34× | 100.00% | -| DeepSelect v1.0.0 FP32 | **2.42×** | 0.83× | 99.62% | -The minimum column retains individual regressions. Figure 1 shows the model-level comparison on the common workloads supported by each implementation. +All three comparisons use the same 9,746 cases. The minimum column retains individual regressions, including the temporal V1 cases where V2 is slower. Figure 1 shows the model-level comparison over this same workload grid. #### The Gains Extend Beyond an Average -The gains over SGLang and DeepSelect FP32 vary with the model and shape. Figure 7 compares GVR V2 with SGLang, and Figure 8 compares it with DeepSelect FP32. Together, the heatmaps show where each advantage appears across row lengths and batch sizes. +The gains over TensorRT-LLM radix CUDA vary with the model and shape. Figure 7 shows V2's speedup across every captured row length and all 11 batch sizes, with one panel per model. -![Three heatmaps of GVR V2 speedup over SGLang for every captured row-length bucket and all eleven batch sizes, averaged geometrically across layers.](../media/gvr_v2/sglang_map.svg) +![Three heatmap panels of GVR V2 speedup over TensorRT-LLM radix CUDA across captured row lengths and all eleven batch sizes, averaged geometrically across all layers in each model.](../media/gvr_v2/radix_cuda_map.svg) -*Figure 7. SGLang plan + transform time divided by GVR V2 time, geometrically averaged across layers at each shape. A value of 1.0 means equal performance. Figures 7 and 8 share the same color scale; row lengths are rounded in the axis labels.* +*Figure 7. TensorRT-LLM radix CUDA time divided by GVR V2 time, geometrically averaged across layers at each shape. The panels share a 1–21× color scale; 1.0 means equal performance. Row lengths are rounded in the axis labels, and cell labels round to one decimal place.* -Long rows at intermediate batch sizes show particularly strong gains: **V4 Pro reaches 4.69× at $N=262{,}127$, $B=64$**. This is the strongest shape-average result in the grid; most regions are around 1.3–2.0×. +The strongest shape-average gains occur around 4K scores at $B=1024$: **19.85× for V4 Flash and 20.18× for V4 Pro** at $N=4{,}099$, and **10.96× for V3.2** at $N=4{,}111$. The Pro result is the largest shape-average speedup in the grid. -DeepSelect FP32 shows a different pattern: V2's strongest gains move toward long rows at small batch sizes, especially for V3.2. - -![Three heatmaps of GVR V2 speedup over DeepSelect FP32 across row lengths and all eleven batch sizes, using the same color scale as the SGLang comparison.](../media/gvr_v2/deepselect_map.svg) - -*Figure 8. DeepSelect FP32 time divided by GVR V2 time, geometrically averaged across layers at each shape. The layout and color scale match Figure 7: values above 1.0 favor V2, and darker teal indicates a larger gain. Cell labels round to one decimal place.* - -For **V3.2, the gain reaches 7.58× around 128K scores at batch size 1** and stays above 6× at that row length through batch size 8. Flash and Pro also show broad gains, with peaks of **4.26×** and **4.40×**. The narrowest margin appears for the longest Flash rows at batch size 128, where the shape average is approximately parity (0.993×). - -These patterns identify useful operating regions. The native API contracts below explain which work is included in each comparison. +The advantage extends across all 275 plotted shapes. The smallest shape-average speedups are **1.55× for Flash, 1.52× for Pro, and 3.50× for V3.2**. These averages summarize layers at each shape; the overall table retains the lower minimum across individual workload cases. #### What Explains the Differences -**SGLang.** The **1.70×** comparison includes both planning and transformation. Serving integrations can amortize planning across layers; against transformation alone, V2 achieves **1.46×** geometric-mean speedup and wins **99.37%** of comparisons. - -**FlashInfer.** Its `top_k` API returns FP32 values and INT64 indices, while GVR V2 returns INT32 indices only. The **2.06×** result includes that additional output work and FlashInfer's scan of the padded row. - **TensorRT-LLM radix CUDA.** The baseline uses the production dispatcher, including short-row insertion and long-row split-work paths. V2's **5.05×** advantage is consistent with reducing full-row selection passes and matching execution to the workload. -**DeepSelect.** The FP32 comparison requests unsorted INT32 indices. Its $K=2048$ path emphasizes correctness coverage, which helps explain the larger **2.85×** gap on V3.2. +**Temporal GVR V1.** Both R0 and tiered streaming already combine multiple admission thresholds. V2 replaces the temporal prior with current-row calibration and couples exact bin counts to crossing-bin refinement. Its **1.95× and 1.46×** gains compare complete implementations, including their execution policies; they do not isolate the contribution of self-sampling alone. #### Latency Across Row Length and Batch Size -![Cold kernel latency for all five implementations versus valid row length, with separate panels for three models and batch sizes 1 and 1024.](../media/gvr_v2/latency.svg) +![Cold kernel latency for GVR V2, GVR V1 R0, tiered GVR V1, and TensorRT-LLM radix CUDA versus valid row length, with separate panels for three models and batch sizes 1 and 1024.](../media/gvr_v2/latency.svg) -*Figure 9. Mean cold kernel time across matching layers. Each row is a model; the columns contrast batch sizes 1 and 1,024. The solid line shows GVR V2; dashed lines show baselines measured in separate runs. Both axes are logarithmic; 1K means 1,024.* +*Figure 8. Mean cold kernel time across all captured layers: 21 for Flash, 30 for Pro, and 61 for V3.2. Each row is a model; the columns contrast batch sizes 1 and 1,024. The solid line shows GVR V2; dashed lines show baselines measured in separate runs. Both axes are logarithmic; 1K means 1,024.* At $B=1$, keeping a short row in registers and exposing parallelism within a longer row matter more than saturating HBM. At $B=1024$, streaming throughput becomes more visible. The different shapes of these curves are why a single average cannot identify every useful operating region. @@ -364,15 +351,15 @@ P_{\mathrm{theory}}(I)=\min(37.225,8I),\qquad P_{\mathrm{calibrated}}(I)=\min(37.047,6.912I). $$ -The calibrated limits are **6.912 TB/s** sustained read bandwidth and **37.047 Tcompare/s** semantic comparison throughput. Their **5.36 compare/byte** intersection exceeds the maximum ideal Top-K intensity by over 21×, placing the workload band on Figure 10A's bandwidth slope. +The calibrated limits are **6.912 TB/s** sustained read bandwidth and **37.047 Tcompare/s** semantic comparison throughput. Their **5.36 compare/byte** intersection exceeds the maximum ideal Top-K intensity by over 21×, placing the workload band on Figure 9A's bandwidth slope. -![A clean two-level roofline: the full B200 hardware model highlights Top-K's narrow bandwidth-limited band; three linear-scale Pareto curve panels compare GVR V2 and four baselines at batch 1024, with GVR V2 highlighted in green.](../media/gvr_v2/roofline.svg) +![A two-level roofline: the full B200 hardware model highlights Top-K's narrow bandwidth-limited band; three linear-scale Pareto curve panels compare GVR V2, GVR V1 R0, tiered GVR V1, and TensorRT-LLM radix CUDA at batch 1024, with GVR V2 highlighted in green.](../media/gvr_v2/roofline.svg) -*Figure 10.* A: theoretical and calibrated roofs. B: Pareto curves at $B=1024$, plotting useful throughput $P=BN/t$ against ideal intensity $I=N/[4(N+K)]$. Green highlights V2; the dotted line is the calibrated bandwidth roof. All kernels share $Q_{\min}$; extra work remains in measured time. This measures useful work relative to ideal traffic, not actual DRAM utilization. +*Figure 9.* A: theoretical and calibrated roofs. B: Pareto curves at $B=1024$, plotting useful throughput $P=BN/t$ against ideal intensity $I=N/[4(N+K)]$. Green highlights V2; the dotted line is the calibrated bandwidth roof. All kernels share $Q_{\min}$; extra work remains in measured time. This measures useful work relative to ideal traffic, not actual DRAM utilization. #### Compare Pareto Curves and Reachable Rates -Each operator's **Pareto curve** in Figure 10B is its measured intensity–throughput trace across row lengths at $B=1024$. At fixed $N$ and $K$, every implementation has the same horizontal position; a faster kernel moves **upward**, toward the calibrated roof. Figure 9 retains the contrasting single-row view, and Figures 7 and 8 cover all 11 batch sizes. +Each operator's **Pareto curve** in Figure 9B is its measured intensity–throughput trace across row lengths at $B=1024$. At fixed $N$ and $K$, every implementation has the same horizontal position; a faster kernel moves **upward**, toward the calibrated roof. Figure 8 retains the contrasting single-row view, and Figure 7 covers all 11 batch sizes. The **reachable rate** is useful throughput divided by the calibrated roof, expressed as a percentage. Throughout the plotted bandwidth branch, its underlying ratio simplifies to @@ -381,19 +368,18 @@ $$ =\frac{Q_{\min}}{\mathrm{BW}\,t}. $$ -It measures efficiency relative to the ideal traffic bound. The table compares **average / peak reachable rate** along each Pareto curve: the average weights the plotted intensity points equally, and the peak is their maximum. Both use the same layer-averaged timings as Figure 10B. +It measures efficiency relative to the ideal traffic bound. The table compares **average / peak reachable rate** along each Pareto curve: the average weights the plotted intensity points equally, and the peak is their maximum. Both use the same layer-averaged timings as Figure 9B. | Operator | V4 Flash | V4 Pro | V3.2 | | :--- | ---: | ---: | ---: | | **GVR V2** | **41.6% / 77.8%** | **39.0% / 68.4%** | **41.5% / 66.5%** | -| SGLang, plan + transform | 24.7% / 41.2% | 24.7% / 41.3% | 27.1% / 38.0% | -| FlashInfer | 17.5% / 32.0% | 15.8% / 31.9% | 15.1% / 20.3% | +| GVR V1 R0 | 20.2% / 40.7% | 19.7% / 36.5% | 22.2% / 34.1% | +| GVR V1 tiered streaming | 26.1% / 63.3% | 25.4% / 58.9% | 27.8% / 51.1% | | TensorRT-LLM radix CUDA | 7.7% / 16.9% | 7.8% / 16.4% | 8.3% / 17.8% | -| DeepSelect FP32 | 21.2% / 64.4% | 19.3% / 56.4% | 14.4% / 34.8% | *Each cell shows average / peak.* -GVR V2 leads both measures on all three models: its average reachable rate is **39.0–41.6%**, with peaks of **66.5–77.8%**. SGLang has the highest baseline average across all three models; the highest baseline peak varies by model. On V3.2, SGLang reaches **27.1% / 38.0%**, compared with V2's **41.5% / 66.5%**. On Flash, DeepSelect reaches a **64.4%** peak but averages **21.2%**, while SGLang averages **24.7%**. Reporting both measures captures the best operating point and the performance sustained across the curve. +GVR V2 leads both measures on all three models: its average reachable rate is **39.0–41.6%**, with peaks of **66.5–77.8%**. Tiered GVR V1 is the strongest baseline by both measures, averaging **25.4–27.8%**, with peaks of **51.1–63.3%**. On V3.2, it reaches **27.8% / 51.1%**, compared with V2's **41.5% / 66.5%**. Reporting both measures captures the best operating point and the performance sustained across the curve. #### Interpret the Remaining Gap @@ -419,7 +405,7 @@ TensorRT-LLM separates phase-specific row metadata from shared selection logic. ![Integration diagram: a shared TopK dispatcher feeds decode and prefill row adapters, which reuse GvrMainKernel's streaming selection pipeline; decode also retains register and cluster routes.](../media/gvr_v2/integration.svg) -*Figure 11. Current-row calibration lets both phases enter the same selection core without a temporal-prior lifecycle. The decode arrow shows its streaming route; register and cluster routes remain available under the same output contract. Prefill specializes the streaming implementation at compile time.* +*Figure 10. Current-row calibration lets both phases enter the same selection core without a temporal-prior lifecycle. The decode arrow shows its streaming route; register and cluster routes remain available under the same output contract. Prefill specializes the streaming implementation at compile time.* The adapters preserve each phase's indexing semantics. Decode derives valid prefixes from device KV lengths, multi-token prediction offsets, and compression. Prefill receives `[start, end)` in compressed columns and returns indices relative to `start`. Both write INT32 indices into caller-owned output, with identity indices and `-1` padding for short rows. From 1b363f09d992fcdd5a81e3f12c0240ad70b4a9d6 Mon Sep 17 00:00:00 2001 From: longcheng-nv <243710427+longcheng-nv@users.noreply.github.com> Date: Fri, 18 Sep 2026 01:45:07 +0000 Subject: [PATCH 25/33] [None][doc] Keep a single temporal GVR V1 comparison Signed-off-by: longcheng-nv <243710427+longcheng-nv@users.noreply.github.com> --- docs/source/blogs/media/gvr_v2/README.md | 41 +- docs/source/blogs/media/gvr_v2/evolution.svg | 157 +++-- docs/source/blogs/media/gvr_v2/latency.svg | 490 +++++---------- .../source/blogs/media/gvr_v2/plot_results.py | 41 +- .../source/blogs/media/gvr_v2/provenance.json | 8 +- docs/source/blogs/media/gvr_v2/roofline.svg | 189 ++---- docs/source/blogs/media/gvr_v2/speedup.svg | 575 ++++++++---------- docs/source/blogs/media/gvr_v2/summary.json | 33 - .../media/gvr_v2/temporal_comparison.csv.gz | Bin 81185 -> 50726 bytes ...ampling_Exact_TopK_for_Sparse_Attention.md | 51 +- 10 files changed, 618 insertions(+), 967 deletions(-) diff --git a/docs/source/blogs/media/gvr_v2/README.md b/docs/source/blogs/media/gvr_v2/README.md index a6bb833ecbcd..b5016cf30556 100644 --- a/docs/source/blogs/media/gvr_v2/README.md +++ b/docs/source/blogs/media/gvr_v2/README.md @@ -86,7 +86,7 @@ These percentages preserve the supplied summaries' precision. They are independe | [flash_timings.csv.gz](flash_timings.csv.gz) | 2,079 DeepSeek-V4 Flash cases | | [pro_timings.csv.gz](pro_timings.csv.gz) | 2,970 DeepSeek-V4 Pro cases | | [v32_timings.csv.gz](v32_timings.csv.gz) | 4,697 DeepSeek-V3.2 cases | -| [temporal_comparison.csv.gz](temporal_comparison.csv.gz) | Two temporal GVR observations for each of the same 9,746 cases | +| [temporal_comparison.csv.gz](temporal_comparison.csv.gz) | One GVR V1 observation for each of the same 9,746 cases | | [provenance.json](provenance.json) | Published-file checksums, implementation labels, pairing, and roofline constants | | [summary.json](summary.json) | Recomputed statistics | | [plot_results.py](plot_results.py) | Figure generation | @@ -101,7 +101,7 @@ Measurements use NVIDIA B200, FP32 indexer scores, and batch sizes from 1 to 1,0 Each workload/batch case repeats one captured layer/step score row into distinct batch rows. This controls the input distribution and valid width while measuring batch scaling; it is not a heterogeneous batch of independent serving requests. GVR uses `next_n=1` and sets `max_seq_len` to that case's valid row length times its compression ratio. A serving graph may use a larger stable envelope and choose a different execution plan. The bundled grid does not independently benchmark ragged mixed-length batches, MTP, or prefill. -The primary reference is the hint-free GVR V2 `run_varlen` implementation from [PR #19076](https://github.com/NVIDIA/TensorRT-LLM/pull/19076), measured at its [final public revision](https://github.com/NVIDIA/TensorRT-LLM/commit/be1b9885e8df9bf070e8cb68459e24a7119afaa9). Its FP32 comparisons with GVR V1 R0, tiered GVR V1, and TensorRT-LLM radix CUDA match observations from separate runs by workload identity and batch size, with shape metadata checked where available. All four implementations cover the same 9,746 cases. Baseline times are retained as measured; no aggregate correction factor is applied. These comparisons describe the bundled kernel implementations and workloads, rather than the performance of entire serving frameworks. +The primary reference is the hint-free GVR V2 `run_varlen` implementation from [PR #19076](https://github.com/NVIDIA/TensorRT-LLM/pull/19076), measured at its [final public revision](https://github.com/NVIDIA/TensorRT-LLM/commit/be1b9885e8df9bf070e8cb68459e24a7119afaa9). Its FP32 comparisons with GVR V1 and TensorRT-LLM radix CUDA match observations from separate runs by workload identity and batch size, with shape metadata checked where available. All three implementations cover the same 9,746 cases. Baseline times are retained as measured; no aggregate correction factor is applied. These comparisons describe the bundled kernel implementations and workloads, rather than the performance of entire serving frameworks. The device kernel and host dispatcher at the [main revision audited on September 17, 2026](https://github.com/NVIDIA/TensorRT-LLM/commit/73c70633b2547eedf0c91f85e760aec534f6af84) are byte-identical to those measured for the reference. This establishes source continuity for those files, not a new whole-framework performance measurement. @@ -110,34 +110,32 @@ Figures 1, 3, and 7–9 and their numerical summaries all use this PR #19076 ref | Implementation | Relevant comparison contract | | :--- | :--- | | GVR V2 | FP32 scores, valid row lengths, unordered INT32 indices | -| GVR V1 R0 | Temporal-prior threshold ladder; complete implementation paired by workload and batch | -| GVR V1 tiered streaming | Temporal-prior pivot/rescue admission; complete implementation paired by workload and batch | +| GVR V1 | Temporal-prior pivot/rescue admission; complete implementation paired by workload and batch | | TensorRT-LLM radix CUDA | Production dispatcher, including short-row insertion and long-row split-work paths | -The temporal implementation references appear below. Complete build revisions for the historical radix observations are unavailable in the timing export. +The GVR V1 implementation reference appears below. Complete build revisions for the historical radix observations are unavailable in the timing export. -## Temporal GVR and Algorithm Evolution +## GVR V1 and Algorithm Evolution -The temporal R0 and tiered implementations correspond to public [PR #16457](https://github.com/NVIDIA/TensorRT-LLM/pull/16457) and [PR #16877](https://github.com/NVIDIA/TensorRT-LLM/pull/16877). Both belong to later temporal V1, which already uses multi-threshold admission. R0 builds a histogram over hint-gathered scores, proposes a rung ladder, and obtains exact counts for multiple rungs in one row scan. Tiered streaming uses sampled ladder counts to choose a pivot and rescue rung, then verifies both exactly in a fused count/collect pass. Its short-row and register routes have different execution strategies; Figure 3 sketches the streaming comparison, while its bars measure complete implementations. +The GVR V1 baseline is the tiered temporal implementation from public [PR #16877](https://github.com/NVIDIA/TensorRT-LLM/pull/16877), recorded in the `temporal_tiered_us` column. It already uses multi-threshold admission: sampled ladder counts choose a pivot and rescue rung, then a fused count/collect pass verifies both exactly. Its short-row and register routes have different execution strategies; Figure 3 sketches the streaming comparison, while its bars measure complete implementations. -The original scalar/secant search is historical context, not the algorithm represented by the temporal bars. V2 changes calibration to packed/vectorized current-row windows and couples it to dense verification-bin counts and crossing-bin refinement; multi-thresholding itself is not a V2-only contribution. The temporal comparisons span full implementations, including scheduling and integration; they are not an isolated self-sampling ablation. The public temporal sources at the article's implementation reference are [the R0 kernel](https://github.com/NVIDIA/TensorRT-LLM/blob/be1b9885e8df9bf070e8cb68459e24a7119afaa9/tensorrt_llm/_torch/cute_dsl_kernels/blackwell/top_k/gvr_topk_decode.py) and [tiered streaming](https://github.com/NVIDIA/TensorRT-LLM/blob/be1b9885e8df9bf070e8cb68459e24a7119afaa9/tensorrt_llm/_torch/cute_dsl_kernels/blackwell/top_k/gvr_topk_decode_tp.py). +V2 changes calibration to packed/vectorized current-row windows and couples it to dense verification-bin counts and crossing-bin refinement; multi-thresholding itself is not a V2-only contribution. The GVR V1 comparison spans full implementations, including scheduling and integration; it is not an isolated self-sampling ablation. The public source at the article's implementation reference is [the GVR V1 kernel](https://github.com/NVIDIA/TensorRT-LLM/blob/be1b9885e8df9bf070e8cb68459e24a7119afaa9/tensorrt_llm/_torch/cute_dsl_kernels/blackwell/top_k/gvr_topk_decode_tp.py). -Figure 3 computes each implementation's speedup directly from its paired radix times. The geometric means are 2.586546× for temporal R0, 3.471858× for tiered temporal GVR, and 5.051864× for V2. Direct temporal/V2 time ratios are 1.953131× and 1.455089×. `summary.json` records these under `evolution_vs_radix` and `temporal_vs_v2`. Historical R0 observations for V3.2 lack explicit N/K metadata; workload identity supplies the join for those records. +Figure 3 computes each implementation's speedup directly from its paired radix times. The geometric means are 3.471858× for GVR V1 and 5.051864× for V2. The direct GVR V1/V2 time ratio is 1.455089×. `summary.json` records these under `evolution_vs_radix` and `temporal_vs_v2`. The direct V2 comparison also exposes the lower end of the measured speedup distribution: -| Temporal baseline | V2 speedup, geometric mean | V2 speedup, P5 | V2 wins / cases | V2 win rate | +| Baseline | V2 speedup, geometric mean | V2 speedup, P5 | V2 wins / cases | V2 win rate | | :--- | ---: | ---: | ---: | ---: | -| R0 | 1.953131× | 1.348807× | 9,745 / 9,746 | 99.989739% | -| Tiered | 1.455089× | 1.095922× | 9,704 / 9,746 | 99.569054% | +| GVR V1 | 1.455089× | 1.095922× | 9,704 / 9,746 | 99.569054% | -These P5 values are percentiles across per-case `temporal_us / gvr_v2_us` mean-time ratios, not runtime tail latencies or percentiles of individual timing repetitions. They describe the bundled case distribution and do not establish a worst-case latency guarantee. +The P5 value is the fifth percentile across per-case `temporal_tiered_us / gvr_v2_us` mean-time ratios, not a runtime tail latency or a percentile of individual timing repetitions. It describes the bundled case distribution and does not establish a worst-case latency guarantee. ## Aggregation and Coverage Speedup is the geometric mean of per-case `baseline_us / gvr_v2_us` ratios. Every case has equal weight. A win is a ratio strictly above one; minima and percentiles also use individual ratios of case-level mean durations. `_stats` in `plot_results.py` calls `numpy.percentile` without a method override, using its default linear interpolation between adjacent sorted ratios at fractional index `(cases - 1)*p/100` for percentile `p`. No slower case is discarded. -Figure 1 uses the same cases for all four implementations within each model: 2,079 Flash, 2,970 Pro, and 4,697 V3.2 cases, totaling 9,746. V2 is fixed at 1.00; shorter bars mean less time. These values are recorded under `comparison_common_cases`. The article's overall and per-model tables use this same full paired coverage. +Figure 1 uses the same cases for all three implementations within each model: 2,079 Flash, 2,970 Pro, and 4,697 V3.2 cases, totaling 9,746. V2 is fixed at 1.00; shorter bars mean less time. These values are recorded under `comparison_common_cases`. The article's overall and per-model tables use this same full paired coverage. The latency and roofline curves use arithmetic-mean durations over all captured layers at each row-length/batch point: 21 layers for Flash, 30 for Pro, and 61 for V3.2. All layers at each plotted point have the same valid width. The radix CUDA comparison heatmap (Figure 7) instead geometrically averages per-layer `radix_cuda_us / gvr_v2_us` ratios at each shape, using the same layers. It contains 275 cells: 99 each for Flash and Pro, and 77 for V3.2, covering all 11 batch sizes. The panels share a 1–21× color scale with parity at 1.0, and cell labels round to one decimal place. The cell values range from 1.522571× to 20.182551×, with no clipping by the color scale. A shape average can hide variation among individual cases. @@ -149,19 +147,18 @@ The article uses Figure 1 for the model-level comparison. The following table us | Baseline | V4 Flash, $K=512$ | V4 Pro, $K=1024$ | V3.2, $K=2048$ | | :--- | ---: | ---: | ---: | -| GVR V1 R0 | 2.09× | 2.16× | 1.78× | -| GVR V1 tiered streaming | 1.53× | 1.54× | 1.37× | +| GVR V1 | 1.53× | 1.54× | 1.37× | | TensorRT-LLM radix CUDA | 4.88× | 4.87× | 5.25× | -*Each model column uses the same workloads for all three baselines.* +*Each model column uses the same workloads for both baselines.* For a concrete large-batch slice, the following times are at $B=1024$ and $N\approx131{,}072$, averaged over the same layers as Figure 8: -| Model | GVR V2 | GVR V1 R0 | GVR V1 tiered | Radix CUDA | -| :--- | ---: | ---: | ---: | ---: | -| V4 Flash | **113.1 µs** | 269.3 µs | 138.4 µs | 461.3 µs | -| V4 Pro | **132.8 µs** | 233.4 µs | 146.1 µs | 477.7 µs | -| V3.2 | **123.9 µs** | 243.7 µs | 166.0 µs | 496.7 µs | +| Model | GVR V2 | GVR V1 | Radix CUDA | +| :--- | ---: | ---: | ---: | +| V4 Flash | **113.1 µs** | 138.4 µs | 461.3 µs | +| V4 Pro | **132.8 µs** | 146.1 µs | 477.7 µs | +| V3.2 | **123.9 µs** | 166.0 µs | 496.7 µs | ## Roofline Definitions diff --git a/docs/source/blogs/media/gvr_v2/evolution.svg b/docs/source/blogs/media/gvr_v2/evolution.svg index 62cb3c56f8f7..b25d7afddeb7 100644 --- a/docs/source/blogs/media/gvr_v2/evolution.svg +++ b/docs/source/blogs/media/gvr_v2/evolution.svg @@ -40,7 +40,7 @@ Q 14.57856 102.27456 14.57856 105.984 L 14.57856 161.6256 Q 14.57856 165.33504 19.4976 165.33504 z -" clip-path="url(#p5b26b816df)" style="fill: #f2eef9; stroke: #ccd5dd; stroke-width: 0.8; stroke-linejoin: miter"/> +" clip-path="url(#p5b26b816df)" style="fill: #eef3f7; stroke: #ccd5dd; stroke-width: 0.8; stroke-linejoin: miter"/> +" clip-path="url(#p5b26b816df)" style="fill: #eef3f7; stroke: #ccd5dd; stroke-width: 0.8; stroke-linejoin: miter"/> +" clip-path="url(#p5b26b816df)" style="fill: #eef3f7; stroke: #ccd5dd; stroke-width: 0.8; stroke-linejoin: miter"/> - Later temporal V1: hint calibration + multi-thresholding + GVR V1 (temporal hint): calibration + multi-thresholding Previous indices @@ -183,19 +183,19 @@ L 424.616412 275.1088 - - + @@ -204,90 +204,90 @@ L 0 3.5 " style="stroke: #000000; stroke-width: 0.8"/> - + - 0 + 0 - + - + - 1 + 1 - + - + - 2 + 2 - + - + - 3 + 3 - + - + - 4 + 4 - + - + - 5 + 5 - Speedup over radix CUDA + Speedup over radix CUDA @@ -299,97 +299,76 @@ L -3.5 0 " style="stroke: #000000; stroke-width: 0.8"/> - + - Temporal R0 + GVR V1 - + - Temporal tiered - - - - - - - - - - GVR V2 + GVR V2 - +" clip-path="url(#p27f41e3bb8)" style="fill: #386781"/> - +" clip-path="url(#p27f41e3bb8)" style="fill: #579600"/> - + - - - + + 3.47× - 2.59× + 5.05× - 3.47× - - - 5.05× - - - Measured evolution + Measured evolution - + From temporal prediction to current-row calibration - + Design goals: improve the practical performance floor and average latency; remove the temporal prior's framework lifecycle. - - Flows show streaming paths; bars compare complete R0, tiered temporal, and V2 implementations. + + Flows show streaming paths; bars compare complete GVR V1 and GVR V2 implementations. - - + + diff --git a/docs/source/blogs/media/gvr_v2/latency.svg b/docs/source/blogs/media/gvr_v2/latency.svg index c1a7405efbb8..d04e9d48e827 100644 --- a/docs/source/blogs/media/gvr_v2/latency.svg +++ b/docs/source/blogs/media/gvr_v2/latency.svg @@ -266,42 +266,6 @@ z - - - - - - - - - - - - - - - - - - + - + - + @@ -413,12 +377,12 @@ L 453.345546 50.76 - + - + @@ -428,12 +392,12 @@ L 528.323995 50.76 - + - + @@ -443,12 +407,12 @@ L 603.302444 50.76 - + - + @@ -458,12 +422,12 @@ L 678.280893 50.76 - + - + @@ -478,12 +442,12 @@ L 753.259342 50.76 - + - + @@ -493,12 +457,12 @@ L 768.243437 188.65386 - + - + @@ -508,12 +472,12 @@ L 768.243437 124.306739 - + - + @@ -523,140 +487,140 @@ L 768.243437 59.959617 - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -666,7 +630,7 @@ L 768.243437 59.959617 Mean kernel time (µs) - + - - - - - - - - - - - - - - - + - + - + - + @@ -798,12 +739,12 @@ L 57.672819 289.144158 - + - + @@ -813,12 +754,12 @@ L 132.651268 289.144158 - + - + @@ -828,12 +769,12 @@ L 207.629717 289.144158 - + - + @@ -843,12 +784,12 @@ L 282.608166 289.144158 - + - + @@ -863,12 +804,12 @@ L 357.586614 289.144158 - + - + @@ -878,77 +819,77 @@ L 372.57071 379.333894 - + - + - + - + - + - + - + - + - + - + - + @@ -958,7 +899,7 @@ L 372.57071 379.333894 Mean kernel time (µs) - + - - - - - - - - - - - - - - - + - + - + - + @@ -1090,12 +1008,12 @@ L 453.345546 289.144158 - + - + @@ -1105,12 +1023,12 @@ L 528.323995 289.144158 - + - + @@ -1120,12 +1038,12 @@ L 603.302444 289.144158 - + - + @@ -1135,12 +1053,12 @@ L 678.280893 289.144158 - + - + @@ -1155,12 +1073,12 @@ L 753.259342 289.144158 - + - + @@ -1170,12 +1088,12 @@ L 768.243437 429.255724 - + - + @@ -1185,12 +1103,12 @@ L 768.243437 364.402608 - + - + @@ -1200,140 +1118,140 @@ L 768.243437 299.549491 - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -1343,7 +1261,7 @@ L 768.243437 299.549491 Mean kernel time (µs) - + - - - - - - - - - - - - - - - + - + - + - + @@ -1475,12 +1370,12 @@ L 56.564957 527.528317 - + - + @@ -1490,12 +1385,12 @@ L 161.900208 527.528317 - + - + @@ -1505,12 +1400,12 @@ L 267.235459 527.528317 - + - + @@ -1525,12 +1420,12 @@ L 372.57071 527.528317 - + - + @@ -1540,63 +1435,63 @@ L 372.57071 633.024093 - + - + - + - + - + - + - + - + - + @@ -1606,7 +1501,7 @@ L 372.57071 633.024093 Mean kernel time (µs) - + - - - - - - - - - - - - - + - + - + - + @@ -1722,12 +1598,12 @@ L 452.237685 527.528317 - + - + @@ -1737,12 +1613,12 @@ L 557.572936 527.528317 - + - + @@ -1752,12 +1628,12 @@ L 662.908187 527.528317 - + - + @@ -1772,12 +1648,12 @@ L 768.243437 527.528317 - + - + @@ -1787,84 +1663,84 @@ L 768.243437 612.543618 - + - + - + - + - + - + - + - + - + - + - + - + @@ -1874,7 +1750,7 @@ L 768.243437 612.543618 Mean kernel time (µs) - + - - - - - - - - - - - - - + - + Latency across row lengths and batch sizes - - + - GVR V2 - - - - - - GVR V1 · R0 + GVR V2 - - + - - GVR V1 · tiered + + GVR V1 - - + - - TensorRT-LLM radix CUDA + + TensorRT-LLM radix CUDA diff --git a/docs/source/blogs/media/gvr_v2/plot_results.py b/docs/source/blogs/media/gvr_v2/plot_results.py index 7e2841ea1efe..c4fe5ec3c741 100644 --- a/docs/source/blogs/media/gvr_v2/plot_results.py +++ b/docs/source/blogs/media/gvr_v2/plot_results.py @@ -33,18 +33,16 @@ } LABELS = { "gvr_v2": "GVR V2", - "temporal_r0": "GVR V1 · R0", - "temporal_tiered": "GVR V1 · tiered", + "temporal_tiered": "GVR V1", "radix_cuda": "TensorRT-LLM radix CUDA", } COLORS = { "gvr_v2": "#579600", - "temporal_r0": "#7395ab", "temporal_tiered": "#386781", "radix_cuda": "#64748b", } REACHABLE_BW = 6.912116 -TEMPORAL = ["temporal_r0", "temporal_tiered"] +TEMPORAL = ["temporal_tiered"] CROSS_CAMPAIGN = set(TEMPORAL + ARMS) COMPARISON_ARMS = ["gvr_v2", *TEMPORAL, *ARMS] @@ -120,18 +118,17 @@ def _comparison(rows: list[dict]) -> dict: def _overview(rows: list[dict]) -> None: data = _comparison(rows) - fig, axes = plt.subplots(1, 3, figsize=(14, 5.2), sharey=True) - fig.subplots_adjust(left=0.185, right=0.97, bottom=0.23, top=0.73, wspace=0.14) + fig, axes = plt.subplots(1, 3, figsize=(14, 4.7), sharey=True) + fig.subplots_adjust(left=0.185, right=0.97, bottom=0.25, top=0.70, wspace=0.14) labels = [ "GVR V2", - "GVR V1 · R0", - "GVR V1 · tiered", + "GVR V1", "TRT-LLM radix CUDA", ] - positions = [3.8, 2.6, 1.6, 0.4] + positions = [2.8, 1.6, 0.4] for ax, (model, title) in zip(axes, MODELS.items()): panel = data[model] - ax.axhspan(3.3, 4.3, color="#edf5df", zorder=0) + ax.axhspan(2.3, 3.3, color="#edf5df", zorder=0) ax.axvline(1, color="#579600", alpha=0.55, linewidth=1, linestyle=(0, (2, 3))) for y, arm in zip(positions, COMPARISON_ARMS): value = panel["latency_relative_to_v2"][arm] @@ -155,7 +152,7 @@ def _overview(rows: list[dict]) -> None: fontsize=9.5, color="#52616f", ) - ax.set(xlim=(0, 5.95), ylim=(-0.15, 4.35), xticks=[0, 1, 2, 3, 4, 5]) + ax.set(xlim=(0, 5.95), ylim=(-0.15, 3.35), xticks=[0, 1, 2, 3, 4, 5]) ax.xaxis.set_major_formatter(FuncFormatter(lambda value, _: f"{value:g}×")) ax.set_yticks(positions, labels, fontsize=10.5) ax.tick_params(axis="both", length=0, pad=8) @@ -189,7 +186,7 @@ def _overview(rows: list[dict]) -> None: fig.text( 0.035, 0.067, - "GVR V1: R0 threshold ladder and tiered execution. V2: current-row self-sampling.", + "GVR V1: temporal hint calibration. GVR V2: current-row self-sampling.", fontsize=9, color="#52616f", ) @@ -234,17 +231,17 @@ def _evolution(rows: list[dict]) -> None: ax.text( 0.2, 5.55, - "Later temporal V1: hint calibration + multi-thresholding", + "GVR V1 (temporal hint): calibration + multi-thresholding", fontsize=11, weight="bold", - color="#7557a6", + color=COLORS["temporal_tiered"], ) for x, label in [ (0.2, "Previous indices\n→ current-score gather"), (3.6, "Hint-derived thresholds\n→ multiple exact counts"), (7.0, "Collect candidates\n→ exact refinement"), ]: - _box(ax, (x, 3.8), (2.8, 1.2), label, "#f2eef9", 10) + _box(ax, (x, 3.8), (2.8, 1.2), label, "#eef3f7", 10) ax.text( 0.2, 3.25, @@ -282,16 +279,16 @@ def _evolution(rows: list[dict]) -> None: fontsize=9.5, color="#447a00", ) - bars = fig.add_axes((0.76, 0.25, 0.21, 0.5)) + bars = fig.add_axes((0.76, 0.30, 0.21, 0.4)) arms = [*TEMPORAL, "gvr_v2"] for i, arm in enumerate(arms): ratios = [r["radix_cuda_us"] / r[arm + "_us"] for r in rows] value = geometric_mean(ratios) - bars.barh(i, value, height=0.52, color=["#baa6d3", "#7557a6", "#579600"][i]) + bars.barh(i, value, height=0.52, color=COLORS[arm]) bars.text(value + 0.1, i, f"{value:.2f}×", va="center", weight="bold", fontsize=12) bars.set_yticks( - range(3), - ["Temporal R0", "Temporal tiered", "GVR V2"], + range(len(arms)), + [LABELS[arm] for arm in arms], fontsize=10, ) bars.invert_yaxis() @@ -320,7 +317,7 @@ def _evolution(rows: list[dict]) -> None: fig.text( 0.035, 0.005, - "Flows show streaming paths; bars compare complete R0, tiered temporal, and V2 implementations.", + "Flows show streaming paths; bars compare complete GVR V1 and GVR V2 implementations.", fontsize=9, color="#475569", ) @@ -852,7 +849,7 @@ def _legend(fig: plt.Figure) -> None: fig.legend( handles=handles, loc="lower center", - ncol=4, + ncol=3, frameon=False, bbox_to_anchor=(0.5, 0.01), fontsize=10, @@ -1068,7 +1065,7 @@ def _roofline(rows: list[dict]) -> None: fig.legend( handles=handles, loc="lower center", - ncol=4, + ncol=3, frameon=False, bbox_to_anchor=(0.53, 0.077), fontsize=10, diff --git a/docs/source/blogs/media/gvr_v2/provenance.json b/docs/source/blogs/media/gvr_v2/provenance.json index 793b758c98ac..61b6c15e4fad 100644 --- a/docs/source/blogs/media/gvr_v2/provenance.json +++ b/docs/source/blogs/media/gvr_v2/provenance.json @@ -11,21 +11,19 @@ "hardware": "NVIDIA B200 (SM100)", "baseline_versions": { "radix_cuda": "Production insertion/radix/split-work dispatcher", - "temporal_r0": "Temporal R0 ladder implementation, public PR #16457", - "temporal_tiered": "Tiered temporal implementation, public PR #16877" + "temporal_tiered": "GVR V1 (temporal hint), tiered implementation from public PR #16877" }, "pairing": { "radix_cuda": "cross-campaign", - "temporal_r0": "cross-campaign, same (cell, batch), not an isolated algorithm ablation", "temporal_tiered": "cross-campaign, same (cell, batch), not an isolated algorithm ablation" }, "published_files": { "flash_timings.csv.gz": "0f1c4799296bea1db9a012fe9ddf90521918af3ce73e6b39ad25a6c05115dcc6", "pro_timings.csv.gz": "bfd713272ccd50cab57d8f436d1d788e29d3ef6cc2014818104b2872f4476cbd", "v32_timings.csv.gz": "59bccd05ba685d01ed1ebb34c9a0b15df02d1879f8c16bbaffa2a264f512fd8d", - "temporal_comparison.csv.gz": "0a0973e218209d1f2e4db89e9539a3736753073ad72dc16a30288e79fa9309bb" + "temporal_comparison.csv.gz": "2abdeb8eafa1366be5673c79dfdb938a02716431cf8745f18d3a2fc240a778ca" }, - "scope": "Per-case FP32 cold kernel means with PR #19076 as the GVR V2 reference. Temporal GVR V1 R0, tiered V1, and TensorRT-LLM radix CUDA observations are paired across benchmark runs by workload and batch. All four implementations cover the same 9,746 cases.", + "scope": "Per-case FP32 cold kernel means with PR #19076 as the GVR V2 reference. GVR V1 (temporal hint, PR #16877) and TensorRT-LLM radix CUDA observations are paired across benchmark runs by workload and batch. All three implementations cover the same 9,746 cases.", "roofline_model": { "theoretical_bandwidth_tb_s": 8.0, "measured_bandwidth_tb_s": 6.912116, diff --git a/docs/source/blogs/media/gvr_v2/roofline.svg b/docs/source/blogs/media/gvr_v2/roofline.svg index eee3e7020d53..0e5848a32a83 100644 --- a/docs/source/blogs/media/gvr_v2/roofline.svg +++ b/docs/source/blogs/media/gvr_v2/roofline.svg @@ -632,42 +632,6 @@ L 311.438281 534.140719 " style="fill: none; stroke: #d5dce3; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> - - - - - - - - - - - - - - - - - - + DeepSeek-V4 Flash · K=512 - + - + .125 - + .175 - + .225 - + .250 @@ -1033,51 +997,51 @@ z - + - + 0 - + - + 0.5 - + - + 1.0 - + - + 1.5 - + - - - - - - - - - - - - - - - + - + DeepSeek-V4 Pro · K=1024 - + - + .125 - + .175 - + .225 - + .250 @@ -1537,51 +1478,51 @@ z - + - + 0 - + - + 0.5 - + - + 1.0 - + - + 1.5 - + - - - - - - - - - - - - - + - + DeepSeek-V3.2 · K=2048 - + Line styles distinguish benchmark runs. Work throughput uses the same logical task for every kernel. - - + - GVR V2 + GVR V2 - - - - - GVR V1 · R0 - - - + - - GVR V1 · tiered + + GVR V1 - - + - - TensorRT-LLM radix CUDA + + TensorRT-LLM radix CUDA diff --git a/docs/source/blogs/media/gvr_v2/speedup.svg b/docs/source/blogs/media/gvr_v2/speedup.svg index eaf4b4ccb573..47b16b23ed45 100644 --- a/docs/source/blogs/media/gvr_v2/speedup.svg +++ b/docs/source/blogs/media/gvr_v2/speedup.svg @@ -1,7 +1,7 @@ - + @@ -21,8 +21,8 @@ - - - +" clip-path="url(#p29c25510d3)" style="fill: #edf5df; stroke: #edf5df; stroke-linejoin: miter"/> - + - + - + - + - + - + - + - + - + - + - + - + @@ -117,431 +117,386 @@ L 361.125968 99.148875 - GVR V2 + GVR V2 - GVR V1 · R0 + GVR V1 - GVR V1 · tiered - - - - - - TRT-LLM radix CUDA + TRT-LLM radix CUDA - - + + - - +" clip-path="url(#p29c25510d3)" style="fill: #579600"/> - - 1.00× + + 1.00× - +" clip-path="url(#p29c25510d3)" style="fill: #386781"/> - - 2.09× + + 1.53× - +" clip-path="url(#p29c25510d3)" style="fill: #64748b"/> - - 1.53× + + 4.88× - - + + K=512 - 4.88× - - - K=512 - - - DeepSeek-V4 Flash + DeepSeek-V4 Flash - - + - - + +" clip-path="url(#p38fef53a1a)" style="fill: #edf5df; stroke: #edf5df; stroke-linejoin: miter"/> - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + + + + - - - - - - - - + + - - + - - - - - 1.00× - - - + +" clip-path="url(#p38fef53a1a)" style="fill: #579600"/> - - 2.16× + + 1.00× - - + +" clip-path="url(#p38fef53a1a)" style="fill: #386781"/> - - 1.54× + + 1.54× - - + +" clip-path="url(#p38fef53a1a)" style="fill: #64748b"/> - - 4.87× + + 4.87× - - K=1024 + + K=1024 - - DeepSeek-V4 Pro + + DeepSeek-V4 Pro - - + - - + +" clip-path="url(#pc65d48efa9)" style="fill: #edf5df; stroke: #edf5df; stroke-linejoin: miter"/> + + + + + + + + + - + - - + + - + - + - - + + - + - + - - + + - + - + - - + + - + - + - - - - - - - - - - - + + - - - - - + + - - + + - - + + - - + + - - + - - - - - 1.00× - - - + +" clip-path="url(#pc65d48efa9)" style="fill: #579600"/> - - 1.78× + + 1.00× - - + +" clip-path="url(#pc65d48efa9)" style="fill: #386781"/> - - 1.37× + + 1.37× - - + +" clip-path="url(#pc65d48efa9)" style="fill: #64748b"/> - - 5.25× + + 5.25× - - K=2048 + + K=2048 - - DeepSeek-V3.2 + + DeepSeek-V3.2 - + The GVR evolution: V1, V2, and radix CUDA - - Geometric-mean kernel time relative to GVR V2 · shorter is faster · B200 / FP32 + + Geometric-mean kernel time relative to GVR V2 · shorter is faster · B200 / FP32 - - Same workloads within each panel. GVR V2 (PR #19076) = 1.00×. + + Same workloads within each panel. GVR V2 (PR #19076) = 1.00×. - - GVR V1: R0 threshold ladder and tiered execution. V2: current-row self-sampling. + + GVR V1: temporal hint calibration. GVR V2: current-row self-sampling. - - + + - - + + - - + + diff --git a/docs/source/blogs/media/gvr_v2/summary.json b/docs/source/blogs/media/gvr_v2/summary.json index ed5588cc9cb5..eedc74aa7a54 100644 --- a/docs/source/blogs/media/gvr_v2/summary.json +++ b/docs/source/blogs/media/gvr_v2/summary.json @@ -27,7 +27,6 @@ "layers": 21, "latency_relative_to_v2": { "gvr_v2": 1.0, - "temporal_r0": 2.08799443828557, "temporal_tiered": 1.5270656764856136, "radix_cuda": 4.875738163985888 } @@ -37,7 +36,6 @@ "layers": 30, "latency_relative_to_v2": { "gvr_v2": 1.0, - "temporal_r0": 2.155315379850125, "temporal_tiered": 1.54320332519381, "radix_cuda": 4.871976103268161 } @@ -47,7 +45,6 @@ "layers": 61, "latency_relative_to_v2": { "gvr_v2": 1.0, - "temporal_r0": 1.7817473025441366, "temporal_tiered": 1.3723454906900026, "radix_cuda": 5.250852136354158 } @@ -95,17 +92,6 @@ } }, "temporal_vs_v2": { - "temporal_r0": { - "cases": 9746, - "geomean": 1.9531313079318369, - "minimum": 0.9991411021654637, - "p5": 1.3488066063428978, - "p95": 2.9248310667525446, - "wins": 9745, - "win_percent": 99.98973938025857, - "baseline_median_us": 16.9455, - "gvr_median_us": 9.6435 - }, "temporal_tiered": { "cases": 9746, "geomean": 1.4550894088383663, @@ -129,11 +115,6 @@ "average_percent": 41.56601571959186, "peak_percent": 77.81571160254971 }, - "temporal_r0": { - "points": 9, - "average_percent": 20.189567701246013, - "peak_percent": 40.6975234111354 - }, "temporal_tiered": { "points": 9, "average_percent": 26.123944119758303, @@ -151,11 +132,6 @@ "average_percent": 39.00405637364329, "peak_percent": 68.39789370398464 }, - "temporal_r0": { - "points": 9, - "average_percent": 19.692718835069805, - "peak_percent": 36.52586883421088 - }, "temporal_tiered": { "points": 9, "average_percent": 25.39201270408693, @@ -173,11 +149,6 @@ "average_percent": 41.47747500688756, "peak_percent": 66.53750601976955 }, - "temporal_r0": { - "points": 7, - "average_percent": 22.1752578474719, - "peak_percent": 34.125595313436996 - }, "temporal_tiered": { "points": 7, "average_percent": 27.779057298223755, @@ -192,10 +163,6 @@ } }, "evolution_vs_radix": { - "temporal_r0": { - "geomean": 2.5865458712068374, - "wins_percent": 88.7235789041658 - }, "temporal_tiered": { "geomean": 3.4718579420414657, "wins_percent": 98.38908270059513 diff --git a/docs/source/blogs/media/gvr_v2/temporal_comparison.csv.gz b/docs/source/blogs/media/gvr_v2/temporal_comparison.csv.gz index e20a2a0ebe7afe08f46d16827224d967d74b37f4..1f415da49af9f65fb24f9310552a3aac1fff8be1 100644 GIT binary patch literal 50726 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 diff --git a/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md b/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md index dd36b1a7c744..2139ce5def36 100644 --- a/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md +++ b/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md @@ -13,11 +13,11 @@ Selecting 1,024 INT32 indices from 131,072 FP32 scores writes just **4 KiB of ou GVR V2 makes each full-row pass more useful without depending on the previous decode step to predict the current one. **Self-sampling estimates where the current row's Top-K boundary lies; multi-thresholding derives many exact population counts from one classification pass.** Together, they concentrate exact refinement on the small group of scores still competing for the final slots. Removing the Top-K prior also lets prefill and decode share a streaming selection core, with phase differences handled by row adapters. -On B200, this design delivers **5.05× geometric-mean speedup over TensorRT-LLM radix CUDA**, with **1.95× over GVR V1 R0 and 1.46× over tiered GVR V1**. All comparisons use the same 9,746 workloads spanning DeepSeek-V3.2, DeepSeek-V4 Flash, and DeepSeek-V4 Pro indexers. +On B200, this design delivers **5.05× geometric-mean speedup over TensorRT-LLM radix CUDA**, with **1.46× over GVR V1**. Both comparisons use the same 9,746 workloads spanning DeepSeek-V3.2, DeepSeek-V4 Flash, and DeepSeek-V4 Pro indexers. -![Three horizontal bar-chart panels compare GVR V2, GVR V1 R0, tiered GVR V1, and TensorRT-LLM radix CUDA on the same cases per model. GVR V2 is 1.00; shorter bars mean less kernel time.](../media/gvr_v2/speedup.svg) +![Three horizontal bar-chart panels compare GVR V2, GVR V1, and TensorRT-LLM radix CUDA on the same cases per model. GVR V2 is 1.00; shorter bars mean less kernel time.](../media/gvr_v2/speedup.svg) -*Figure 1. Kernel time relative to GVR V2, geometrically averaged over the same workloads within each model; shorter is faster. The temporal bars show the R0 and tiered GVR V1 implementations. All four implementations cover the full 9,746-case grid.* +*Figure 1. Kernel time relative to GVR V2, geometrically averaged over the same workloads within each model; shorter is faster. GVR V1 uses a temporal hint. All three implementations cover the full 9,746-case grid.* **The operator contract.** Given FP32 indexer scores and valid-row metadata, Top-K returns unordered INT32 positions for sparse attention's KV selection. With finite scores and at least $K$ entries, it selects an exact value multiset through $K$ distinct indices; ties can choose different positions. [Enablement](#enable-gvr-v2) lists hardware, shape, and configuration requirements. @@ -45,9 +45,9 @@ On B200, this design delivers **5.05× geometric-mean speedup over TensorRT-LLM ### From GVR V1 to V2: Why Move Beyond Temporal Hints? -Temporal GVR V1 gathers current scores at the previous step's Top-K indices to predict admission thresholds. **Later V1 already uses multi-thresholding.** Its [R0 path](https://github.com/NVIDIA/TensorRT-LLM/pull/16457) builds a histogram over those gathered scores, proposes a threshold ladder, and counts its rungs together in one full-row pass. The [tiered streaming path](https://github.com/NVIDIA/TensorRT-LLM/pull/16877) also uses multiple thresholds, including exact counts at a pivot and a rescue rung. These are the temporal implementations compared with V2 below. +GVR V1 gathers current scores at the previous step's Top-K indices to predict admission thresholds. **The GVR V1 baseline already uses multi-thresholding.** Its [streaming implementation](https://github.com/NVIDIA/TensorRT-LLM/pull/16877) uses sampled ladder counts to choose a pivot and a rescue rung, then verifies both exactly in a fused count/collect pass. This is the temporal-hint implementation compared with V2 below. -Their admission objective is expressed through the monotone count function +Its admission objective is expressed through the monotone count function $$ C(T)=\sum_{i=0}^{N-1}\mathbf{1}[x_i\ge T]. @@ -80,35 +80,34 @@ V4 Pro's mean changes from **71.5% to 57.9%** between these inputs, and its rand A row's true hit rate is known only after the current selection is established. Verification can expose a poor threshold, but the hint gather and initial work have already been paid for. Conservative admission, repeated counts, capacity checks, and exact recovery keep weak hints safe; their overhead and extra reads reduce average speedup and make latency less predictable. -V2 calibrates from the **current row**, removing dependence on temporal overlap and the read through old indices. It combines this calibration with histogram-based multi-threshold verification and crossing-bin refinement. **The defining change from later V1 is the source of the guess and the removal of temporal state; multi-thresholding is part of the design continuity.** These choices target a stronger practical performance floor and better average latency, without a fixed worst-case latency guarantee. +V2 calibrates from the **current row**, removing dependence on temporal overlap and the read through old indices. It combines this calibration with histogram-based multi-threshold verification and crossing-bin refinement. **The defining change from GVR V1 is the source of the guess and the removal of temporal state; multi-thresholding is part of the design continuity.** These choices target a stronger practical performance floor and better average latency, without a fixed worst-case latency guarantee. #### A Hint That Crosses Framework Boundaries -V1's prior also has a lifecycle outside the kernel. Temporal V1 has no prefill engine: TensorRT-LLM uses radix for prefill and can seed the decode prior from each request's last prefill selection. That phase-dependent history complicates a common selection architecture. V2's current-row calibration removes the Top-K prior dependency, allowing phase differences to stay in dispatch and row-interface adapters. The [integration section](#decode-and-prefill-in-tensorrt-llm) traces the consequences for CUDA Graph preparation and disaggregated serving. +V1's prior also has a lifecycle outside the kernel. GVR V1 has no prefill engine: TensorRT-LLM uses radix for prefill and can seed the decode prior from each request's last prefill selection. That phase-dependent history complicates a common selection architecture. V2's current-row calibration removes the Top-K prior dependency, allowing phase differences to stay in dispatch and row-interface adapters. The [integration section](#decode-and-prefill-in-tensorrt-llm) traces the consequences for CUDA Graph preparation and disaggregated serving. -| Algorithm question | Later temporal V1: R0 / tiered streaming | Streaming GVR V2 | +| Algorithm question | GVR V1 (temporal hint) | Streaming GVR V2 | | :--- | :--- | :--- | | Where does the guess come from? | Current scores gathered through previous-step indices | Packed sample windows spread across the current row | | What makes the guess useful? | High, stable overlap with previous winners | Coverage of the current row's score distribution | -| What guides admission? | A hint-derived ladder, with path-specific pivot and rescue choices | Sample-derived primary threshold, lower safety floor, and upper anchor | +| What guides admission? | A hint-derived pivot and rescue rung | Sample-derived primary threshold, lower safety floor, and upper anchor | | What does verification learn? | Exact counts at multiple admission thresholds | Exact bin populations and counts at many boundaries | | Where does exact refinement start? | The admitted candidate set, with path-specific local refinement | The crossing bin containing rank $K$ | | What state crosses decode steps? | Per-layer prior indices | No Top-K prior | | How do prefill and decode relate? | Radix prefill; its last selection can seed temporal decode | Shared streaming selection with phase-specific row adapters | | How does a bad guess affect the result? | More admission/refinement work or recovery; membership remains exact | Lower admission or exact recovery; membership remains exact | -![Later temporal V1 and streaming V2 both use multi-thresholding. V1 calibrates through previous winners; V2 samples the current row without a temporal prior. Measured bars compare temporal R0, tiered temporal GVR, and V2.](../media/gvr_v2/evolution.svg) +![GVR V1 and streaming V2 both use multi-thresholding. V1 calibrates through previous winners; V2 samples the current row without a temporal prior. Measured bars compare GVR V1 and V2.](../media/gvr_v2/evolution.svg) -*Figure 3. Multi-thresholding is shared by later temporal V1 and V2. The flows emphasize their calibration and refinement choices on streaming paths; the bars compare complete R0, tiered temporal, and V2 implementations over radix CUDA. V2 removes the temporal-overlap dependency and prior-state lifecycle.* +*Figure 3. Multi-thresholding is shared by GVR V1 and V2. The flows emphasize their calibration and refinement choices on streaming paths; the bars compare complete GVR V1 and V2 implementations over radix CUDA. V2 removes the temporal-overlap dependency and prior-state lifecycle.* -Temporal R0 and tiered GVR achieve **2.59× and 3.47×** speedup over radix CUDA; V2 reaches **5.05×**. V2 is **1.95× faster than temporal R0** and **1.46× faster than tiered temporal GVR**. These gains compare complete implementations, including their calibration, verification, refinement, and execution paths. +GVR V1 achieves **3.47×** speedup over radix CUDA; V2 reaches **5.05×**. V2 is **1.46× faster than GVR V1**. These gains compare complete implementations, including their calibration, verification, refinement, and execution paths. The improvement also extends to the lower end of the measured speedup distribution: -| Temporal V1 baseline | Geomean speedup | P5 speedup | Minimum speedup | V2 faster | +| Baseline | Geomean speedup | P5 speedup | Minimum speedup | V2 faster | | :--- | ---: | ---: | ---: | ---: | -| R0 | **1.95×** | **1.35×** | 0.999× | 99.99% | -| Tiered streaming | **1.46×** | **1.10×** | 0.689× | 99.57% | +| GVR V1 | **1.46×** | **1.10×** | 0.689× | 99.57% | P5 is the fifth percentile across workload-level speedups, each computed from mean kernel times. These results support broad improvement across tested workloads while retaining local regressions. Runtime P95/P99 latency and a fixed worst-case bound require different evidence; the stronger performance floor remains a design objective. @@ -217,7 +216,7 @@ In the variable-length `main` route, warp 0 prepares sampling geometry while oth ### Multi-Thresholding: Make Each Full-Row Pass Count -A scalar verification pass answers one question: how many scores exceed $T$? Later V1 already amortizes row reads across several admission thresholds. V2's streaming path uses a verification histogram to obtain a dense family of counts from the same classification work and locate the boundary for exact refinement. +A scalar verification pass answers one question: how many scores exceed $T$? GVR V1 already amortizes row reads across several admission thresholds. V2's streaming path uses a verification histogram to obtain a dense family of counts from the same classification work and locate the boundary for exact refinement. Conceptually, divide the bracket $[T,H]$ into $M$ ordered bins, with boundaries $t_0,\ldots,t_M$, and let $h_j$ be the exact population of bin $j$. A descending cumulative scan yields @@ -297,11 +296,10 @@ The benchmarks use FP32 indexer scores from the three models below on NVIDIA B20 | Baseline | Geomean speedup | Minimum speedup | GVR V2 faster | | :--- | ---: | ---: | ---: | -| GVR V1 R0 | **1.95×** | 0.999× | 99.99% | -| GVR V1 tiered streaming | **1.46×** | 0.689× | 99.57% | +| GVR V1 | **1.46×** | 0.689× | 99.57% | | TensorRT-LLM radix CUDA dispatch | **5.05×** | 1.34× | 100.00% | -All three comparisons use the same 9,746 cases. The minimum column retains individual regressions, including the temporal V1 cases where V2 is slower. Figure 1 shows the model-level comparison over this same workload grid. +Both comparisons use the same 9,746 cases. The minimum column retains individual regressions, including the GVR V1 cases where V2 is slower. Figure 1 shows the model-level comparison over this same workload grid. #### The Gains Extend Beyond an Average @@ -319,11 +317,11 @@ The advantage extends across all 275 plotted shapes. The smallest shape-average **TensorRT-LLM radix CUDA.** The baseline uses the production dispatcher, including short-row insertion and long-row split-work paths. V2's **5.05×** advantage is consistent with reducing full-row selection passes and matching execution to the workload. -**Temporal GVR V1.** Both R0 and tiered streaming already combine multiple admission thresholds. V2 replaces the temporal prior with current-row calibration and couples exact bin counts to crossing-bin refinement. Its **1.95× and 1.46×** gains compare complete implementations, including their execution policies; they do not isolate the contribution of self-sampling alone. +**GVR V1 (temporal hint).** V1 already combines multiple admission thresholds through pivot/rescue verification. V2 replaces the temporal prior with current-row calibration and couples exact bin counts to crossing-bin refinement. Its **1.46×** gain compares complete implementations, including their execution policies; it does not isolate the contribution of self-sampling alone. #### Latency Across Row Length and Batch Size -![Cold kernel latency for GVR V2, GVR V1 R0, tiered GVR V1, and TensorRT-LLM radix CUDA versus valid row length, with separate panels for three models and batch sizes 1 and 1024.](../media/gvr_v2/latency.svg) +![Cold kernel latency for GVR V2, GVR V1, and TensorRT-LLM radix CUDA versus valid row length, with separate panels for three models and batch sizes 1 and 1024.](../media/gvr_v2/latency.svg) *Figure 8. Mean cold kernel time across all captured layers: 21 for Flash, 30 for Pro, and 61 for V3.2. Each row is a model; the columns contrast batch sizes 1 and 1,024. The solid line shows GVR V2; dashed lines show baselines measured in separate runs. Both axes are logarithmic; 1K means 1,024.* @@ -353,7 +351,7 @@ $$ The calibrated limits are **6.912 TB/s** sustained read bandwidth and **37.047 Tcompare/s** semantic comparison throughput. Their **5.36 compare/byte** intersection exceeds the maximum ideal Top-K intensity by over 21×, placing the workload band on Figure 9A's bandwidth slope. -![A two-level roofline: the full B200 hardware model highlights Top-K's narrow bandwidth-limited band; three linear-scale Pareto curve panels compare GVR V2, GVR V1 R0, tiered GVR V1, and TensorRT-LLM radix CUDA at batch 1024, with GVR V2 highlighted in green.](../media/gvr_v2/roofline.svg) +![A two-level roofline: the full B200 hardware model highlights Top-K's narrow bandwidth-limited band; three linear-scale Pareto curve panels compare GVR V2, GVR V1, and TensorRT-LLM radix CUDA at batch 1024, with GVR V2 highlighted in green.](../media/gvr_v2/roofline.svg) *Figure 9.* A: theoretical and calibrated roofs. B: Pareto curves at $B=1024$, plotting useful throughput $P=BN/t$ against ideal intensity $I=N/[4(N+K)]$. Green highlights V2; the dotted line is the calibrated bandwidth roof. All kernels share $Q_{\min}$; extra work remains in measured time. This measures useful work relative to ideal traffic, not actual DRAM utilization. @@ -373,13 +371,12 @@ It measures efficiency relative to the ideal traffic bound. The table compares * | Operator | V4 Flash | V4 Pro | V3.2 | | :--- | ---: | ---: | ---: | | **GVR V2** | **41.6% / 77.8%** | **39.0% / 68.4%** | **41.5% / 66.5%** | -| GVR V1 R0 | 20.2% / 40.7% | 19.7% / 36.5% | 22.2% / 34.1% | -| GVR V1 tiered streaming | 26.1% / 63.3% | 25.4% / 58.9% | 27.8% / 51.1% | +| GVR V1 | 26.1% / 63.3% | 25.4% / 58.9% | 27.8% / 51.1% | | TensorRT-LLM radix CUDA | 7.7% / 16.9% | 7.8% / 16.4% | 8.3% / 17.8% | *Each cell shows average / peak.* -GVR V2 leads both measures on all three models: its average reachable rate is **39.0–41.6%**, with peaks of **66.5–77.8%**. Tiered GVR V1 is the strongest baseline by both measures, averaging **25.4–27.8%**, with peaks of **51.1–63.3%**. On V3.2, it reaches **27.8% / 51.1%**, compared with V2's **41.5% / 66.5%**. Reporting both measures captures the best operating point and the performance sustained across the curve. +GVR V2 leads both measures on all three models: its average reachable rate is **39.0–41.6%**, with peaks of **66.5–77.8%**. GVR V1 is the stronger baseline by both measures, averaging **25.4–27.8%**, with peaks of **51.1–63.3%**. On V3.2, it reaches **27.8% / 51.1%**, compared with V2's **41.5% / 66.5%**. Reporting both measures captures the best operating point and the performance sustained across the curve. #### Interpret the Remaining Gap @@ -447,7 +444,7 @@ trtllm-bench --model deepseek-ai/DeepSeek-V4-Flash throughput \ --tp 8 --ep 8 ``` -`enable_heuristic_topk` defaults to `false`. Once it is enabled, `use_self_sampling_topk` defaults to `true`; the second field is explicit here for clarity. Supported prefill layers follow the same V2 selection. Setting `use_self_sampling_topk: false` selects temporal GVR for decode, whose prefill path remains radix. +`enable_heuristic_topk` defaults to `false`. Once it is enabled, `use_self_sampling_topk` defaults to `true`; the second field is explicit here for clarity. Supported prefill layers follow the same V2 selection. Setting `use_self_sampling_topk: false` selects the temporal-hint decode dispatcher, which chooses among temporal kernel routes; prefill remains radix. The fast path expects FP32 scores with unit inner stride, a row stride divisible by four floats, and a 16-byte-aligned base. A single-row decode input also needs its physical width divisible by four; its valid prefix may be shorter. The retired `TRTLLM_GVR_SELF_SAMPLING` environment variable is no longer the enablement mechanism, and `use_cute_dsl_topk` is not required to select V2. @@ -455,7 +452,7 @@ The fast path expects FP32 scores with unit inner stride, a row stride divisible GVR V2 follows from a practical limit of temporal prediction: a biased hint can be excellent when overlap is high, yet expensive to rely on when quality fluctuates. **Self-sampling calibrates from the current row; multi-threshold counts locate the crossing; exact refinement resolves the remaining membership.** Together, they target both difficult-input performance and average latency while preserving exactness. -The performance maps show the gains across shapes, and the Pareto curves relate them to the bandwidth roof. Removing the temporal prior also removes its framework lifecycle: a shared streaming implementation serves prefill and decode through phase-specific row interfaces. The result is one algorithmic core whose calibration depends on the input it is selecting now. +The performance map shows the gains across shapes, and the Pareto curves relate them to the bandwidth roof. Removing the temporal prior also removes its framework lifecycle: a shared streaming implementation serves prefill and decode through phase-specific row interfaces. The result is one algorithmic core whose calibration depends on the input it is selecting now. ### Further Reading From 2473b5a33b2c7448172038ed84342266ee303a1a Mon Sep 17 00:00:00 2001 From: longcheng-nv <243710427+longcheng-nv@users.noreply.github.com> Date: Fri, 18 Sep 2026 01:51:38 +0000 Subject: [PATCH 26/33] [None][doc] Clarify temporal-hint index mapping in Figure 2 Signed-off-by: longcheng-nv <243710427+longcheng-nv@users.noreply.github.com> --- docs/source/blogs/media/gvr_v2/README.md | 6 +++--- docs/source/blogs/media/gvr_v2/provenance.json | 2 +- ...VR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md | 8 +++++--- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/docs/source/blogs/media/gvr_v2/README.md b/docs/source/blogs/media/gvr_v2/README.md index b5016cf30556..5457c6477fee 100644 --- a/docs/source/blogs/media/gvr_v2/README.md +++ b/docs/source/blogs/media/gvr_v2/README.md @@ -60,13 +60,13 @@ The admission band requires $K\le C(q)\le B_r$. A large tie plateau can leave no ## Temporal-Overlap Illustration -Figure 2 shows SWE-bench-64K decode traces for DeepSeek-V3.2 and DeepSeek-V4 Pro. The prior indices are shifted by +1 for V3.2 and retain their compressed-bin coordinates for V4 Pro before overlap is measured. Blue points match the transported prior; orange points are new selections. The top panels show selected 1,024-position crops for layer 60. The bottom panels use the full index domain over 298 transitions per trace, without smoothing, for V3.2 layers 0/20/60 and Pro layers 2/22/60. Parenthesized legend values are mean overlaps. +Figure 2 shows SWE-bench-64K decode traces for DeepSeek-V3.2 and DeepSeek-V4 Pro. The temporal-hint index mapping shifts each prior index by +1 for V3.2 and leaves each compressed-bin index unchanged for V4 Pro. Overlap is the fraction of current Top-K indices covered by that mapped prior. Blue points are current selections matched by the mapped hint; orange points are current selections it misses. For V3.2, +1 predicts a one-position shift as decoding advances; this evaluates a prediction rule, not retention at identical token indices. The top panels show selected 1,024-position crops for layer 60. The bottom panels use the full index domain over 298 transitions per trace, without smoothing, for V3.2 layers 0/20/60 and Pro layers 2/22/60. Parenthesized legend values are mean overlaps. The figure illustrates temporal-hint variability, not kernel speedup. Its source Top-K streams are separate from the timing observations bundled below. `provenance.json` records the supplied SVG's checksum without private source paths or submission metadata. ### Temporal-Overlap Statistics -The table following Figure 2 uses author-supplied near-64K overlap summaries. Layer IDs are matched between SWE-bench and random-token inputs within each indexer. First average the coordinate-aligned adjacent-step hit ratio over time for each layer; then compute statistics across those layer means, with equal weight per layer despite unequal decode durations. P10 and P90 are linearly interpolated empirical quantiles. V3.2 reconstructs the prior with +1 transport; V4 retains compressed-bin coordinates. +The table following Figure 2 uses author-supplied near-64K overlap summaries. Layer IDs are matched between SWE-bench and random-token inputs within each indexer. First average the adjacent-step hit ratio after temporal-hint index mapping over time for each layer; then compute statistics across those layer means, with equal weight per layer despite unequal decode durations. P10 and P90 are linearly interpolated empirical quantiles. V3.2 maps prior indices by +1; V4 retains the same compressed-bin indices. | Indexer | Input | Layers | Mean | Median | P10 | P90 | Min–max | | :--- | :--- | ---: | ---: | ---: | ---: | ---: | ---: | @@ -77,7 +77,7 @@ The table following Figure 2 uses author-supplied near-64K overlap summaries. La | V3.2 | SWE-bench | 61 | 47.4% | 47.8% | 37.9% | 59.7% | 5.7–70.7% | | V3.2 | Random tokens | 61 | 46.0% | 46.5% | 33.1% | 62.2% | 6.0–67.9% | -These percentages preserve the supplied summaries' precision. They are independent of the timing CSVs and are not regenerated by `plot_results.py`. They summarize per-layer means, not individual-step extremes or the selected traces in Figure 2. Different K values and transport rules make this evidence of hint variability, not a controlled ranking of models or a universal causal effect of prompt type. Low overlap concerns prediction quality and execution cost; exact verification and recovery preserve selection correctness. +These percentages preserve the supplied summaries' precision. They are independent of the timing CSVs and are not regenerated by `plot_results.py`. They summarize per-layer means, not individual-step extremes or the selected traces in Figure 2. Different K values and index-mapping rules make this evidence of hint variability, not a controlled ranking of models or a universal causal effect of prompt type. Low overlap concerns prediction quality and execution cost; exact verification and recovery preserve selection correctness. ## Published Data diff --git a/docs/source/blogs/media/gvr_v2/provenance.json b/docs/source/blogs/media/gvr_v2/provenance.json index 61b6c15e4fad..40960b8e0216 100644 --- a/docs/source/blogs/media/gvr_v2/provenance.json +++ b/docs/source/blogs/media/gvr_v2/provenance.json @@ -38,7 +38,7 @@ "sha256": "4b9081122fb8f4fa208f4e3c66acc76bfd0ee131fab14cd9ef424db5b28be63c", "source": "Temporal Top-K overlap figure supplied by the article authors", "conversion": "Standalone figure converted from PDF to SVG; plotted values, labels, vector axes, and embedded point clouds preserved.", - "scope": "SWE-bench-64K traces for DeepSeek-V3.2 and DeepSeek-V4 Pro; coordinate-aligned overlap, distinct from kernel timing comparisons.", + "scope": "SWE-bench-64K traces for DeepSeek-V3.2 and DeepSeek-V4 Pro; temporal-hint hit rates after index mapping (+1 for V3.2, unchanged compressed-bin indices for V4 Pro), distinct from kernel timing comparisons.", "reproduction": "Imported figure asset; not generated from the bundled kernel-timing CSVs.", "display": "Intrinsic width is 1200 CSS pixels for responsive full-column display; the original viewBox, aspect ratio, and plotted content are preserved." } diff --git a/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md b/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md index 2139ce5def36..163522860d72 100644 --- a/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md +++ b/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md @@ -57,11 +57,13 @@ An admission threshold should leave enough survivors to contain Top-K, but few e #### A Biased Sample with Variable Value -Temporal hints are a **biased sample** of current scores at previous winners' positions. The hit rate is the fraction of the current Top-K covered by the aligned previous selection. High, stable overlap makes that bias useful. Figure 2 shows why it is an unreliable assumption across layers and decode steps. +Temporal hints are a **biased sample** of current scores at positions predicted from the previous step's winners. The hit rate is the fraction of the current Top-K covered by the mapped temporal hint. High, stable overlap makes that bias useful. Figure 2 shows why it is an unreliable assumption across layers and decode steps. -![Temporal Top-K overlap for DeepSeek-V3.2 and DeepSeek-V4 Pro. Upper panels distinguish retained and new selections; lower panels show raw overlap across three layers, including abrupt drops despite a high average.](../media/gvr_v2/temporal_overlap.svg) +![Temporal Top-K overlap for DeepSeek-V3.2 and DeepSeek-V4 Pro. Upper panels distinguish current selections matched by the mapped temporal hint from those it misses; lower panels show raw overlap across three layers, including abrupt drops despite a high average.](../media/gvr_v2/temporal_overlap.svg) -*Figure 2. Temporal overlap on SWE-bench-64K workloads. Blue marks previous winners retained after coordinate alignment; orange marks new selections. V3.2 shifts prior indices by +1, while V4 Pro keeps compressed-bin coordinates. Upper panels show position crops; lower curves measure full-domain overlap across layers and steps, with means in parentheses. Even a high-mean layer can suffer an abrupt collapse.* +*Figure 2. Temporal overlap on SWE-bench-64K workloads. Blue marks current selections matched after applying the temporal-hint index mapping; orange marks selections not predicted by that hint. V3.2 shifts prior indices by +1, while V4 Pro keeps the same compressed-bin indices. Upper panels show position crops; lower curves measure full-domain overlap across layers and steps, with means in parentheses. Even a high-mean layer can suffer an abrupt collapse.* + +The V3.2 +1 shift is a temporal prediction rule. Its overlap measures how well the shifted positions predict the current Top-K, rather than retention at identical token indices. Near-64K measurements also expose dependence on the input and layer: From 7ed8feb744fae941360e3f4607aad37a89d4fd88 Mon Sep 17 00:00:00 2001 From: longcheng-nv <243710427+longcheng-nv@users.noreply.github.com> Date: Fri, 18 Sep 2026 02:37:21 +0000 Subject: [PATCH 27/33] [None][doc] Simplify Figure 5 candidate population diagram Signed-off-by: longcheng-nv <243710427+longcheng-nv@users.noreply.github.com> --- docs/source/blogs/media/gvr_v2/README.md | 4 +- .../blogs/media/gvr_v2/candidate_work.svg | 453 +++++++++--------- .../source/blogs/media/gvr_v2/plot_results.py | 105 ++-- ...ampling_Exact_TopK_for_Sparse_Attention.md | 4 +- 4 files changed, 300 insertions(+), 266 deletions(-) diff --git a/docs/source/blogs/media/gvr_v2/README.md b/docs/source/blogs/media/gvr_v2/README.md index 5457c6477fee..52129d74970f 100644 --- a/docs/source/blogs/media/gvr_v2/README.md +++ b/docs/source/blogs/media/gvr_v2/README.md @@ -52,11 +52,11 @@ In variable-length `main`, warp 0 derives sampling geometry and publishes it thr ## Candidate-Work Illustration -`candidate_work.svg` is a schematic, independent of the timing observations. For a finite-score row with K-th-largest boundary $\tau$ and $q\le\tau$, the admitted population obeys $C_p=C(q)=K+E+D(q,\tau)$. Here $E=C(\tau)-K$ counts excess boundary ties and $D$ counts entries with $q\le x_i\lt\tau$. The illustrated curve and bar use consistent relative populations: $C(q)=2.3K$, $E=0.3K$, and $D=K$; these are explanatory values, not benchmark measurements. +`candidate_work.svg` is a schematic, independent of the timing observations. For a finite-score row with K-th-largest boundary $\tau$ and $q\le\tau$, the admitted population obeys $C_p=C(q)=K+E+D(q,\tau)$. Here $E=C(\tau)-K$ counts excess boundary ties and $D$ counts entries with $q\le x_i\lt\tau$. The simplified curve labels the three population segments directly, and the matching bar explains their roles without numerical ratios. Their proportions are illustrative, not benchmark measurements. Both panels are computed from the same finite synthetic row in `plot_results.py`. The tail-count axis is linear, and the stacked bar is proportional to population size. At the exact boundary, the filled marker includes ties and the open marker excludes them; their difference is the entire tied population, of which only the excess contributes to E. -The admission band requires $K\le C(q)\le B_r$. A large tie plateau can leave no threshold in this band; the exact recovery path still applies. In V2, the admitted count describes candidate handling, while only the crossing bin requires the remaining exact selection. The illustration does not imply that every execution family materializes the same buffer or that candidate count alone predicts latency. Its multi-threshold markers denote counts shared through classification, not a scalar fitted search. +The admission band requires $K\le C(q)\le B_r$. A large tie plateau can leave no threshold in this band; the exact recovery path still applies. In V2, the admitted count describes candidate handling, while only the crossing bin requires the remaining exact selection. The illustration does not imply that every execution family materializes the same buffer or that candidate count alone predicts latency. The tail-count curve explains threshold admission; it does not prescribe a scalar search or a particular number of verification thresholds. ## Temporal-Overlap Illustration diff --git a/docs/source/blogs/media/gvr_v2/candidate_work.svg b/docs/source/blogs/media/gvr_v2/candidate_work.svg index 89267421c697..49296172dedd 100644 --- a/docs/source/blogs/media/gvr_v2/candidate_work.svg +++ b/docs/source/blogs/media/gvr_v2/candidate_work.svg @@ -96,26 +96,26 @@ L 749.531341 491.08 - +" clip-path="url(#p6b68dc4135)" style="fill: #edf4e5; stroke: #edf4e5; stroke-linejoin: miter"/> - + q @@ -126,7 +126,7 @@ z - + τ @@ -134,7 +134,7 @@ z - Higher threshold → + Higher threshold → @@ -148,7 +148,7 @@ z - + K @@ -159,7 +159,7 @@ z - + B r @@ -191,24 +191,53 @@ z - + - + - + - + + + + + + + + + + + + + + - - + + - Over capacity + Over capacity - Feasible admission + Too few candidates - Too few candidates - - - - - - - - - - + + - C - q - K - ( - ) - = - 2 - . - 3 + C + C + q + p + = + ( + ) - - - - - - + + + C τ - K ( ) - = - 1 - . - 3 - - - - - - - - - - - - + + + + + K + - + + + + + E + + + + + + + + D + + + + - - + + - - - - + - - + + - + - - + + - + - - + - - + - + - + K - + - + E - + - + D - - Threshold quality sets candidate work - - - A tighter threshold reduces extra candidates; exact counts keep admission safe. - - A Choose an admission threshold + Threshold quality sets candidate work - B Explain the admitted population + A tighter threshold reduces extra candidates; exact counts keep admission safe. - ● Exact counts from one classification + A Choose an admission threshold - CANDIDATE AMPLIFICATION + B Explain the admitted population - 2.3× + + + + S + a + f + e +   + a + d + m + i + s + s + i + o + n + : +   +   + + ( + ) + + K + C + q + B + r + + - - + CANDIDATE AMPLIFICATION + + + + - C - q - K - ( - ) - / + C + K + p + / - + + Candidates per required winner + + @@ -492,13 +495,10 @@ z - + Required output - - 1.0K - - + @@ -506,9 +506,9 @@ z - - - + + + E x @@ -517,21 +517,30 @@ z s s   - t - i - e - s -   - a - t -   - τ + b + o + u + n + d + a + r + y +   + t + i + e + s + : +   + ( + ) + + C + τ + K - - 0.3K - @@ -541,28 +550,34 @@ z - + - S - h - e - l - l - : -   - - < - q - x - τ + B + o + u + n + d + a + r + y +   + s + h + e + l + l + : +   + + < + q + x + τ - 1.0K - - @@ -587,10 +602,10 @@ z - + V2 - + @@ -621,10 +636,10 @@ z - + Exact bin counts - + @@ -657,7 +672,7 @@ z - + Schematic finite-score example · population counts only @@ -665,8 +680,8 @@ z - - + + diff --git a/docs/source/blogs/media/gvr_v2/plot_results.py b/docs/source/blogs/media/gvr_v2/plot_results.py index c4fe5ec3c741..dea456ea4778 100644 --- a/docs/source/blogs/media/gvr_v2/plot_results.py +++ b/docs/source/blogs/media/gvr_v2/plot_results.py @@ -328,7 +328,7 @@ def _candidate_work() -> None: """Illustrate tail counts and candidate amplification without measured data.""" fig = plt.figure(figsize=(16.7, 7.5), facecolor="white") ink, muted = "#17202b", "#52616f" - green, blue, orange, rose = "#447a00", "#386781", "#b56b0b", "#ad4b70" + green, orange, rose = "#447a00", "#b56b0b", "#ad4b70" canvas = fig.add_axes((0, 0, 1, 1)) canvas.set(xlim=(0, 1), ylim=(0, 1)) canvas.axis("off") @@ -362,56 +362,79 @@ def _candidate_work() -> None: ) # One finite row defines both panels, including the left-continuous tie jump. - scores = np.array([0.8, 1.4, 2.2, 3.0, 3.8, 4.6, 5.4, 6.1, 6.8, 7.5, 8.2, 8.8, 9.4]) - multiplicities = np.array([60, 40, 45, 40, 25, 20, 30, 35, 35, 58, 27, 20, 25]) + scores = np.array([1.4, 3.0, 5.8, 7.5, 9.0]) + multiplicities = np.array([70, 80, 70, 70, 60]) row = np.repeat(scores, multiplicities) - k, q, tau = 100, 5.0, 7.5 + k, q, tau = 100, 4.4, 7.5 admitted = int(np.count_nonzero(row >= q)) at_boundary = int(np.count_nonzero(row >= tau)) above_boundary = int(np.count_nonzero(row > tau)) excess = at_boundary - k shell = admitted - at_boundary - ax = fig.add_axes((0.089, 0.32, 0.379, 0.425), facecolor="#f8fafc") - ax.set(xlim=(0, 10), ylim=(0, 4.85)) - ax.axhspan(1, 3.5, color="#eaf3de", zorder=0) - for level in (1, 3.5): + ax = fig.add_axes((0.089, 0.32, 0.335, 0.425), facecolor="#f8fafc") + ax.set(xlim=(0, 10), ylim=(0, 3.9)) + ax.axhspan(1, 2.8, color="#edf4e5", zorder=0) + for level in (1, 2.8): ax.axhline(level, color="#adc096", linewidth=1, linestyle=(0, (4, 4))) thresholds = np.r_[0, scores, 10] counts = np.array([np.count_nonzero(row >= t) / k for t in thresholds]) ax.step(thresholds, counts, where="pre", color=ink, linewidth=2.3, zorder=3) - boundaries = np.array([2.6, 3.4, 4.2, 5.8, 6.4, 7.1, 7.9]) - populations = np.array([np.count_nonzero(row >= t) / k for t in boundaries]) - ax.scatter(boundaries, populations, s=32, color=blue, edgecolor="white", linewidth=1, zorder=4) - ax.text(9.7, 4.3, "Over capacity", color=muted, fontsize=11.5, ha="right") - ax.text(0.25, 1.25, "Feasible admission", color=green, fontsize=11.5) - ax.text(0.25, 0.28, "Too few candidates", color=orange, fontsize=11.5) + ax.text(9.7, 3.28, "Over capacity", color=muted, fontsize=11.5, ha="right") + ax.text(0.25, 0.25, "Too few candidates", color=muted, fontsize=11.5) ax.vlines(q, 0, admitted / k, color=green, linewidth=1.2, linestyles=(0, (3, 3))) ax.scatter([q], [admitted / k], s=110, color=green, edgecolor="white", linewidth=1.4, zorder=5) - ax.annotate( - rf"$C(q)={admitted / k:.1f}K$", - (q, admitted / k), - (5.1, 3.0), + ax.text( + 4.6, + 2.31, + r"$C_p=C(q)$", color=green, - fontsize=14, + fontsize=15, ha="center", - bbox={"boxstyle": "round,pad=0.3", "facecolor": "white", "edgecolor": "#c6d9b2"}, - arrowprops={"arrowstyle": "-", "color": green, "lw": 1.2}, ) ax.vlines(tau, 0, at_boundary / k, color=rose, linewidth=1.1, linestyles=(0, (3, 3))) - ax.plot([tau, tau], [above_boundary / k, at_boundary / k], color=rose, linewidth=3, zorder=5) ax.scatter([tau], [at_boundary / k], s=42, color=rose, zorder=6) ax.scatter([tau], [above_boundary / k], s=35, facecolor="white", edgecolor=rose, zorder=6) - ax.annotate( - rf"$C(\tau)={at_boundary / k:.1f}K$", - (tau, at_boundary / k), - (8.1, 2.0), + ax.text( + 7.6, + 1.56, + r"$C(\tau)$", ha="center", fontsize=12.5, color=rose, - arrowprops={"arrowstyle": "-", "color": rose, "lw": 1.1}, ) - ax.set_yticks([0, 1, 3.5], ["0", r"$K$", r"$B_r$"]) + # Brackets split C(q), not the entire tie jump: K cuts through that jump. + for start, stop, color, symbol in ( + (0, 1, green, r"$K$"), + (1, at_boundary / k, rose, r"$E$"), + (at_boundary / k, admitted / k, orange, r"$D$"), + ): + ax.plot( + [10.14, 10.38, 10.38, 10.14], + [start, start, stop, stop], + color=color, + linewidth=1.8, + clip_on=False, + ) + ax.text( + 10.72, + (start + stop) / 2, + symbol, + color=color, + fontsize=16, + va="center", + clip_on=False, + ) + ax.hlines( + [at_boundary / k, admitted / k], + [tau, q], + [10.14, 10.14], + colors=[rose, green], + linewidth=0.9, + linestyles=(0, (3, 3)), + clip_on=False, + ) + ax.set_yticks([0, 1, 2.8], ["0", r"$K$", r"$B_r$"]) ax.set_xticks([q, tau], [r"$q$", r"$\tau$"]) for tick, color in zip(ax.get_xticklabels(), (green, rose)): tick.set_color(color) @@ -420,18 +443,24 @@ def _candidate_work() -> None: ax.tick_params(length=0, pad=7, labelsize=13) ax.spines["left"].set_color("#cbd5e1") ax.spines["bottom"].set_color("#cbd5e1") - fig.text(0.089, 0.223, "● Exact counts from one classification", fontsize=11.5, color=blue) + fig.text( + 0.089, + 0.223, + r"Safe admission: $K\leq C(q)\leq B_r$", + fontsize=12, + color=green, + ) fig.text(0.55, 0.732, "CANDIDATE AMPLIFICATION", fontsize=10.5, weight="bold", color=muted) - fig.text(0.55, 0.66, f"{admitted / k:.1f}×", fontsize=33, weight="bold", color=green) - fig.text(0.652, 0.677, r"$C(q)\,/\,K$", fontsize=19, color=ink) + fig.text(0.55, 0.666, r"$C_p\,/\,K$", fontsize=26, color=green) + fig.text(0.665, 0.678, "Candidates per required winner", fontsize=12.5, color=ink) right = fig.add_axes((0.55, 0.564, 0.392, 0.072)) right.set(xlim=(0, admitted), ylim=(0, 1)) right.axis("off") segments = [ (k, "#deedc8", green, r"$K$", "Required output"), - (excess, "#f3dce5", rose, r"$E$", r"Excess ties at $\tau$"), - (shell, "#fae6c7", orange, r"$D$", r"Shell: $q\leq x<\tau$"), + (excess, "#f3dce5", rose, r"$E$", r"Excess boundary ties: $C(\tau)-K$"), + (shell, "#fae6c7", orange, r"$D$", r"Boundary shell: $q\leq x<\tau$"), ] left = 0 for i, (width, fill, color, symbol, label) in enumerate(segments): @@ -444,16 +473,6 @@ def _candidate_work() -> None: y = 0.499 - i * 0.079 fig.text(0.555, y, symbol, fontsize=18, color=color, va="center") fig.text(0.589, y, label, fontsize=13, color=ink, va="center") - fig.text( - 0.94, - y, - f"{width / k:.1f}K", - fontsize=13, - color=color, - ha="right", - va="center", - weight="bold", - ) canvas.plot([0.55, 0.943], [y - 0.037, y - 0.037], color="#e1e7ec", lw=0.8) left += width fig.text(0.746, 0.24, r"$C_p=C(q)=K+E+D(q,\tau)$", fontsize=19, ha="center", color=ink) diff --git a/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md b/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md index 163522860d72..db6bf7109128 100644 --- a/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md +++ b/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md @@ -163,9 +163,9 @@ $$ Here $E$ counts excess entries tied at the boundary, and $D$ counts scores in the shell $q\le x_i\lt\tau$. Dense scores near the boundary can turn a small threshold error into large **candidate amplification**. Temporal overlap alone therefore cannot predict refinement work. -![Threshold admission and candidate amplification for one schematic score row. A staircase tail count marks feasible admission and boundary ties; a proportional bar splits 2.3K candidates into K output, 0.3K excess ties, and a K-sized shell.](../media/gvr_v2/candidate_work.svg) +![Threshold admission and candidate amplification for one schematic score row. A simplified tail-count curve labels the K required winners, E excess boundary ties, and D additional shell candidates that make up the admitted population Cp. The right panel explains the same three components without numerical ratios.](../media/gvr_v2/candidate_work.svg) -*Figure 5.* A: exact tail counts identify thresholds satisfying $K\le C(q)\le B_r$, where $B_r$ is candidate capacity; failed admission requires continued verification or exact recovery. B: the same schematic row yields 2.3× candidate amplification, split into required output, excess ties, and the boundary shell. Exact handling of ties preserves the Top-K value multiset. +*Figure 5.* A: exact tail counts identify thresholds satisfying $K\le C(q)\le B_r$, where $B_r$ is candidate capacity. The labeled segments split the admitted population into required winners, excess boundary ties, and the boundary shell. B: candidate amplification arises from the latter two components; their proportions are schematic. Exact handling of ties preserves the Top-K value multiset. Self-sampling aims to place admission near the current tail; multi-thresholding separates certain winners, the crossing bin, and lower bins. V2 balances full-row reads against candidate handling over $C(q)$ entries and exact refinement over $m$ crossing-bin candidates. From 3d4042271e60ef0fb4a45c1bbbbc3e5a509d21ca Mon Sep 17 00:00:00 2001 From: longcheng-nv <243710427+longcheng-nv@users.noreply.github.com> Date: Fri, 18 Sep 2026 08:44:34 +0000 Subject: [PATCH 28/33] [None][doc] Explain GVR V1 local wins and center blog tables Signed-off-by: longcheng-nv <243710427+longcheng-nv@users.noreply.github.com> --- ...ampling_Exact_TopK_for_Sparse_Attention.md | 64 +++++++++++++++---- 1 file changed, 52 insertions(+), 12 deletions(-) diff --git a/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md b/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md index db6bf7109128..7dda79050f47 100644 --- a/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md +++ b/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md @@ -67,8 +67,10 @@ The V3.2 +1 shift is a temporal prediction rule. Its overlap measures how well t Near-64K measurements also expose dependence on the input and layer: +

+ *Distribution of per-layer mean hit rates, with layer IDs matched between inputs within each model. Each layer is averaged over its decode steps and then weighted equally; P10–P90 and min–max describe those layer means, not individual transitions. V3.2 uses +1 alignment.* V4 Pro's mean changes from **71.5% to 57.9%** between these inputs, and its random-token P10–P90 spans **33.6–80.4%**. V3.2 has similar overall means across inputs, yet its weakest SWE-bench layer averages only **5.7%**. **An average overlap cannot serve as a dependable per-row performance assumption.** The table exposes variation across inputs and layers; Figure 2 adds the abrupt changes within a layer over time. @@ -88,8 +92,10 @@ V2 calibrates from the **current row**, removing dependence on temporal overlap V1's prior also has a lifecycle outside the kernel. GVR V1 has no prefill engine: TensorRT-LLM uses radix for prefill and can seed the decode prior from each request's last prefill selection. That phase-dependent history complicates a common selection architecture. V2's current-row calibration removes the Top-K prior dependency, allowing phase differences to stay in dispatch and row-interface adapters. The [integration section](#decode-and-prefill-in-tensorrt-llm) traces the consequences for CUDA Graph preparation and disaggregated serving. +
+ | Algorithm question | GVR V1 (temporal hint) | Streaming GVR V2 | -| :--- | :--- | :--- | +| :---: | :---: | :---: | | Where does the guess come from? | Current scores gathered through previous-step indices | Packed sample windows spread across the current row | | What makes the guess useful? | High, stable overlap with previous winners | Coverage of the current row's score distribution | | What guides admission? | A hint-derived pivot and rescue rung | Sample-derived primary threshold, lower safety floor, and upper anchor | @@ -99,19 +105,29 @@ V1's prior also has a lifecycle outside the kernel. GVR V1 has no prefill engine | How do prefill and decode relate? | Radix prefill; its last selection can seed temporal decode | Shared streaming selection with phase-specific row adapters | | How does a bad guess affect the result? | More admission/refinement work or recovery; membership remains exact | Lower admission or exact recovery; membership remains exact | +
+ ![GVR V1 and streaming V2 both use multi-thresholding. V1 calibrates through previous winners; V2 samples the current row without a temporal prior. Measured bars compare GVR V1 and V2.](../media/gvr_v2/evolution.svg) *Figure 3. Multi-thresholding is shared by GVR V1 and V2. The flows emphasize their calibration and refinement choices on streaming paths; the bars compare complete GVR V1 and V2 implementations over radix CUDA. V2 removes the temporal-overlap dependency and prior-state lifecycle.* GVR V1 achieves **3.47×** speedup over radix CUDA; V2 reaches **5.05×**. V2 is **1.46× faster than GVR V1**. These gains compare complete implementations, including their calibration, verification, refinement, and execution paths. -The improvement also extends to the lower end of the measured speedup distribution: +The fifth percentile remains above parity, while the minimum exposes workloads where V1 retains an advantage: + +
| Baseline | Geomean speedup | P5 speedup | Minimum speedup | V2 faster | -| :--- | ---: | ---: | ---: | ---: | +| :---: | :---: | :---: | :---: | :---: | | GVR V1 | **1.46×** | **1.10×** | 0.689× | 99.57% | -P5 is the fifth percentile across workload-level speedups, each computed from mean kernel times. These results support broad improvement across tested workloads while retaining local regressions. Runtime P95/P99 latency and a fixed worst-case bound require different evidence; the stronger performance floor remains a design objective. +
+ +P5 is the fifth percentile across workload-level speedups, each computed as V1 time divided by V2 time. The **0.689× minimum means V2 takes about 45% longer than V1** in the worst measured case. The 99.57% win rate supports broad improvement, while this minimum makes the remaining regressions explicit. + +**V1's calibration with temporal hints can still produce a better admission threshold.** An informative prior, validated against current-row samples, can let V1 admit a tighter candidate set than self-sampling. Diagnostics of the pronounced large-batch regressions show V1 accepting enough candidates on its first pass, while V2 initially admits fewer than $K$ scores and rescans at a lower threshold. This identifies extra admission work; differences in dispatch and refinement also contribute to total kernel cost. + +These local wins fit the motivation for moving beyond temporal hints. Their usefulness varies across inputs, layers, and decode steps, and their true overlap is unavailable before selection. V2 removes that unstable dependency to improve robustness and average latency with a shared current-row selection core. Self-sampling can still misestimate a tail, so its admission margin and recovery cost remain optimization targets. **A stronger practical performance floor is a design objective, not a guarantee that V2 beats V1 on every input.** This workload distribution also does not establish runtime P95/P99 latency or a fixed worst-case bound. ### From Floyd–Rivest SELECT to GPU Top-K @@ -127,13 +143,17 @@ This belongs to a comparison model with random-sampling assumptions; the origina GVR V2 carries that principle into a different cost model: +
+ | Design choice | Floyd–Rivest theoretical SELECT | GVR V2 streaming | -| :--- | :--- | :--- | +| :---: | :---: | :---: | | Primary objective | Expected element comparisons | Kernel latency: input passes, memory traffic, and parallel work | | Calibration | Random sample and sample order statistics | Regularly spaced, packed sample windows and histogram quantiles | | Remaining selection | Exact partitioning and recursive selection | Exact bin counts, crossing-bin refinement, and recovery | | Result | An element at the requested rank | An exact set of $K$ indices, without requiring sorted output | +
+ On a GPU, doing more work on chip can be worthwhile if it avoids another full-row read. V2 couples sampling to candidate capacity, vectorized loads, and multi-threshold counts. **The inherited idea is sample-guided exact selection; the optimization target is GPU execution cost.** Its deterministic sampling policy does not inherit SELECT's randomized comparison bound. Exactness follows from full-row accounting and exact refinement or recovery. ## Self-Sampling and Multi-Thresholding @@ -177,11 +197,15 @@ V2 calibrates inside the selection kernel, using the current row's layout to gen A **sample window** is a contiguous group of scores. A CUDA thread block processes many such windows. The streaming families use these layouts: +
+ | Family | Scores per window | Loads and logical ownership | -| :--- | :--- | :--- | +| :---: | :---: | :---: | | `main` | 8 FP32 scores = 32 bytes | One work item loads two adjacent `float4` vectors | | `clus` | 16 FP32 scores = 64 bytes | Two work items each load two vectors, covering the lower and upper halves | +
+ Regular spacing spreads the windows across the valid row. The sampling budget sets their count and spacing, while bounds and alignment handling keep loads valid for each phase. A thread block processes more windows in iterations when the sample exceeds its parallel capacity. **Why eight?** Eight FP32 scores fill a 32-byte memory sector when the window is sector-aligned. A scattered scalar sample can use only four bytes from each fetched sector. Two adjacent, 16-byte-aligned `float4` loads consume the whole window, giving more sample values per touched sector. This is local packing within each window; widely spaced windows still produce strided accesses across the warp. The [CUDA memory-access model](https://docs.nvidia.com/cuda/cuda-c-best-practices-guide/index.html#coalesced-access-to-global-memory) explains the sector granularity. Actual sector traffic also depends on the row's alignment and cache state. @@ -263,13 +287,17 @@ The output contract is an exact selected **value multiset** with valid unique in A single scheduling policy cannot serve both one short row and thousands of long rows efficiently. GVR V2 uses four kernel families, implemented in CuTe DSL: +
+ | Family | Where the scores or candidates live | Why it helps | -| :--- | :--- | :--- | +| :---: | :---: | :---: | | `reg` | A row resides in one thread block's registers | Avoids repeated global loads when the row fits | | `reg_clus` | Register slices across cooperating blocks | Exposes more parallelism for medium rows at small batch sizes | | `clus` | Streaming shards; histograms and candidates shared within a hardware cluster | Merges through distributed shared memory | | `main` | Streaming scan with bounded candidate staging | Covers the remaining shapes, including long rows and large batches | +
+ A thread block is also called a cooperative thread array, or CTA. Blackwell thread-block clusters let cooperating CTAs exchange data through distributed shared memory. This reduces the need to materialize intermediate results in global memory for eligible shapes. Register families bypass sparse sampling but retain exact histogram crossing and refinement. In the normal case, the first $K$ current-row values establish the initial bracket; near the short-row regime, a whole-row bracket is used. Full-row classification and exact crossing refinement still determine the output. The `main` family can assign multiple CTAs to a row when a small batch would otherwise leave much of the GPU idle. @@ -286,22 +314,30 @@ This explains the two sources of performance improvement: a better starting thre The benchmarks use FP32 indexer scores from the three models below on NVIDIA B200. Batch size $B$ counts score rows: each case repeats one captured row across 1 to 1,024 batch rows to measure kernel scaling. It does not represent heterogeneous serving concurrency. GVR V2 uses the merged [PR #19076](https://github.com/NVIDIA/TensorRT-LLM/pull/19076) implementation. Results report cold-L2 GPU kernel time, excluding compilation, input preparation, and Python overhead. Speedups are geometric means over matched workloads from separate benchmark runs. The grid uses single-token decode and case-matched launch envelopes; ragged batches, MTP, and prefill require separate evaluation. Historical serving results appear in the [integration section](#serving-gains-from-the-shared-engine). +
+ | Model | $K$ | Indexer compression | Valid row lengths $N$ | -| :--- | ---: | ---: | :--- | +| :---: | :---: | :---: | :---: | | DeepSeek-V4 Flash | 512 | 4 | 1,027–262,127 | | DeepSeek-V4 Pro | 1,024 | 4 | 1,027–262,127 | | DeepSeek-V3.2 | 2,048 | 1 | 4,111–163,775 | +
+ **$N$ is the indexer row width, not the original prompt length.** A roughly 512K-token V4 context yields a roughly 128K-wide indexer row because of 4× compression. #### Overall Results +
+ | Baseline | Geomean speedup | Minimum speedup | GVR V2 faster | -| :--- | ---: | ---: | ---: | +| :---: | :---: | :---: | :---: | | GVR V1 | **1.46×** | 0.689× | 99.57% | | TensorRT-LLM radix CUDA dispatch | **5.05×** | 1.34× | 100.00% | -Both comparisons use the same 9,746 cases. The minimum column retains individual regressions, including the GVR V1 cases where V2 is slower. Figure 1 shows the model-level comparison over this same workload grid. +
+ +Both comparisons use the same 9,746 cases. The minimum column retains individual regressions, including the GVR V1 cases where V2 is slower; the [V1-to-V2 discussion](#from-gvr-v1-to-v2-why-move-beyond-temporal-hints) explains how informative temporal hints can retain an admission advantage. Figure 1 shows the model-level comparison over this same workload grid. #### The Gains Extend Beyond an Average @@ -370,12 +406,16 @@ $$ It measures efficiency relative to the ideal traffic bound. The table compares **average / peak reachable rate** along each Pareto curve: the average weights the plotted intensity points equally, and the peak is their maximum. Both use the same layer-averaged timings as Figure 9B. +
+ | Operator | V4 Flash | V4 Pro | V3.2 | -| :--- | ---: | ---: | ---: | +| :---: | :---: | :---: | :---: | | **GVR V2** | **41.6% / 77.8%** | **39.0% / 68.4%** | **41.5% / 66.5%** | | GVR V1 | 26.1% / 63.3% | 25.4% / 58.9% | 27.8% / 51.1% | | TensorRT-LLM radix CUDA | 7.7% / 16.9% | 7.8% / 16.4% | 8.3% / 17.8% | +
+ *Each cell shows average / peak.* GVR V2 leads both measures on all three models: its average reachable rate is **39.0–41.6%**, with peaks of **66.5–77.8%**. GVR V1 is the stronger baseline by both measures, averaging **25.4–27.8%**, with peaks of **51.1–63.3%**. On V3.2, it reaches **27.8% / 51.1%**, compared with V2's **41.5% / 66.5%**. Reporting both measures captures the best operating point and the performance sustained across the curve. From 6642d61aeba437b90d530a08de92a8af61539a81 Mon Sep 17 00:00:00 2001 From: longcheng-nv <243710427+longcheng-nv@users.noreply.github.com> Date: Sat, 19 Sep 2026 00:52:39 +0000 Subject: [PATCH 29/33] [None][doc] Add GVR V1 speedup heatmap to GVR V2 blog Signed-off-by: longcheng-nv <243710427+longcheng-nv@users.noreply.github.com> --- docs/source/blogs/media/gvr_v2/README.md | 14 +- docs/source/blogs/media/gvr_v2/gvr_v1_map.svg | 1770 +++++++++++++++++ .../source/blogs/media/gvr_v2/plot_results.py | 52 +- ...ampling_Exact_TopK_for_Sparse_Attention.md | 22 +- 4 files changed, 1838 insertions(+), 20 deletions(-) create mode 100644 docs/source/blogs/media/gvr_v2/gvr_v1_map.svg diff --git a/docs/source/blogs/media/gvr_v2/README.md b/docs/source/blogs/media/gvr_v2/README.md index 52129d74970f..6a85b3968502 100644 --- a/docs/source/blogs/media/gvr_v2/README.md +++ b/docs/source/blogs/media/gvr_v2/README.md @@ -19,7 +19,7 @@ With NumPy and Matplotlib installed, run from the repository root: python docs/source/blogs/media/gvr_v2/plot_results.py ``` -The script regenerates `summary.json` and nine SVGs: `speedup.svg`, `evolution.svg`, `candidate_work.svg`, `algorithm.svg`, `gpu_sampling.svg`, `radix_cuda_map.svg`, `latency.svg`, `roofline.svg`, and `integration.svg`. It requires no GPU. The algorithm diagrams are schematic; every performance panel uses the bundled timing observations. +The script regenerates `summary.json` and ten SVGs: `speedup.svg`, `evolution.svg`, `candidate_work.svg`, `algorithm.svg`, `gpu_sampling.svg`, `radix_cuda_map.svg`, `gvr_v1_map.svg`, `latency.svg`, `roofline.svg`, and `integration.svg`. It requires no GPU. The algorithm diagrams are schematic; every performance panel uses the bundled timing observations. The remaining figure, [temporal_overlap.svg](temporal_overlap.svg), is an author-supplied illustration converted directly from its standalone PDF. Its labels, axes, and plotted contents are preserved. It is not generated by `plot_results.py` or derived from the kernel-timing CSVs. @@ -105,7 +105,7 @@ The primary reference is the hint-free GVR V2 `run_varlen` implementation from [ The device kernel and host dispatcher at the [main revision audited on September 17, 2026](https://github.com/NVIDIA/TensorRT-LLM/commit/73c70633b2547eedf0c91f85e760aec534f6af84) are byte-identical to those measured for the reference. This establishes source continuity for those files, not a new whole-framework performance measurement. -Figures 1, 3, and 7–9 and their numerical summaries all use this PR #19076 reference. B300 measurements are outside the B200 comparison. Historical serving experiments retain their original implementation scope, as described below. +Figures 1, 3, and 7–10 and their numerical summaries all use this PR #19076 reference. B300 measurements are outside the B200 comparison. Historical serving experiments retain their original implementation scope, as described below. | Implementation | Relevant comparison contract | | :--- | :--- | @@ -139,6 +139,10 @@ Figure 1 uses the same cases for all three implementations within each model: 2, The latency and roofline curves use arithmetic-mean durations over all captured layers at each row-length/batch point: 21 layers for Flash, 30 for Pro, and 61 for V3.2. All layers at each plotted point have the same valid width. The radix CUDA comparison heatmap (Figure 7) instead geometrically averages per-layer `radix_cuda_us / gvr_v2_us` ratios at each shape, using the same layers. It contains 275 cells: 99 each for Flash and Pro, and 77 for V3.2, covering all 11 batch sizes. The panels share a 1–21× color scale with parity at 1.0, and cell labels round to one decimal place. The cell values range from 1.522571× to 20.182551×, with no clipping by the color scale. A shape average can hide variation among individual cases. +The GVR V1 comparison heatmap (Figure 8) uses the same 275 shapes and layer weights, with per-layer `temporal_tiered_us / gvr_v2_us` ratios. Its shared 1–3× scale is separate from the radix heatmap's scale; cell labels round to two decimal places. Shape averages range from 1.053828× to 2.865232× without clipping. Per-model minima/maxima are 1.058428×/2.865232× for Flash, 1.053828×/2.828985× for Pro, and 1.100878×/1.862122× for V3.2. + +All shape averages exceed one, but 15 shapes contain at least one slower constituent layer: one for Flash, six for Pro, and eight for V3.2. An orange corner identifies these cells using the unrounded per-layer ratios and a strict below-one comparison. There are 41 individual regressing cases overall; the markers indicate their presence, not their count or magnitude, and do not claim statistical significance. At Pro N=131,075 and B=512, the 30-layer geometric mean is 1.053828× while the minimum layer ratio is 0.688535×. These are the same observations used in the article's overall comparison. + Correctness compares selected value multisets with `torch.topk`, allowing tied indices to differ. The capture-grid checks do not establish NaN ordering parity or a universal tie order. The linked implementation PRs additionally cover padding, variable lengths, exceptional values, and graph replay. ## Additional Numerical Views @@ -152,7 +156,7 @@ The article uses Figure 1 for the model-level comparison. The following table us *Each model column uses the same workloads for both baselines.* -For a concrete large-batch slice, the following times are at $B=1024$ and $N\approx131{,}072$, averaged over the same layers as Figure 8: +For a concrete large-batch slice, the following times are at $B=1024$ and $N\approx131{,}072$, averaged over the same layers as Figure 9: | Model | GVR V2 | GVR V1 | Radix CUDA | | :--- | ---: | ---: | ---: | @@ -167,9 +171,9 @@ The logical work is `W = B*N` abstract comparisons and the minimum traffic is `Q The full model is `min(R, BW*I)`. The theoretical parameters are `R=37.224960 Tcompare/s` and `BW=8 TB/s`; calibrated parameters are `R=37.047490 Tcompare/s` and `BW=6.912116 TB/s`. Their knees are 4.65312 and approximately 5.35979 compare/byte, above Top-K's ideal `[0.125, 0.25)` intensity range. The semantic comparison convention counts two binary comparisons per FMNMX3 result; it is not FP32 FLOPS. -Figure 9B uses linear axes at B=1024. In this article, a Pareto curve denotes each operator's measured intensity–throughput trace across row lengths at that fixed batch. The points connect in intensity order; the curve is not a computed nondominated frontier or a search over configurations. Figure 8 also shows B=1, and the Figure 7 heatmap covers all 11 batches. +Figure 10B uses linear axes at B=1024. In this article, a Pareto curve denotes each operator's measured intensity–throughput trace across row lengths at that fixed batch. The points connect in intensity order; the curve is not a computed nondominated frontier or a search over configurations. Figure 9 also shows B=1, and the heatmaps in Figures 7–8 cover all 11 batches. -Reachable rate is `100 * P / min(R, BW*I)` percent, using the calibrated roof. Compute each point from the arithmetic-mean duration across the same 21/30/61 layers used in Figure 9B for Flash/Pro/V3.2. The average reachable rate is the unweighted arithmetic mean of these point-level percentages, and the peak is their maximum. Flash and Pro each contribute nine intensity points; V3.2 contributes seven. The average is not weighted by row length or serving frequency. `summary.json` records the point counts and average/peak percentages under `roofline_reachable_rate`. +Reachable rate is `100 * P / min(R, BW*I)` percent, using the calibrated roof. Compute each point from the arithmetic-mean duration across the same 21/30/61 layers used in Figure 10B for Flash/Pro/V3.2. The average reachable rate is the unweighted arithmetic mean of these point-level percentages, and the peak is their maximum. Flash and Pro each contribute nine intensity points; V3.2 contributes seven. The average is not weighted by row length or serving frequency. `summary.json` records the point counts and average/peak percentages under `roofline_reachable_rate`. Every plotted point lies on the bandwidth branch of the roof. With elapsed time `t` and consistent units, the fractional reachable rate simplifies to `(W/t)/(BW*W/Q_min) = Q_min/(BW*t)`; multiply by 100 for percent. This is the ideal minimum-traffic time `Q_min/BW` divided by measured time. The cancellation of `W` explains why the comparison convention does not change the reachable rate on this branch. Additional traffic and kernel work remain in `t`, so the rate does not measure actual DRAM bytes transferred or bandwidth utilization. diff --git a/docs/source/blogs/media/gvr_v2/gvr_v1_map.svg b/docs/source/blogs/media/gvr_v2/gvr_v1_map.svg new file mode 100644 index 000000000000..3ad9fd7430c6 --- /dev/null +++ b/docs/source/blogs/media/gvr_v2/gvr_v1_map.svg @@ -0,0 +1,1770 @@ + + + + + + + + Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. SPDX-License-Identifier: Apache-2.0 + image/svg+xml + + + Matplotlib v3.10.8, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + + + + + + + + + 2 + + + + + + + + + + 4 + + + + + + + + + + 8 + + + + + + + + + + 16 + + + + + + + + + + 32 + + + + + + + + + + 64 + + + + + + + + + + 128 + + + + + + + + + + 256 + + + + + + + + + + 512 + + + + + + + + + + 1024 + + + + Batch size B + + + + + + + + + + + + + + 1K + + + + + + + + + + 2K + + + + + + + + + + 4K + + + + + + + + + + 8K + + + + + + + + + + 16K + + + + + + + + + + 32K + + + + + + + + + + 64K + + + + + + + + + + 128K + + + + + + + + + + 256K + + + + Valid row length N (rounded) + + + + + + + + + + 1.34 + + + 1.32 + + + 1.33 + + + 1.33 + + + 1.27 + + + 1.26 + + + 1.25 + + + 1.24 + + + 1.48 + + + 2.12 + + + 2.87 + + + 1.40 + + + 1.40 + + + 1.36 + + + 1.36 + + + 1.33 + + + 1.31 + + + 1.30 + + + 1.28 + + + 1.66 + + + 2.21 + + + 2.63 + + + 1.42 + + + 1.41 + + + 1.42 + + + 1.40 + + + 1.36 + + + 1.34 + + + 1.32 + + + 1.30 + + + 1.76 + + + 2.20 + + + 2.69 + + + 1.68 + + + 1.66 + + + 1.67 + + + 1.65 + + + 1.59 + + + 1.57 + + + 1.52 + + + 1.44 + + + 1.65 + + + 1.99 + + + 2.15 + + + 1.45 + + + 1.44 + + + 1.46 + + + 1.48 + + + 1.42 + + + 1.42 + + + 1.60 + + + 1.54 + + + 1.54 + + + 1.97 + + + 1.98 + + + 1.33 + + + 1.34 + + + 1.28 + + + 1.28 + + + 2.00 + + + 1.90 + + + 1.71 + + + 1.44 + + + 1.48 + + + 1.74 + + + 1.71 + + + 1.54 + + + 1.49 + + + 1.44 + + + 1.42 + + + 2.00 + + + 2.01 + + + 1.82 + + + 1.66 + + + 1.56 + + + 1.77 + + + 1.70 + + + 1.22 + + + 1.22 + + + 1.18 + + + 2.21 + + + 1.61 + + + 1.80 + + + 1.92 + + + 1.70 + + + 1.13 + + + 1.13 + + + 1.22 + + + 1.12 + + + 1.12 + + + 1.06 + + + 1.38 + + + 1.71 + + + 1.89 + + + 1.71 + + + 1.46 + + + 1.15 + + + 1.13 + + + 1.23 + + + DeepSeek-V4 Flash · K=512 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + + + + + + + + + 2 + + + + + + + + + + 4 + + + + + + + + + + 8 + + + + + + + + + + 16 + + + + + + + + + + 32 + + + + + + + + + + 64 + + + + + + + + + + 128 + + + + + + + + + + 256 + + + + + + + + + + 512 + + + + + + + + + + 1024 + + + + Batch size B + + + + + + + + + + + 1K + + + + + + + + + + 2K + + + + + + + + + + 4K + + + + + + + + + + 8K + + + + + + + + + + 16K + + + + + + + + + + 32K + + + + + + + + + + 64K + + + + + + + + + + 128K + + + + + + + + + + 256K + + + + Valid row length N (rounded) + + + + + + + + + + 1.31 + + + 1.35 + + + 1.31 + + + 1.31 + + + 1.27 + + + 1.26 + + + 1.25 + + + 1.24 + + + 1.26 + + + 1.82 + + + 2.50 + + + 1.45 + + + 1.41 + + + 1.42 + + + 1.42 + + + 1.35 + + + 1.33 + + + 1.31 + + + 1.27 + + + 1.55 + + + 2.06 + + + 2.51 + + + 1.55 + + + 1.61 + + + 1.61 + + + 1.60 + + + 1.53 + + + 1.52 + + + 1.49 + + + 1.44 + + + 1.80 + + + 2.29 + + + 2.83 + + + 1.78 + + + 1.76 + + + 1.78 + + + 1.77 + + + 1.71 + + + 1.69 + + + 1.64 + + + 1.54 + + + 1.76 + + + 1.96 + + + 2.10 + + + 1.51 + + + 1.50 + + + 1.52 + + + 1.53 + + + 1.48 + + + 1.48 + + + 1.56 + + + 1.51 + + + 1.56 + + + 1.97 + + + 1.98 + + + 1.43 + + + 1.44 + + + 1.41 + + + 1.39 + + + 2.09 + + + 1.98 + + + 1.80 + + + 1.31 + + + 1.49 + + + 1.75 + + + 1.72 + + + 1.52 + + + 1.48 + + + 1.45 + + + 1.43 + + + 2.06 + + + 2.05 + + + 1.88 + + + 1.45 + + + 1.46 + + + 1.66 + + + 1.58 + + + 1.20 + + + 1.21 + + + 1.18 + + + 2.19 + + + 1.52 + + + 1.59 + + + 1.88 + + + 1.51 + + + 1.06 + + + 1.05 + + + 1.12 + + + 1.22 + + + 1.18 + + + 1.11 + + + 1.38 + + + 1.82 + + + 1.89 + + + 1.85 + + + 1.51 + + + 1.12 + + + 1.06 + + + 1.14 + + + DeepSeek-V4 Pro · K=1024 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + + + + + + + + + 2 + + + + + + + + + + 4 + + + + + + + + + + 8 + + + + + + + + + + 16 + + + + + + + + + + 32 + + + + + + + + + + 64 + + + + + + + + + + 128 + + + + + + + + + + 256 + + + + + + + + + + 512 + + + + + + + + + + 1024 + + + + Batch size B + + + + + + + + + + + 4K + + + + + + + + + + 8K + + + + + + + + + + 16K + + + + + + + + + + 32K + + + + + + + + + + 64K + + + + + + + + + + 128K + + + + + + + + + + 160K + + + + Valid row length N (rounded) + + + + + + + + + + 1.25 + + + 1.23 + + + 1.20 + + + 1.20 + + + 1.16 + + + 1.15 + + + 1.14 + + + 1.13 + + + 1.54 + + + 1.54 + + + 1.63 + + + 1.40 + + + 1.39 + + + 1.39 + + + 1.39 + + + 1.35 + + + 1.35 + + + 1.33 + + + 1.28 + + + 1.57 + + + 1.73 + + + 1.81 + + + 1.20 + + + 1.18 + + + 1.16 + + + 1.17 + + + 1.16 + + + 1.13 + + + 1.10 + + + 1.11 + + + 1.50 + + + 1.83 + + + 1.84 + + + 1.21 + + + 1.19 + + + 1.19 + + + 1.18 + + + 1.64 + + + 1.48 + + + 1.43 + + + 1.35 + + + 1.53 + + + 1.71 + + + 1.67 + + + 1.27 + + + 1.25 + + + 1.25 + + + 1.23 + + + 1.66 + + + 1.55 + + + 1.54 + + + 1.40 + + + 1.50 + + + 1.65 + + + 1.55 + + + 1.24 + + + 1.21 + + + 1.19 + + + 1.86 + + + 1.65 + + + 1.50 + + + 1.41 + + + 1.44 + + + 1.31 + + + 1.31 + + + 1.34 + + + 1.18 + + + 1.17 + + + 1.10 + + + 1.61 + + + 1.79 + + + 1.54 + + + 1.46 + + + 1.70 + + + 1.28 + + + 1.26 + + + 1.30 + + + DeepSeek-V3.2 · K=2048 + + + + + + + + + + + + + + + + 1× · parity + + + + + + + + + + 1.5× + + + + + + + + + + + + + + + + + + + + 2.5× + + + + + + + + + + + + + + GVR V1 time / GVR V2 time · geometric mean across layers + + + + + + + + + + + + + GVR V2 vs GVR V1: gains across the full length–batch grid + + + GVR V1 (temporal hint) · 1.0× is parity · shared color scale across all three models. + + + Orange corner: at least one layer is slower in V2. Layer averages do not show every case. + + + + + + + + + + + + + + diff --git a/docs/source/blogs/media/gvr_v2/plot_results.py b/docs/source/blogs/media/gvr_v2/plot_results.py index dea456ea4778..bd3f12b1448b 100644 --- a/docs/source/blogs/media/gvr_v2/plot_results.py +++ b/docs/source/blogs/media/gvr_v2/plot_results.py @@ -18,7 +18,7 @@ import numpy as np from matplotlib.colors import Normalize from matplotlib.lines import Line2D -from matplotlib.patches import FancyBboxPatch, Rectangle +from matplotlib.patches import FancyBboxPatch, Polygon, Rectangle from matplotlib.ticker import FuncFormatter ROOT = Path(__file__).resolve().parent @@ -1110,7 +1110,8 @@ def _roofline(rows: list[dict]) -> None: def _speedup_map(rows: list[dict], arm: str, label: str, scope: str) -> None: fig, axes = plt.subplots(1, 3, figsize=(14, 5.8)) batches = sorted({r["batch"] for r in rows}) - norm = Normalize(vmin=1, vmax=21) + is_v1 = arm == "temporal_tiered" + norm = Normalize(vmin=1, vmax=3 if is_v1 else 21) cmap = plt.get_cmap("YlGnBu") for ax, (model, title) in zip(axes, MODELS.items()): selected = [r for r in rows if r["model"] == model and r[arm + "_us"] is not None] @@ -1132,15 +1133,28 @@ def _speedup_map(rows: list[dict], arm: str, label: str, scope: str) -> None: graphic = ax.imshow(data, aspect="auto", cmap=cmap, norm=norm) for y in range(len(buckets)): for x in range(len(batches)): + if is_v1 and any( + r[arm + "_us"] < r["gvr_v2_us"] + for r in selected + if r["isl_bucket"] == buckets[y] and r["batch"] == batches[x] + ): + ax.add_patch( + Polygon( + [(x + 0.21, y - 0.5), (x + 0.5, y - 0.5), (x + 0.5, y - 0.21)], + facecolor="#d46d24", + edgecolor="white", + linewidth=0.3, + ) + ) red, green, blue, _ = cmap(norm(data[y, x])) brightness = 0.299 * red + 0.587 * green + 0.114 * blue ax.text( x, y, - f"{data[y, x]:.1f}", + f"{data[y, x]:.2f}" if is_v1 else f"{data[y, x]:.1f}", ha="center", va="center", - fontsize=7.1, + fontsize=6.9 if is_v1 else 7.1, color="white" if brightness < 0.5 else "#17202b", ) ax.set_xticks(range(len(batches)), batches, rotation=60, fontsize=9) @@ -1157,20 +1171,39 @@ def _speedup_map(rows: list[dict], arm: str, label: str, scope: str) -> None: y=1.02, ) fig.subplots_adjust(left=0.06, right=0.99, top=0.87, bottom=0.34, wspace=0.27) - cax = fig.add_axes((0.34, 0.09, 0.32, 0.026)) - bar = fig.colorbar(graphic, cax=cax, orientation="horizontal", ticks=[1, 5, 10, 15, 21]) + cax = fig.add_axes((0.34, 0.055 if is_v1 else 0.09, 0.32, 0.026)) + ticks = [1, 1.5, 2, 2.5, 3] if is_v1 else [1, 5, 10, 15, 21] + bar = fig.colorbar(graphic, cax=cax, orientation="horizontal", ticks=ticks) + if is_v1: + bar.ax.set_xticklabels(["1× · parity", "1.5×", "2×", "2.5×", "3×"]) bar.set_label(f"{label} time / GVR V2 time · geometric mean across layers", fontsize=9) fig.text( 0.06, - 0.17, + 0.19 if is_v1 else 0.17, f"{scope} · 1.0× is parity · shared color scale across all three models.", fontsize=9, ) - _save(fig, arm + "_map") + if is_v1: + fig.add_artist( + Polygon( + [(0.06, 0.155), (0.07, 0.155), (0.07, 0.133)], + transform=fig.transFigure, + facecolor="#d46d24", + edgecolor="none", + ) + ) + fig.text( + 0.08, + 0.138, + "Orange corner: at least one layer is slower in V2. Layer averages do not show every case.", + fontsize=9, + color="#52616f", + ) + _save(fig, "gvr_v1_map" if is_v1 else arm + "_map") def main() -> None: - """Validate the frozen dataset, then regenerate statistics and nine figures.""" + """Validate the frozen dataset, then regenerate statistics and ten figures.""" plt.rcParams.update( { "font.family": "DejaVu Sans", @@ -1211,6 +1244,7 @@ def main() -> None: _algorithm() _gpu_sampling() _speedup_map(rows, "radix_cuda", "radix CUDA", "TensorRT-LLM production dispatcher") + _speedup_map(rows, "temporal_tiered", "GVR V1", "GVR V1 (temporal hint)") _latency(rows) _roofline(rows) _integration() diff --git a/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md b/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md index 7dda79050f47..b7277283bfb8 100644 --- a/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md +++ b/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md @@ -351,6 +351,16 @@ The strongest shape-average gains occur around 4K scores at $B=1024$: **19.85× The advantage extends across all 275 plotted shapes. The smallest shape-average speedups are **1.55× for Flash, 1.52× for Pro, and 3.50× for V3.2**. These averages summarize layers at each shape; the overall table retains the lower minimum across individual workload cases. +GVR V1 is the closer comparison. Figure 8 uses the same grid and aggregation, with a separate **1–3× color scale** to resolve the smaller differences. + +![Three heatmap panels of GVR V2 speedup over GVR V1 across captured row lengths and all eleven batch sizes. Cell values are geometric means across layers; orange corners mark shapes containing at least one layer where V2 is slower.](../media/gvr_v2/gvr_v1_map.svg) + +*Figure 8. GVR V1 time divided by GVR V2 time, geometrically averaged across layers at each shape. All three panels share a 1–3× color scale, with parity at 1.0× and cell labels rounded to two decimal places. An orange corner marks at least one constituent layer with speedup below 1×, even when the cell average is above parity.* + +The strongest shape-average gains are **2.87× for Flash, 2.83× for Pro, and 1.86× for V3.2**. Flash and Pro peak at $B=1024$ on short rows; V3.2 peaks near 128K scores at $B=8$. + +All 275 shape averages exceed parity, but layer averaging can hide local regressions. For Pro at $N=131{,}075$ and $B=512$, the shape average is **1.05×** even though one layer reaches **0.689×**. The orange markers preserve this distinction; the earlier [V1-to-V2 analysis](#from-gvr-v1-to-v2-why-move-beyond-temporal-hints) explains why informative temporal hints can still give V1 a local admission advantage. + #### What Explains the Differences **TensorRT-LLM radix CUDA.** The baseline uses the production dispatcher, including short-row insertion and long-row split-work paths. V2's **5.05×** advantage is consistent with reducing full-row selection passes and matching execution to the workload. @@ -361,7 +371,7 @@ The advantage extends across all 275 plotted shapes. The smallest shape-average ![Cold kernel latency for GVR V2, GVR V1, and TensorRT-LLM radix CUDA versus valid row length, with separate panels for three models and batch sizes 1 and 1024.](../media/gvr_v2/latency.svg) -*Figure 8. Mean cold kernel time across all captured layers: 21 for Flash, 30 for Pro, and 61 for V3.2. Each row is a model; the columns contrast batch sizes 1 and 1,024. The solid line shows GVR V2; dashed lines show baselines measured in separate runs. Both axes are logarithmic; 1K means 1,024.* +*Figure 9. Mean cold kernel time across all captured layers: 21 for Flash, 30 for Pro, and 61 for V3.2. Each row is a model; the columns contrast batch sizes 1 and 1,024. The solid line shows GVR V2; dashed lines show baselines measured in separate runs. Both axes are logarithmic; 1K means 1,024.* At $B=1$, keeping a short row in registers and exposing parallelism within a longer row matter more than saturating HBM. At $B=1024$, streaming throughput becomes more visible. The different shapes of these curves are why a single average cannot identify every useful operating region. @@ -387,15 +397,15 @@ P_{\mathrm{theory}}(I)=\min(37.225,8I),\qquad P_{\mathrm{calibrated}}(I)=\min(37.047,6.912I). $$ -The calibrated limits are **6.912 TB/s** sustained read bandwidth and **37.047 Tcompare/s** semantic comparison throughput. Their **5.36 compare/byte** intersection exceeds the maximum ideal Top-K intensity by over 21×, placing the workload band on Figure 9A's bandwidth slope. +The calibrated limits are **6.912 TB/s** sustained read bandwidth and **37.047 Tcompare/s** semantic comparison throughput. Their **5.36 compare/byte** intersection exceeds the maximum ideal Top-K intensity by over 21×, placing the workload band on Figure 10A's bandwidth slope. ![A two-level roofline: the full B200 hardware model highlights Top-K's narrow bandwidth-limited band; three linear-scale Pareto curve panels compare GVR V2, GVR V1, and TensorRT-LLM radix CUDA at batch 1024, with GVR V2 highlighted in green.](../media/gvr_v2/roofline.svg) -*Figure 9.* A: theoretical and calibrated roofs. B: Pareto curves at $B=1024$, plotting useful throughput $P=BN/t$ against ideal intensity $I=N/[4(N+K)]$. Green highlights V2; the dotted line is the calibrated bandwidth roof. All kernels share $Q_{\min}$; extra work remains in measured time. This measures useful work relative to ideal traffic, not actual DRAM utilization. +*Figure 10.* A: theoretical and calibrated roofs. B: Pareto curves at $B=1024$, plotting useful throughput $P=BN/t$ against ideal intensity $I=N/[4(N+K)]$. Green highlights V2; the dotted line is the calibrated bandwidth roof. All kernels share $Q_{\min}$; extra work remains in measured time. This measures useful work relative to ideal traffic, not actual DRAM utilization. #### Compare Pareto Curves and Reachable Rates -Each operator's **Pareto curve** in Figure 9B is its measured intensity–throughput trace across row lengths at $B=1024$. At fixed $N$ and $K$, every implementation has the same horizontal position; a faster kernel moves **upward**, toward the calibrated roof. Figure 8 retains the contrasting single-row view, and Figure 7 covers all 11 batch sizes. +Each operator's **Pareto curve** in Figure 10B is its measured intensity–throughput trace across row lengths at $B=1024$. At fixed $N$ and $K$, every implementation has the same horizontal position; a faster kernel moves **upward**, toward the calibrated roof. Figure 9 retains the contrasting single-row view, and Figures 7–8 cover all 11 batch sizes. The **reachable rate** is useful throughput divided by the calibrated roof, expressed as a percentage. Throughout the plotted bandwidth branch, its underlying ratio simplifies to @@ -404,7 +414,7 @@ $$ =\frac{Q_{\min}}{\mathrm{BW}\,t}. $$ -It measures efficiency relative to the ideal traffic bound. The table compares **average / peak reachable rate** along each Pareto curve: the average weights the plotted intensity points equally, and the peak is their maximum. Both use the same layer-averaged timings as Figure 9B. +It measures efficiency relative to the ideal traffic bound. The table compares **average / peak reachable rate** along each Pareto curve: the average weights the plotted intensity points equally, and the peak is their maximum. Both use the same layer-averaged timings as Figure 10B.
@@ -444,7 +454,7 @@ TensorRT-LLM separates phase-specific row metadata from shared selection logic. ![Integration diagram: a shared TopK dispatcher feeds decode and prefill row adapters, which reuse GvrMainKernel's streaming selection pipeline; decode also retains register and cluster routes.](../media/gvr_v2/integration.svg) -*Figure 10. Current-row calibration lets both phases enter the same selection core without a temporal-prior lifecycle. The decode arrow shows its streaming route; register and cluster routes remain available under the same output contract. Prefill specializes the streaming implementation at compile time.* +*Figure 11. Current-row calibration lets both phases enter the same selection core without a temporal-prior lifecycle. The decode arrow shows its streaming route; register and cluster routes remain available under the same output contract. Prefill specializes the streaming implementation at compile time.* The adapters preserve each phase's indexing semantics. Decode derives valid prefixes from device KV lengths, multi-token prediction offsets, and compression. Prefill receives `[start, end)` in compressed columns and returns indices relative to `start`. Both write INT32 indices into caller-owned output, with identity indices and `-1` padding for short rows. From 4df06da05551dea00859c463508d453f91e56afe Mon Sep 17 00:00:00 2001 From: longcheng-nv <243710427+longcheng-nv@users.noreply.github.com> Date: Sat, 19 Sep 2026 06:54:10 +0000 Subject: [PATCH 30/33] [None][docs] Address timing parsing and clarify GVR prior contracts Signed-off-by: longcheng-nv <243710427+longcheng-nv@users.noreply.github.com> --- docs/source/blogs/media/gvr_v2/README.md | 4 +++- docs/source/blogs/media/gvr_v2/plot_results.py | 6 +++++- ...VR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md | 8 ++++++-- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/docs/source/blogs/media/gvr_v2/README.md b/docs/source/blogs/media/gvr_v2/README.md index 6a85b3968502..90b33ec9d88a 100644 --- a/docs/source/blogs/media/gvr_v2/README.md +++ b/docs/source/blogs/media/gvr_v2/README.md @@ -91,7 +91,7 @@ These percentages preserve the supplied summaries' precision. They are independe | [summary.json](summary.json) | Recomputed statistics | | [plot_results.py](plot_results.py) | Figure generation | -The CSVs begin with a copyright comment. `cell`, `model`, `isl_bucket`, and `layer` identify a workload. `batch`, `n`, and `k` specify its dimensions. Columns ending in `_us` contain case-level mean kernel durations in microseconds. Join the temporal supplement by `(cell, batch)`. Blank entries indicate missing or unsupported measurements, never zero latency. +The CSVs begin with a copyright comment. `cell`, `model`, `isl_bucket`, and `layer` identify a workload. `batch`, `n`, and `k` specify its dimensions. Columns ending in `_us` contain case-level mean kernel durations in microseconds. Join the temporal supplement by `(cell, batch)`. Blank entries indicate missing or unsupported measurements, never zero latency. The loader maps blanks to `None` in both timing sources; statistics exclude missing observations, and complete-case comparisons exclude rows with any missing comparison timing. The full figure-regeneration command requires the bundled complete grid for all three implementations and rejects missing timings before writing outputs, preserving the article's common-coverage claims. The files contain kernel timings and workload dimensions. They do not contain input scores, prompt contents, or individual timing repetitions. They reproduce the published statistics and charts; repeating the GPU experiment requires suitable score inputs and a benchmark harness. @@ -121,6 +121,8 @@ The GVR V1 baseline is the tiered temporal implementation from public [PR #16877 V2 changes calibration to packed/vectorized current-row windows and couples it to dense verification-bin counts and crossing-bin refinement; multi-thresholding itself is not a V2-only contribution. The GVR V1 comparison spans full implementations, including scheduling and integration; it is not an isolated self-sampling ablation. The public source at the article's implementation reference is [the GVR V1 kernel](https://github.com/NVIDIA/TensorRT-LLM/blob/be1b9885e8df9bf070e8cb68459e24a7119afaa9/tensorrt_llm/_torch/cute_dsl_kernels/blackwell/top_k/gvr_topk_decode_tp.py). +The prior contract depends on the selected engine. At the measured revision, [`TopK.needs_gvr_prior`](https://github.com/NVIDIA/TensorRT-LLM/blob/be1b9885e8df9bf070e8cb68459e24a7119afaa9/tensorrt_llm/_torch/modules/top_k.py#L69-L75) is true only for the temporal GVR path. V2 decode calls the self-sampling [`run_varlen`](https://github.com/NVIDIA/TensorRT-LLM/blob/be1b9885e8df9bf070e8cb68459e24a7119afaa9/tensorrt_llm/_torch/cute_dsl_kernels/blackwell/top_k/gvr_topk_decode_self_sampling_host.py#L1435-L1445), whose public signature has no `pre_idx`. The V1 [`tiered_topk`](https://github.com/NVIDIA/TensorRT-LLM/blob/be1b9885e8df9bf070e8cb68459e24a7119afaa9/tensorrt_llm/_torch/cute_dsl_kernels/blackwell/top_k/gvr_topk_decode_dispatch.py#L334-L357) dispatcher retains its required prior input. The self-sampling launcher fills an internal kernel argument slot named `pre_idx` with the output-index tensor; its [hint-free kernels do not read that slot](https://github.com/NVIDIA/TensorRT-LLM/blob/be1b9885e8df9bf070e8cb68459e24a7119afaa9/tensorrt_llm/_torch/cute_dsl_kernels/blackwell/top_k/gvr_topk_decode_self_sampling_host.py#L1598-L1612). This internal ABI slot is not a previous-step input to the V2 public entry point. + Figure 3 computes each implementation's speedup directly from its paired radix times. The geometric means are 3.471858× for GVR V1 and 5.051864× for V2. The direct GVR V1/V2 time ratio is 1.455089×. `summary.json` records these under `evolution_vs_radix` and `temporal_vs_v2`. The direct V2 comparison also exposes the lower end of the measured speedup distribution: diff --git a/docs/source/blogs/media/gvr_v2/plot_results.py b/docs/source/blogs/media/gvr_v2/plot_results.py index bd3f12b1448b..8ea0fc59b7c5 100644 --- a/docs/source/blogs/media/gvr_v2/plot_results.py +++ b/docs/source/blogs/media/gvr_v2/plot_results.py @@ -68,7 +68,7 @@ def _load() -> list[dict]: for row in rows: old = lookup[(row["cell"], row["batch"])] for arm in TEMPORAL: - row[arm + "_us"] = float(old[arm + "_us"]) + row[arm + "_us"] = float(old[arm + "_us"]) if old[arm + "_us"] else None return rows @@ -1215,6 +1215,10 @@ def main() -> None: } ) rows = _load() + if any(row[arm + "_us"] is None for row in rows for arm in COMPARISON_ARMS): + raise ValueError( + "Figure regeneration requires complete paired timings for all comparison arms" + ) summary = { "copyright": COPYRIGHT, "reference": json.loads((ROOT / "provenance.json").read_text())["reference"], diff --git a/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md b/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md index b7277283bfb8..e1ddc4710d2f 100644 --- a/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md +++ b/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md @@ -101,7 +101,7 @@ V1's prior also has a lifecycle outside the kernel. GVR V1 has no prefill engine | What guides admission? | A hint-derived pivot and rescue rung | Sample-derived primary threshold, lower safety floor, and upper anchor | | What does verification learn? | Exact counts at multiple admission thresholds | Exact bin populations and counts at many boundaries | | Where does exact refinement start? | The admitted candidate set, with path-specific local refinement | The crossing bin containing rank $K$ | -| What state crosses decode steps? | Per-layer prior indices | No Top-K prior | +| What state crosses decode steps? | Per-layer prior indices | No Top-K prior in the self-sampling path | | How do prefill and decode relate? | Radix prefill; its last selection can seed temporal decode | Shared streaming selection with phase-specific row adapters | | How does a bad guess affect the result? | More admission/refinement work or recovery; membership remains exact | Lower admission or exact recovery; membership remains exact | @@ -446,7 +446,11 @@ The integration follows three boundaries: remove the Top-K prior lifecycle, adap A temporal prior carries state from an earlier selection. Its buffers, initialization, request alignment, and write-back must stay valid through CUDA Graph warmup and replay. Disaggregated prefill/decode also needs a policy for providing that prior at the phase handoff. -V2 derives its bracket from the current scores in both phases. This removes the previous-step Top-K buffer, prefill-to-decode prior seeding, and prior write-back from the V2 call contract. Request metadata and launch preparation remain, but they no longer maintain a selection history. [PR #18446](https://github.com/NVIDIA/TensorRT-LLM/pull/18446) confines prior ownership to the temporal engine. +With `use_self_sampling_topk: true`, the [`TopK` wrapper](https://github.com/NVIDIA/TensorRT-LLM/blob/be1b9885e8df9bf070e8cb68459e24a7119afaa9/tensorrt_llm/_torch/modules/top_k.py#L350-L392) selects V2's self-sampling decode [`run_varlen`](https://github.com/NVIDIA/TensorRT-LLM/blob/be1b9885e8df9bf070e8cb68459e24a7119afaa9/tensorrt_llm/_torch/cute_dsl_kernels/blackwell/top_k/gvr_topk_decode_self_sampling_host.py#L1435-L1445) entry point. Its public signature takes score, sequence-length, and output-index tensors plus row/launch metadata; it has **no `pre_idx` parameter**. The wrapper's [`needs_gvr_prior`](https://github.com/NVIDIA/TensorRT-LLM/blob/be1b9885e8df9bf070e8cb68459e24a7119afaa9/tensorrt_llm/_torch/modules/top_k.py#L69-L75) property is false for this path. + +The separate V1 temporal dispatcher, [`tiered_topk`](https://github.com/NVIDIA/TensorRT-LLM/blob/be1b9885e8df9bf070e8cb68459e24a7119afaa9/tensorrt_llm/_torch/cute_dsl_kernels/blackwell/top_k/gvr_topk_decode_dispatch.py#L334-L357), still requires valid `pre_idx` for its supported heuristic routes. Setting `use_self_sampling_topk: false` selects that temporal engine; callers must retain its prior input. + +V2 derives its bracket from the current scores in both phases, removing the previous-step Top-K buffer, prefill-to-decode prior seeding, and prior write-back from the self-sampling path. Request metadata and launch preparation remain, but they no longer maintain a selection history. [PR #18446](https://github.com/NVIDIA/TensorRT-LLM/pull/18446) confines prior ownership to the temporal engine. #### One Selection Core, Two Row Interfaces From b157334ed78ed39ae8b95c4a15279a3aa84d5b10 Mon Sep 17 00:00:00 2001 From: longcheng-nv <243710427+longcheng-nv@users.noreply.github.com> Date: Mon, 21 Sep 2026 01:24:57 +0000 Subject: [PATCH 31/33] [None][doc] Treat JSON blog data as downloadable assets Remove the unsupported JSON source parser mapping so Sphinx keeps the data companion files as downloads. Reproduced the original error and verified strict focused builds and byte-identical downloads with Sphinx 7.4.7 and 9.1.0. Signed-off-by: longcheng-nv <243710427+longcheng-nv@users.noreply.github.com> --- docs/source/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index b60f66926686..9ac1821c2ca1 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -152,11 +152,11 @@ # -- Options for HTML output ------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output +# JSON files are downloadable data assets, not documentation source files. source_suffix = { '.rst': 'restructuredtext', '.txt': 'markdown', '.md': 'markdown', - '.json': 'json', } html_theme = 'nvidia_sphinx_theme' From c738302e6584d490f46c46b4567a0dba0b8ff955 Mon Sep 17 00:00:00 2001 From: longcheng-nv <243710427+longcheng-nv@users.noreply.github.com> Date: Tue, 22 Sep 2026 06:18:17 +0000 Subject: [PATCH 32/33] docs: use TensorRT LLM branding in GVR V2 blog Signed-off-by: longcheng-nv <243710427+longcheng-nv@users.noreply.github.com> --- docs/source/blogs/media/gvr_v2/README.md | 6 +-- docs/source/blogs/media/gvr_v2/latency.svg | 24 +++++------ .../source/blogs/media/gvr_v2/plot_results.py | 4 +- .../source/blogs/media/gvr_v2/provenance.json | 2 +- .../blogs/media/gvr_v2/radix_cuda_map.svg | 2 +- docs/source/blogs/media/gvr_v2/roofline.svg | 24 +++++------ ...ampling_Exact_TopK_for_Sparse_Attention.md | 40 +++++++++---------- 7 files changed, 51 insertions(+), 51 deletions(-) diff --git a/docs/source/blogs/media/gvr_v2/README.md b/docs/source/blogs/media/gvr_v2/README.md index 90b33ec9d88a..c3c658cf6a7a 100644 --- a/docs/source/blogs/media/gvr_v2/README.md +++ b/docs/source/blogs/media/gvr_v2/README.md @@ -101,7 +101,7 @@ Measurements use NVIDIA B200, FP32 indexer scores, and batch sizes from 1 to 1,0 Each workload/batch case repeats one captured layer/step score row into distinct batch rows. This controls the input distribution and valid width while measuring batch scaling; it is not a heterogeneous batch of independent serving requests. GVR uses `next_n=1` and sets `max_seq_len` to that case's valid row length times its compression ratio. A serving graph may use a larger stable envelope and choose a different execution plan. The bundled grid does not independently benchmark ragged mixed-length batches, MTP, or prefill. -The primary reference is the hint-free GVR V2 `run_varlen` implementation from [PR #19076](https://github.com/NVIDIA/TensorRT-LLM/pull/19076), measured at its [final public revision](https://github.com/NVIDIA/TensorRT-LLM/commit/be1b9885e8df9bf070e8cb68459e24a7119afaa9). Its FP32 comparisons with GVR V1 and TensorRT-LLM radix CUDA match observations from separate runs by workload identity and batch size, with shape metadata checked where available. All three implementations cover the same 9,746 cases. Baseline times are retained as measured; no aggregate correction factor is applied. These comparisons describe the bundled kernel implementations and workloads, rather than the performance of entire serving frameworks. +The primary reference is the hint-free GVR V2 `run_varlen` implementation from [PR #19076](https://github.com/NVIDIA/TensorRT-LLM/pull/19076), measured at its [final public revision](https://github.com/NVIDIA/TensorRT-LLM/commit/be1b9885e8df9bf070e8cb68459e24a7119afaa9). Its FP32 comparisons with GVR V1 and TensorRT LLM radix CUDA match observations from separate runs by workload identity and batch size, with shape metadata checked where available. All three implementations cover the same 9,746 cases. Baseline times are retained as measured; no aggregate correction factor is applied. These comparisons describe the bundled kernel implementations and workloads, rather than the performance of entire serving frameworks. The device kernel and host dispatcher at the [main revision audited on September 17, 2026](https://github.com/NVIDIA/TensorRT-LLM/commit/73c70633b2547eedf0c91f85e760aec534f6af84) are byte-identical to those measured for the reference. This establishes source continuity for those files, not a new whole-framework performance measurement. @@ -111,7 +111,7 @@ Figures 1, 3, and 7–10 and their numerical summaries all use this PR #19076 re | :--- | :--- | | GVR V2 | FP32 scores, valid row lengths, unordered INT32 indices | | GVR V1 | Temporal-prior pivot/rescue admission; complete implementation paired by workload and batch | -| TensorRT-LLM radix CUDA | Production dispatcher, including short-row insertion and long-row split-work paths | +| TensorRT LLM radix CUDA | Production dispatcher, including short-row insertion and long-row split-work paths | The GVR V1 implementation reference appears below. Complete build revisions for the historical radix observations are unavailable in the timing export. @@ -154,7 +154,7 @@ The article uses Figure 1 for the model-level comparison. The following table us | Baseline | V4 Flash, $K=512$ | V4 Pro, $K=1024$ | V3.2, $K=2048$ | | :--- | ---: | ---: | ---: | | GVR V1 | 1.53× | 1.54× | 1.37× | -| TensorRT-LLM radix CUDA | 4.88× | 4.87× | 5.25× | +| TensorRT LLM radix CUDA | 4.88× | 4.87× | 5.25× | *Each model column uses the same workloads for both baselines.* diff --git a/docs/source/blogs/media/gvr_v2/latency.svg b/docs/source/blogs/media/gvr_v2/latency.svg index d04e9d48e827..a16acb90cdb8 100644 --- a/docs/source/blogs/media/gvr_v2/latency.svg +++ b/docs/source/blogs/media/gvr_v2/latency.svg @@ -1826,31 +1826,31 @@ L 768.243437 684.36 - - GVR V2 + GVR V2 - - GVR V1 + GVR V1 - - TensorRT-LLM radix CUDA + TensorRT LLM radix CUDA diff --git a/docs/source/blogs/media/gvr_v2/plot_results.py b/docs/source/blogs/media/gvr_v2/plot_results.py index 8ea0fc59b7c5..5833527d5541 100644 --- a/docs/source/blogs/media/gvr_v2/plot_results.py +++ b/docs/source/blogs/media/gvr_v2/plot_results.py @@ -34,7 +34,7 @@ LABELS = { "gvr_v2": "GVR V2", "temporal_tiered": "GVR V1", - "radix_cuda": "TensorRT-LLM radix CUDA", + "radix_cuda": "TensorRT LLM radix CUDA", } COLORS = { "gvr_v2": "#579600", @@ -1247,7 +1247,7 @@ def main() -> None: _candidate_work() _algorithm() _gpu_sampling() - _speedup_map(rows, "radix_cuda", "radix CUDA", "TensorRT-LLM production dispatcher") + _speedup_map(rows, "radix_cuda", "radix CUDA", "TensorRT LLM production dispatcher") _speedup_map(rows, "temporal_tiered", "GVR V1", "GVR V1 (temporal hint)") _latency(rows) _roofline(rows) diff --git a/docs/source/blogs/media/gvr_v2/provenance.json b/docs/source/blogs/media/gvr_v2/provenance.json index 40960b8e0216..6317dd6488e1 100644 --- a/docs/source/blogs/media/gvr_v2/provenance.json +++ b/docs/source/blogs/media/gvr_v2/provenance.json @@ -23,7 +23,7 @@ "v32_timings.csv.gz": "59bccd05ba685d01ed1ebb34c9a0b15df02d1879f8c16bbaffa2a264f512fd8d", "temporal_comparison.csv.gz": "2abdeb8eafa1366be5673c79dfdb938a02716431cf8745f18d3a2fc240a778ca" }, - "scope": "Per-case FP32 cold kernel means with PR #19076 as the GVR V2 reference. GVR V1 (temporal hint, PR #16877) and TensorRT-LLM radix CUDA observations are paired across benchmark runs by workload and batch. All three implementations cover the same 9,746 cases.", + "scope": "Per-case FP32 cold kernel means with PR #19076 as the GVR V2 reference. GVR V1 (temporal hint, PR #16877) and TensorRT LLM radix CUDA observations are paired across benchmark runs by workload and batch. All three implementations cover the same 9,746 cases.", "roofline_model": { "theoretical_bandwidth_tb_s": 8.0, "measured_bandwidth_tb_s": 6.912116, diff --git a/docs/source/blogs/media/gvr_v2/radix_cuda_map.svg b/docs/source/blogs/media/gvr_v2/radix_cuda_map.svg index bed66affea40..b5ffeccfcfa9 100644 --- a/docs/source/blogs/media/gvr_v2/radix_cuda_map.svg +++ b/docs/source/blogs/media/gvr_v2/radix_cuda_map.svg @@ -1638,7 +1638,7 @@ z GVR V2 vs radix CUDA: gains across the full length–batch grid - TensorRT-LLM production dispatcher · 1.0× is parity · shared color scale across all three models. + TensorRT LLM production dispatcher · 1.0× is parity · shared color scale across all three models. diff --git a/docs/source/blogs/media/gvr_v2/roofline.svg b/docs/source/blogs/media/gvr_v2/roofline.svg index 0e5848a32a83..dcd12b9ce644 100644 --- a/docs/source/blogs/media/gvr_v2/roofline.svg +++ b/docs/source/blogs/media/gvr_v2/roofline.svg @@ -1716,31 +1716,31 @@ L 914.04562 443.489435 - - GVR V2 + GVR V2 - - GVR V1 + GVR V1 - - TensorRT-LLM radix CUDA + TensorRT LLM radix CUDA diff --git a/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md b/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md index e1ddc4710d2f..d231092a840b 100644 --- a/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md +++ b/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md @@ -5,17 +5,17 @@ SPDX-License-Identifier: Apache-2.0 # GVR V2: Self-Sampling and Multi-Thresholding for Faster Exact Top-K -*A Unified Selection Core for Prefill and Decode in TensorRT-LLM* +*A Unified Selection Core for Prefill and Decode in TensorRT LLM* -By NVIDIA TensorRT-LLM Team +By NVIDIA TensorRT LLM Team Selecting 1,024 INT32 indices from 131,072 FP32 scores writes just **4 KiB of output**, yet one complete read of the scores moves **512 KiB**. Every additional full-row pass pays that input cost again. For a sparse-attention indexer, finding the Top-K boundary can therefore cost far more than emitting the winners. GVR V2 makes each full-row pass more useful without depending on the previous decode step to predict the current one. **Self-sampling estimates where the current row's Top-K boundary lies; multi-thresholding derives many exact population counts from one classification pass.** Together, they concentrate exact refinement on the small group of scores still competing for the final slots. Removing the Top-K prior also lets prefill and decode share a streaming selection core, with phase differences handled by row adapters. -On B200, this design delivers **5.05× geometric-mean speedup over TensorRT-LLM radix CUDA**, with **1.46× over GVR V1**. Both comparisons use the same 9,746 workloads spanning DeepSeek-V3.2, DeepSeek-V4 Flash, and DeepSeek-V4 Pro indexers. +On B200, this design delivers **5.05× geometric-mean speedup over TensorRT LLM radix CUDA**, with **1.46× over GVR V1**. Both comparisons use the same 9,746 workloads spanning DeepSeek-V3.2, DeepSeek-V4 Flash, and DeepSeek-V4 Pro indexers. -![Three horizontal bar-chart panels compare GVR V2, GVR V1, and TensorRT-LLM radix CUDA on the same cases per model. GVR V2 is 1.00; shorter bars mean less kernel time.](../media/gvr_v2/speedup.svg) +![Three horizontal bar-chart panels compare GVR V2, GVR V1, and TensorRT LLM radix CUDA on the same cases per model. GVR V2 is 1.00; shorter bars mean less kernel time.](../media/gvr_v2/speedup.svg) *Figure 1. Kernel time relative to GVR V2, geometrically averaged over the same workloads within each model; shorter is faster. GVR V1 uses a temporal hint. All three implementations cover the full 9,746-case grid.* @@ -36,8 +36,8 @@ On B200, this design delivers **5.05× geometric-mean speedup over TensorRT-LLM - **[Performance and Roofline Analysis](#performance-and-roofline-analysis)** - [Performance Against GVR V1 and Radix CUDA](#performance-against-gvr-v1-and-radix-cuda) - [The Roofline Model: Fewer Passes, More Useful Work](#the-roofline-model-fewer-passes-more-useful-work) -- **[TensorRT-LLM Integration and Takeaways](#tensorrt-llm-integration-and-takeaways)** - - [Decode and Prefill in TensorRT-LLM](#decode-and-prefill-in-tensorrt-llm) +- **[TensorRT LLM Integration and Takeaways](#tensorrt-llm-integration-and-takeaways)** + - [Decode and Prefill in TensorRT LLM](#decode-and-prefill-in-tensorrt-llm) - [Conclusion](#conclusion) - [Further Reading](#further-reading) @@ -90,7 +90,7 @@ V2 calibrates from the **current row**, removing dependence on temporal overlap #### A Hint That Crosses Framework Boundaries -V1's prior also has a lifecycle outside the kernel. GVR V1 has no prefill engine: TensorRT-LLM uses radix for prefill and can seed the decode prior from each request's last prefill selection. That phase-dependent history complicates a common selection architecture. V2's current-row calibration removes the Top-K prior dependency, allowing phase differences to stay in dispatch and row-interface adapters. The [integration section](#decode-and-prefill-in-tensorrt-llm) traces the consequences for CUDA Graph preparation and disaggregated serving. +V1's prior also has a lifecycle outside the kernel. GVR V1 has no prefill engine: TensorRT LLM uses radix for prefill and can seed the decode prior from each request's last prefill selection. That phase-dependent history complicates a common selection architecture. V2's current-row calibration removes the Top-K prior dependency, allowing phase differences to stay in dispatch and row-interface adapters. The [integration section](#decode-and-prefill-in-tensorrt-llm) traces the consequences for CUDA Graph preparation and disaggregated serving.
@@ -333,7 +333,7 @@ The benchmarks use FP32 indexer scores from the three models below on NVIDIA B20 | Baseline | Geomean speedup | Minimum speedup | GVR V2 faster | | :---: | :---: | :---: | :---: | | GVR V1 | **1.46×** | 0.689× | 99.57% | -| TensorRT-LLM radix CUDA dispatch | **5.05×** | 1.34× | 100.00% | +| TensorRT LLM radix CUDA dispatch | **5.05×** | 1.34× | 100.00% |
@@ -341,11 +341,11 @@ Both comparisons use the same 9,746 cases. The minimum column retains individual #### The Gains Extend Beyond an Average -The gains over TensorRT-LLM radix CUDA vary with the model and shape. Figure 7 shows V2's speedup across every captured row length and all 11 batch sizes, with one panel per model. +The gains over TensorRT LLM radix CUDA vary with the model and shape. Figure 7 shows V2's speedup across every captured row length and all 11 batch sizes, with one panel per model. -![Three heatmap panels of GVR V2 speedup over TensorRT-LLM radix CUDA across captured row lengths and all eleven batch sizes, averaged geometrically across all layers in each model.](../media/gvr_v2/radix_cuda_map.svg) +![Three heatmap panels of GVR V2 speedup over TensorRT LLM radix CUDA across captured row lengths and all eleven batch sizes, averaged geometrically across all layers in each model.](../media/gvr_v2/radix_cuda_map.svg) -*Figure 7. TensorRT-LLM radix CUDA time divided by GVR V2 time, geometrically averaged across layers at each shape. The panels share a 1–21× color scale; 1.0 means equal performance. Row lengths are rounded in the axis labels, and cell labels round to one decimal place.* +*Figure 7. TensorRT LLM radix CUDA time divided by GVR V2 time, geometrically averaged across layers at each shape. The panels share a 1–21× color scale; 1.0 means equal performance. Row lengths are rounded in the axis labels, and cell labels round to one decimal place.* The strongest shape-average gains occur around 4K scores at $B=1024$: **19.85× for V4 Flash and 20.18× for V4 Pro** at $N=4{,}099$, and **10.96× for V3.2** at $N=4{,}111$. The Pro result is the largest shape-average speedup in the grid. @@ -363,13 +363,13 @@ All 275 shape averages exceed parity, but layer averaging can hide local regress #### What Explains the Differences -**TensorRT-LLM radix CUDA.** The baseline uses the production dispatcher, including short-row insertion and long-row split-work paths. V2's **5.05×** advantage is consistent with reducing full-row selection passes and matching execution to the workload. +**TensorRT LLM radix CUDA.** The baseline uses the production dispatcher, including short-row insertion and long-row split-work paths. V2's **5.05×** advantage is consistent with reducing full-row selection passes and matching execution to the workload. **GVR V1 (temporal hint).** V1 already combines multiple admission thresholds through pivot/rescue verification. V2 replaces the temporal prior with current-row calibration and couples exact bin counts to crossing-bin refinement. Its **1.46×** gain compares complete implementations, including their execution policies; it does not isolate the contribution of self-sampling alone. #### Latency Across Row Length and Batch Size -![Cold kernel latency for GVR V2, GVR V1, and TensorRT-LLM radix CUDA versus valid row length, with separate panels for three models and batch sizes 1 and 1024.](../media/gvr_v2/latency.svg) +![Cold kernel latency for GVR V2, GVR V1, and TensorRT LLM radix CUDA versus valid row length, with separate panels for three models and batch sizes 1 and 1024.](../media/gvr_v2/latency.svg) *Figure 9. Mean cold kernel time across all captured layers: 21 for Flash, 30 for Pro, and 61 for V3.2. Each row is a model; the columns contrast batch sizes 1 and 1,024. The solid line shows GVR V2; dashed lines show baselines measured in separate runs. Both axes are logarithmic; 1K means 1,024.* @@ -399,7 +399,7 @@ $$ The calibrated limits are **6.912 TB/s** sustained read bandwidth and **37.047 Tcompare/s** semantic comparison throughput. Their **5.36 compare/byte** intersection exceeds the maximum ideal Top-K intensity by over 21×, placing the workload band on Figure 10A's bandwidth slope. -![A two-level roofline: the full B200 hardware model highlights Top-K's narrow bandwidth-limited band; three linear-scale Pareto curve panels compare GVR V2, GVR V1, and TensorRT-LLM radix CUDA at batch 1024, with GVR V2 highlighted in green.](../media/gvr_v2/roofline.svg) +![A two-level roofline: the full B200 hardware model highlights Top-K's narrow bandwidth-limited band; three linear-scale Pareto curve panels compare GVR V2, GVR V1, and TensorRT LLM radix CUDA at batch 1024, with GVR V2 highlighted in green.](../media/gvr_v2/roofline.svg) *Figure 10.* A: theoretical and calibrated roofs. B: Pareto curves at $B=1024$, plotting useful throughput $P=BN/t$ against ideal intensity $I=N/[4(N+K)]$. Green highlights V2; the dotted line is the calibrated bandwidth roof. All kernels share $Q_{\min}$; extra work remains in measured time. This measures useful work relative to ideal traffic, not actual DRAM utilization. @@ -422,7 +422,7 @@ It measures efficiency relative to the ideal traffic bound. The table compares * | :---: | :---: | :---: | :---: | | **GVR V2** | **41.6% / 77.8%** | **39.0% / 68.4%** | **41.5% / 66.5%** | | GVR V1 | 26.1% / 63.3% | 25.4% / 58.9% | 27.8% / 51.1% | -| TensorRT-LLM radix CUDA | 7.7% / 16.9% | 7.8% / 16.4% | 8.3% / 17.8% | +| TensorRT LLM radix CUDA | 7.7% / 16.9% | 7.8% / 16.4% | 8.3% / 17.8% |
@@ -436,9 +436,9 @@ The full ideal bound is $T_{\mathrm{roof}}=\max(Q_{\min}/\mathrm{BW},W/R_{\mathr The pass/candidate tradeoff in Figure 5 explains two sources of this gap: another full-row scan adds traffic, while a loose admission threshold adds candidate work even when the scan count stays fixed. V2 uses exact bin populations to restrict the remaining selection to the crossing bin. These costs increase measured time; under the shared minimum-traffic model, they move useful throughput downward at the same intensity. The read-dominated roof is optimistic, especially when $K/N$ is large; the plotted throughput describes useful selection work rather than measured DRAM traffic. -## TensorRT-LLM Integration and Takeaways +## TensorRT LLM Integration and Takeaways -### Decode and Prefill in TensorRT-LLM +### Decode and Prefill in TensorRT LLM The integration follows three boundaries: remove the Top-K prior lifecycle, adapt each phase's row metadata, and prepare launch specializations before graph capture. @@ -454,7 +454,7 @@ V2 derives its bracket from the current scores in both phases, removing the prev #### One Selection Core, Two Row Interfaces -TensorRT-LLM separates phase-specific row metadata from shared selection logic. The `TopK` module applies the same self-sampling configuration to supported decode and prefill paths, then passes each phase's valid score interval to the selected engine. +TensorRT LLM separates phase-specific row metadata from shared selection logic. The `TopK` module applies the same self-sampling configuration to supported decode and prefill paths, then passes each phase's valid score interval to the selected engine. ![Integration diagram: a shared TopK dispatcher feeds decode and prefill row adapters, which reuse GvrMainKernel's streaming selection pipeline; decode also retains register and cluster routes.](../media/gvr_v2/integration.svg) @@ -482,7 +482,7 @@ For decode, [PR #18410](https://github.com/NVIDIA/TensorRT-LLM/pull/18410) repor #### Enable GVR V2 -Use a TensorRT-LLM revision containing [PR #19076](https://github.com/NVIDIA/TensorRT-LLM/pull/19076). The production V2 dispatch requires CUTLASS DSL, datacenter Blackwell SM100/SM103, $K\in\lbrace 512,1024,2048\rbrace$, and indexer compression ratios 1 or 4. Save the following as `gvr_v2.yaml`: +Use a TensorRT LLM revision containing [PR #19076](https://github.com/NVIDIA/TensorRT-LLM/pull/19076). The production V2 dispatch requires CUTLASS DSL, datacenter Blackwell SM100/SM103, $K\in\lbrace 512,1024,2048\rbrace$, and indexer compression ratios 1 or 4. Save the following as `gvr_v2.yaml`: ```yaml sparse_attention_config: @@ -530,4 +530,4 @@ Implementation milestones: - [PR #18702: self-sampling prefill](https://github.com/NVIDIA/TensorRT-LLM/pull/18702). - [PR #19076: register-plan tuning, a unified crossing-bin gate, sampled prefill plans, and SM-aware B200/B300 dispatch](https://github.com/NVIDIA/TensorRT-LLM/pull/19076). -For the surrounding model pipeline, see [Sparse Attention in TensorRT-LLM](blog17_Sparse_Attention_in_TensorRT-LLM.md) and [DeepSeek-V4 on NVIDIA Blackwell](blog26_DeepSeek_V4_on_NVIDIA_Blackwell_Model_Specific_and_Agentic_Workload_Optimizations_in_TensorRT-LLM.md). +For the surrounding model pipeline, see [Sparse Attention in TensorRT LLM](blog17_Sparse_Attention_in_TensorRT-LLM.md) and [DeepSeek-V4 on NVIDIA Blackwell](blog26_DeepSeek_V4_on_NVIDIA_Blackwell_Model_Specific_and_Agentic_Workload_Optimizations_in_TensorRT-LLM.md). From b82972730c4ab6d36dd56f229904e40c216e05a2 Mon Sep 17 00:00:00 2001 From: longcheng-nv <243710427+longcheng-nv@users.noreply.github.com> Date: Tue, 22 Sep 2026 06:42:50 +0000 Subject: [PATCH 33/33] docs: link GVR V2 references to the official documentation Signed-off-by: longcheng-nv <243710427+longcheng-nv@users.noreply.github.com> --- ...29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md b/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md index d231092a840b..ebb422c4ea35 100644 --- a/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md +++ b/docs/source/blogs/tech_blog/blog29_GVR_V2_Self_Sampling_Exact_TopK_for_Sparse_Attention.md @@ -21,7 +21,7 @@ On B200, this design delivers **5.05× geometric-mean speedup over TensorRT LLM **The operator contract.** Given FP32 indexer scores and valid-row metadata, Top-K returns unordered INT32 positions for sparse attention's KV selection. With finite scores and at least $K$ entries, it selects an exact value multiset through $K$ distinct indices; ties can choose different positions. [Enablement](#enable-gvr-v2) lists hardware, shape, and configuration requirements. -[The original GVR blog](blog21_Temporal_Correlation_Meets_Sparse_Attention.md) described a temporal shortcut: the previous decode step's selected indices predict the next step's winners. Experience with V1 exposed two limits: hint quality varies sharply, and maintaining the hint couples selection to the serving framework. V2 makes the current row the source of the guess, targeting **a stronger performance floor and better average latency**, while enabling **one selection core for prefill and decode**. The **Guess–Verify–Refine** exactness contract remains. +[The original GVR blog](https://nvidia.github.io/TensorRT-LLM/blogs/tech_blog/blog21_Temporal_Correlation_Meets_Sparse_Attention.html) described a temporal shortcut: the previous decode step's selected indices predict the next step's winners. Experience with V1 exposed two limits: hint quality varies sharply, and maintaining the hint couples selection to the serving framework. V2 makes the current row the source of the guess, targeting **a stronger performance floor and better average latency**, while enabling **one selection core for prefill and decode**. The **Guess–Verify–Refine** exactness contract remains. **Table of Contents** @@ -530,4 +530,4 @@ Implementation milestones: - [PR #18702: self-sampling prefill](https://github.com/NVIDIA/TensorRT-LLM/pull/18702). - [PR #19076: register-plan tuning, a unified crossing-bin gate, sampled prefill plans, and SM-aware B200/B300 dispatch](https://github.com/NVIDIA/TensorRT-LLM/pull/19076). -For the surrounding model pipeline, see [Sparse Attention in TensorRT LLM](blog17_Sparse_Attention_in_TensorRT-LLM.md) and [DeepSeek-V4 on NVIDIA Blackwell](blog26_DeepSeek_V4_on_NVIDIA_Blackwell_Model_Specific_and_Agentic_Workload_Optimizations_in_TensorRT-LLM.md). +For the surrounding model pipeline, see [Sparse Attention in TensorRT LLM](https://nvidia.github.io/TensorRT-LLM/blogs/tech_blog/blog17_Sparse_Attention_in_TensorRT-LLM.html) and [DeepSeek-V4 on NVIDIA Blackwell](https://nvidia.github.io/TensorRT-LLM/blogs/tech_blog/blog26_DeepSeek_V4_on_NVIDIA_Blackwell_Model_Specific_and_Agentic_Workload_Optimizations_in_TensorRT-LLM.html).