From d541ae56800e982172e6d076c5c47d772d62f1af Mon Sep 17 00:00:00 2001 From: Fanrong Li <23290157+lfr-0531@users.noreply.github.com> Date: Fri, 17 Jul 2026 17:56:52 +0800 Subject: [PATCH 1/4] [None][doc] Add DeepSeek-V4 optimization tech blog (#16539) Signed-off-by: Fanrong Li Co-authored-by: Fanrong Li --- .gitattributes | 2 + README.md | 3 + ..._blog26_agentperf_closed_loop_workflow.svg | 156 ++++++ ...ch_blog26_deepseek_v4_hybrid_attention.png | 3 + .../media/tech_blog26_deepseek_v4_mhc_moe.png | 3 + ...blog26_dsv4_performance_evolution_8k1k.png | Bin 0 -> 211772 bytes .../media/tech_blog26_dsv4_scratch_swa.png | Bin 0 -> 228377 bytes .../media/tech_blog26_two_level_routing.svg | 167 ++++++ ..._Workload_Optimizations_in_TensorRT-LLM.md | 488 ++++++++++++++++++ 9 files changed, 822 insertions(+) create mode 100644 docs/source/blogs/media/tech_blog26_agentperf_closed_loop_workflow.svg create mode 100644 docs/source/blogs/media/tech_blog26_deepseek_v4_hybrid_attention.png create mode 100644 docs/source/blogs/media/tech_blog26_deepseek_v4_mhc_moe.png create mode 100644 docs/source/blogs/media/tech_blog26_dsv4_performance_evolution_8k1k.png create mode 100644 docs/source/blogs/media/tech_blog26_dsv4_scratch_swa.png create mode 100644 docs/source/blogs/media/tech_blog26_two_level_routing.svg create mode 100644 docs/source/blogs/tech_blog/blog26_DeepSeek_V4_on_NVIDIA_Blackwell_Model_Specific_and_Agentic_Workload_Optimizations_in_TensorRT-LLM.md diff --git a/.gitattributes b/.gitattributes index 5f797908576a..15bc65ba47ac 100644 --- a/.gitattributes +++ b/.gitattributes @@ -17,3 +17,5 @@ docs/source/blogs/media/tech_blog10_context_wait_performance.png filter=lfs dif cpp/tensorrt_llm/kernels/trtllmGenKernels/fmha/cubin/kernelMetaInfo_cubin.cpp filter=lfs diff=lfs merge=lfs -text cpp/tensorrt_llm/kernels/decoderMaskedMultiheadAttention/cubin/xqa_kernel_cubin.cpp filter=lfs diff=lfs merge=lfs -text tensorrt_llm/_torch/visual_gen/cute_dsl_kernels/blackwell/attention/cubins/*/*/*.so filter=lfs diff=lfs merge=lfs -text +docs/source/blogs/media/tech_blog26_deepseek_v4_hybrid_attention.png filter=lfs diff=lfs merge=lfs -text +docs/source/blogs/media/tech_blog26_deepseek_v4_mhc_moe.png filter=lfs diff=lfs merge=lfs -text diff --git a/README.md b/README.md index 943083d6c4c6..6ba10b8a5adb 100644 --- a/README.md +++ b/README.md @@ -22,6 +22,9 @@ TensorRT LLM +* [07/17] DeepSeek-V4 on NVIDIA Blackwell: Model-Specific and Agentic-Workload Optimizations in TensorRT LLM +✨ [➡️ link](https://github.com/NVIDIA/TensorRT-LLM/blob/main/docs/source/blogs/tech_blog/blog26_DeepSeek_V4_on_NVIDIA_Blackwell_Model_Specific_and_Agentic_Workload_Optimizations_in_TensorRT-LLM.md) + * [07/01] Scaling Video Generation Across NVL72 Rack with TensorRT-LLM ✨ [➡️ link](https://github.com/NVIDIA/TensorRT-LLM/blob/main/docs/source/blogs/tech_blog/blog25_Scaling_Video_Generation_Across_NVL72_Rack_with_TensorRT-LLM.md) diff --git a/docs/source/blogs/media/tech_blog26_agentperf_closed_loop_workflow.svg b/docs/source/blogs/media/tech_blog26_agentperf_closed_loop_workflow.svg new file mode 100644 index 000000000000..f9d0003051bd --- /dev/null +++ b/docs/source/blogs/media/tech_blog26_agentperf_closed_loop_workflow.svg @@ -0,0 +1,156 @@ + + + + AA-AgentPerf closed-loop request workflow + A simulated agent sends the next recorded turn with its accumulated conversation. The inference deployment routes the request using conversation or cache affinity, reuses matching KV blocks, prefills only the uncached suffix, optionally retrieves the KV cache on the generation side in disaggregated serving, and streams the generated response. The client drains the complete response, simulates tool time when needed, advances the trajectory, and sends the next turn. + + + + + + + + + + + + + + + + + + + + + + + + + + CLIENT / AGENT HARNESS + + + + + INFERENCE DEPLOYMENT + + + + + 1 + Send recorded turn + Accumulated conversation + and the next request + + + + + 8 + Advance trajectory + Next recorded turn or + next assigned trajectory + + + + + 7 + Simulate tool time + Only for turns with a tool call + Client-side delay · no LLM compute + + + + + 6 + Receive complete response + Drain the stream and assemble chunks + Record TTFT and output speed + + + + + + + + + + 2 + Route + prefix lookup + Conversation-aware or cache-aware + worker and rank selection + Reuse matching resident KV blocks + + + + + 3 + Prefill uncached suffix + Reuse removes the cached prefix + from new prefill computation + Context side produces the first token + + + + + 4 + Retrieve KV cache + Returned context metadata locates + the KV cache for the generation side + Disaggregated serving only + + + + + 5 + Generate + stream + Continue decoding the response + on the same worker or a + separate generation worker + + + + + + + + + Disaggregated path + + + + Aggregated serving · same worker + + + + + + + Conversation affinity helps preserve reuse across turns + Later turns prefer the worker and rank that hold the accumulated conversation prefix. + + + + + Inference work + + + Client-simulated tool time + + + Conversation affinity and prefix reuse + + + diff --git a/docs/source/blogs/media/tech_blog26_deepseek_v4_hybrid_attention.png b/docs/source/blogs/media/tech_blog26_deepseek_v4_hybrid_attention.png new file mode 100644 index 000000000000..8238521bcb40 --- /dev/null +++ b/docs/source/blogs/media/tech_blog26_deepseek_v4_hybrid_attention.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0b9b5b49bba503ffcd6b0fb7993cf25e2c6537098ad4ffc232e9a89890fc218f +size 13509614 diff --git a/docs/source/blogs/media/tech_blog26_deepseek_v4_mhc_moe.png b/docs/source/blogs/media/tech_blog26_deepseek_v4_mhc_moe.png new file mode 100644 index 000000000000..32a68bbe5038 --- /dev/null +++ b/docs/source/blogs/media/tech_blog26_deepseek_v4_mhc_moe.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a034c944f943400df7b42b5a1f2321f7d3ee87eb80bd5c509dba5066cec5eee4 +size 1854626 diff --git a/docs/source/blogs/media/tech_blog26_dsv4_performance_evolution_8k1k.png b/docs/source/blogs/media/tech_blog26_dsv4_performance_evolution_8k1k.png new file mode 100644 index 0000000000000000000000000000000000000000..3fbaede6ebe4d3d445b9c6fdb942a9e2f1dc11dc GIT binary patch literal 211772 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
  • Y{VUUWxh8oBzwSiLNd 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
    M z3b`bvfkGjP|D8aQ7TkLiJi>DBhkXGPyX>vBXMOgugK5S|KArzNXH(w0zd250l0qoc zS}YgEv=+-HF&(_fB{2;Ya!E`FFA7Oa1BF}^|JQ&*-oXE(W5ua8Oxo_08zVWg4#2zY LzR&&6 + + + Two-level routing for context locality in disaggregated serving + An agentic request enters the TensorRT LLM disaggregated front-end. Instance-level routing first selects a context server, then the selected server's attention data-parallel router performs rank-level routing. Each level can use conversation-aware affinity or KV-cache-aware scoring. Full conversation-prefix reuse requires a later turn to return to both the context server and the rank that hold the corresponding KV blocks. The selected context rank transfers KV cache to a generation server, which decodes and streams the response. + + + + + + + + + + + + + + + + + + + + + + + + + + + + AGENT CLIENT + Next turn + + Conversation ID + + Accumulated prompt + + Cache salt (optional) + + + + request + + + + + TRTLLM-SERVE DISAGGREGATED + Front-end orchestrator + + LEVEL 1 · INSTANCE-LEVEL ROUTING + Use either routing policy to select a context server + + + + CONVERSATION-AWARE + Conversation ID → CTX server + Least-loaded first placement, then explicit affinity + + + + KV-CACHE-AWARE + Prompt blocks → cache view + Matched blocks plus active-request load + Content-derived affinity protects later turns + + + Selected destination: CTX server 1 + + + + + CONTEXT (CTX) TIER + + + + CTX server 0 + other rank-local caches + + CTX server 2 + other rank-local caches + + + + + SELECTED + CTX server 1 + + + + Attention data-parallel router + + LEVEL 2 · RANK-LEVEL ROUTING + Again, use either routing policy inside the selected server + + + CONVERSATION-AWARE + Conversation ID → rank + First turn: round-robin + + + KV-CACHE-AWARE + Rank-local prefix probe + Post-reuse work plus load + + + + + + rank-local reuse lost + + + Rank 0 + KV cache + + + Rank 1 + + prefix KV + + + Rank 2 + KV cache + + + Rank 3 + KV cache + + + + same server + + server-local + reuse lost + + + + + GEN SERVER + Generation + + Receive KV cache + + Continue decode + + Stream response + + + CTX → GEN KV transfer + + + + streamed response + diff --git a/docs/source/blogs/tech_blog/blog26_DeepSeek_V4_on_NVIDIA_Blackwell_Model_Specific_and_Agentic_Workload_Optimizations_in_TensorRT-LLM.md b/docs/source/blogs/tech_blog/blog26_DeepSeek_V4_on_NVIDIA_Blackwell_Model_Specific_and_Agentic_Workload_Optimizations_in_TensorRT-LLM.md new file mode 100644 index 000000000000..da783fabb540 --- /dev/null +++ b/docs/source/blogs/tech_blog/blog26_DeepSeek_V4_on_NVIDIA_Blackwell_Model_Specific_and_Agentic_Workload_Optimizations_in_TensorRT-LLM.md @@ -0,0 +1,488 @@ + + +# DeepSeek-V4 on NVIDIA Blackwell: Model-Specific and Agentic-Workload Optimizations in TensorRT LLM + +By NVIDIA TensorRT LLM Team + +## Table of Contents + +- [Introduction](#introduction) +- [Part I. DeepSeek-V4 Model Support and Optimizations](#part-i-deepseek-v4-model-support-and-optimizations) + - [Building a Production-Ready DeepSeek-V4 Stack](#building-a-production-ready-deepseek-v4-stack) + - [Model support and parallelism](#model-support-and-parallelism) + - [Hybrid attention: SWA, CSA, and HCA](#hybrid-attention-swa-csa-and-hca) + - [Compressor implementation](#compressor-implementation) + - [Beyond attention: mHC, MoE, and speculative decoding](#beyond-attention-mhc-moe-and-speculative-decoding) + - [Parallelism and deployment notation](#parallelism-and-deployment-notation) + - [Cache management and runtime features](#cache-management-and-runtime-features) + - [Precision strategy and accuracy](#precision-strategy-and-accuracy) + - [DeepSeek-V4 Performance Optimizations](#deepseek-v4-performance-optimizations) + - [Optimize the CSA/HCA hot path](#optimize-the-csahca-hot-path) + - [Compressor and mHC](#compressor-and-mhc) + - [Compressor optimizations](#compressor-optimizations) + - [mHC optimizations](#mhc-optimizations) + - [MoE optimizations](#moe-optimizations) + - [Runtime optimization](#runtime-optimization) + - [DeepSeek-V4 Performance Evolution](#deepseek-v4-performance-evolution) + - [Experimental setup](#experimental-setup) + - [From Baseline to the Latest Measured Curve](#from-baseline-to-the-latest-measured-curve) +- [Part II. Agentic-Workload Optimizations](#part-ii-agentic-workload-optimizations) + - [AgentPerf Workflow](#agentperf-workflow) + - [Lessons from DeepSeek-V3.2 Agentic Workload Optimization](#lessons-from-deepseek-v32-agentic-workload-optimization) + - [End-to-End Optimizations for Agentic Serving](#end-to-end-optimizations-for-agentic-serving) + - [Preserve locality with two-level routing](#preserve-locality-with-two-level-routing) + - [Instance-level routing across context servers](#instance-level-routing-across-context-servers) + - [Rank-level routing within a context server](#rank-level-routing-within-a-context-server) + - [Routing policy selection](#routing-policy-selection) + - [KV cache reuse optimizations](#kv-cache-reuse-optimizations) + - [Optimize scheduling and remove end-to-end overhead](#optimize-scheduling-and-remove-end-to-end-overhead) + - [Optimize host overhead for CTX and GEN](#optimize-host-overhead-for-ctx-and-gen) + - [Optimize scheduling, orchestration, and protocol handling](#optimize-scheduling-orchestration-and-protocol-handling) + - [AgentPerf Results and External Validation](#agentperf-results-and-external-validation) +- [Reproduction and Future Work](#reproduction-and-future-work) + - [How to reproduce](#how-to-reproduce) + - [Future Work](#future-work) +- [Conclusion and Acknowledgments](#conclusion-and-acknowledgments) + +## Introduction + +DeepSeek-V4's hybrid attention, online compression, mHC, and MoE design make production inference a model-and-system co-design problem. This blog follows TensorRT LLM's optimization journey on NVIDIA Blackwell in two parts: first building and optimizing a production-ready DeepSeek-V4 model stack, then extending the optimization boundary to routing, KV reuse, host efficiency, and control-plane efficiency for agentic workloads. On GB300, the latest measured fixed-shape sweep increased peak output throughput from 984 to 1,618 tokens/s/GPU, a 64.5% improvement, while NVIDIA's GB300 AA-AgentPerf configurations, run and verified by Artificial Analysis, reached 57.5 concurrency per GPU (CPG) at SLO20 and 19.2 CPG at SLO60. + +## Part I. DeepSeek-V4 Model Support and Optimizations + +### Building a Production-Ready DeepSeek-V4 Stack + +Supporting DeepSeek-V4 required more than registering a new model class. Relative to DeepSeek-V3.2, the model replaces homogeneous sparse attention with a hybrid scheme that interleaves three attention modes across layers, adds an online sequence Compressor with its own persistent state, wraps every attention and MoE block in manifold-constrained hyper-connections (mHC), and updates the MoE routing and checkpoint layout. All of this must compose with the production features users expect from TensorRT LLM: Multi-Token Prediction (MTP), parallel execution, chunked prefill, KV-cache reuse, CUDA Graphs, the overlap scheduler, and disaggregated serving. + +TensorRT LLM implements DeepSeek-V4 as a dedicated PyTorch-backend model, `DeepseekV4ForCausalLM`, together with a DeepSeek-V4 sparse-attention backend and a specialized `DeepseekV4CacheManager`, targeting NVIDIA Blackwell GPUs (SM100+). This section describes that foundation. The performance optimizations built on top of it are covered in [**DeepSeek-V4 Performance Optimizations**](#deepseek-v4-performance-optimizations). + +#### Model support and parallelism + +DeepSeek-V4 is released in two model scales, each with Base and Instruct variants. TensorRT LLM loads both directly from their checkpoint metadata. + +| Checkpoint family | Total parameters | Activated parameters | Published precision | +| :--- | ---: | ---: | :--- | +| DeepSeek-V4-Flash-Base / -Flash | 284B | 13B | FP8 mixed / FP4 + FP8 mixed | +| DeepSeek-V4-Pro-Base / -Pro | 1.6T | 49B | FP8 mixed / FP4 + FP8 mixed | + +The implementation reads the attention layout from the checkpoint rather than hard-coding serving assumptions: the per-layer compression-ratio list (Flash begins `[0, 0, 4, 128, ...]`, while Pro begins `[128, 128, 4, 128, ...]`, and 0 marks a sliding-window-only layer), the 128-token sliding window, and the Indexer configuration including its Top-K (512 for Flash and 1024 for Pro). + +##### Hybrid attention: SWA, CSA, and HCA + +DeepSeek-V4's largest architectural change is its attention. DeepSeek-V3.2 introduced DeepSeek Sparse Attention (DSA), in which a learned Indexer scores the KV history and a Top-K selector supplies token indices to sparse MLA (see our [DeepSeek-V3.2 optimization blog](https://github.com/NVIDIA/TensorRT-LLM/blob/main/docs/source/blogs/tech_blog/blog15_Optimizing_DeepSeek_V32_on_NVIDIA_Blackwell_GPUs.md)). TensorRT LLM implemented DSA on a general [sparse-attention framework](https://github.com/NVIDIA/TensorRT-LLM/blob/main/docs/source/blogs/tech_blog/blog17_Sparse_Attention_in_TensorRT-LLM.md) that separates the algorithm-specific selection logic from the attention backend that consumes the selected indices. DeepSeek-V4 builds on the same separation but adds online compression and interleaves three layer types, determined by each layer's compression ratio: + +| Attention mode | Ratio | History visible to each query | Selection and computation | +| :--- | ---: | :--- | :--- | +| Sliding Window Attention (SWA) | 0 | The latest 128 raw tokens | Dense attention inside the window. No Compressor or Indexer. | +| Compressed Sparse Attention (CSA) | 4 | Latest 128 raw tokens + 4× compressed entries from completed compression groups | The Indexer scores the compressed entries. Sparse MLA attends to the window plus the Top-K selected entries. | +| Heavily Compressed Attention (HCA) | 128 | Latest 128 raw tokens + all 128× compressed entries from completed compression groups | Dense attention over all completed compressed entries. No Indexer or Top-K stage. | + +
    +
    + DeepSeek-V4 hybrid attention architecture. Panel a shows SWA attending over the latest 128 raw tokens. Panel b shows CSA combining the sliding window with 4× compressed KV entries selected by an Indexer and Top-K stage. Panel c shows HCA combining the sliding window with all 128× compressed KV entries without an Indexer. +
    +
    +

    Figure 1. DeepSeek-V4 hybrid attention. (a) SWA attends densely within the 128-token sliding window. (b) CSA augments that window with Top-K entries selected from the 4× compressed history. (c) HCA attends to the window and the complete 128× compressed history without an Indexer.

    + +At the kernel boundary, the history is represented as two cache pools, one for the sliding window and one for compressed entries, and a unified dual-pool MLA operator serves all three modes: it processes the sliding window first, then the selected CSA entries or the full HCA compressed stream, and combines both in one online-softmax reduction. An SWA-only layer simply passes an empty second pool. Selected compressed positions are converted from cache-page-local offsets to token-level global addresses before the attention kernel consumes them. Because KV compression makes the attention workload vary by query, TensorRT LLM passes a per-query `topk_lens` vector (`sparse_mla_topk_lens` in the implementation) to the FMHA kernel. It identifies the active SWA-plus-compressed index span within the fixed-width index buffer used for CUDA Graph compatibility. + +Checkpoint-provided attention-sink logits are also remapped and supplied to the backend as an additional softmax sink. This dual-pool design lets the heterogeneous layer types share one attention backend, and extends the sparse-attention framework from DSA's fine-grained token selection to DeepSeek-V4's combination of local attention, compressed memory, and optional sparse selection. + +##### Compressor implementation + +The Compressor produces the compressed KV entries that CSA and HCA attend to. It is a token-level, softmax-gated pooling ([DeepSeek-V4 paper](https://arxiv.org/abs/2606.19348)): each token's projected KV entry carries a learned compression-weight vector, a learnable per-position bias is added, and a softmax over the compression window reduces the group to one entry as a weighted sum. For CSA ($m{=}4$), each output pools projected entries from two adjacent $m$-token groups, giving a $2m$-token receptive field. Consecutive outputs overlap by $m$ raw-token positions through separate projection branches. HCA instead uses disjoint $m'$-token windows ($m'{=}128$). On CSA layers the same compression operation is applied a second time to produce the compressed Indexer keys that the Indexer scores for Top-K selection, so a CSA layer maintains two compressed streams: the attention KV entries and the Indexer keys. + +TensorRT LLM implements the Compressor as a fused `wkv_gate` projection plus dedicated CUDA kernels for prefill reduction, paged decode updates, and cache-write postprocessing. Tokens arrive incrementally: one at a time in decode, and chunk by chunk in chunked prefill, where chunk boundaries rarely align with compression windows. A compression window is often still incomplete when a forward pass ends. TensorRT LLM persists each token's KV and score projection outputs in FP32 Compressor-state buffers for the still-open windows. Once a window completes, the compression kernels finalize its entry from this state, preserving the semantics of compressing the whole sequence in one pass. Compressed entries are written in the dtype their consumer expects: BF16 or per-tensor FP8 for the main attention cache, and blockwise FP8 or packed MXFP4 for the Indexer-K stream. The kernel fusion work on this path is covered in [**Compressor and mHC**](#compressor-and-mhc). + +##### Beyond attention: mHC, MoE, and speculative decoding + +**mHC hyper-connections** ([mHC paper](https://arxiv.org/abs/2512.24880)). mHC widens the residual stream by a factor of 4 and mixes it around every sublayer through three dynamically generated mappings: a **pre-mapping** that reads the sublayer input from the expanded residual, a **residual-mixing** matrix projected onto the manifold of doubly stochastic matrices through 20 Sinkhorn-Knopp iterations, and a **post-mapping** that writes the sublayer output back into the residual streams. TensorRT LLM instantiates two mHC modules per layer (one around attention and one around the MoE block), plus an **HC head** that collapses the expanded residual to a single stream before the language-model head. It fuses adjacent post- and pre-mappings at the attention-to-MoE boundary and, where possible, across consecutive transformer layers. + +**MoE.** Both model scales activate six routed experts and one shared expert per token, selecting from 256 routed experts in Flash and 384 in Pro. The first three layers use hash routing, where a checkpoint-provided token-ID-to-expert table maps each input token directly to its experts. Later layers use a learned gate with Sqrt-Softplus affinity scores and a score-correction bias. TensorRT LLM implements both routing modes through a shared interface that supplies the selected experts and routing weights to its configurable MoE backends. TRTLLM-Gen, DeepGEMM, and the standard CuTe DSL fused MoE backend cover the corresponding DeepSeek-V4 precision paths and preserve the checkpoint-defined `swiglu_limit` activation clamp, including the uniform clamp used by the NVFP4 CuTe DSL path. DeepSeek-V4 is also registered with TensorRT LLM's expert parallel load balancer, allowing supported expert-parallel deployments to rebalance physical expert placement without changing the model's routing semantics. + +
    +
    + DeepSeek-V4 mHC architecture and MoE routing. Panel a shows the repeated transformer stack with mHC pre- and post-mappings around the attention and MoE blocks, followed by the HC head and language-model head. Panel b shows hash routing through a token-ID embedding table and learned routing through Sqrt-Softplus scores, correction bias, and Top-K expert selection. +
    +
    +

    Figure 2. DeepSeek-V4 components beyond attention. (a) mHC wraps the attention and MoE sublayers with pre- and post-mappings, then uses an HC head to collapse the expanded residual stream before the language-model head. (b) The MoE router supports checkpoint-defined hash routing in the first three layers (left) and learned Sqrt-Softplus scoring with correction bias and Top-6 selection in later layers (right).

    + +**Speculative decoding.** DeepSeek-V4 checkpoints with next-token prediction layers run MTP speculative decoding through the Eagle-style one-model path. Each MTP module consumes the expanded residual state from the target model or previous MTP module together with the next-token embedding, then runs the same mHC-wrapped attention-and-MoE structure as a target-model layer, using SWA for its attention. TensorRT LLM remaps the MTP weights, shares the embedding and language-model head with the target model, and extends the attention and cache metadata for the configured draft depth. The speculative-decoding performance results reported in this blog use this MTP path. DeepSeek has released dedicated [DSpark](https://arxiv.org/abs/2607.05147) checkpoints for DeepSeek-V4. DSpark adds a lightweight sequential head to a parallel draft backbone to model dependencies within a draft block, while performance tuning for this path remains in progress. + +##### Parallelism and deployment notation + +DeepSeek-V4 adopts the same parallel strategies as DeepSeek-R1 and DeepSeek-V3.2: attention data parallelism (ADP) combined with expert parallelism (EP) for throughput-oriented serving, and tensor parallelism (TP) for latency-oriented deployments, with pipeline parallelism available for fitting the largest checkpoints. See [Tech Blog 3](https://github.com/NVIDIA/TensorRT-LLM/blob/main/docs/source/blogs/tech_blog/blog03_Optimizing_DeepSeek_R1_Throughput_on_NVIDIA_Blackwell_GPUs.md) for the performance rationale and [Tech Blog 4](https://github.com/NVIDIA/TensorRT-LLM/blob/main/docs/source/blogs/tech_blog/blog04_Scaling_Expert_Parallelism_in_TensorRT-LLM.md)/[8](https://github.com/NVIDIA/TensorRT-LLM/blob/main/docs/source/blogs/tech_blog/blog08_Scaling_Expert_Parallelism_in_TensorRT-LLM_part2.md)/[14](https://github.com/NVIDIA/TensorRT-LLM/blob/main/docs/source/blogs/tech_blog/blog14_Scaling_Expert_Parallelism_in_TensorRT-LLM_part3.md) for large-scale expert parallelism. Note that with ADP, `max_batch_size` is a per-rank limit, so benchmark concurrency must be scaled to populate all ranks. + +The rest of this blog uses a compact notation for these combinations. `TEP` shards both attention (TP) and experts (EP) across `N` ranks. `DEP` keeps attention data-parallel (ADP) while distributing experts across `N` ranks. Both compose with disaggregated serving, where context (CTX) and generation (GEN) servers are sized independently. For example, `DEP4 (CTX) + TEP8 (GEN)` runs a four-rank DEP context instance alongside an eight-rank TEP generation instance. + +#### Cache management and runtime features + +DeepSeek-V4's hybrid attention turns the "KV cache" into a collection of states with different shapes and lifetimes. Each attention mode owns a different set of logical cache layers: + +- an **SWA** layer owns only its sliding-window KV. +- a **CSA** layer adds the 4× compressed attention cache, Compressor KV/score state, compressed Indexer-K cache, and Indexer-Compressor KV/score state. +- an **HCA** layer adds the 128× compressed attention cache and Compressor KV/score state, with no Indexer-side cache. + +These tensors differ in dtype, bytes per entry, production rate, and lifetime. Treating them as a uniform KV tensor would either waste memory or give the scheduler an incorrect view of capacity. For the rest of this blog, we group them into two lifecycle categories. The **sliding-window cache** contains SWA's sliding-window KV and the short-lived Compressor KV/score state used by CSA, HCA, and the CSA Indexer. These buffers are needed only for bounded windows over recent raw-token positions, so older pages can be recycled. The **persistent compressed caches** contain the finalized 4× and 128× compressed attention entries and CSA's compressed Indexer-K entries. They represent retained history and remain available for attention and prefix reuse, so their storage grows with sequence length at the corresponding compression rate. These terms describe lifecycle categories rather than a one-to-one mapping to physical pools. `DeepseekV4CacheManager` describes every state as a buffer role with an explicit lifecycle and page-indexing mode, then groups compatible buffers into physical memory pools. Sliding-window cache buffers use per-layer page indices. Persistent compressed caches use shared indices across layers with the same compression layout. + +The Compressor breaks two assumptions made by a conventional paged KV cache: its intermediate state is short-lived, and its persistent output grows more slowly than the raw token sequence. TensorRT LLM maps both cases onto existing KV Cache Manager V2 abstractions. + +**Short-lived Compressor state.** A raw token's intermediate state is needed only while a compression window that contains it remains open. Once the last such window is finalized, that token's intermediate state can be recycled. This lifetime is naturally represented as a sliding window: 128 raw-token positions for HCA, and 8 for CSA because its overlapping Compressor keeps two 4-token groups live. The manager can therefore reuse the existing window-eviction and block-recycling machinery. + +**Slow-growing compressed caches.** A compressed stream produces one entry for every $r$ raw tokens. Rather than introduce a second coordinate system, the manager keeps page allocation in raw-token coordinates. For a page covering `tokens_per_block` raw positions, its compressed buffer stores `tokens_per_block / r` entries. The page still represents the same interval of the original sequence, but its storage cost reflects the 4× or 128× compression ratio. Allocation, block-table construction, prefix reuse, and capacity accounting can consequently share one page model across all streams. + +The physical pool split is workload-dependent. Fresh prefill creates the greatest pressure on the sliding-window cache, whereas persistent compressed caches grow with sequence length and decode concurrency. When `kv_cache_config.pool_ratio` is not specified, KV Cache Manager V2 derives an initial split from a representative mixed batch: one context request and up to `max_batch_size - 1` generation requests. `kv_cache_config.avg_seq_len` controls the representative total sequence length of a typical decode request, while additional constraints reserve enough capacity for a maximum-length decode request and a chunked-prefill step. Advanced deployments can override the initial split with `pool_ratio` (specified in pool-group order and summing to 1.0). An opt-in beta rebalancer, enabled with `enable_kv_pool_rebalance`, can later adjust the split from runtime statistics. It is disabled by default and currently targets a narrower set of aggregated-serving configurations. + +DeepSeek-V4 also enables SWA scratch reuse by default. During prefill, transient sliding-window pages can be recycled across compatible layers instead of being retained as independent long-lived allocations. This reduces the prefill peak that would otherwise dictate the entire pool split. Its performance impact is discussed in [**Runtime optimization**](#runtime-optimization). + +With this state model in place, the same attention implementation composes with the runtime features expected in production: + +- **Chunked prefill.** The Compressor and Indexer carry compressed lengths and open-window state across chunks, preserving the semantics of processing the prompt in one pass. +- **KV-cache reuse.** Prefix reuse restores the attention, Compressor, and Indexer state owned by each layer type, rather than treating the main attention KV as sufficient. +- **CUDA Graphs.** Top-K and Compressor workspaces use graph-safe buffers whose captured shapes remain stable for a given graph batch size. +- **Overlap scheduling.** Cache updates and sparse-attention preparation are designed to avoid host-device synchronizations on the critical path, allowing request preparation to overlap GPU execution. +- **Disaggregated serving.** The V2 transfer path describes cache contents by pool, layer, and buffer role, allowing context workers to transfer every DeepSeek-V4 cache type and generation workers to rebuild their local block tables consistently. + +Production support also extends to the API boundary. For Instruct checkpoints, selecting the `deepseek_v4` tokenizer wrapper applies the reference chat format, including thinking controls, tool definitions, and DSML, DeepSeek's special-token-delimited format for tool calls. Tool results are inserted with `` tags. Matching reasoning and tool parsers turn generated thinking and DSML tool-call blocks back into OpenAI-compatible response fields. Base checkpoints remain completion models and should receive raw prompts without this wrapper. + +#### Precision strategy and accuracy + +DeepSeek-V4 uses three checkpoint-level precision recipes, each mapping low precision to the components where it reduces weight or cache bandwidth while keeping higher precision for stateful reductions and numerically sensitive paths: + +| Component | FP8 (Base) | MXFP4 (Instruct) | NVFP4 (requantized) | +| :--- | :--- | :--- | :--- | +| MoE routed experts GEMM | Blockwise FP8 | MXFP8 activations × MXFP4 weights | NVFP4 | +| MoE shared expert GEMM | Blockwise FP8 | MXFP8 | MXFP8 | +| Attention QKV/O GEMM | Blockwise FP8 | MXFP8 | MXFP8 | +| Indexer Q projection | Blockwise FP8 | MXFP8 | MXFP8 | +| Indexer weights projection | BF16 | BF16 | BF16 | +| Compressor KV/score linears | BF16 | BF16 | BF16 | +| Main attention KV cache | BF16 or per-tensor FP8 | BF16 or per-tensor FP8 | BF16 or per-tensor FP8 | +| Indexer K cache | Blockwise FP8 or MXFP4 | Blockwise FP8 or MXFP4 | Blockwise FP8 or MXFP4 | +| Compressor state cache | FP32 | FP32 | FP32 | + +Apart from the main-transformer routed experts, the NVFP4 checkpoint keeps its tensors identical to the MXFP4 Instruct source. In particular, the MTP subtree retains the Instruct precision recipe. The two FP4 routed-expert formats are distinct recipes served by different kernels. The Instruct checkpoints publish packed MXFP4 routed-expert weights executed with MXFP8 activations and MXFP4 weights, while the main-layer experts in requantized checkpoints such as `nvidia/DeepSeek-V4-Pro-NVFP4` run through the NVFP4 MoE path. On the cache side, FP4 approximately halves the Indexer-K data payload and is TensorRT LLM's default Indexer-K format for DeepSeek-V4 on Blackwell. The attention projections follow the same philosophy of staying in low precision across kernel boundaries. For eligible context-only sparse MLA batches, query quantization is fused into the Q RMSNorm and RoPE kernels, which write the FP8 Q buffer consumed by attention. Generation and mixed batches use the unfused Q path. For eligible DeepSeek-V4 Pro configurations, inverse RoPE and FP8 quantization are further fused into the FMHA epilogue, while other configurations use the optimized standalone inverse-RoPE and quantization kernel before `o_a_proj`. These kernel fusions are discussed further in [**Optimize the CSA/HCA hot path**](#optimize-the-csahca-hot-path). + +Accuracy was validated across Flash and Pro checkpoints, the FP8 (Base), MXFP4 (Instruct), and NVFP4 recipes, MTP on and off, FP8 and BF16 KV cache, and aggregated and disaggregated serving, comparing GPQA-Diamond and LiveCodeBench scores against the paper baselines. In this blog, MTP-1 and MTP-3 denote speculative draft lengths of one and three tokens, respectively. Representative GPQA-Diamond results with MTP-3 and FP8 KV cache unless noted: + +| Configuration | GPQA-Diamond | +| :--- | ---: | +| DeepSeek-V4-Flash | 88.8 | +| DeepSeek-V4-Pro | 89.08 | +| DeepSeek-V4-Pro, disaggregated | 89.39 | +| DeepSeek-V4-Pro-NVFP4 | 89.39 | + +Production readiness also required testing well beyond single-feature correctness: the validation matrix spans CUDA Graph capture, chunked prefill with cached history, MTP, long contexts, high concurrency, disaggregated transfer and shutdown, and memory pressure during loading and autotuning, with model-specific CI covering aggregated and disaggregated serving on Blackwell. This coverage is what turned the initial functional implementation into a stack the subsequent performance work could safely optimize. + +### DeepSeek-V4 Performance Optimizations + +Building on the production-ready execution stack described above, TensorRT LLM optimizes DeepSeek-V4 across four areas: the CSA/HCA attention hot path, Compressor and mHC, MoE, and runtime execution and memory management. The following sections explain the key techniques in each area, while [**DeepSeek-V4 Performance Evolution**](#deepseek-v4-performance-evolution) presents their cumulative end-to-end impact under a consistent model workload. Performance numbers cited here are scoped operator measurements or A/B end-to-end comparisons, not cumulative speedups. + +#### Optimize the CSA/HCA hot path + +CSA and HCA share a dual-pool attention kernel over the 128-token sliding window and compressed history, while CSA additionally runs an Indexer and Top-K selection. TensorRT LLM optimizes this hot path through attention-kernel improvements, low-precision fusion, multi-stream scheduling, and Top-K optimization. + +**Sparse MLA kernel optimization.** The dual-pool kernel processes the 128-token sliding window first, then gathers selected CSA entries or streams all HCA entries from the compressed pool. The optimized TRTLLM-Gen kernel skips redundant dense and sliding-window softmax masking on full tiles and issues sparse V loads with less coordinate setup and register spill/reload pressure. On B200 with an FP8 KV cache, the measured FMHA kernel was up to 1.31× faster for CSA prefill and 1.21× faster for HCA generation in the tested shapes. These are operator-level results, and the model-level gain depends on the model's mix of SWA, CSA, and HCA layers. + +**Kernel fusion and low-precision dataflow.** The functional path initially relied on framework or generic operators around attention. TensorRT LLM adds a DeepSeek-V4-specific Q RMSNorm CUDA kernel and extends the MLA RoPE/assignment and FMHA epilogue kernels so that normalization, rotation, and quantization can be fused into their producers. The resulting optimizations are: + +- **Fused Q RMSNorm, RoPE, and FP8 quantization.** The initial context path used three kernels for Q RMSNorm, RoPE and assignment, and full-Q FP8 quantization. For eligible context-only sparse MLA batches with an FP8 KV cache, TensorRT LLM folds quantization of the 448-dimensional non-RoPE segment into the Q RMSNorm kernel, then folds quantization of the remaining 64-dimensional RoPE segment and BMM-scale generation into the RoPE and assignment kernel. These two producer kernels write directly into the same FP8 Q buffer, eliminating the standalone quantization kernel and the full higher-precision normalized Q tensor. Generation and mixed batches continue to use the unfused path. +- **Standalone inverse-RoPE and FP8 quantization.** DeepSeek-V4 first establishes an FP8-native input path for `o_a_proj` by combining inverse RoPE and 1×128 blockwise FP8 quantization in a standalone operator. This operator consumes the BF16 output from FMHA and writes E4M3 activations and FP32 scales directly in the layout required by the Blackwell `o_a_proj` BMM. Replacing the original Triton implementation with a shape-specialized CUDA kernel made the standalone operator 1.6–2.3× faster in kernel-only measurements across 1K–32K tokens on B200. This path remains the fallback when FMHA epilogue fusion is not applicable. +- **FMHA epilogue fusion.** Building on the same FP8 `o_a_proj` input contract, TensorRT LLM moves inverse RoPE and 1×128 E4M3 quantization into the FMHA correction epilogue for validated DeepSeek-V4 Pro configurations using the FP8 KV cache, sparse MLA, and attention data parallelism. FMHA then writes the E4M3 output and FP32 scales directly in the layout consumed by the `o_a_proj` BMM, eliminating both the standalone operator launch and the intermediate BF16 output write and read. The `o_a_proj` BMM remains a separate kernel. This fusion supports context-only and generation-only batches, while mixed batches and unsupported configurations use the standalone path. Relative to the combined time of standard FMHA and the standalone inverse-RoPE and quantization operator, the fused FMHA kernel was up to 1.62× faster for prefill and 1.34× faster for generation in the tested shapes. +- **Others.** For CSA layers with BF16, bias-free `q_b` projection weights, a shape-autotuned CuTe DSL GEMM replaces the generic linear path on supported SM100f systems and falls back when CuTe DSL is unavailable. The optimized attention path also removes a device-to-device copy after FMHA, and FP8 quantization kernels initialize their own scale-buffer padding instead of requiring a separate host-launched `zero_()` operation. + +**Top-K optimizations.** The CSA Indexer selects hundreds of entries per query, making Top-K particularly visible during long-context decode. TensorRT LLM accelerates it in two complementary ways: + +- **Top-K kernel optimization.** TensorRT LLM makes the standard Top-K path shape-aware and device-aware. Depending on the compressed sequence length and row count, the dispatcher uses insertion selection, a single-CTA radix kernel, or a multi-CTA split-and-merge implementation. The multi-CTA path exposes enough parallel work for small decode batches, while its launch policy uses the row count, compressed sequence length, configured split threshold, and the GPU's actual SM count. On B200 with FP32 logits, 196,608 columns, `next_n=1`, and no previous indices, the device-aware policy reduced the K=512 latency at batch size 148 from 384 µs to 112 µs. +- **GVR Top-K.** GVR, introduced in our [GVR technical blog](https://github.com/NVIDIA/TensorRT-LLM/blob/main/docs/source/blogs/tech_blog/blog21_Temporal_Correlation_Meets_Sparse_Attention.md), exploits the overlap between the entries selected by adjacent decode steps. It uses the previous step's indices as candidates, verifies them against current scores, and refines or falls back when the fast-path conditions are not met. DeepSeek-V4 extends GVR to the Indexer's 4× compressed coordinate space and to checkpoint-defined Top-K values of 512 for Flash and 1024 for Pro. In kernel-only B300 tests, GVR was 1.40–2.17× faster than the radix-selection baseline for the tested Flash and Pro shapes. An end-to-end Flash test on eight B300 SXM6 GPUs with a 65K-token input, batch size 4, and MTP-3 reported 6.4% higher request throughput. + +**Multi-stream attention scheduling.** The CSA attention prologue contains the main-attention Compressor, the `q_b` projection, and an Indexer with only a few true dependencies between them. The main-attention Compressor and the query-independent part of the Indexer can start directly from the layer input, while the `q_b` projection and Q RMSNorm wait for the shared projection and `q_a` normalization. TensorRT LLM progressively exposes this parallelism at two levels: + +- **Initial outer overlap.** The first dependency-aware schedule runs the main-attention Compressor concurrently with the `q_b` projection and Q RMSNorm. It then adds a dedicated stream for the complete Indexer branch, allowing all three branches to make progress before sparse MLA consumes their outputs. +- **Nested Indexer overlap.** Inside the Indexer, query projection, RoPE, and Q quantization form one branch, while the query-independent weight projection, Indexer Compressor, and K-cache update form another. Events synchronize them only when Q scales are needed for weight scaling and when the logits and Top-K kernels require the updated cache. +- **Final schedule with earlier launches.** The refined schedule pre-launches the main-attention Compressor and the query-independent half of the Indexer before the shared `kv_a` projection and Q/KV normalizations. Once normalized Q is available, the query-dependent Indexer work runs on its dedicated stream, while the `q_b` projection and Q RMSNorm are queued after the main-attention Compressor on the Compressor stream. This is the final stream assignment, replacing the earlier three-way outer schedule. + +Correctness across streams requires explicit tensor-lifetime tracking. TensorRT LLM calls `record_stream()` on the precomputed Indexer tensors, normalized Q output, and Top-K indices when they move to the consuming stream, preventing the PyTorch caching allocator from reusing their storage before the downstream work completes. + +#### Compressor and mHC + +The Compressor and mHC introduce repeated chains of small, stateful, and reduction-heavy operations around attention and MoE. The Compressor turns projected KV and scores into persistent paged state and compressed cache entries, while mHC transforms the residual streams at each sublayer boundary. TensorRT LLM optimizes both in two layers: first fuse adjacent operations to remove launches and intermediate tensors, then specialize the fused kernels for DeepSeek-V4 shapes and execution regimes. + +##### Compressor optimizations + +The optimized Compressor pipeline uses fusion at three boundaries: + +- **KV and score projection.** A single `wkv_gate` projection produces both the KV vectors and their compression scores. +- **Compression and state update.** The prefill and decode kernels write new KV/score state into paged storage and perform the online-softmax reduction when a compression window completes, avoiding separate state-update and reduction passes. +- **Postprocessing and cache write.** One kernel applies RMSNorm, RoPE, the optional Hadamard transform, output quantization, and scatter into the compressed paged cache. + +**Kernel optimization.** The fused Compressor kernels support the different dtype and cache-layout requirements of both the main-attention Compressor and the Compressor inside the Indexer, including BF16, FP8, and MXFP4 paths. They accept BF16 projection output directly while retaining FP32 state updates and online-softmax accumulation where required, avoiding a full FP32 KV/score intermediate. The reduction kernels are specialized for the 4×-compression decode and MTP regime and the much longer 128×-compression prefill regime, with the latter also reducing newly arrived tokens while writing their paged state to avoid a later readback. + +##### mHC optimizations + +DeepSeek-V4 places mHC around both attention and MoE, making the boundary between consecutive sublayers the primary fusion opportunity. + +**Kernel fusion.** TensorRT LLM fuses the previous sublayer's post-mapping with the next sublayer's pre-mapping into shape-specialized CUDA kernels, with both two-kernel and all-in-one tactics for different token counts. The next sublayer's input RMSNorm is further folded into the fused mHC epilogue, eliminating a separate launch and an HBM round trip. Because mHC owns the residual connection at the attention-to-MoE boundary, the MoE path also skips separate residual handling. + +**Kernel optimization.** No single mHC kernel is optimal across the full range of token counts `M`. TensorRT LLM provides FMA implementations for small-`M` workloads and higher-throughput MMA implementations as `M` grows, with two-kernel and all-in-one variants, multiple tile configurations, and Split-K support. The autotuner evaluates the valid tactics for each workload and selects the best-performing implementation, while pruning choices that are not competitive in the corresponding `M` regime and caching the selected tactic for reuse. + +#### MoE optimizations + +Building on the routing design [described above](#beyond-attention-mhc-moe-and-speculative-decoding), TensorRT LLM optimizes DeepSeek-V4's MoE path through a custom router GEMM, the MXFP8 × MXFP4 DeepGEMM MegaMoE backend, streamlined input preparation, and ongoing NVFP4 MegaMoE integration. These efforts preserve the model's routing metadata, precision recipe, and checkpoint-defined `swiglu_limit` activation clamp. + +**MoE router GEMM optimization.** For the 256-expert Flash shape, the score-based router uses a custom GEMM when it receives one to 16 token rows. The kernel consumes BF16 activations and weights and produces FP32 logits directly, avoiding the full FP32 input and weight casts required by the original linear path. Unsupported shapes, including the 384-expert Pro router, continue to use cuBLAS. In the reported small-shape measurements, router latency decreased from approximately 8 µs to 3 µs. + +**MXFP8 × MXFP4 DeepGEMM MegaMoE.** For the W4A8 recipe with MXFP8 activations and MXFP4 weights, the DeepGEMM MegaMoE backend moves dispatch, the first expert GEMM, SwiGLU, the second expert GEMM, and combine into a fused-communication path that uses symmetric memory and in-kernel synchronization. In a 500-request DeepSeek-V4 Flash test on B200 with 1K-token inputs and outputs, TP4, EP4, and attention data parallelism, switching from the TensorRT LLM MoE backend to DeepGEMM MegaMoE increased throughput by 15.3% and reduced latency by 12.7%. TensorRT LLM also fuses the input preparation for this backend: instead of separately quantizing BF16 activations to MXFP8, converting selected expert indices, and copying activations, scales, indices, and routing weights into symmetric buffers, one CUDA kernel performs the quantization and writes all four outputs directly to their final buffers, reducing six GPU operations to one. No separate end-to-end gain is attributed to the preparation change. + +**NVFP4 MegaMoE (WIP).** For native NVFP4 checkpoints, TensorRT LLM is integrating the ported `Sm100MegaMoEKernel` as a CuTe DSL execution backend on the SM100f path. The integration covers BF16-to-NVFP4 input quantization, dispatch, the two expert GEMMs, SwiGLU, per-route combine writes with native NVFP4 weights, and a separate reduction of the Top-K route contributions. It also includes symmetric-memory exchange for multi-rank expert parallelism and workload-specific tactic selection through the TensorRT LLM autotuner. The NVFP4 and DeepGEMM MegaMoE paths have separate hardware, quantization, and topology requirements. This precision-specific backend remains under integration and validation. + +#### Runtime optimization + +After the major kernels are optimized, runtime overhead shifts to the boundaries between kernels, repeated metadata and data movement, and transient memory growth during long-context prefill. TensorRT LLM addresses these costs through earlier dependent launches, streamlined input preparation, and workload-aware memory control. + +**Programmatic Dependent Launch.** PDL allows a dependent consumer grid to launch before its producer grid fully retires, wait at an explicit dependency point, and continue as soon as the required producer state is ready. TensorRT LLM configures PDL globally for supported DeepGEMM operations and also applies it to the packed 1×128 FP8 quantization, MLA RoPE, sparse-index conversion, sparse FMHA, and fused mHC paths used by DeepSeek-V4. This shortens producer-to-consumer boundaries without changing the model's dependency graph. + +**Metadata preparation.** TensorRT LLM streamlines DeepSeek-V4 attention-metadata preparation by reusing tensors and consolidating the host- and device-side updates required for each step, reducing Python work, kernel launches, and data transfers. The cache manager also builds DeepSeek-V4 block tables on the GPU and uses a dedicated CUDA operator instead of compiling the earlier tensor implementation, reducing host-memory pressure while keeping block-table generation on the device. + +**SWA scratch reuse.** A long prefill step produces KV entries for every token in the input chunk, but sliding-window attention retains only the most recent window after the step. Among the new blocks allocated for the current chunk, blocks that will already be outside the final non-rewindable window are needed only by the currently executing layer. TensorRT LLM maps this scratch-eligible range through per-layer block tables to coalesced scratch subpages. Because these per-layer lifetimes do not overlap, the same physical scratch storage can be reused as execution advances across layers. Pre-existing history from earlier chunks remains in the normal KV cache and is never overwritten by scratch reuse. New blocks in the active window also remain in the normal cache, and the tail that MTP may rewind is excluded from scratch storage. As a result, the cache does not retain the full current prefill chunk independently for every compatible SWA layer, reducing long-context prefill memory consumption and leaving more capacity for larger chunks, longer prompts, or higher concurrency. + +
    +
    + SWA scratch reuse during long-context prefill. Scratch-eligible KV blocks produced by the current prefill chunk and falling outside the final retained window reuse the same physical storage across SWA layers, while blocks inside the sliding window remain in the normal KV cache. +
    +
    +

    Figure 3. SWA scratch reuse during long-context prefill. Scratch-eligible blocks from the current prefill chunk reuse the same physical storage across SWA layers, while the final sliding-window state remains in the normal KV cache.

    + +**Bounded Indexer workspace.** During long-context prefill, the Indexer's MQA-logits transient grows with both the query chunk and compressed history. TensorRT LLM controls this allocation at two levels. An outer heuristic reduces the configured prefill chunk when the compressed KV history crosses long-context thresholds. Within each chunk, query tiling imposes a hard per-call element budget so that only a bounded slice of the logits matrix is materialized at a time. Because logits and Top-K are computed independently for each query row, tiling preserves the exact selection result while enabling very long prompts without reducing the model-wide token budget. + +Together, these runtime optimizations help carry the preceding kernel gains through to the full model. Dependent work starts earlier, recurring host-side metadata work is reduced, and long-context memory follows a bounded working set instead of unchecked temporary growth. The next section, [**DeepSeek-V4 Performance Evolution**](#deepseek-v4-performance-evolution), shows how the kernel and runtime improvements accumulate at the full-model level. + +### DeepSeek-V4 Performance Evolution + +The preceding [**DeepSeek-V4 Performance Optimizations**](#deepseek-v4-performance-optimizations) section described the individual attention, Compressor, mHC, MoE, and runtime optimizations. Their real value, however, is whether they move the end-to-end serving frontier after the full system is re-tuned. We therefore tracked a sequence of complete TensorRT LLM Pareto sweeps rather than multiplying speedups from isolated operator benchmarks. Under the same DeepSeek-V4 Pro 8K/1K workload, the maximum observed output throughput increased from 984 to 1,618 tokens/s/GPU between the first validated functional baseline and the latest fully refreshed May 28 snapshot, a **64.5% improvement**. Additional optimizations have since been integrated into the newer DeepSeek-V4 stack, but have not yet been included in a new full Pareto sweep. + +#### Experimental setup + +The primary evaluation uses the InferenceX fixed-length 8K/1K workload, with exactly 8K input tokens and 1K output tokens per request. This shape stresses both sides of disaggregated serving: the context workers must process a substantial prompt, while the generation workers execute enough decode steps for sparse attention, MTP, and MoE efficiency to materially affect the result. + +| Item | Configuration | +| :--- | :--- | +| Model | DeepSeek-V4 Pro, 1.6T total parameters | +| Hardware | NVIDIA GB300 | +| Precision | Mixed-precision MXFP4 Instruct recipe: MXFP8 activations × MXFP4 weights for routed-expert GEMMs, with component-specific precision elsewhere | +| Workload | InferenceX, 8K input tokens and 1K output tokens per request | +| Serving mode | End-to-end disaggregated serving with independently sized context and generation workers | +| Sweep | TEP4/TEP8 for the latency-oriented end; DEP8/DEP16/DEP32 for the throughput-oriented end; MTP-3 for most latency and mid-frontier points and MTP-1 at the highest-concurrency points | +| Metrics | Output throughput per concurrent request stream (tokens/s/user) and output throughput per GPU (tokens/s/GPU) | + +Each curve in Figure 4 is a newly measured system Pareto sweep. A point can therefore change concurrency, MTP depth, parallel strategy, expert placement, and the context-to-generation resource ratio. The curve movement is the meaningful comparison; the peak values should not be interpreted as a component-by-component A/B test at an identical configuration. + +![Four DeepSeek-V4 Pro 8K/1K disaggregated-serving Pareto curves, showing peak output throughput increasing from 984 to 1,618 tokens/s/GPU](../media/tech_blog26_dsv4_performance_evolution_8k1k.png) + +

    Figure 4. DeepSeek-V4 Pro 8K/1K disaggregated serving on GB300, using the mixed-precision MXFP4 Instruct recipe with MXFP8 × MXFP4 routed-expert GEMMs. Each line is a complete TensorRT LLM Pareto sweep from that milestone.

    + +#### From Baseline to the Latest Measured Curve + +The four curves capture three distinct phases of optimization. The table reports the highest measured tokens/s/GPU on each sweep; because the maximizing configuration changes as the frontier moves, these values summarize system evolution rather than a strict single-configuration waterfall. + +| Milestone | Peak output throughput (tokens/s/GPU) | Gain from previous | Gain from baseline | Representative changes in this stage | +| :--- | ---: | ---: | ---: | :--- | +| April 28: validated baseline | 984 | — | — | Validated end-to-end disaggregated stack under the common model and workload definition | +| May 8: Top-K and Compressor | 1,167 | +18.6% | +18.6% | Small-batch exact Top-K, BF16 Compressor input and fusion, and disaggregated memory/correctness fixes | +| May 18: MegaMoE and EPLB | 1,505 | +29.0% | +53.0% | MegaMoE, EPLB-enabled DEP placements, fused mHC and RMSNorm, and expanded multi-stream attention | +| May 28: attention and runtime refinements | 1,618 | +7.5% | +64.5% | Deeper attention overlap, the optimized inverse-RoPE and FP8 `o_a_proj` path, PDL, and GPU-side scale-buffer and block-table cleanup | + +**The first measured curve establishes the validated functional baseline.** It represents the complete execution path after functional bring-up: hybrid SWA/CSA/HCA attention, persistent Compressor state, MTP, KV Cache Manager V2, and disaggregated cache transfer. We treat all work required to reach this point as part of the baseline rather than assigning it a performance gain. Every subsequent curve uses the same model, precision recipe, and fixed-shape workload definition. The reported evolution therefore measures optimization of a working system rather than the addition of missing model features. + +**Exact Indexer Top-K and Compressor improvements move the May 8 frontier.** The small-batch multi-CTA path increased GPU utilization for exact Top-K, while BF16 Compressor input and additional Compressor fusion removed conversion, launch, and intermediate-buffer overhead. Runtime fixes were equally important: correcting sliding-window over-allocation improved usable generation-side KV capacity, while the launcher fix ensured that the configured NUMA policy was applied to multi-process disaggregated runs. Together, the full re-tuned sweep raised the peak by 18.6%, from 984 to 1,167 tokens/s/GPU. + +**MegaMoE and EPLB drive the mid-May step.** The largest movement in the system curve came between May 8 and May 18. MegaMoE fused expert dispatch, the two expert GEMMs, activation, and combine into a communication-aware path using symmetric memory and in-kernel synchronization. At the throughput-oriented end of the curve, the May 18 sweep also moved to EPLB-enabled DEP placements to improve expert balance across ranks. In parallel, mHC absorbed the adjacent RMSNorm, and the Indexer and attention paths gained expanded dependency-aware overlap. Together, these changes produced a 29.0% stage-over-stage increase and a 53.0% increase over the initial baseline. Because the maximizing configuration changed across the complete sweeps, this movement is not a single-configuration decomposition of the individual optimizations. + +**Attention overlap and runtime cleanup extend the late-May frontier.** By May 28, deeper Indexer, Compressor, and Q-path overlap reduced exposed attention work. PDL, producer-side FP8 scale-buffer initialization, the optimized inverse-RoPE and FP8 `o_a_proj` input path, and cheaper GPU-side block-table preparation removed additional synchronization, launch, and data-movement overhead. The May 28 curve is roughly 7–8% above May 18 across most throughput-oriented DEP points, lifting the observed peak to 1,618 tokens/s/GPU. This broad movement is more informative than any single microbenchmark: it shows that the optimizations survived full-model scheduling, cache management, and context/generation rate matching. + +May 28 is the latest measured curve, not the current performance ceiling. The newer DeepSeek-V4 stack subsequently integrated sparse-MLA softmax and V-load improvements, fused MegaMoE input preparation, the optimized 128× Compressor prefill reduction, and later attention-epilogue fusion. These changes target attention, MoE preparation, and Compressor overhead, but the complete GB300 8K/1K Pareto sweep has not been rerun with the newer stack. None of their gains is included in the reported 64.5% improvement, and we do not extrapolate a new end-to-end number. We expect a refreshed curve to move further once it is measured under the same methodology. + +The latest measured fixed-shape InferenceX curve establishes the clean model/runtime baseline for [Part II](#part-ii-agentic-workload-optimizations). Agentic workloads change the optimization boundary: dynamic multi-turn prompts, very high KV reuse, conversation locality, routing, and serialization become part of the critical path. The next section, [**AgentPerf Workflow**](#agentperf-workflow), introduces that wider optimization boundary without re-counting the model-specific gains above. + + +## Part II. Agentic-Workload Optimizations + +### AgentPerf Workflow + +[AA-AgentPerf](https://artificialanalysis.ai/methodology/agentperf) measures how many active coding agents an inference deployment can support while meeting a model-specific service level objective (SLO). This [NVIDIA Developer Blog](https://developer.nvidia.com/blog/nvidia-achieves-leading-agentic-coding-performance-on-first-agentic-ai-benchmark/) introduces the benchmark and explains why prerecorded trajectories are needed to represent agentic inference. Unlike the fixed-shape InferenceX workload used in Part I, AA-AgentPerf replays multi-turn coding sessions with interleaved reasoning and tool calls. Each simulated agent advances sequentially and waits for the current response and any client-simulated tool time before sending its next request. + +| Property | Fixed-shape InferenceX | AA-AgentPerf | +| :--- | :--- | :--- | +| Unit of load | Independent request | Active agent following a trajectory | +| Request shape | Fixed input and output lengths | Growing input context and variable output lengths | +| Inter-request dependency | Requests are independent | Each turn waits for the response and any client-simulated tool time | +| Prefix reuse | No accumulated cross-turn history | Accumulated history enables reuse across turns | +| Objective | Throughput and latency at a fixed shape | Highest concurrency satisfying model-specific SLO thresholds | + +The following figure summarizes the closed-loop request path for aggregated and disaggregated serving. + +
    +
    + AA-AgentPerf closed-loop workflow. A simulated agent sends the next recorded turn with its accumulated conversation. The inference deployment routes the request, reuses matching KV blocks, prefills the uncached suffix, and streams the generated response. In disaggregated serving, the generation side retrieves the KV cache using context metadata. The client drains the complete response, simulates tool time when needed, advances the trajectory, and sends the next turn only after the current cycle completes. +
    +
    +

    Figure 5. AA-AgentPerf closed-loop request workflow. Repeated conversation prefixes can be reused through the KV cache. Aggregated serving performs prefill and generation on the same worker. In disaggregated serving, context metadata allows the generation worker to retrieve the KV cache and continue decoding. Tool time is simulated by the client and consumes no LLM compute.

    + +This closed loop makes the complete request cycle part of every agent's progress. Repeated prefixes make KV-cache reuse important because later turns can avoid recomputing accumulated history. Growing contexts and variable output lengths also exercise cache capacity and scheduling differently from fixed-shape requests. Simulated tool delays introduce idle periods between turns, while concurrent agents maintain sustained load on the deployment. + +AA-AgentPerf reports the highest concurrency that satisfies both the P25 of per-request output speed and the P95 of per-request time to first token (TTFT). Because the benchmark is continuously updated, this blog uses the [AA methodology](https://artificialanalysis.ai/methodology/agentperf) current at publication for the exact thresholds. We refer to the current DeepSeek-V4 Pro SLO #1 and SLO #2 tiers as **SLO20** and **SLO60**. SLO20 requires at least 20 tokens/s and P95 TTFT at most 10 seconds. SLO60 requires at least 60 tokens/s and P95 TTFT at most 5 seconds. SLO20 emphasizes serving capacity, while SLO60 preserves a faster interactive experience. + +For engineering comparisons, we use concurrency per GPU (CPG). It is the supported concurrency divided by the total number of GPUs in the deployment, including both context and generation GPUs. + +### Lessons from DeepSeek-V3.2 Agentic Workload Optimization + +Before DeepSeek-V4, we optimized DeepSeek-V3.2 for long, multi-turn agentic workloads in both aggregated and disaggregated serving. The durable value of that work was not a particular benchmark result or deployment configuration. It was a set of system-level rules that guided the DeepSeek-V4 effort: + +1. **High reuse creates a different bottleneck from raw GPU throughput.** High prefix reuse can leave only a small uncached suffix to compute while the accumulated conversation still occupies substantial KV-cache capacity. Scheduling and capacity planning should therefore consider the remaining compute tokens and resident KV footprint rather than raw prompt length alone. +2. **Amortize host overhead without pausing generation.** Two complementary approaches addressed this overhead. First, CUDA Graph capture and kernel fusion reduced recurring host and launch work. **Piecewise CUDA Graph capture** covered graphable regions in prefill and mixed prefill-decode iterations when the full iteration could not be captured as one graph. Generation-only iterations continued to use the regular monolithic CUDA Graph path. Second, context-only **Delay batching** briefly held small context requests so newly arriving context requests could join a larger batch. Generation requests continued to run during this wait. +3. **Treat routing as a trajectory-level balance between locality and load.** Later turns benefit from returning to the workers and ranks that hold their conversation prefix. That affinity must be balanced against load so that preserving reuse does not create persistent rank imbalance. +4. **Measure disaggregated serving end to end.** Front-end preprocessing and KV-cache movement can limit throughput even when context and generation GPUs appear underutilized. Asynchronous preprocessing, parallel data movement, and per-stage observability are therefore part of serving performance. + +DeepSeek-V4 changed the model path, cache layout, and serving control plane, so the earlier configuration could not simply be reused. We carried forward these rules rather than the exact parallel strategy, cache settings, batching parameters, or transfer settings. The following section applies them to DeepSeek-V4 routing, KV lifecycle, host overhead, and scheduling. + +### End-to-End Optimizations for Agentic Serving + +Starting from the final model/runtime stack in [Part I](#part-i-deepseek-v4-model-support-and-optimizations), this section applies the measurement methodology and system-level principles learned from [DeepSeek-V3.2](#lessons-from-deepseek-v32-agentic-workload-optimization) to DeepSeek-V4's AgentPerf-specific request path, without counting the model-specific gains again. In this workload, a routing miss can force a long conversation prefix to be recomputed, erasing gains from faster kernels. Hashing that same prefix token by token in Python can also serialize the orchestrator's request path. These bottlenecks expand the optimization boundary beyond GPU kernels. The remaining work spans three coupled areas: preserving locality through routing, keeping reusable KV blocks resident through lifecycle and capacity management, and removing overhead across the worker host paths, scheduler, orchestrator, and CTX-to-GEN protocol once reuse reduces the GPU work per turn. + +#### Preserve locality with two-level routing + +The DeepSeek-V3.2 study showed the central routing tradeoff: affinity without load control creates imbalance, while load balancing that overrides affinity destroys reuse. DeepSeek-V4 applies that lesson through two consecutive placement decisions. The front-end orchestrator first selects a context (CTX) server instance. The attention data-parallel (ADP) router then selects a rank within that instance. At either level, the router can use an explicit conversation identifier or infer locality from KV-cache contents. Reuse is preserved only when both decisions return a later turn to the server and rank that own its KV blocks. Instance-level affinity cannot compensate for a rank-level miss, and the correct rank is unreachable after the wrong server has been selected. + +
    +
    + Two-level routing for context locality in disaggregated serving. The front-end orchestrator first selects a context server, then the selected server's attention data-parallel router selects a rank. At each level, the router can use either conversation-aware affinity or KV-cache-aware scoring. Full conversation-prefix reuse requires both decisions to return to the context server and rank that own the corresponding KV blocks. The selected context rank transfers the KV cache to a generation server for decoding. +
    +
    +

    Figure 6. Two-level routing for context locality in disaggregated serving. The front-end orchestrator first selects a CTX server, and that server's ADP router then selects a rank. Conversation-aware routing uses explicit conversation affinity, while KV-cache-aware routing infers placement from reusable prefix blocks and load. Full conversation-prefix reuse requires both decisions to return the request to the CTX server and ADP rank that hold the corresponding KV blocks.

    + +##### Instance-level routing across context servers + +The first routing level distributes conversations across CTX server instances. It must preserve locality for later turns while balancing new conversations across servers. + +**Conversation-aware routing.** When the client provides a stable conversation identifier, the orchestrator assigns the first turn to the least-loaded CTX server, using round-robin among equally loaded candidates, and records the binding. For each later turn, the orchestrator uses that binding to send the request back to the same server, preserving reuse of the conversation prefix cached there as long as the server remains available. The affinity decision then becomes a session-table lookup, avoiding full-prompt tokenization and block-hash computation on the front-end event loop. + +**KV-cache-aware routing.** When a reliable conversation identifier is unavailable, the orchestrator infers locality by tokenizing the prompt, deriving its block keys, estimating the reusable prefix on each CTX server, and balancing reuse against current load. We made three improvements to keep this path efficient and stable. First, incremental tokenization reuses the token IDs for the stable prompt prefix and encodes only the appended suffix. The orchestrator passes those token IDs to the worker and applies the same tool definitions and chat-template arguments, avoiding repeated tokenization while ensuring that both sides derive the same block keys. Second, we refined candidate scoring, which selects a CTX server by weighing its reusable prefix against its current load. Instead of normalizing the cache match by the full prompt length, the new score uses the absolute number of matched blocks and a separate active-request penalty. This prevents the long system and tool prefix shared across requests from diluting the score advantage contributed by conversation-specific blocks. Third, we strengthened affinity when temporary cache eviction weakens the cache-match signal. A bounded mapping derived from stable early conversation content remembers the selected CTX server and continues to direct later turns to it even if eviction temporarily lowers the server's cache-match score. + +Cache-aware routing also requires the orchestrator to maintain a compatible and sufficiently current view of each worker's cache. Three design choices make that view both reliable and inexpensive to maintain. First, the orchestrator and workers use the same hash algorithm and cache namespace. An optional cache salt acts as a namespace identifier, allowing KV reuse only between requests that carry the same value. Second, the orchestrator adopts the worker's block size by default. When it tracks cache at a finer supported granularity, completed-request backfill adds the routed block keys to the selected server's cache view after successful execution, which lets the orchestrator track newly cached prefixes at its own granularity without translating between incompatible event boundaries. Third, cache metadata updates are batched, and worker events are refreshed in the background to keep this maintenance off the routing critical path. Together, these changes keep cache tracking useful without turning it into a new routing bottleneck. + +##### Rank-level routing within a context server + +After a CTX server has been selected, the second routing level places the request on one of its ADP ranks. It must preserve the exact rank that owns the reusable prefix while keeping new conversations distributed across the instance. + +**Conversation-aware routing.** The ADP router records a bounded `conversation ID → rank` mapping. It assigns the first turn of each new conversation by round-robin among ranks below a loose fair-share target, then pins later turns to the recorded rank. A returning conversation may exceed that soft target because moving it would discard rank-local reuse. Affinity is relaxed only when the assigned rank reaches the hard active-request limit. An overflow request does not overwrite the original binding, which allows a later turn to return when the rank has capacity again. + +**KV-cache-aware routing.** Without a reliable conversation ID, the ADP router must infer rank locality from the KV blocks that are actually present. For each new request, every rank probes its local radix tree to measure the reusable prefix without reserving any cache blocks. The probe uses the request's cache salt so that it searches the same cache namespace as the KV cache manager. The ranks then exchange their prefix-match lengths and current loads. For each candidate rank, the router estimates the remaining prefill work as the input length minus the matched prefix, then adds a normalized load penalty. A meaningful prefix match therefore favors the rank that can reuse it, while a weak match caused only by the shared system and tool scaffold is ignored in favor of load balancing. A loose fair-share cap provides a second guard against concentrating too many requests on a few warm ranks. When several related requests arrive in the same scheduling batch, the router groups them by their early prefix and places longer requests first. After each assignment, it updates the selected rank's load using only the tokens that still require computation. The next request is therefore routed against the work already placed in that batch rather than a stale load snapshot. + +**Protect rank balance.** A new conversation contains the shared system and tool scaffold but little conversation-specific history. Without explicit cold-start handling, the first few ranks that cache this common prefix can attract more new conversations, while the remaining ranks stay cold. Conversation-aware routing prevents this feedback loop by distributing first turns with round-robin before pinning later turns. KV-cache-aware routing can instead use an optional warmup phase that sends initial requests to ranks not yet selected, allowing every rank to cache the shared prefix before normal scoring begins. + +##### Routing policy selection + +Our evaluation results show that, with completed-request backfill, the cache-aware path achieved a cache hit rate comparable to conversation-aware routing, but required additional preprocessing and cache tracking. The two approaches therefore offer different ways to preserve locality: one uses explicit conversation metadata, while the other infers locality from cache contents. + +#### KV cache reuse optimizations + +Two-level routing keeps successive turns of the same conversation on the CTX server and ADP rank that hold the reusable prefix. Placement alone is not enough. The prefix must also remain resident until the next turn arrives. Analysis of early DeepSeek-V4 AgentPerf runs showed substantial optimization headroom in cache memory management. DeepSeek-V4 divides cache memory among the sliding-window cache and several persistent compressed caches with different storage costs and demand profiles, so reuse depends on both the cache lifecycle and how memory is budgeted across pools. We first added per-pool cache metrics to locate pressure, then used those signals to optimize the sliding-window cache lifecycle and tune cache pool ratios. + +**Add per-pool cache metrics.** An overall cache hit rate shows how much reuse was achieved, but it does not reveal which pool was constrained or whether the cause was sustained pressure or a short-lived capacity spike. We added per-pool telemetry for occupancy, allocation and commit volume, cached KV length, and data movement between HBM and host memory. Reuse counters distinguish fully reused, partially reused, and missed blocks. Peak watermarks and complete iteration histories capture transient pressure that periodic summaries can miss, while memory probes expose the HBM headroom before and after model loading. Host-tier gauges further distinguish evictable blocks from blocks dropped before reuse. Together, these signals identify the constrained pool, distinguish incorrect lifecycle retention from insufficient pool capacity, and provide the evidence for the next two optimizations. + +**Optimize the sliding-window cache lifecycle.** As described in [**Cache management and runtime features**](#cache-management-and-runtime-features), DeepSeek-V4's sliding-window cache includes SWA KV and short-lived Compressor KV/score state. These buffers should remain bounded by their active windows rather than grow with the full prompt. The previous reuse policy retained SWA KV across the full prompt, even though a later agent turn needs only the blocks within the active window. We introduced the `per_request` policy to select the sliding-window state needed by the next turn when the current prefill request completes, allowing older pages to be recycled. The same retention issue appeared at the CTX-to-GEN handoff in disaggregated serving. Before this optimization, GEN allocated sliding-window cache for the full transferred prompt, including blocks outside the active window. We changed GEN initialization to allocate cache only for blocks within the active window. Together, these changes keep the sliding-window cache bounded during prefill and disaggregated handoff. Persistent compressed caches still retain the long-term prefix and continue to grow with sequence length. + +**Tune cache pool ratios.** Correcting the cache lifecycle removes stale allocations, but reusable prefixes can still be evicted when the available HBM is divided poorly across pools. The two cache categories respond differently to workload shape. Sliding-window cache pressure is driven by the active-request count, while persistent compressed caches grow with retained sequence length and the number of concurrent conversations. Each allocation must be satisfied by its own pool group, so free pages in one group cannot cover a shortage in another. A split tuned for a different request-length distribution or serving role can therefore exhaust one pool and evict reusable blocks even while another pool has unused capacity. To address this imbalance, we introduced configurable pool-ratio controls for DeepSeek-V4. On CTX servers, prefix reuse makes pool demand highly dependent on the workload's prefix-reuse pattern, which the runtime cannot infer reliably. Users should therefore tune `pool_ratio` manually using the per-pool metrics described above. On GEN servers, users can set `avg_seq_len` to the workload's average total sequence length, allowing KV Cache Manager V2 to derive the initial pool ratio automatically. These controls direct capacity to the pools that need it and avoid evicting reusable history while memory remains unused elsewhere. An opt-in beta rebalancer can also adjust the split from runtime statistics. It is disabled by default and currently supports a narrower set of aggregated-serving configurations. Extending this mechanism to broader deployments remains ongoing work. + +**Host offloading and incremental transfer.** We also evaluated host KV offloading and incremental CTX-to-GEN transfer. Compared with models that retain full K/V history for every token, DeepSeek-V4 stores long-term history in compressed attention and Indexer caches while keeping raw-token KV and Compressor state within bounded sliding windows. Its KV-cache footprint per input token is therefore relatively small. This compact representation keeps more reusable KV blocks resident, leaving less additional reuse for host offloading to recover. It also reduces the CTX-to-GEN payload, limiting the data movement that incremental transfer can overlap. Neither mechanism therefore produced a meaningful end-to-end improvement for this AgentPerf configuration. The evaluation is still useful for workloads with larger KV-cache footprints or higher transfer volumes. + +#### Optimize scheduling and remove end-to-end overhead + +Routing and cache management make later turns with reusable prefixes much cheaper on the GPU. That saving reaches the user only if the rest of the serving path also avoids processing the full long prompt again. Profiling showed substantial host work during CTX prefill and a persistent gap between GEN inter-token latency and the speed-of-light (SOL) estimate. Long token arrays were still being hashed, copied, tokenized, serialized, and broadcast at several boundaries. We addressed this gap inside both the workers and the serving control plane. First, we removed host work from the CTX and GEN critical paths. We then optimized scheduling, orchestration, and protocol handling. + +##### Optimize host overhead for CTX and GEN + +Effective prefix reuse reduces the GPU work to the uncached suffix, but the surrounding host path can still scale with the full prompt. This is especially costly when the work runs in Python or is repeated on every distributed rank. We therefore moved per-token loops out of Python where possible and skipped host operations that could not produce useful GPU work. + +**CTX host path.** Profiling showed that CTX was paying host work at the wrong granularity. Block-key construction paid a conversion and SHA-256 update for every token, turning a long prompt into many small operations before prefill could begin. Distributed coordination was paid once per iteration, even when no new request was available. Those empty iterations could still enter prefix-gather and request-broadcast collectives. The first cost grew with the full prompt, while the second could create host bubbles without producing any GPU work. We changed each operation to follow the unit of useful work. Block-key construction now packs one block of tokens into a contiguous byte buffer and updates the hash once per block. All ranks perform a lightweight request-count probe before entering the larger collectives. If no new request exists, they take the same fast path and skip both prefix gathering and request broadcast. + +**GEN host path.** On GEN, profiling did not point to one dominant function. Instead, host time accumulated through three prompt-proportional costs as each long-prompt request crossed the CTX-to-GEN handoff, entered GEN, and was distributed across the ranks. First, GEN could repeat tokenization already completed by CTX. Second, request admission and routing repeatedly copied or materialized the full token list. Third, interprocess request transfer serialized token IDs as individual Python objects before rebuilding the full list on the receiving side. The latter two costs occurred on request-ingress or executor-loop paths while holding the Python GIL, so they could delay the next generation iteration. To reduce this accumulated host time, we introduced a set of targeted optimizations, each addressing one of these costs directly. (a) CTX now returns the prompt token IDs that it already computed, allowing GEN to bypass tokenization. (b) During admission, enqueue no longer deep-copies the token list, while routing obtains the token count without materializing the full list. (c) Serialization and C++ request construction use a compact token representation, avoiding per-token Python objects and full-list reconstruction. + +##### Optimize scheduling, orchestration, and protocol handling + +After reducing host work inside CTX and GEN, latency could still accumulate before a request entered a worker and while data moved between workers. We treated this serving control plane as three related problems. Scheduling determines which ready request runs next. The orchestrator performs routing and relays data between CTX and GEN. The protocol must minimize redundant payload while preserving request identity when retries occur. + +**Scheduling.** Under high concurrency, a GEN worker may have to choose between newly admitted requests waiting for their first token and requests that have already begun decoding. When the batch or token budget is tight, placing both groups in the same queue can leave a new request behind many ongoing conversations for several scheduling iterations. We added an opt-in policy for disaggregated GEN that gives first-token requests priority while preserving FIFO order within both groups. This can move a newly admitted request into an earlier feasible batch and reduce the queueing delay before its first decode step without adding GPU work. The policy is designed to improve first-token responsiveness and tail-latency SLO compliance rather than raw throughput. + +**Orchestrator.** Profiling exposed two sources of per-request overhead. First, **native block-key hashing** removed the routing hot spot. The instance-level KV router originally hashed every token ID in a Python loop on its single asyncio thread. This held the Global Interpreter Lock (GIL) and serialized concurrent requests before they could reach CTX. Replacing the loop with a native C++ block-key hasher preserved the cache-key format while moving prompt-length hashing out of the Python event loop. Second, **efficient relay serialization** reduced request-body processing when a request crossed the HTTP boundaries to CTX and GEN. The default path previously materialized a JSON-compatible Python object containing the full prompt-token list, after which the HTTP client traversed that object again to encode the request body. We changed this path to use `pydantic-core` to emit the JSON body directly. For deployments where request-body processing remains a bottleneck, an opt-in `msgspec` MessagePack transport provides an alternative internal orchestrator-to-worker path that removes JSON encoding and parsing from this hop. The external OpenAI API and the default direct-JSON path remain unchanged. + +**CTX-to-GEN protocol.** The CTX-to-GEN protocol had two issues: it could carry more request state than GEN needed, and a retried request could leave CTX and GEN with inconsistent identifiers. In supported text-only, non-Harmony deployments, an opt-in path removes earlier chat history from the GEN request while preserving the prompt token IDs, final message, tool definitions, and generation settings that GEN still needs. This reduces copying, serialization, and transfer without changing the request semantics supported by that path. We also hardened the retry path so that known transient connection failures do not leave CTX and GEN with inconsistent request identifiers. Together, these changes reduce protocol overhead while preserving consistency across the disaggregated handoff. + +Across the host and serving-control-plane paths, these changes reduce prompt-proportional processing, redundant serialization, and avoidable synchronization between GPU iterations. Together with routing and cache management, they allow prefix reuse to translate into end-to-end performance. The next section, [**AgentPerf Results and External Validation**](#agentperf-results-and-external-validation), presents the combined end-to-end results under frozen configurations and evaluates them against the SLO20 and SLO60 objectives. + +### AgentPerf Results and External Validation + +The previous section described how routing, KV-cache policy, host-path cleanup, scheduling, and orchestration removed distinct end-to-end bottlenecks. This section presents the DeepSeek-V4 Pro AgentPerf evaluation setup and the results reported by Artificial Analysis. We keep these agent-workload results separate from the model-specific results in [Part I](#part-i-deepseek-v4-model-support-and-optimizations) and report the best-performing configurations we developed for those AA-AgentPerf measurements. + +The GB300 NVL72 configurations served DeepSeek-V4 Pro at maximum thinking effort using TensorRT LLM with disaggregated serving. Several context (CTX) workers fed one generation (GEN) worker through NIXL KV-cache transfer. Each CTX worker used four GPUs with attention data parallelism and MoE expert parallelism. + +To select the end-to-end topology, we followed the speed-of-light (SOL) rate-matching workflow introduced in the [TensorRT LLM disaggregated serving tech blog](https://github.com/NVIDIA/TensorRT-LLM/blob/main/docs/source/blogs/tech_blog/blog05_Disaggregated_Serving_in_TensorRT-LLM.md#measurement-methodology). We first measured CTX request throughput across candidate parallel mappings and batch settings that could satisfy the TTFT target, and independently measured GEN output throughput and per-agent output speed across mappings, batch sizes, and concurrency levels. We then matched the aggregate service rates of the two tiers to construct an idealized SOL Pareto curve. The final SLO20 configuration used DEP8 with a larger GEN batch to maximize capacity. The final SLO60 configuration used DEP16 with a smaller GEN batch to preserve higher per-agent decode speed. SOL assumes perfect rate matching and excludes practical end-to-end costs such as KV-cache transfer, routing, host work, and workload burstiness, so it served as a configuration-selection reference rather than a reported AgentPerf result. + +The same rate-matching calculation provided the starting `xPyD` ratio, where `xPyD` denotes `x` CTX/prefill instances feeding `y` GEN/decode instances. For each selected GEN operating point, we converted its output-token throughput into a request-equivalent service rate using the workload's output-length distribution, then compared it with the measured per-instance CTX request rate to estimate the ideal number of CTX instances. Because this ratio can be fractional while a deployment requires whole workers, we evaluated the neighboring integer `xPyD` topologies that fit the GPU budget. We selected the topology that provided the best end-to-end balance while satisfying both the output-speed and TTFT requirements, then swept concurrency to find its maximum passing load. + +The configurations used DEP4 CTX workers with `max_batch_size: 128` and the TensorRT LLM MoE backend. The capacity-oriented SLO20 configuration used a DEP8 GEN worker with `max_batch_size: 192`. The higher-speed SLO60 configuration used a DEP16 GEN worker with `max_batch_size: 32` and an offline EPLB map. Both GEN workers used the DeepGEMM MegaMoE backend. Both deployments used the MXFP4 recipe, MTP-3, FP8 KV cache, conversation-affinity routing at the orchestrator and ADP-rank levels, and heuristic GVR Top-K. + +As defined in [**AgentPerf Workflow**](#agentperf-workflow), we use concurrency per GPU (CPG) to compare deployment configurations. The GPU count here includes both the CTX and GEN tiers, and only points that pass the target SLO are reported. The Artificial Analysis article, [First results from AA-AgentPerf: the hardware benchmark for the agent era](https://artificialanalysis.ai/articles/aa-agentperf/), reports the GB300 configurations provided by NVIDIA and run and verified by Artificial Analysis. These results validate the complete workload path rather than an isolated TensorRT LLM microbenchmark. Artificial Analysis replayed the agent trajectories and applied its SLO search and steady-state methodology. The associated [serving-configuration browser](https://artificialanalysis.ai/benchmarks/hardware/configs) discloses the precision, topology, worker YAML, routing mode, MTP setup, cache policy, transfer backend, and launch commands. + +The GB300 results reached 57.5 CPG at SLO20 and 19.2 CPG at SLO60: + +| Target | CTX/GEN topology | Passing concurrency | GPUs used | CPG | Provenance | +| :--- | :--- | ---: | ---: | ---: | :--- | +| SLO20 | 6 × CTX DEP4 + 1 × GEN DEP8 | 1,840 | 32 | 57.5 | NVIDIA configuration, run and verified by AA | +| SLO60 | 6 × CTX DEP4 + 1 × GEN DEP16 | 768 | 40 | 19.2 | NVIDIA configuration, run and verified by AA | + +## Reproduction and Future Work + +### How to reproduce + +TensorRT LLM already provides the common operational steps for launching disaggregated serving. Follow the [disaggregated serving tech blog](https://github.com/NVIDIA/TensorRT-LLM/blob/main/docs/source/blogs/tech_blog/blog05_Disaggregated_Serving_in_TensorRT-LLM.md) and the [disaggregated serving guide](https://nvidia.github.io/TensorRT-LLM/features/disagg-serving.html) for environment setup, CTX and GEN worker startup, NIXL KV-cache transfer, and orchestrator launch. Both result sets below build on this foundation but use different workload-specific references. The InferenceX path uses the linked GB300 recipes to reproduce the fixed-shape 8K/1K Pareto sweeps. The AA-AgentPerf path starts from the current TensorRT LLM `main` branch to evaluate the latest optimized stack and uses the linked AA configuration entries and methodology for the submitted topology, settings, and SLO evaluation. + +**InferenceX 8K/1K.** Reproduce the fixed-shape results from [**DeepSeek-V4 Performance Evolution**](#deepseek-v4-performance-evolution) with the [GB300 MXFP4 ISL8K/OSL1K MTP recipes](https://github.com/NVIDIA/srt-slurm/tree/sa-submission-q2-2026/recipes/DeepSeek-V4-Pro/disagg/trtllm_dynamo/gb300_mxfp4/ISL8K_OSL1K/MTP). The directory contains the CTX/GEN topology sweep, MTP settings, benchmark concurrencies, and worker configurations used for the 8K/1K measurements. + +**AA-AgentPerf.** For the results reported above, use the corresponding entries in the [Artificial Analysis configuration browser](https://artificialanalysis.ai/benchmarks/hardware/configs). The 57.5-CPG SLO20 result uses the [GB300 DEP8 configuration](https://artificialanalysis.ai/benchmarks/hardware/configs#config-60987f21-a7db-4a8e-8d3a-810a7527de2f), while the 19.2-CPG SLO60 result uses the [GB300 DEP16 configuration](https://artificialanalysis.ai/benchmarks/hardware/configs#config-8e07c398-605a-457f-96c4-bb002691de79). Each entry provides the CTX and GEN worker YAML, disaggregated server configuration, topology, routing settings, and launch commands needed to reproduce the deployment setup. Use the [AA-AgentPerf methodology](https://artificialanalysis.ai/methodology/agentperf) for the benchmark procedure and SLO evaluation. + +### Future Work + +Our next phase continues to optimize DeepSeek-V4 as a complete serving system: improve the low-precision GPU execution path, reduce host and control-plane overhead, broaden hardware coverage, and expand speculative decoding support. These directions need to advance together, because faster model execution raises end-to-end capacity only when cache management, routing, and orchestration can keep the GPUs supplied efficiently. The following work is already underway. + +**Advance the NVFP4 execution path.** We are moving the performance path to the NVFP4 DeepSeek-V4 checkpoint, continuing to tune the NVFP4 MegaMoE backend, and evaluating a more aggressive quantization recipe that applies NVFP4 to additional linear layers. This work treats the checkpoint, kernel coverage, and quantization recipe as one end-to-end path. + +**Fuse more small kernels.** We will continue combining adjacent small operations to reduce intermediate memory traffic and the number of kernel launches. These fusions target both GPU execution time and the host launch overhead that remains visible in small effective batches. + +**Move the KV Cache Manager V2 hot path to C++.** KV Cache Manager V2 provides the flexible multi-pool model required by DeepSeek-V4, but its performance-critical control path is still primarily implemented in Python. Migrating this path to C++ will reduce GIL contention and recurring host overhead, which become especially visible when high cache reuse leaves only a small amount of GPU work per turn. + +**Optimize and scale the serving control plane.** Conversation-aware and KV-aware routing still have room to reduce TTFT and CPU overhead while preserving cache locality and balanced placement. At larger deployment scales, a multiprocess orchestrator with a coordinator-and-worker architecture is being developed to address the point at which a single orchestrator becomes the bottleneck. We will optimize these paths as one control plane, resolve the current multiprocess TTFT issues, and validate the complete design under high-concurrency, multi-turn workloads. + +**Add DeepSeek-V4 DSpark support.** We are integrating the DSpark speculative-decoding path for DeepSeek-V4 and validating it against the MTP baseline. The remaining work includes measuring acceptance behavior, tuning the runtime configuration, and quantifying the resulting end-to-end gain. + +**Extend DeepSeek-V4 support to Hopper.** The current performance work is centered on Blackwell. We are extending the model and runtime paths required for complete DeepSeek-V4 execution on Hopper, with platform-appropriate kernels and precision support. + +## Conclusion and Acknowledgments + +DeepSeek-V4 optimization in TensorRT LLM is an end-to-end systems effort. Building a production-ready model stack required correctness across hybrid attention, mHC, MTP, MoE, quantization, cache management, and disaggregated execution. Moving the performance frontier then required coordinated work from GPU kernels and execution overlap through KV reuse, host efficiency, routing, orchestration, configuration tuning, and benchmark methodology. The result is a stack that improves both fixed-shape inference and long-running agentic serving, demonstrating that delivered performance comes from optimizing the model and the serving system together. + +This work is the result of close collaboration across many teams and every layer of the inference stack. We sincerely thank everyone who contributed to model bring-up, accuracy validation, benchmark optimization, and infrastructure support. The results shared here came from repeated cycles of analysis, implementation, profiling, debugging, validation, and configuration tuning. We are grateful for the expertise, persistence, and teamwork that turned DeepSeek-V4 into a production-ready, high-performance TensorRT LLM stack. From 74739166e29ed8d7c1c82de890eb26bd5da4d409 Mon Sep 17 00:00:00 2001 From: Shi Xiaowei <39303645+Shixiaowei02@users.noreply.github.com> Date: Fri, 17 Jul 2026 18:04:17 +0800 Subject: [PATCH 2/4] [https://nvbugs/6329052][fix] Change the config for DSV3 disagg conditional test (#16528) Signed-off-by: Xiaowei Shi <39303645+Shixiaowei02@users.noreply.github.com> --- .../test_configs/disagg_config_cache_reuse_deepseek_v3.yaml | 3 +++ tests/integration/test_lists/waives.txt | 2 -- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/integration/defs/disaggregated/test_configs/disagg_config_cache_reuse_deepseek_v3.yaml b/tests/integration/defs/disaggregated/test_configs/disagg_config_cache_reuse_deepseek_v3.yaml index 36b459dabc1e..9a51a0f5903d 100644 --- a/tests/integration/defs/disaggregated/test_configs/disagg_config_cache_reuse_deepseek_v3.yaml +++ b/tests/integration/defs/disaggregated/test_configs/disagg_config_cache_reuse_deepseek_v3.yaml @@ -2,9 +2,12 @@ hostname: localhost model: DeepSeek-V3-Lite/bf16 free_gpu_memory_fraction: 0.15 backend: pytorch +attn_backend: FLASHINFER cuda_graph_config: null disable_overlap_scheduler: true enable_autotuner: false +model_kwargs: + num_hidden_layers: 4 context_servers: num_instances: 1 tensor_parallel_size: 1 diff --git a/tests/integration/test_lists/waives.txt b/tests/integration/test_lists/waives.txt index 41524c7704ac..ac681628990a 100644 --- a/tests/integration/test_lists/waives.txt +++ b/tests/integration/test_lists/waives.txt @@ -201,7 +201,6 @@ examples/visual_gen/test_visual_gen_multi_gpu.py::test_wan22_t2v_lpips_against_g examples/visual_gen/test_visual_gen_multi_gpu.py::test_wan22_t2v_lpips_against_golden_tp[tp2] SKIP (https://nvbugs/6329227) examples/visual_gen/test_visual_gen_multi_gpu.py::test_wan22_t2v_lpips_against_golden_tp[tp2_ulysses2] SKIP (https://nvbugs/6329227) full:A100/accuracy/test_llm_api_pytorch_multimodal.py::TestExaone4_5_33B::test_auto_dtype[full_budget] SKIP (https://nvbugs/6422318) -full:A100/disaggregated/test_workers.py::test_workers_conditional_disaggregation_deepseek_v3_lite_bf16[DeepSeek-V3-Lite-bf16] SKIP (https://nvbugs/6329052) full:A100X/llmapi/test_llm_examples.py::test_llmapi_speculative_decoding_mtp SKIP (https://nvbugs/6287561) full:A100X/unittest/llmapi/test_llm_pytorch.py -m "part0" SKIP (https://nvbugs/6416249) full:B200/accuracy/test_disaggregated_serving.py::TestDeepSeekV3Lite::test_auto_dtype_with_helix[fifo_v1-cudagraph:with_padding-pp1tp1cp4] SKIP (https://nvbugs/6410881) @@ -316,7 +315,6 @@ full:L40S/accuracy/test_llm_api_autodeploy.py::TestNemotronH::test_auto_dtype[tr full:L40S/accuracy/test_llm_api_pytorch.py::TestQwen3_30B_A3B::test_fp8[latency-torch_compile=True] SKIP (https://nvbugs/6276841) full:L40S/accuracy/test_llm_api_pytorch_multimodal.py::TestExaone4_5_33B::test_auto_dtype[forced_chunked_prefill] SKIP (https://nvbugs/6327149) full:L40S/accuracy/test_llm_api_pytorch_multimodal.py::TestExaone4_5_33B::test_auto_dtype[full_budget] SKIP (https://nvbugs/6327149) -full:L40S/disaggregated/test_workers.py::test_workers_conditional_disaggregation_deepseek_v3_lite_bf16[DeepSeek-V3-Lite-bf16] SKIP (https://nvbugs/6329052) full:RTXPro6000D/accuracy/test_llm_api_pytorch.py::TestDeepSeekV3Lite::test_nvfp4_4gpus[moe_backend=CUTLASS-mtp_nextn=0-ep4-fp8kv=True-attention_dp=True-cuda_graph=True-overlap_scheduler=True-low_precision_combine=False-torch_compile=False] SKIP (https://nvbugs/5948435) full:RTXPro6000D/accuracy/test_llm_api_pytorch.py::TestDeepSeekV3Lite::test_nvfp4_4gpus[moe_backend=CUTLASS-mtp_nextn=0-ep4-fp8kv=True-attention_dp=True-cuda_graph=True-overlap_scheduler=True-low_precision_combine=False-torch_compile=True] SKIP (https://nvbugs/5961814) full:RTXPro6000D/accuracy/test_llm_api_pytorch.py::TestDeepSeekV3Lite::test_nvfp4_4gpus[moe_backend=CUTLASS-mtp_nextn=2-ep4-fp8kv=True-attention_dp=True-cuda_graph=True-overlap_scheduler=True-low_precision_combine=False-torch_compile=False] SKIP (https://nvbugs/5961814) From 3eefb000c9278c1cfd25da40c676740d287a93aa Mon Sep 17 00:00:00 2001 From: chenfeiz0326 Date: Fri, 17 Jul 2026 22:38:50 +0800 Subject: [PATCH 3/4] [None][test] Promote disagg perf sanity tests to pre-merge for functional verification (#16351) Signed-off-by: chenfeiz0326 --- jenkins/L0_Test.groovy | 46 +++++++++++++++++-- .../defs/perf/README_test_perf_sanity.md | 10 ++++ .../integration/defs/perf/test_perf_sanity.py | 12 ++++- ...sanity_ctx1_node1_gpu4_gen1_node1_gpu8.yml | 17 ++++++- ...sanity_ctx1_node1_gpu1_gen1_node1_gpu4.yml | 17 ++++++- ...sanity_ctx1_node1_gpu2_gen1_node2_gpu8.yml | 18 +++++++- ...sanity_ctx1_node1_gpu4_gen1_node2_gpu8.yml | 19 +++++++- 7 files changed, 129 insertions(+), 10 deletions(-) diff --git a/jenkins/L0_Test.groovy b/jenkins/L0_Test.groovy index 8f246f744287..de737527d928 100644 --- a/jenkins/L0_Test.groovy +++ b/jenkins/L0_Test.groovy @@ -4883,13 +4883,23 @@ def launchTestJobs(pipeline, testFilter) "DGX_B200-8_GPUs-PyTorch-PerfSanity-Post-Merge-5": ["auto:dgx-b200-flex", "l0_b200_multi_gpus_perf_sanity", 5, 6, 8, 1, true], "DGX_B200-8_GPUs-PyTorch-PerfSanity-Post-Merge-6": ["auto:dgx-b200-flex", "l0_b200_multi_gpus_perf_sanity", 6, 6, 8, 1, true], ] + // B200 PerfSanity pre-merge disaggregated (functional-only: perf regressions do not fail CI) + // 2 Nodes + x86SlurmTestConfigs += buildStageConfigs( + "DGX_B200-16_GPUs-2_Nodes-PyTorch-Disagg-PerfSanity-FUNCTIONAL-ONLY-CTX1-NODE1-GPU4-GEN1-NODE1-GPU8", + "auto:dgx-b200-flex", + "l0_b200_multi_nodes_perf_sanity_ctx1_node1_gpu4_gen1_node1_gpu8", + 1, + 16, + 2 + ) // B200 PerfSanity post-merge disaggregated // 2 Nodes x86SlurmTestConfigs += buildStageConfigs( "DGX_B200-16_GPUs-2_Nodes-PyTorch-Disagg-PerfSanity-CTX1-NODE1-GPU4-GEN1-NODE1-GPU8-Post-Merge", "auto:dgx-b200-flex", "l0_b200_multi_nodes_perf_sanity_ctx1_node1_gpu4_gen1_node1_gpu8", - 6, + 5, 16, 2 ) @@ -4986,6 +4996,16 @@ def launchTestJobs(pipeline, testFilter) 8, 2 ) + // PerfSanity pre-merge disaggregated (functional-only: perf regressions do not fail CI) + // 2 Nodes + multiNodesSBSAConfigs += buildStageConfigs( + "GB200-8_GPUs-2_Nodes-PyTorch-Disagg-PerfSanity-FUNCTIONAL-ONLY-CTX1-NODE1-GPU1-GEN1-NODE1-GPU4", + "auto:gb200-flex", + "l0_gb200_multi_nodes_perf_sanity_ctx1_node1_gpu1_gen1_node1_gpu4", + 1, + 8, + 2 + ) // PerfSanity post-merge disaggregated // 2 Nodes multiNodesSBSAConfigs += buildStageConfigs( @@ -5000,7 +5020,7 @@ def launchTestJobs(pipeline, testFilter) "GB200-8_GPUs-2_Nodes-PyTorch-Disagg-PerfSanity-CTX1-NODE1-GPU1-GEN1-NODE1-GPU4-Post-Merge", "auto:gb200-flex", "l0_gb200_multi_nodes_perf_sanity_ctx1_node1_gpu1_gen1_node1_gpu4", - 7, + 6, 8, 2 ) @@ -5102,12 +5122,21 @@ def launchTestJobs(pipeline, testFilter) 8, 2 ) + // 3 Nodes (pre-merge, functional-only) + multiNodesSBSAConfigs += buildStageConfigs( + "GB300-12_GPUs-3_Nodes-PyTorch-Disagg-PerfSanity-FUNCTIONAL-ONLY-CTX1-NODE1-GPU4-GEN1-NODE2-GPU8", + "auto:gb300-flex", + "l0_gb300_multi_nodes_perf_sanity_ctx1_node1_gpu4_gen1_node2_gpu8", + 1, + 12, + 3 + ) // 3 Nodes multiNodesSBSAConfigs += buildStageConfigs( "GB300-12_GPUs-3_Nodes-PyTorch-Disagg-PerfSanity-CTX1-NODE1-GPU4-GEN1-NODE2-GPU8-Post-Merge", "auto:gb300-flex", "l0_gb300_multi_nodes_perf_sanity_ctx1_node1_gpu4_gen1_node2_gpu8", - 5, + 4, 12, 3 ) @@ -5139,12 +5168,21 @@ def launchTestJobs(pipeline, testFilter) 8, 2 ) + // 3 Nodes (pre-merge, functional-only) + multiNodesSBSAConfigs += buildStageConfigs( + "GB300-12_GPUs-3_Nodes-PyTorch-Disagg-PerfSanity-FUNCTIONAL-ONLY-CTX1-NODE1-GPU2-GEN1-NODE2-GPU8", + "auto:gb300-flex", + "l0_gb300_multi_nodes_perf_sanity_ctx1_node1_gpu2_gen1_node2_gpu8", + 1, + 12, + 3 + ) // 3 Nodes multiNodesSBSAConfigs += buildStageConfigs( "GB300-12_GPUs-3_Nodes-PyTorch-Disagg-PerfSanity-CTX1-NODE1-GPU2-GEN1-NODE2-GPU8-Post-Merge", "auto:gb300-flex", "l0_gb300_multi_nodes_perf_sanity_ctx1_node1_gpu2_gen1_node2_gpu8", - 5, + 4, 12, 3 ) diff --git a/tests/integration/defs/perf/README_test_perf_sanity.md b/tests/integration/defs/perf/README_test_perf_sanity.md index a1c534507634..53fc8c346b5f 100644 --- a/tests/integration/defs/perf/README_test_perf_sanity.md +++ b/tests/integration/defs/perf/README_test_perf_sanity.md @@ -229,6 +229,16 @@ Tests are defined in `jenkins/L0_Test.groovy` under the `launchTestJobs` functio **Important**: Pre-merge and post-merge tests must be in separate stages. +### Pre-merge vs Post-merge Perf-Regression Gating + +By default, `test_perf_sanity.py` fails CI on perf regression for pre-merge stages and only warns for post-merge stages. This is auto-detected from the Jenkins job URL (`PostMerge` substring), not the stage name. + +**`FUNCTIONAL-ONLY` stage-name flag**: A pre-merge stage whose name contains `FUNCTIONAL-ONLY` (e.g. `GB200-8_GPUs-2_Nodes-PyTorch-Disagg-PerfSanity-FUNCTIONAL-ONLY-CTX1-NODE1-GPU4-GEN1-NODE1-GPU4`) still runs the full perf harness — benchmarks execute, metrics are uploaded to OpenSearch, dashboards update — but perf regressions **do not fail CI**. Only functional failures (build errors, crashes, empty output) fail the stage. + +Use this for pre-merge stages whose goal is to catch functional regressions on paths that only had post-merge coverage before. It preserves the data-continuity benefit of running in pre-merge (baselines still update from PR data points) without the flakiness cost of gating on the noisier disagg perf numbers. + +Detection is by substring match on `os.environ["stageName"]` inside `test_perf_sanity.py`; no changes to `perf_regression_utils.py`. + ### GPU Hours Calculation - Each CI stage runtime is approximately **1 hour** diff --git a/tests/integration/defs/perf/test_perf_sanity.py b/tests/integration/defs/perf/test_perf_sanity.py index a1bfbb7b22eb..ceae5a2eccd9 100644 --- a/tests/integration/defs/perf/test_perf_sanity.py +++ b/tests/integration/defs/perf/test_perf_sanity.py @@ -2273,11 +2273,20 @@ def add_dict_prefix(config_dict: dict, prefix_name: str) -> dict: else: return + stage_name = os.environ.get("stageName", "") extra_fields = { - "s_stage_name": os.environ.get("stageName", ""), + "s_stage_name": stage_name, "s_test_list": self._test_param_labels, } + # Stages tagged "FUNCTIONAL-ONLY" run the full perf harness (numbers are + # still uploaded to OpenSearch and dashboards) but do not fail CI on perf + # regression -- same behavior as post-merge. Used for pre-merge disagg + # coverage where the goal is functional-failure detection, not gating on + # perf. Explicit False (not None) so the auto-detect in + # process_and_upload_test_results does not flip it back on for pre-merge. + fail_on_regression = False if "FUNCTIONAL-ONLY" in stage_name else None + # gen_only tests are gated solely on per-iter prev_device_step_time, not # token throughput (token-based numbers are dominated by KV cache transfer # time in gen_only mode and are not a useful regression signal there). @@ -2304,6 +2313,7 @@ def add_dict_prefix(config_dict: dict, prefix_name: str) -> dict: regression_metrics=regression_metrics, extra_fields=extra_fields, upload_to_db=self.upload_to_db, + fail_on_regression=fail_on_regression, ) diff --git a/tests/integration/test_lists/test-db/l0_b200_multi_nodes_perf_sanity_ctx1_node1_gpu4_gen1_node1_gpu8.yml b/tests/integration/test_lists/test-db/l0_b200_multi_nodes_perf_sanity_ctx1_node1_gpu4_gen1_node1_gpu8.yml index da5fde3c3f94..cf2ff013fe45 100644 --- a/tests/integration/test_lists/test-db/l0_b200_multi_nodes_perf_sanity_ctx1_node1_gpu4_gen1_node1_gpu8.yml +++ b/tests/integration/test_lists/test-db/l0_b200_multi_nodes_perf_sanity_ctx1_node1_gpu4_gen1_node1_gpu8.yml @@ -1,5 +1,21 @@ version: 0.0.1 l0_b200_multi_nodes_perf_sanity_ctx1_node1_gpu4_gen1_node1_gpu8: +- condition: + ranges: + # 1 ctx worker with each 1 node and 4 GPUs + # 1 gen worker with each 1 node and 8 GPUs + system_gpu_count: + gte: 16 + lte: 16 + wildcards: + gpu: + - '*b200*' + terms: + stage: pre_merge + backend: pytorch + tests: + - perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-b200_deepseek-r1-fp4_8k1k_con1536_ctx1_dep4_gen1_dep8_eplb0_mtp1_ccb-NIXL] TIMEOUT (120) + - condition: ranges: # 1 ctx worker with each 1 node and 4 GPUs @@ -17,7 +33,6 @@ l0_b200_multi_nodes_perf_sanity_ctx1_node1_gpu4_gen1_node1_gpu8: - perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-b200_deepseek-r1-fp4_1k1k_con1_ctx1_dep4_gen1_tep8_eplb0_mtp3_ccb-NIXL] TIMEOUT (120) - perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-b200_deepseek-r1-fp4_1k1k_con2048_ctx1_dep4_gen1_dep8_eplb0_mtp1_ccb-NIXL] TIMEOUT (120) - perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-b200_deepseek-r1-fp4_1k1k_con256_ctx1_dep4_gen1_dep8_eplb0_mtp3_ccb-NIXL] TIMEOUT (120) - - perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-b200_deepseek-r1-fp4_8k1k_con1536_ctx1_dep4_gen1_dep8_eplb0_mtp1_ccb-NIXL] TIMEOUT (120) - perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-b200_deepseek-r1-fp4_8k1k_con1_ctx1_dep4_gen1_tep8_eplb0_mtp3_ccb-NIXL] TIMEOUT (120) - perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-b200_deepseek-r1-fp4_8k1k_con256_ctx1_dep4_gen1_dep8_eplb0_mtp1_ccb-NIXL] TIMEOUT (120) # - perf/test_perf_sanity.py::test_e2e[disagg_upload-e2e-b200_deepseek-r1-fp4_1k1k_con1_ctx1_dep4_gen1_tep8_eplb0_mtp3_ccb-NIXL] TIMEOUT (120) diff --git a/tests/integration/test_lists/test-db/l0_gb200_multi_nodes_perf_sanity_ctx1_node1_gpu1_gen1_node1_gpu4.yml b/tests/integration/test_lists/test-db/l0_gb200_multi_nodes_perf_sanity_ctx1_node1_gpu1_gen1_node1_gpu4.yml index 626bbcce9521..3fb23d85a0ff 100644 --- a/tests/integration/test_lists/test-db/l0_gb200_multi_nodes_perf_sanity_ctx1_node1_gpu1_gen1_node1_gpu4.yml +++ b/tests/integration/test_lists/test-db/l0_gb200_multi_nodes_perf_sanity_ctx1_node1_gpu1_gen1_node1_gpu4.yml @@ -1,5 +1,21 @@ version: 0.0.1 l0_gb200_multi_nodes_perf_sanity_ctx1_node1_gpu1_gen1_node1_gpu4: +- condition: + ranges: + # 1 ctx worker with each 1 node and 1 GPUs + # 1 gen worker with each 1 node and 4 GPUs + system_gpu_count: + gte: 8 + lte: 8 + wildcards: + gpu: + - '*gb200*' + terms: + stage: pre_merge + backend: pytorch + tests: + - perf/test_perf_sanity.py::test_e2e[disagg_upload-e2e-gb200_gpt-oss-120b-fp4_8k1k_con1024_ctx1_tp1_gen1_tp4_eplb0_mtp0_ccb-NIXL] TIMEOUT (90) + - condition: ranges: # 1 ctx worker with each 1 node and 1 GPUs @@ -20,4 +36,3 @@ l0_gb200_multi_nodes_perf_sanity_ctx1_node1_gpu1_gen1_node1_gpu4: - perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb200_qwen3-235b-fp4_8k1k_con1_ctx1_tp1_gen1_tep4_eplb0_mtp0_ccb-NIXL] TIMEOUT (90) - perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb200_qwen3-235b-fp4_8k1k_con64_ctx1_tp1_gen1_tep4_eplb0_mtp0_ccb-NIXL] TIMEOUT (90) - perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb200_gpt-oss-120b-fp4_8k1k_con1024_ctx1_tp1_gen1_tp4_eplb0_mtp0_ccb-NIXL] TIMEOUT (90) - - perf/test_perf_sanity.py::test_e2e[disagg_upload-e2e-gb200_gpt-oss-120b-fp4_8k1k_con1024_ctx1_tp1_gen1_tp4_eplb0_mtp0_ccb-NIXL] TIMEOUT (90) diff --git a/tests/integration/test_lists/test-db/l0_gb300_multi_nodes_perf_sanity_ctx1_node1_gpu2_gen1_node2_gpu8.yml b/tests/integration/test_lists/test-db/l0_gb300_multi_nodes_perf_sanity_ctx1_node1_gpu2_gen1_node2_gpu8.yml index 4b46cb313cf3..cbd13b4b3656 100644 --- a/tests/integration/test_lists/test-db/l0_gb300_multi_nodes_perf_sanity_ctx1_node1_gpu2_gen1_node2_gpu8.yml +++ b/tests/integration/test_lists/test-db/l0_gb300_multi_nodes_perf_sanity_ctx1_node1_gpu2_gen1_node2_gpu8.yml @@ -1,5 +1,22 @@ version: 0.0.1 l0_gb300_multi_nodes_perf_sanity_ctx1_node1_gpu2_gen1_node2_gpu8: +- condition: + ranges: + # 1 ctx worker with each 1 node and 2 GPUs + # 1 gen worker with each 2 node and 8 GPUs + system_gpu_count: + gte: 12 + lte: 12 + wildcards: + gpu: + - '*gb300*' + terms: + stage: pre_merge + backend: pytorch + tests: + # glm-5-fp4 + - perf/test_perf_sanity.py::test_e2e[disagg_upload-e2e-gb300_glm-5-fp4_8k1k_con1024_ctx1_dep2_gen1_dep8_eplb256_mtp1_ccb-NIXL] TIMEOUT (90) + - condition: ranges: # 1 ctx worker with each 1 node and 2 GPUs @@ -19,4 +36,3 @@ l0_gb300_multi_nodes_perf_sanity_ctx1_node1_gpu2_gen1_node2_gpu8: - perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb300_glm-5-fp4_8k1k_con1_ctx1_dep2_gen1_tep8_eplb0_mtp3_ccb-NIXL] TIMEOUT (90) - perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb300_glm-5-fp4_8k1k_con1024_ctx1_dep2_gen1_dep8_eplb256_mtp1_ccb-NIXL] TIMEOUT (90) - perf/test_perf_sanity.py::test_e2e[disagg_upload-e2e-gb300_glm-5-fp4_1k1k_con4096_ctx1_dep2_gen1_dep8_eplb256_mtp1_ccb-NIXL] TIMEOUT (90) - - perf/test_perf_sanity.py::test_e2e[disagg_upload-e2e-gb300_glm-5-fp4_8k1k_con1024_ctx1_dep2_gen1_dep8_eplb256_mtp1_ccb-NIXL] TIMEOUT (90) diff --git a/tests/integration/test_lists/test-db/l0_gb300_multi_nodes_perf_sanity_ctx1_node1_gpu4_gen1_node2_gpu8.yml b/tests/integration/test_lists/test-db/l0_gb300_multi_nodes_perf_sanity_ctx1_node1_gpu4_gen1_node2_gpu8.yml index 5e93797854ae..73b7863d9692 100644 --- a/tests/integration/test_lists/test-db/l0_gb300_multi_nodes_perf_sanity_ctx1_node1_gpu4_gen1_node2_gpu8.yml +++ b/tests/integration/test_lists/test-db/l0_gb300_multi_nodes_perf_sanity_ctx1_node1_gpu4_gen1_node2_gpu8.yml @@ -1,5 +1,22 @@ version: 0.0.1 l0_gb300_multi_nodes_perf_sanity_ctx1_node1_gpu4_gen1_node2_gpu8: +- condition: + ranges: + # 1 ctx worker with each 1 node and 4 GPUs + # 1 gen worker with each 2 node and 8 GPUs + system_gpu_count: + gte: 12 + lte: 12 + wildcards: + gpu: + - '*gb300*' + terms: + stage: pre_merge + backend: pytorch + tests: + # kimi-k25-thinking-fp4 8k1k + - perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb300_kimi-k25-thinking-fp4_8k1k_con4_ctx1_dep4_gen1_tep8_eplb0_mtp3_ccb-NIXL] TIMEOUT (90) + - condition: ranges: # 1 ctx worker with each 1 node and 4 GPUs @@ -18,7 +35,5 @@ l0_gb300_multi_nodes_perf_sanity_ctx1_node1_gpu4_gen1_node2_gpu8: - perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb300_deepseek-r1-fp4_128k8k_con256_ctx1_pp4_gen1_dep8_eplb0_mtp1_ccb-NIXL] TIMEOUT (180) # kimi-k25-thinking-fp4 1k1k - perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb300_kimi-k25-thinking-fp4_1k1k_con4096_ctx1_dep4_gen1_dep8_eplb0_mtp0_ccb-NIXL] TIMEOUT (90) - # kimi-k25-thinking-fp4 8k1k - - perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb300_kimi-k25-thinking-fp4_8k1k_con4_ctx1_dep4_gen1_tep8_eplb0_mtp3_ccb-NIXL] TIMEOUT (90) - perf/test_perf_sanity.py::test_e2e[disagg_upload-e2e-gb300_deepseek-r1-fp4_128k8k_con256_ctx1_pp4_gen1_dep8_eplb0_mtp1_ccb-NIXL] TIMEOUT (180) - perf/test_perf_sanity.py::test_e2e[disagg_upload-e2e-gb300_kimi-k25-thinking-fp4_1k1k_con4096_ctx1_dep4_gen1_dep8_eplb0_mtp0_ccb-NIXL] TIMEOUT (90) From 334aaa8fb5143d68e7436ac5f6be476bd70e945b Mon Sep 17 00:00:00 2001 From: chenfeiz0326 Date: Fri, 17 Jul 2026 23:37:41 +0800 Subject: [PATCH 4/4] [None][test] Remove all 1k1k perf-sanity cases from CI (#16535) Signed-off-by: chenfeiz0326 --- jenkins/L0_MergeRequest.groovy | 4 - jenkins/L0_Test.groovy | 80 +++++-------------- .../l0_b200_multi_gpus_perf_sanity.yml | 13 --- ...sanity_ctx1_node1_gpu4_gen1_node1_gpu8.yml | 6 -- ...00_multi_nodes_perf_sanity_node2_gpu16.yml | 1 - .../l0_gb200_multi_gpus_perf_sanity.yml | 25 ------ ...sanity_ctx1_node1_gpu1_gen1_node1_gpu2.yml | 3 - ...sanity_ctx1_node1_gpu1_gen1_node1_gpu4.yml | 1 - ...sanity_ctx1_node1_gpu4_gen1_node1_gpu4.yml | 21 ----- ...sanity_ctx1_node1_gpu4_gen1_node2_gpu8.yml | 5 -- ...anity_ctx1_node1_gpu4_gen1_node8_gpu32.yml | 4 - ...anity_ctx2_node1_gpu4_gen1_node4_gpu16.yml | 18 ----- ...200_multi_nodes_perf_sanity_node2_gpu8.yml | 1 - .../l0_gb300_multi_gpus_perf_sanity.yml | 7 -- ...sanity_ctx1_node1_gpu2_gen1_node1_gpu4.yml | 18 ----- ...sanity_ctx1_node1_gpu2_gen1_node2_gpu8.yml | 2 - ...anity_ctx1_node1_gpu2_gen1_node8_gpu32.yml | 1 - ...sanity_ctx1_node1_gpu4_gen1_node1_gpu4.yml | 21 ----- ...sanity_ctx1_node1_gpu4_gen1_node2_gpu8.yml | 3 - ...anity_ctx1_node1_gpu4_gen1_node8_gpu32.yml | 1 - ...300_multi_nodes_perf_sanity_node2_gpu8.yml | 1 - tests/integration/test_lists/waives.txt | 9 --- 22 files changed, 19 insertions(+), 226 deletions(-) delete mode 100644 tests/integration/test_lists/test-db/l0_gb200_multi_nodes_perf_sanity_ctx1_node1_gpu4_gen1_node1_gpu4.yml delete mode 100644 tests/integration/test_lists/test-db/l0_gb200_multi_nodes_perf_sanity_ctx2_node1_gpu4_gen1_node4_gpu16.yml delete mode 100644 tests/integration/test_lists/test-db/l0_gb300_multi_nodes_perf_sanity_ctx1_node1_gpu2_gen1_node1_gpu4.yml delete mode 100644 tests/integration/test_lists/test-db/l0_gb300_multi_nodes_perf_sanity_ctx1_node1_gpu4_gen1_node1_gpu4.yml diff --git a/jenkins/L0_MergeRequest.groovy b/jenkins/L0_MergeRequest.groovy index 57bc4123c2d5..7ecfc1274865 100644 --- a/jenkins/L0_MergeRequest.groovy +++ b/jenkins/L0_MergeRequest.groovy @@ -1047,22 +1047,18 @@ def getMultiGpuFileChanged(pipeline, testFilter, globalVars) "tests/integration/test_lists/test-db/l0_gb200_multi_nodes_perf_sanity_ctx1_node1_gpu1_gen1_node1_gpu2.yml", "tests/integration/test_lists/test-db/l0_gb200_multi_nodes_perf_sanity_ctx1_node1_gpu1_gen1_node1_gpu4.yml", "tests/integration/test_lists/test-db/l0_gb200_multi_nodes_perf_sanity_ctx1_node1_gpu1_gen1_node2_gpu8.yml", - "tests/integration/test_lists/test-db/l0_gb200_multi_nodes_perf_sanity_ctx1_node1_gpu4_gen1_node1_gpu4.yml", "tests/integration/test_lists/test-db/l0_gb200_multi_nodes_perf_sanity_ctx1_node1_gpu4_gen1_node2_gpu8.yml", "tests/integration/test_lists/test-db/l0_gb200_multi_nodes_perf_sanity_ctx1_node1_gpu4_gen1_node4_gpu16.yml", "tests/integration/test_lists/test-db/l0_gb200_multi_nodes_perf_sanity_ctx1_node1_gpu4_gen1_node8_gpu32.yml", "tests/integration/test_lists/test-db/l0_gb200_multi_nodes_perf_sanity_ctx1_node2_gpu8_gen1_node2_gpu8.yml", "tests/integration/test_lists/test-db/l0_gb200_multi_nodes_perf_sanity_ctx1_node2_gpu8_gen1_node4_gpu16.yml", "tests/integration/test_lists/test-db/l0_gb200_multi_nodes_perf_sanity_ctx1_node2_gpu8_gen1_node8_gpu32.yml", - "tests/integration/test_lists/test-db/l0_gb200_multi_nodes_perf_sanity_ctx2_node1_gpu4_gen1_node4_gpu16.yml", "tests/integration/test_lists/test-db/l0_gb200_multi_nodes_perf_sanity_node2_gpu8.yml", "tests/integration/test_lists/test-db/l0_gb300.yml", "tests/integration/test_lists/test-db/l0_gb300_multi_gpus.yml", "tests/integration/test_lists/test-db/l0_gb300_multi_gpus_perf_sanity.yml", - "tests/integration/test_lists/test-db/l0_gb300_multi_nodes_perf_sanity_ctx1_node1_gpu2_gen1_node1_gpu4.yml", "tests/integration/test_lists/test-db/l0_gb300_multi_nodes_perf_sanity_ctx1_node1_gpu2_gen1_node2_gpu8.yml", "tests/integration/test_lists/test-db/l0_gb300_multi_nodes_perf_sanity_ctx1_node1_gpu2_gen1_node8_gpu32.yml", - "tests/integration/test_lists/test-db/l0_gb300_multi_nodes_perf_sanity_ctx1_node1_gpu4_gen1_node1_gpu4.yml", "tests/integration/test_lists/test-db/l0_gb300_multi_nodes_perf_sanity_ctx1_node1_gpu4_gen1_node2_gpu8.yml", "tests/integration/test_lists/test-db/l0_gb300_multi_nodes_perf_sanity_ctx1_node1_gpu4_gen1_node4_gpu16.yml", "tests/integration/test_lists/test-db/l0_gb300_multi_nodes_perf_sanity_node2_gpu8.yml", diff --git a/jenkins/L0_Test.groovy b/jenkins/L0_Test.groovy index de737527d928..e2a43dcc92ac 100644 --- a/jenkins/L0_Test.groovy +++ b/jenkins/L0_Test.groovy @@ -4876,12 +4876,10 @@ def launchTestJobs(pipeline, testFilter) // VisualGen PerfSanity post-merge test "DGX_B200-8_GPUs-PyTorch-VisualGen-PerfSanity-Post-Merge-1": ["auto:dgx-b200-flex", "l0_b200_visual_gen_perf_sanity", 1, 1, 8, 1, true], // PerfSanity post-merge tests - "DGX_B200-8_GPUs-PyTorch-PerfSanity-Post-Merge-1": ["auto:dgx-b200-flex", "l0_b200_multi_gpus_perf_sanity", 1, 6, 8, 1, true], - "DGX_B200-8_GPUs-PyTorch-PerfSanity-Post-Merge-2": ["auto:dgx-b200-flex", "l0_b200_multi_gpus_perf_sanity", 2, 6, 8, 1, true], - "DGX_B200-8_GPUs-PyTorch-PerfSanity-Post-Merge-3": ["auto:dgx-b200-flex", "l0_b200_multi_gpus_perf_sanity", 3, 6, 8, 1, true], - "DGX_B200-8_GPUs-PyTorch-PerfSanity-Post-Merge-4": ["auto:dgx-b200-flex", "l0_b200_multi_gpus_perf_sanity", 4, 6, 8, 1, true], - "DGX_B200-8_GPUs-PyTorch-PerfSanity-Post-Merge-5": ["auto:dgx-b200-flex", "l0_b200_multi_gpus_perf_sanity", 5, 6, 8, 1, true], - "DGX_B200-8_GPUs-PyTorch-PerfSanity-Post-Merge-6": ["auto:dgx-b200-flex", "l0_b200_multi_gpus_perf_sanity", 6, 6, 8, 1, true], + "DGX_B200-8_GPUs-PyTorch-PerfSanity-Post-Merge-1": ["auto:dgx-b200-flex", "l0_b200_multi_gpus_perf_sanity", 1, 4, 8, 1, true], + "DGX_B200-8_GPUs-PyTorch-PerfSanity-Post-Merge-2": ["auto:dgx-b200-flex", "l0_b200_multi_gpus_perf_sanity", 2, 4, 8, 1, true], + "DGX_B200-8_GPUs-PyTorch-PerfSanity-Post-Merge-3": ["auto:dgx-b200-flex", "l0_b200_multi_gpus_perf_sanity", 3, 4, 8, 1, true], + "DGX_B200-8_GPUs-PyTorch-PerfSanity-Post-Merge-4": ["auto:dgx-b200-flex", "l0_b200_multi_gpus_perf_sanity", 4, 4, 8, 1, true], ] // B200 PerfSanity pre-merge disaggregated (functional-only: perf regressions do not fail CI) // 2 Nodes @@ -4899,7 +4897,7 @@ def launchTestJobs(pipeline, testFilter) "DGX_B200-16_GPUs-2_Nodes-PyTorch-Disagg-PerfSanity-CTX1-NODE1-GPU4-GEN1-NODE1-GPU8-Post-Merge", "auto:dgx-b200-flex", "l0_b200_multi_nodes_perf_sanity_ctx1_node1_gpu4_gen1_node1_gpu8", - 5, + 2, 16, 2 ) @@ -4961,18 +4959,12 @@ def launchTestJobs(pipeline, testFilter) "GB200-4_GPUs-PyTorch-PerfSanity-1": ["auto:gb200-x4-split", "l0_gb200_multi_gpus_perf_sanity", 1, 2, 4], "GB200-4_GPUs-PyTorch-PerfSanity-2": ["auto:gb200-x4-split", "l0_gb200_multi_gpus_perf_sanity", 2, 2, 4], // PerfSanity post-merge tests - "GB200-4_GPUs-PyTorch-PerfSanity-Post-Merge-1": ["auto:gb200-x4-split", "l0_gb200_multi_gpus_perf_sanity", 1, 9, 4], - "GB200-4_GPUs-PyTorch-PerfSanity-Post-Merge-2": ["auto:gb200-x4-split", "l0_gb200_multi_gpus_perf_sanity", 2, 9, 4], - "GB200-4_GPUs-PyTorch-PerfSanity-Post-Merge-3": ["auto:gb200-x4-split", "l0_gb200_multi_gpus_perf_sanity", 3, 9, 4], - "GB200-4_GPUs-PyTorch-PerfSanity-Post-Merge-4": ["auto:gb200-x4-split", "l0_gb200_multi_gpus_perf_sanity", 4, 9, 4], - "GB200-4_GPUs-PyTorch-PerfSanity-Post-Merge-5": ["auto:gb200-x4-split", "l0_gb200_multi_gpus_perf_sanity", 5, 9, 4], - "GB200-4_GPUs-PyTorch-PerfSanity-Post-Merge-6": ["auto:gb200-x4-split", "l0_gb200_multi_gpus_perf_sanity", 6, 9, 4], - "GB200-4_GPUs-PyTorch-PerfSanity-Post-Merge-7": ["auto:gb200-x4-split", "l0_gb200_multi_gpus_perf_sanity", 7, 9, 4], - "GB200-4_GPUs-PyTorch-PerfSanity-Post-Merge-8": ["auto:gb200-x4-split", "l0_gb200_multi_gpus_perf_sanity", 8, 9, 4], - "GB200-4_GPUs-PyTorch-PerfSanity-Post-Merge-9": ["auto:gb200-x4-split", "l0_gb200_multi_gpus_perf_sanity", 9, 9, 4], - "GB300-4_GPUs-PyTorch-PerfSanity-Post-Merge-1": ["auto:gb300-x4", "l0_gb300_multi_gpus_perf_sanity", 1, 3, 4], - "GB300-4_GPUs-PyTorch-PerfSanity-Post-Merge-2": ["auto:gb300-x4", "l0_gb300_multi_gpus_perf_sanity", 2, 3, 4], - "GB300-4_GPUs-PyTorch-PerfSanity-Post-Merge-3": ["auto:gb300-x4", "l0_gb300_multi_gpus_perf_sanity", 3, 3, 4], + "GB200-4_GPUs-PyTorch-PerfSanity-Post-Merge-1": ["auto:gb200-x4-split", "l0_gb200_multi_gpus_perf_sanity", 1, 4, 4], + "GB200-4_GPUs-PyTorch-PerfSanity-Post-Merge-2": ["auto:gb200-x4-split", "l0_gb200_multi_gpus_perf_sanity", 2, 4, 4], + "GB200-4_GPUs-PyTorch-PerfSanity-Post-Merge-3": ["auto:gb200-x4-split", "l0_gb200_multi_gpus_perf_sanity", 3, 4, 4], + "GB200-4_GPUs-PyTorch-PerfSanity-Post-Merge-4": ["auto:gb200-x4-split", "l0_gb200_multi_gpus_perf_sanity", 4, 4, 4], + "GB300-4_GPUs-PyTorch-PerfSanity-Post-Merge-1": ["auto:gb300-x4", "l0_gb300_multi_gpus_perf_sanity", 1, 2, 4], + "GB300-4_GPUs-PyTorch-PerfSanity-Post-Merge-2": ["auto:gb300-x4", "l0_gb300_multi_gpus_perf_sanity", 2, 2, 4], ] SBSASlurmTestConfigs = cbtsResizeSplits(SBSASlurmTestConfigs) fullSet += SBSASlurmTestConfigs.keySet() @@ -5012,7 +5004,7 @@ def launchTestJobs(pipeline, testFilter) "GB200-8_GPUs-2_Nodes-PyTorch-Disagg-PerfSanity-CTX1-NODE1-GPU1-GEN1-NODE1-GPU2-Post-Merge", "auto:gb200-flex", "l0_gb200_multi_nodes_perf_sanity_ctx1_node1_gpu1_gen1_node1_gpu2", - 4, + 1, 8, 2 ) @@ -5020,14 +5012,6 @@ def launchTestJobs(pipeline, testFilter) "GB200-8_GPUs-2_Nodes-PyTorch-Disagg-PerfSanity-CTX1-NODE1-GPU1-GEN1-NODE1-GPU4-Post-Merge", "auto:gb200-flex", "l0_gb200_multi_nodes_perf_sanity_ctx1_node1_gpu1_gen1_node1_gpu4", - 6, - 8, - 2 - ) - multiNodesSBSAConfigs += buildStageConfigs( - "GB200-8_GPUs-2_Nodes-PyTorch-Disagg-PerfSanity-CTX1-NODE1-GPU4-GEN1-NODE1-GPU4-Post-Merge", - "auto:gb200-flex", - "l0_gb200_multi_nodes_perf_sanity_ctx1_node1_gpu4_gen1_node1_gpu4", 5, 8, 2 @@ -5045,7 +5029,7 @@ def launchTestJobs(pipeline, testFilter) "GB200-12_GPUs-3_Nodes-PyTorch-Disagg-PerfSanity-CTX1-NODE1-GPU4-GEN1-NODE2-GPU8-Post-Merge", "auto:gb200-flex", "l0_gb200_multi_nodes_perf_sanity_ctx1_node1_gpu4_gen1_node2_gpu8", - 8, + 3, 12, 3 ) @@ -5068,14 +5052,6 @@ def launchTestJobs(pipeline, testFilter) 5 ) // 6 Nodes - multiNodesSBSAConfigs += buildStageConfigs( - "GB200-24_GPUs-6_Nodes-PyTorch-Disagg-PerfSanity-CTX2-NODE1-GPU4-GEN1-NODE4-GPU16-Post-Merge", - "auto:gb200-flex", - "l0_gb200_multi_nodes_perf_sanity_ctx2_node1_gpu4_gen1_node4_gpu16", - 2, - 24, - 6 - ) multiNodesSBSAConfigs += buildStageConfigs( "GB200-24_GPUs-6_Nodes-PyTorch-Disagg-PerfSanity-CTX1-NODE2-GPU8-GEN1-NODE4-GPU16-Post-Merge", "auto:gb200-flex", @@ -5089,7 +5065,7 @@ def launchTestJobs(pipeline, testFilter) "GB200-36_GPUs-9_Nodes-PyTorch-Disagg-PerfSanity-CTX1-NODE1-GPU4-GEN1-NODE8-GPU32-Post-Merge", "auto:gb200-flex", "l0_gb200_multi_nodes_perf_sanity_ctx1_node1_gpu4_gen1_node8_gpu32", - 12, + 8, 36, 9 ) @@ -5108,20 +5084,11 @@ def launchTestJobs(pipeline, testFilter) "GB300-8_GPUs-2_Nodes-PyTorch-PerfSanity-Node2-GPU8-Post-Merge", "auto:gb300-flex", "l0_gb300_multi_nodes_perf_sanity_node2_gpu8", - 3, + 2, 8, 2 ) // GB300 PerfSanity post-merge disaggregated - // 2 Nodes - multiNodesSBSAConfigs += buildStageConfigs( - "GB300-8_GPUs-2_Nodes-PyTorch-Disagg-PerfSanity-CTX1-NODE1-GPU4-GEN1-NODE1-GPU4-Post-Merge", - "auto:gb300-flex", - "l0_gb300_multi_nodes_perf_sanity_ctx1_node1_gpu4_gen1_node1_gpu4", - 3, - 8, - 2 - ) // 3 Nodes (pre-merge, functional-only) multiNodesSBSAConfigs += buildStageConfigs( "GB300-12_GPUs-3_Nodes-PyTorch-Disagg-PerfSanity-FUNCTIONAL-ONLY-CTX1-NODE1-GPU4-GEN1-NODE2-GPU8", @@ -5136,7 +5103,7 @@ def launchTestJobs(pipeline, testFilter) "GB300-12_GPUs-3_Nodes-PyTorch-Disagg-PerfSanity-CTX1-NODE1-GPU4-GEN1-NODE2-GPU8-Post-Merge", "auto:gb300-flex", "l0_gb300_multi_nodes_perf_sanity_ctx1_node1_gpu4_gen1_node2_gpu8", - 4, + 2, 12, 3 ) @@ -5154,20 +5121,11 @@ def launchTestJobs(pipeline, testFilter) "GB300-36_GPUs-9_Nodes-PyTorch-Disagg-PerfSanity-CTX1-NODE1-GPU4-GEN1-NODE8-GPU32-Post-Merge", "auto:gb300-flex", "l0_gb300_multi_nodes_perf_sanity_ctx1_node1_gpu4_gen1_node8_gpu32", - 2, + 1, 36, 9 ) // GB300 GLM-5 disaggregated (ctx DEP2) - // 2 Nodes - multiNodesSBSAConfigs += buildStageConfigs( - "GB300-8_GPUs-2_Nodes-PyTorch-Disagg-PerfSanity-CTX1-NODE1-GPU2-GEN1-NODE1-GPU4-Post-Merge", - "auto:gb300-flex", - "l0_gb300_multi_nodes_perf_sanity_ctx1_node1_gpu2_gen1_node1_gpu4", - 1, - 8, - 2 - ) // 3 Nodes (pre-merge, functional-only) multiNodesSBSAConfigs += buildStageConfigs( "GB300-12_GPUs-3_Nodes-PyTorch-Disagg-PerfSanity-FUNCTIONAL-ONLY-CTX1-NODE1-GPU2-GEN1-NODE2-GPU8", @@ -5182,7 +5140,7 @@ def launchTestJobs(pipeline, testFilter) "GB300-12_GPUs-3_Nodes-PyTorch-Disagg-PerfSanity-CTX1-NODE1-GPU2-GEN1-NODE2-GPU8-Post-Merge", "auto:gb300-flex", "l0_gb300_multi_nodes_perf_sanity_ctx1_node1_gpu2_gen1_node2_gpu8", - 4, + 2, 12, 3 ) @@ -5191,7 +5149,7 @@ def launchTestJobs(pipeline, testFilter) "GB300-36_GPUs-9_Nodes-PyTorch-Disagg-PerfSanity-CTX1-NODE1-GPU2-GEN1-NODE8-GPU32-Post-Merge", "auto:gb300-flex", "l0_gb300_multi_nodes_perf_sanity_ctx1_node1_gpu2_gen1_node8_gpu32", - 2, + 1, 36, 9 ) diff --git a/tests/integration/test_lists/test-db/l0_b200_multi_gpus_perf_sanity.yml b/tests/integration/test_lists/test-db/l0_b200_multi_gpus_perf_sanity.yml index 4bd8ea1e828a..b963537960c7 100644 --- a/tests/integration/test_lists/test-db/l0_b200_multi_gpus_perf_sanity.yml +++ b/tests/integration/test_lists/test-db/l0_b200_multi_gpus_perf_sanity.yml @@ -16,15 +16,11 @@ l0_b200_multi_gpus_perf_sanity: orchestrator: mpi tests: # deepseek_r1_fp8_blackwell - - perf/test_perf_sanity.py::test_e2e[aggr_upload-deepseek_r1_fp8_blackwell-r1_fp8_tp8_mtp3_1k1k] - # - perf/test_perf_sanity.py::test_e2e[aggr_upload-deepseek_r1_fp8_blackwell-r1_fp8_dep8_mtp1_1k1k] TIMEOUT (90) # failed - perf/test_perf_sanity.py::test_e2e[aggr_upload-deepseek_r1_fp8_blackwell-r1_fp8_tp8_mtp3_8k1k] # - perf/test_perf_sanity.py::test_e2e[aggr_upload-deepseek_r1_fp8_blackwell-r1_fp8_dep8_mtp1_8k1k] TIMEOUT (90) # failed - perf/test_perf_sanity.py::test_e2e[aggr_upload-deepseek_r1_fp8_blackwell-r1_fp8_tp8_6k1k] TIMEOUT (90) # deepseek-r1-fp4-v2 - - perf/test_perf_sanity.py::test_e2e[aggr_upload-deepseek_r1_fp4_v2_blackwell-r1_fp4_v2_tp4_mtp3_1k1k] - perf/test_perf_sanity.py::test_e2e[aggr_upload-deepseek_r1_fp4_v2_blackwell-r1_fp4_v2_tp4_mtp3_8k1k] - - perf/test_perf_sanity.py::test_e2e[aggr_upload-deepseek_r1_fp4_v2_blackwell-r1_fp4_v2_dep8_mtp1_1k1k] TIMEOUT (90) - perf/test_perf_sanity.py::test_e2e[aggr_upload-deepseek_r1_fp4_v2_blackwell-r1_fp4_v2_dep8_mtp1_8k1k] TIMEOUT (90) # deepseek-v32-fp4 - perf/test_perf_sanity.py::test_e2e[aggr_upload-deepseek_v32_fp4_blackwell-v32_fp4_tep8_mtp3_8k1k] @@ -33,8 +29,6 @@ l0_b200_multi_gpus_perf_sanity: - perf/test_perf_sanity.py::test_e2e[aggr_upload-glm5_fp4_blackwell-glm5_fp4_tep8_mtp3_8k1k] - perf/test_perf_sanity.py::test_e2e[aggr_upload-glm5_fp4_blackwell-glm5_fp4_dep8_mtp1_8k1k] TIMEOUT (90) # gpt-oss-120b-fp4 - - perf/test_perf_sanity.py::test_e2e[aggr_upload-gpt_oss_120b_fp4_blackwell-gpt_oss_fp4_tp2_mtp0_1k1k] - - perf/test_perf_sanity.py::test_e2e[aggr_upload-gpt_oss_120b_fp4_blackwell-gpt_oss_fp4_tp1_mtp0_1k1k] - perf/test_perf_sanity.py::test_e2e[aggr_upload-gpt_oss_120b_fp4_blackwell-gpt_oss_fp4_tp1_mtp0_8k1k] # llama-3.3-70b-instruct-fp4 - perf/test_perf_sanity.py::test_e2e[aggr_upload-llama_v3_3_70b_instruct_fp4_blackwell-llama70b_fp4_tp4_512_32] @@ -46,18 +40,11 @@ l0_b200_multi_gpus_perf_sanity: - perf/test_perf_sanity.py::test_e2e[aggr_upload-k25_thinking_fp4_blackwell-k25_thinking_fp4_dep8_32k8k] TIMEOUT (90) - perf/test_perf_sanity.py::test_e2e[aggr_upload-dynamo_k25_thinking_fp4_blackwell-k25_thinking_fp4_tep8_adp_2k1k] # qwen3.5-397b-a17b-fp4 aggregated - - perf/test_perf_sanity.py::test_e2e[aggr_upload-qwen3_5_397b_fp4_blackwell-qwen3_5_397b_fp4_tep8_1k1k] - - perf/test_perf_sanity.py::test_e2e[aggr_upload-qwen3_5_397b_fp4_blackwell-qwen3_5_397b_fp4_dep4_1k1k] TIMEOUT (90) - - perf/test_perf_sanity.py::test_e2e[aggr_upload-qwen3_5_397b_fp4_blackwell-qwen3_5_397b_fp4_tp2_mtp3_1k1k] - - perf/test_perf_sanity.py::test_e2e[aggr_upload-qwen3_5_397b_fp4_blackwell-qwen3_5_397b_fp4_dep8_mtp3_1k1k] TIMEOUT (90) - perf/test_perf_sanity.py::test_e2e[aggr_upload-qwen3_5_397b_fp4_blackwell-qwen3_5_397b_fp4_tp4_8k1k] - perf/test_perf_sanity.py::test_e2e[aggr_upload-qwen3_5_397b_fp4_blackwell-qwen3_5_397b_fp4_dep8_8k1k] TIMEOUT (90) - perf/test_perf_sanity.py::test_e2e[aggr_upload-qwen3_5_397b_fp4_blackwell-qwen3_5_397b_fp4_tep4_mtp3_8k1k] - perf/test_perf_sanity.py::test_e2e[aggr_upload-qwen3_5_397b_fp4_blackwell-qwen3_5_397b_fp4_dep8_mtp3_8k1k] TIMEOUT (90) # ctx_only tests (disagg config) - - perf/test_perf_sanity.py::test_e2e[aggr_upload-ctx_only-b200_deepseek-r1-fp4_1k1k_con1_ctx1_dep4_gen1_tep8_eplb0_mtp3_ccb-NIXL] TIMEOUT (120) - - perf/test_perf_sanity.py::test_e2e[aggr_upload-ctx_only-b200_deepseek-r1-fp4_1k1k_con2048_ctx1_dep4_gen1_dep8_eplb0_mtp1_ccb-NIXL] TIMEOUT (120) - # - perf/test_perf_sanity.py::test_e2e[aggr_upload-ctx_only-b200_deepseek-r1-fp4_1k1k_con256_ctx1_dep4_gen1_dep8_eplb0_mtp3_ccb-NIXL] TIMEOUT (120) - perf/test_perf_sanity.py::test_e2e[aggr_upload-ctx_only-b200_deepseek-r1-fp4_8k1k_con1536_ctx1_dep4_gen1_dep8_eplb0_mtp1_ccb-NIXL] TIMEOUT (120) - perf/test_perf_sanity.py::test_e2e[aggr_upload-ctx_only-b200_deepseek-r1-fp4_8k1k_con1_ctx1_dep4_gen1_tep8_eplb0_mtp3_ccb-NIXL] TIMEOUT (120) # - perf/test_perf_sanity.py::test_e2e[aggr_upload-ctx_only-b200_deepseek-r1-fp4_8k1k_con256_ctx1_dep4_gen1_dep8_eplb0_mtp1_ccb-NIXL] TIMEOUT (120) diff --git a/tests/integration/test_lists/test-db/l0_b200_multi_nodes_perf_sanity_ctx1_node1_gpu4_gen1_node1_gpu8.yml b/tests/integration/test_lists/test-db/l0_b200_multi_nodes_perf_sanity_ctx1_node1_gpu4_gen1_node1_gpu8.yml index cf2ff013fe45..960b9cf6dc37 100644 --- a/tests/integration/test_lists/test-db/l0_b200_multi_nodes_perf_sanity_ctx1_node1_gpu4_gen1_node1_gpu8.yml +++ b/tests/integration/test_lists/test-db/l0_b200_multi_nodes_perf_sanity_ctx1_node1_gpu4_gen1_node1_gpu8.yml @@ -30,14 +30,8 @@ l0_b200_multi_nodes_perf_sanity_ctx1_node1_gpu4_gen1_node1_gpu8: stage: post_merge backend: pytorch tests: - - perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-b200_deepseek-r1-fp4_1k1k_con1_ctx1_dep4_gen1_tep8_eplb0_mtp3_ccb-NIXL] TIMEOUT (120) - - perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-b200_deepseek-r1-fp4_1k1k_con2048_ctx1_dep4_gen1_dep8_eplb0_mtp1_ccb-NIXL] TIMEOUT (120) - - perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-b200_deepseek-r1-fp4_1k1k_con256_ctx1_dep4_gen1_dep8_eplb0_mtp3_ccb-NIXL] TIMEOUT (120) - perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-b200_deepseek-r1-fp4_8k1k_con1_ctx1_dep4_gen1_tep8_eplb0_mtp3_ccb-NIXL] TIMEOUT (120) - perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-b200_deepseek-r1-fp4_8k1k_con256_ctx1_dep4_gen1_dep8_eplb0_mtp1_ccb-NIXL] TIMEOUT (120) - # - perf/test_perf_sanity.py::test_e2e[disagg_upload-e2e-b200_deepseek-r1-fp4_1k1k_con1_ctx1_dep4_gen1_tep8_eplb0_mtp3_ccb-NIXL] TIMEOUT (120) - # - perf/test_perf_sanity.py::test_e2e[disagg_upload-e2e-b200_deepseek-r1-fp4_1k1k_con2048_ctx1_dep4_gen1_dep8_eplb0_mtp1_ccb-NIXL] TIMEOUT (120) - # - perf/test_perf_sanity.py::test_e2e[disagg_upload-e2e-b200_deepseek-r1-fp4_1k1k_con256_ctx1_dep4_gen1_dep8_eplb0_mtp3_ccb-NIXL] TIMEOUT (120) # - perf/test_perf_sanity.py::test_e2e[disagg_upload-e2e-b200_deepseek-r1-fp4_8k1k_con1536_ctx1_dep4_gen1_dep8_eplb0_mtp1_ccb-NIXL] TIMEOUT (120) # - perf/test_perf_sanity.py::test_e2e[disagg_upload-e2e-b200_deepseek-r1-fp4_8k1k_con1_ctx1_dep4_gen1_tep8_eplb0_mtp3_ccb-NIXL] TIMEOUT (120) # - perf/test_perf_sanity.py::test_e2e[disagg_upload-e2e-b200_deepseek-r1-fp4_8k1k_con256_ctx1_dep4_gen1_dep8_eplb0_mtp1_ccb-NIXL] TIMEOUT (120) diff --git a/tests/integration/test_lists/test-db/l0_b200_multi_nodes_perf_sanity_node2_gpu16.yml b/tests/integration/test_lists/test-db/l0_b200_multi_nodes_perf_sanity_node2_gpu16.yml index e570b693845c..a8d684360976 100644 --- a/tests/integration/test_lists/test-db/l0_b200_multi_nodes_perf_sanity_node2_gpu16.yml +++ b/tests/integration/test_lists/test-db/l0_b200_multi_nodes_perf_sanity_node2_gpu16.yml @@ -17,6 +17,5 @@ l0_b200_multi_nodes_perf_sanity_node2_gpu16: orchestrator: mpi tests: # deepseek-r1-fp4-v2 aggregated 2-nodes - - perf/test_perf_sanity.py::test_e2e[aggr_upload-deepseek_r1_fp4_v2_2_nodes_blackwell-r1_fp4_v2_dep16_mtp1_1k1k] TIMEOUT (90) - perf/test_perf_sanity.py::test_e2e[aggr_upload-deepseek_r1_fp4_v2_2_nodes_blackwell-r1_fp4_v2_dep16_mtp1_8k1k] TIMEOUT (90) - perf/test_perf_sanity.py::test_e2e[aggr_upload-deepseek_r1_fp4_v2_2_nodes_blackwell-r1_fp4_v2_tep16_mtp3] TIMEOUT (90) diff --git a/tests/integration/test_lists/test-db/l0_gb200_multi_gpus_perf_sanity.yml b/tests/integration/test_lists/test-db/l0_gb200_multi_gpus_perf_sanity.yml index 11f0f8f0b44c..6227b7ee648e 100644 --- a/tests/integration/test_lists/test-db/l0_gb200_multi_gpus_perf_sanity.yml +++ b/tests/integration/test_lists/test-db/l0_gb200_multi_gpus_perf_sanity.yml @@ -15,8 +15,6 @@ l0_gb200_multi_gpus_perf_sanity: backend: pytorch tests: # deepseek-r1-fp4-v2 - - perf/test_perf_sanity.py::test_e2e[aggr_upload-deepseek_r1_fp4_v2_grace_blackwell-r1_fp4_v2_tep4_mtp3_1k1k] - - perf/test_perf_sanity.py::test_e2e[aggr_upload-deepseek_r1_fp4_v2_grace_blackwell-r1_fp4_v2_tp4_mtp3_1k1k] - perf/test_perf_sanity.py::test_e2e[aggr_upload-deepseek_r1_fp4_v2_grace_blackwell-r1_fp4_v2_dep4_mtp1_8k1k] TIMEOUT (90) - perf/test_perf_sanity.py::test_e2e[aggr_upload-deepseek_r1_fp4_v2_grace_blackwell-r1_fp4_v2_tep4_mtp3_8k1k] - perf/test_perf_sanity.py::test_e2e[aggr_upload-deepseek_r1_fp4_v2_grace_blackwell-r1_fp4_v2_tp4_mtp3_8k1k] @@ -25,7 +23,6 @@ l0_gb200_multi_gpus_perf_sanity: - perf/test_perf_sanity.py::test_e2e[aggr_upload-ctx_only-gb200_gpt-oss-120b-fp4_8k1k_con512_ctx1_tp1_gen1_dep2_eplb0_mtp0_ccb-NIXL] TIMEOUT (90) # k25-thinking-fp4 - perf/test_perf_sanity.py::test_e2e[aggr_upload-k25_thinking_fp4_grace_blackwell-k25_thinking_fp4_dep4_8k1k] TIMEOUT (90) - - perf/test_perf_sanity.py::test_e2e[aggr_upload-ctx_only-gb200_kimi-k25-thinking-fp4_1k1k_con4096_ctx1_dep4_gen1_dep8_eplb0_mtp0_ccb-NIXL] TIMEOUT (90) # qwen3-235b-fp4 - perf/test_perf_sanity.py::test_e2e[aggr_upload-ctx_only-gb200_qwen3-235b-fp4_8k1k_con1024_ctx1_tp1_gen1_dep8_eplb0_mtp0_ccb-NIXL] TIMEOUT (90) - perf/test_perf_sanity.py::test_e2e[aggr_upload-ctx_only-gb200_qwen3-235b-fp4_8k1k_con64_ctx1_tp1_gen1_tep4_eplb0_mtp0_ccb-NIXL] TIMEOUT (90) @@ -49,40 +46,23 @@ l0_gb200_multi_gpus_perf_sanity: - perf/test_perf_sanity.py::test_e2e[aggr_upload-deepseek_r1_fp4_v2_grace_blackwell-r1_fp4_v2_dep4_mtp1_1k8k] TIMEOUT (90) - perf/test_perf_sanity.py::test_e2e[aggr_upload-deepseek_r1_fp4_v2_grace_blackwell-r1_fp4_v2_tep4_mtp3_1k8k] - perf/test_perf_sanity.py::test_e2e[aggr_upload-deepseek_r1_fp4_v2_grace_blackwell-r1_fp4_v2_tp4_mtp3_1k8k] - - perf/test_perf_sanity.py::test_e2e[aggr_upload-deepseek_r1_fp4_v2_grace_blackwell-r1_fp4_v2_dep4_mtp1_1k1k] TIMEOUT (90) # deepseek-v32-fp4 - - perf/test_perf_sanity.py::test_e2e[aggr_upload-deepseek_v32_fp4_grace_blackwell-v32_fp4_tep4_mtp3_1k1k] - - perf/test_perf_sanity.py::test_e2e[aggr_upload-deepseek_v32_fp4_grace_blackwell-v32_fp4_dep4_mtp1_1k1k] - perf/test_perf_sanity.py::test_e2e[aggr_upload-deepseek_v32_fp4_grace_blackwell-v32_fp4_tep4_mtp3_8k1k] - perf/test_perf_sanity.py::test_e2e[aggr_upload-deepseek_v32_fp4_grace_blackwell-v32_fp4_dep4_mtp1_8k1k] # glm-5-fp4 - - perf/test_perf_sanity.py::test_e2e[aggr_upload-glm5_fp4_grace_blackwell-glm5_fp4_tep4_mtp3_1k1k] - - perf/test_perf_sanity.py::test_e2e[aggr_upload-glm5_fp4_grace_blackwell-glm5_fp4_dep4_mtp1_1k1k] # gpt-oss-120b-fp4 - perf/test_perf_sanity.py::test_e2e[aggr_upload-gpt_oss_120b_fp4_grace_blackwell-gpt_oss_fp4_tp2_1k8k] - perf/test_perf_sanity.py::test_e2e[aggr_upload-gpt_oss_120b_fp4_grace_blackwell-gpt_oss_fp4_dep4_1k8k] - - perf/test_perf_sanity.py::test_e2e[aggr_upload-gpt_oss_120b_fp4_grace_blackwell-gpt_oss_fp4_dep2_1k1k] - perf/test_perf_sanity.py::test_e2e[aggr_upload-gpt_oss_120b_fp4_grace_blackwell-gpt_oss_fp4_tep2_1k8k] - - perf/test_perf_sanity.py::test_e2e[aggr_upload-gpt_oss_120b_fp4_grace_blackwell-gpt_oss_fp4_tp4_eagle3_1k1k] - - perf/test_perf_sanity.py::test_e2e[aggr_upload-gpt_oss_120b_fp4_grace_blackwell-gpt_oss_fp4_tp2_mtp0_1k1k] - - perf/test_perf_sanity.py::test_e2e[aggr_upload-gpt_oss_120b_fp4_grace_blackwell-gpt_oss_fp4_tp1_mtp0_1k1k] - perf/test_perf_sanity.py::test_e2e[aggr_upload-gpt_oss_120b_fp4_grace_blackwell-gpt_oss_fp4_tp1_mtp0_8k1k] - - perf/test_perf_sanity.py::test_e2e[aggr_upload-dynamo_gpt_oss_120b_fp4_blackwell-gpt_oss_fp4_tep4_adp_cutlass_1k1k] - perf/test_perf_sanity.py::test_e2e[aggr_upload-dynamo_gpt_oss_120b_fp4_blackwell-gpt_oss_fp4_tep4_adp_cutlass_8k1k] # k25-thinking-fp4 - perf/test_perf_sanity.py::test_e2e[aggr_upload-k25_thinking_fp4_grace_blackwell-k25_thinking_fp4_tep4_8k1k] # ctx_only tests # deepseek-r1-fp4 - # - perf/test_perf_sanity.py::test_e2e[aggr_upload-ctx_only-gb200_deepseek-r1-fp4_1k1k_con1024_ctx1_dep4_gen1_dep32_eplb0_mtp3_ccb-NIXL] TIMEOUT (90) - # - perf/test_perf_sanity.py::test_e2e[aggr_upload-ctx_only-gb200_deepseek-r1-fp4_1k1k_con1024_ctx1_dep4_gen1_dep8_eplb0_mtp0_ccb-NIXL] TIMEOUT (90) - - perf/test_perf_sanity.py::test_e2e[aggr_upload-ctx_only-gb200_deepseek-r1-fp4_1k1k_con1_ctx1_dep4_gen1_tep8_eplb0_mtp3_ccb-NIXL] TIMEOUT (90) - - perf/test_perf_sanity.py::test_e2e[aggr_upload-ctx_only-gb200_deepseek-r1-fp4_1k1k_con3072_ctx1_dep4_gen1_dep4_eplb0_mtp1_ccb-NIXL] TIMEOUT (90) # - perf/test_perf_sanity.py::test_e2e[aggr_upload-ctx_only-gb200_deepseek-r1-fp4_8k1k_con1024_ctx1_dep4_gen1_dep32_eplb0_mtp3_ccb-NIXL] TIMEOUT (90) - perf/test_perf_sanity.py::test_e2e[aggr_upload-ctx_only-gb200_deepseek-r1-fp4_8k1k_con1_ctx1_dep4_gen1_tep8_eplb0_mtp3_ccb-NIXL] TIMEOUT (90) # deepseek-v32-fp4 - # - perf/test_perf_sanity.py::test_e2e[aggr_upload-ctx_only-gb200_deepseek-v32-fp4_1k1k_con1024_ctx1_dep4_gen1_dep32_eplb256_mtp3_ccb-NIXL] TIMEOUT (90) - - perf/test_perf_sanity.py::test_e2e[aggr_upload-ctx_only-gb200_deepseek-v32-fp4_1k1k_con1_ctx1_dep4_gen1_tep8_eplb0_mtp3_ccb-NIXL] TIMEOUT (90) - - perf/test_perf_sanity.py::test_e2e[aggr_upload-ctx_only-gb200_deepseek-v32-fp4_1k1k_con2048_ctx1_dep4_gen1_dep4_eplb0_mtp1_ccb-NIXL] TIMEOUT (90) - perf/test_perf_sanity.py::test_e2e[aggr_upload-ctx_only-gb200_deepseek-v32-fp4_32k4k_con1_ctx1_dep4_gen1_tep8_eplb0_mtp3_ccb-NIXL] TIMEOUT (90) - perf/test_perf_sanity.py::test_e2e[aggr_upload-ctx_only-gb200_deepseek-v32-fp4_32k4k_con2048_ctx1_dep4_gen1_dep32_eplb288_mtp1_ccb-NIXL] TIMEOUT (90) # - perf/test_perf_sanity.py::test_e2e[aggr_upload-ctx_only-gb200_deepseek-v32-fp4_32k4k_con256_ctx1_dep4_gen1_dep32_eplb0_mtp3_ccb-NIXL] TIMEOUT (90) @@ -90,14 +70,9 @@ l0_gb200_multi_gpus_perf_sanity: - perf/test_perf_sanity.py::test_e2e[aggr_upload-ctx_only-gb200_deepseek-v32-fp4_8k1k_con1_ctx1_dep4_gen1_tep8_eplb0_mtp3_ccb-NIXL] TIMEOUT (90) - perf/test_perf_sanity.py::test_e2e[aggr_upload-ctx_only-gb200_deepseek-v32-fp4_8k1k_con4096_ctx1_dep4_gen1_dep32_eplb256_mtp0_ccb-NIXL] TIMEOUT (90) # gpt-oss-120b-fp4 - - perf/test_perf_sanity.py::test_e2e[aggr_upload-ctx_only-gb200_gpt-oss-120b-fp4_1k1k_con2048_ctx1_tp1_gen1_dep2_eplb0_mtp0_ccb-NIXL] TIMEOUT (90) - # - perf/test_perf_sanity.py::test_e2e[aggr_upload-ctx_only-gb200_gpt-oss-120b-fp4_1k1k_con512_ctx1_tp1_gen1_dep2_eplb0_mtp0_ccb-NIXL] TIMEOUT (90) - - perf/test_perf_sanity.py::test_e2e[aggr_upload-ctx_only-gb200_gpt-oss-120b-fp4_1k1k_con64_ctx1_tp1_gen1_tp4_eplb0_mtp0_ccb-NIXL] TIMEOUT (90) # - perf/test_perf_sanity.py::test_e2e[aggr_upload-ctx_only-gb200_gpt-oss-120b-fp4_8k1k_con128_ctx1_tp1_gen1_tp4_eplb0_mtp0_ccb-NIXL] TIMEOUT (90) - perf/test_perf_sanity.py::test_e2e[aggr_upload-ctx_only-gb200_gpt-oss-120b-fp4_8k1k_con4_ctx1_tp1_gen1_tp4_eplb0_mtp0_ccb-NIXL] TIMEOUT (90) # kimi-k25-thinking-fp4 - # - perf/test_perf_sanity.py::test_e2e[aggr_upload-ctx_only-gb200_kimi-k25-thinking-fp4_1k1k_con2048_ctx1_dep4_gen1_dep32_eplb0_mtp0_ccb-NIXL] TIMEOUT (90) - - perf/test_perf_sanity.py::test_e2e[aggr_upload-ctx_only-gb200_kimi-k25-thinking-fp4_1k1k_con4_ctx1_dep4_gen1_tep4_eplb0_mtp0_ccb-NIXL] TIMEOUT (90) - perf/test_perf_sanity.py::test_e2e[aggr_upload-ctx_only-gb200_kimi-k25-thinking-fp4_8k1k_con1024_ctx1_dep4_gen1_dep32_eplb416_mtp3_ccb-NIXL] TIMEOUT (90) - perf/test_perf_sanity.py::test_e2e[aggr_upload-ctx_only-gb200_kimi-k25-thinking-fp4_8k1k_con4096_ctx1_dep4_gen1_dep16_eplb0_mtp0_ccb-NIXL] TIMEOUT (90) - perf/test_perf_sanity.py::test_e2e[aggr_upload-ctx_only-gb200_kimi-k25-thinking-fp4_8k1k_con4_ctx1_dep4_gen1_tep8_eplb0_mtp3_ccb-NIXL] TIMEOUT (90) diff --git a/tests/integration/test_lists/test-db/l0_gb200_multi_nodes_perf_sanity_ctx1_node1_gpu1_gen1_node1_gpu2.yml b/tests/integration/test_lists/test-db/l0_gb200_multi_nodes_perf_sanity_ctx1_node1_gpu1_gen1_node1_gpu2.yml index dddbeb63b660..a2c11d454409 100644 --- a/tests/integration/test_lists/test-db/l0_gb200_multi_nodes_perf_sanity_ctx1_node1_gpu1_gen1_node1_gpu2.yml +++ b/tests/integration/test_lists/test-db/l0_gb200_multi_nodes_perf_sanity_ctx1_node1_gpu1_gen1_node1_gpu2.yml @@ -14,7 +14,4 @@ l0_gb200_multi_nodes_perf_sanity_ctx1_node1_gpu1_gen1_node1_gpu2: stage: post_merge backend: pytorch tests: - - perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb200_gpt-oss-120b-fp4_1k1k_con2048_ctx1_tp1_gen1_dep2_eplb0_mtp0_ccb-NIXL] TIMEOUT (90) - - perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb200_gpt-oss-120b-fp4_1k1k_con512_ctx1_tp1_gen1_dep2_eplb0_mtp0_ccb-NIXL] TIMEOUT (90) - perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb200_gpt-oss-120b-fp4_8k1k_con512_ctx1_tp1_gen1_dep2_eplb0_mtp0_ccb-NIXL] TIMEOUT (90) - - perf/test_perf_sanity.py::test_e2e[disagg_upload-e2e-gb200_gpt-oss-120b-fp4_1k1k_con2048_ctx1_tp1_gen1_dep2_eplb0_mtp0_ccb-NIXL] TIMEOUT (90) diff --git a/tests/integration/test_lists/test-db/l0_gb200_multi_nodes_perf_sanity_ctx1_node1_gpu1_gen1_node1_gpu4.yml b/tests/integration/test_lists/test-db/l0_gb200_multi_nodes_perf_sanity_ctx1_node1_gpu1_gen1_node1_gpu4.yml index 3fb23d85a0ff..48dc2a8e9790 100644 --- a/tests/integration/test_lists/test-db/l0_gb200_multi_nodes_perf_sanity_ctx1_node1_gpu1_gen1_node1_gpu4.yml +++ b/tests/integration/test_lists/test-db/l0_gb200_multi_nodes_perf_sanity_ctx1_node1_gpu1_gen1_node1_gpu4.yml @@ -30,7 +30,6 @@ l0_gb200_multi_nodes_perf_sanity_ctx1_node1_gpu1_gen1_node1_gpu4: stage: post_merge backend: pytorch tests: - - perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb200_gpt-oss-120b-fp4_1k1k_con64_ctx1_tp1_gen1_tp4_eplb0_mtp0_ccb-NIXL] TIMEOUT (90) - perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb200_gpt-oss-120b-fp4_8k1k_con128_ctx1_tp1_gen1_tp4_eplb0_mtp0_ccb-NIXL] TIMEOUT (90) - perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb200_gpt-oss-120b-fp4_8k1k_con4_ctx1_tp1_gen1_tp4_eplb0_mtp0_ccb-NIXL] TIMEOUT (90) - perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb200_qwen3-235b-fp4_8k1k_con1_ctx1_tp1_gen1_tep4_eplb0_mtp0_ccb-NIXL] TIMEOUT (90) diff --git a/tests/integration/test_lists/test-db/l0_gb200_multi_nodes_perf_sanity_ctx1_node1_gpu4_gen1_node1_gpu4.yml b/tests/integration/test_lists/test-db/l0_gb200_multi_nodes_perf_sanity_ctx1_node1_gpu4_gen1_node1_gpu4.yml deleted file mode 100644 index 27af1d826edb..000000000000 --- a/tests/integration/test_lists/test-db/l0_gb200_multi_nodes_perf_sanity_ctx1_node1_gpu4_gen1_node1_gpu4.yml +++ /dev/null @@ -1,21 +0,0 @@ -version: 0.0.1 -l0_gb200_multi_nodes_perf_sanity_ctx1_node1_gpu4_gen1_node1_gpu4: -- condition: - ranges: - # 1 ctx worker with each 1 node and 4 GPUs - # 1 gen worker with each 1 node and 4 GPUs - system_gpu_count: - gte: 8 - lte: 8 - wildcards: - gpu: - - '*gb200*' - terms: - stage: post_merge - backend: pytorch - tests: - - perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb200_deepseek-r1-fp4_1k1k_con3072_ctx1_dep4_gen1_dep4_eplb0_mtp1_ccb-NIXL] TIMEOUT (90) - - perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb200_deepseek-v32-fp4_1k1k_con2048_ctx1_dep4_gen1_dep4_eplb0_mtp1_ccb-NIXL] TIMEOUT (90) - - perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb200_kimi-k25-thinking-fp4_1k1k_con4_ctx1_dep4_gen1_tep4_eplb0_mtp0_ccb-NIXL] TIMEOUT (90) - - perf/test_perf_sanity.py::test_e2e[disagg_upload-e2e-gb200_deepseek-r1-fp4_1k1k_con3072_ctx1_dep4_gen1_dep4_eplb0_mtp1_ccb-NIXL] TIMEOUT (90) - - perf/test_perf_sanity.py::test_e2e[disagg_upload-e2e-gb200_deepseek-v32-fp4_1k1k_con2048_ctx1_dep4_gen1_dep4_eplb0_mtp1_ccb-NIXL] TIMEOUT (90) diff --git a/tests/integration/test_lists/test-db/l0_gb200_multi_nodes_perf_sanity_ctx1_node1_gpu4_gen1_node2_gpu8.yml b/tests/integration/test_lists/test-db/l0_gb200_multi_nodes_perf_sanity_ctx1_node1_gpu4_gen1_node2_gpu8.yml index cdde60fa88dd..0af2db518631 100644 --- a/tests/integration/test_lists/test-db/l0_gb200_multi_nodes_perf_sanity_ctx1_node1_gpu4_gen1_node2_gpu8.yml +++ b/tests/integration/test_lists/test-db/l0_gb200_multi_nodes_perf_sanity_ctx1_node1_gpu4_gen1_node2_gpu8.yml @@ -14,12 +14,7 @@ l0_gb200_multi_nodes_perf_sanity_ctx1_node1_gpu4_gen1_node2_gpu8: stage: post_merge backend: pytorch tests: - - perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb200_deepseek-r1-fp4_1k1k_con1024_ctx1_dep4_gen1_dep8_eplb0_mtp0_ccb-NIXL] TIMEOUT (90) - - perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb200_deepseek-r1-fp4_1k1k_con1_ctx1_dep4_gen1_tep8_eplb0_mtp3_ccb-NIXL] TIMEOUT (90) - perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb200_deepseek-r1-fp4_8k1k_con1_ctx1_dep4_gen1_tep8_eplb0_mtp3_ccb-NIXL] TIMEOUT (90) - - perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb200_deepseek-v32-fp4_1k1k_con1_ctx1_dep4_gen1_tep8_eplb0_mtp3_ccb-NIXL] TIMEOUT (90) - perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb200_deepseek-v32-fp4_32k4k_con1_ctx1_dep4_gen1_tep8_eplb0_mtp3_ccb-NIXL] TIMEOUT (90) - perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb200_deepseek-v32-fp4_8k1k_con1_ctx1_dep4_gen1_tep8_eplb0_mtp3_ccb-NIXL] TIMEOUT (90) - - perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb200_kimi-k25-thinking-fp4_1k1k_con4096_ctx1_dep4_gen1_dep8_eplb0_mtp0_ccb-NIXL] TIMEOUT (90) # Failed requests # - perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb200_kimi-k25-thinking-fp4_8k1k_con4_ctx1_dep4_gen1_tep8_eplb0_mtp3_ccb-NIXL] TIMEOUT (90) - - perf/test_perf_sanity.py::test_e2e[disagg_upload-e2e-gb200_kimi-k25-thinking-fp4_1k1k_con4096_ctx1_dep4_gen1_dep8_eplb0_mtp0_ccb-NIXL] TIMEOUT (90) diff --git a/tests/integration/test_lists/test-db/l0_gb200_multi_nodes_perf_sanity_ctx1_node1_gpu4_gen1_node8_gpu32.yml b/tests/integration/test_lists/test-db/l0_gb200_multi_nodes_perf_sanity_ctx1_node1_gpu4_gen1_node8_gpu32.yml index d9e6b006b002..3f665caf1ab1 100644 --- a/tests/integration/test_lists/test-db/l0_gb200_multi_nodes_perf_sanity_ctx1_node1_gpu4_gen1_node8_gpu32.yml +++ b/tests/integration/test_lists/test-db/l0_gb200_multi_nodes_perf_sanity_ctx1_node1_gpu4_gen1_node8_gpu32.yml @@ -14,15 +14,11 @@ l0_gb200_multi_nodes_perf_sanity_ctx1_node1_gpu4_gen1_node8_gpu32: stage: post_merge backend: pytorch tests: - - perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb200_deepseek-r1-fp4_1k1k_con1024_ctx1_dep4_gen1_dep32_eplb0_mtp3_ccb-NIXL] TIMEOUT (90) - perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb200_deepseek-r1-fp4_8k1k_con1024_ctx1_dep4_gen1_dep32_eplb0_mtp3_ccb-NIXL] TIMEOUT (90) - - perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb200_deepseek-r1-fp4_1k1k_con1024_ctx1_dep4_gen1_dep32_eplb0_mtp0_ccb-NIXL] TIMEOUT (90) - - perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb200_deepseek-v32-fp4_1k1k_con1024_ctx1_dep4_gen1_dep32_eplb256_mtp3_ccb-NIXL] TIMEOUT (90) - perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb200_deepseek-v32-fp4_32k4k_con2048_ctx1_dep4_gen1_dep32_eplb288_mtp1_ccb-NIXL] TIMEOUT (90) - perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb200_deepseek-v32-fp4_32k4k_con256_ctx1_dep4_gen1_dep32_eplb0_mtp3_ccb-NIXL] TIMEOUT (90) - perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb200_deepseek-v32-fp4_8k1k_con1024_ctx1_dep4_gen1_dep32_eplb256_mtp3_ccb-NIXL] TIMEOUT (90) - perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb200_deepseek-v32-fp4_8k1k_con4096_ctx1_dep4_gen1_dep32_eplb256_mtp0_ccb-NIXL] TIMEOUT (90) - - perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb200_kimi-k25-thinking-fp4_1k1k_con2048_ctx1_dep4_gen1_dep32_eplb0_mtp0_ccb-NIXL] TIMEOUT (90) - perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb200_kimi-k25-thinking-fp4_8k1k_con1024_ctx1_dep4_gen1_dep32_eplb416_mtp3_ccb-NIXL] TIMEOUT (90) - perf/test_perf_sanity.py::test_e2e[disagg_upload-e2e-gb200_deepseek-v32-fp4_32k4k_con2048_ctx1_dep4_gen1_dep32_eplb288_mtp1_ccb-NIXL] TIMEOUT (90) - perf/test_perf_sanity.py::test_e2e[disagg_upload-e2e-gb200_deepseek-v32-fp4_8k1k_con4096_ctx1_dep4_gen1_dep32_eplb256_mtp0_ccb-NIXL] TIMEOUT (90) diff --git a/tests/integration/test_lists/test-db/l0_gb200_multi_nodes_perf_sanity_ctx2_node1_gpu4_gen1_node4_gpu16.yml b/tests/integration/test_lists/test-db/l0_gb200_multi_nodes_perf_sanity_ctx2_node1_gpu4_gen1_node4_gpu16.yml deleted file mode 100644 index 984745251710..000000000000 --- a/tests/integration/test_lists/test-db/l0_gb200_multi_nodes_perf_sanity_ctx2_node1_gpu4_gen1_node4_gpu16.yml +++ /dev/null @@ -1,18 +0,0 @@ -version: 0.0.1 -l0_gb200_multi_nodes_perf_sanity_ctx2_node1_gpu4_gen1_node4_gpu16: -- condition: - ranges: - # 2 ctx workers with each 1 node and 4 GPUs - # 1 gen worker with each 4 node and 16 GPUs - system_gpu_count: - gte: 24 - lte: 24 - wildcards: - gpu: - - '*gb200*' - terms: - stage: post_merge - backend: pytorch - tests: - - perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb200_deepseek-r1-fp4_1k1k_con2048_ctx2_dep4_gen1_dep16_eplb0_mtp3_ccb-NIXL] TIMEOUT (90) - - perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb200_deepseek-r1-fp4_1k1k_con2048_ctx2_dep4_gen1_dep16_eplb288_mtp3_ccb-NIXL] TIMEOUT (90) diff --git a/tests/integration/test_lists/test-db/l0_gb200_multi_nodes_perf_sanity_node2_gpu8.yml b/tests/integration/test_lists/test-db/l0_gb200_multi_nodes_perf_sanity_node2_gpu8.yml index b1d454c5ad34..af2e765e052f 100644 --- a/tests/integration/test_lists/test-db/l0_gb200_multi_nodes_perf_sanity_node2_gpu8.yml +++ b/tests/integration/test_lists/test-db/l0_gb200_multi_nodes_perf_sanity_node2_gpu8.yml @@ -15,7 +15,6 @@ l0_gb200_multi_nodes_perf_sanity_node2_gpu8: tests: # aggr config # deepseek-r1-fp4 - - perf/test_perf_sanity.py::test_e2e[aggr_upload-deepseek_r1_fp4_v2_2_nodes_grace_blackwell-r1_fp4_v2_dep8_mtp1_1k1k] TIMEOUT (90) - perf/test_perf_sanity.py::test_e2e[aggr_upload-deepseek_r1_fp4_v2_2_nodes_grace_blackwell-r1_fp4_v2_dep8_mtp1_8k1k] TIMEOUT (90) - perf/test_perf_sanity.py::test_e2e[aggr_upload-deepseek_r1_fp4_v2_2_nodes_grace_blackwell-r1_fp4_v2_tep8_mtp3] TIMEOUT (90) # k25-thinking-fp4 aggregated 2-nodes diff --git a/tests/integration/test_lists/test-db/l0_gb300_multi_gpus_perf_sanity.yml b/tests/integration/test_lists/test-db/l0_gb300_multi_gpus_perf_sanity.yml index 8b4796e86be3..d27d85692e2b 100644 --- a/tests/integration/test_lists/test-db/l0_gb300_multi_gpus_perf_sanity.yml +++ b/tests/integration/test_lists/test-db/l0_gb300_multi_gpus_perf_sanity.yml @@ -16,20 +16,13 @@ l0_gb300_multi_gpus_perf_sanity: tests: # ctx_only tests (disagg config) # deepseek-r1-fp4 - - perf/test_perf_sanity.py::test_e2e[aggr_upload-ctx_only-gb300_deepseek-r1-fp4_1k1k_con3072_ctx1_dep4_gen1_dep4_eplb0_mtp1_ccb-NIXL] TIMEOUT (90) - perf/test_perf_sanity.py::test_e2e[aggr_upload-ctx_only-gb300_deepseek-r1-fp4_8k1k_con4096_ctx1_dep4_gen1_dep16_eplb0_mtp1_ccb-NIXL] TIMEOUT (90) - perf/test_perf_sanity.py::test_e2e[aggr_upload-ctx_only-gb300_deepseek-r1-fp4_128k8k_con256_ctx1_pp4_gen1_dep8_eplb0_mtp1_ccb-NIXL] TIMEOUT (180) # kimi-k25-thinking-fp4 - - perf/test_perf_sanity.py::test_e2e[aggr_upload-ctx_only-gb300_kimi-k25-thinking-fp4_1k1k_con4096_ctx1_dep4_gen1_dep8_eplb0_mtp0_ccb-NIXL] TIMEOUT (90) - # - perf/test_perf_sanity.py::test_e2e[aggr_upload-ctx_only-gb300_kimi-k25-thinking-fp4_1k1k_con2048_ctx1_dep4_gen1_dep32_eplb0_mtp0_ccb-NIXL] TIMEOUT (90) - - perf/test_perf_sanity.py::test_e2e[aggr_upload-ctx_only-gb300_kimi-k25-thinking-fp4_1k1k_con4_ctx1_dep4_gen1_tep4_eplb0_mtp0_ccb-NIXL] TIMEOUT (90) - perf/test_perf_sanity.py::test_e2e[aggr_upload-ctx_only-gb300_kimi-k25-thinking-fp4_8k1k_con4096_ctx1_dep4_gen1_dep16_eplb0_mtp0_ccb-NIXL] TIMEOUT (90) - perf/test_perf_sanity.py::test_e2e[aggr_upload-ctx_only-gb300_kimi-k25-thinking-fp4_8k1k_con1024_ctx1_dep4_gen1_dep32_eplb416_mtp3_ccb-NIXL] TIMEOUT (90) - perf/test_perf_sanity.py::test_e2e[aggr_upload-ctx_only-gb300_kimi-k25-thinking-fp4_8k1k_con4_ctx1_dep4_gen1_tep8_eplb0_mtp3_ccb-NIXL] TIMEOUT (90) # glm-5-fp4 - - perf/test_perf_sanity.py::test_e2e[aggr_upload-ctx_only-gb300_glm-5-fp4_1k1k_con1_ctx1_dep2_gen1_tep4_eplb0_mtp3_ccb-NIXL] TIMEOUT (90) - - perf/test_perf_sanity.py::test_e2e[aggr_upload-ctx_only-gb300_glm-5-fp4_1k1k_con512_ctx1_dep2_gen1_dep32_eplb0_mtp3_ccb-NIXL] TIMEOUT (90) - - perf/test_perf_sanity.py::test_e2e[aggr_upload-ctx_only-gb300_glm-5-fp4_1k1k_con4096_ctx1_dep2_gen1_dep8_eplb256_mtp1_ccb-NIXL] TIMEOUT (90) - perf/test_perf_sanity.py::test_e2e[aggr_upload-ctx_only-gb300_glm-5-fp4_8k1k_con1_ctx1_dep2_gen1_tep8_eplb0_mtp3_ccb-NIXL] TIMEOUT (90) - perf/test_perf_sanity.py::test_e2e[aggr_upload-ctx_only-gb300_glm-5-fp4_8k1k_con512_ctx1_dep2_gen1_dep32_eplb0_mtp3_ccb-NIXL] TIMEOUT (90) - perf/test_perf_sanity.py::test_e2e[aggr_upload-ctx_only-gb300_glm-5-fp4_8k1k_con1024_ctx1_dep2_gen1_dep8_eplb256_mtp1_ccb-NIXL] TIMEOUT (90) diff --git a/tests/integration/test_lists/test-db/l0_gb300_multi_nodes_perf_sanity_ctx1_node1_gpu2_gen1_node1_gpu4.yml b/tests/integration/test_lists/test-db/l0_gb300_multi_nodes_perf_sanity_ctx1_node1_gpu2_gen1_node1_gpu4.yml deleted file mode 100644 index 22d306e421d8..000000000000 --- a/tests/integration/test_lists/test-db/l0_gb300_multi_nodes_perf_sanity_ctx1_node1_gpu2_gen1_node1_gpu4.yml +++ /dev/null @@ -1,18 +0,0 @@ -version: 0.0.1 -l0_gb300_multi_nodes_perf_sanity_ctx1_node1_gpu2_gen1_node1_gpu4: -- condition: - ranges: - # 1 ctx worker with each 1 node and 2 GPUs - # 1 gen worker with each 1 node and 4 GPUs - system_gpu_count: - gte: 8 - lte: 8 - wildcards: - gpu: - - '*gb300*' - terms: - stage: post_merge - backend: pytorch - tests: - # glm-5-fp4 - - perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb300_glm-5-fp4_1k1k_con1_ctx1_dep2_gen1_tep4_eplb0_mtp3_ccb-NIXL] TIMEOUT (90) diff --git a/tests/integration/test_lists/test-db/l0_gb300_multi_nodes_perf_sanity_ctx1_node1_gpu2_gen1_node2_gpu8.yml b/tests/integration/test_lists/test-db/l0_gb300_multi_nodes_perf_sanity_ctx1_node1_gpu2_gen1_node2_gpu8.yml index cbd13b4b3656..304e8b56a98f 100644 --- a/tests/integration/test_lists/test-db/l0_gb300_multi_nodes_perf_sanity_ctx1_node1_gpu2_gen1_node2_gpu8.yml +++ b/tests/integration/test_lists/test-db/l0_gb300_multi_nodes_perf_sanity_ctx1_node1_gpu2_gen1_node2_gpu8.yml @@ -32,7 +32,5 @@ l0_gb300_multi_nodes_perf_sanity_ctx1_node1_gpu2_gen1_node2_gpu8: backend: pytorch tests: # glm-5-fp4 - - perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb300_glm-5-fp4_1k1k_con4096_ctx1_dep2_gen1_dep8_eplb256_mtp1_ccb-NIXL] TIMEOUT (90) - perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb300_glm-5-fp4_8k1k_con1_ctx1_dep2_gen1_tep8_eplb0_mtp3_ccb-NIXL] TIMEOUT (90) - perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb300_glm-5-fp4_8k1k_con1024_ctx1_dep2_gen1_dep8_eplb256_mtp1_ccb-NIXL] TIMEOUT (90) - - perf/test_perf_sanity.py::test_e2e[disagg_upload-e2e-gb300_glm-5-fp4_1k1k_con4096_ctx1_dep2_gen1_dep8_eplb256_mtp1_ccb-NIXL] TIMEOUT (90) diff --git a/tests/integration/test_lists/test-db/l0_gb300_multi_nodes_perf_sanity_ctx1_node1_gpu2_gen1_node8_gpu32.yml b/tests/integration/test_lists/test-db/l0_gb300_multi_nodes_perf_sanity_ctx1_node1_gpu2_gen1_node8_gpu32.yml index 1efd9eec9908..9a8e9b4ee1bd 100644 --- a/tests/integration/test_lists/test-db/l0_gb300_multi_nodes_perf_sanity_ctx1_node1_gpu2_gen1_node8_gpu32.yml +++ b/tests/integration/test_lists/test-db/l0_gb300_multi_nodes_perf_sanity_ctx1_node1_gpu2_gen1_node8_gpu32.yml @@ -15,5 +15,4 @@ l0_gb300_multi_nodes_perf_sanity_ctx1_node1_gpu2_gen1_node8_gpu32: backend: pytorch tests: # glm-5-fp4 - - perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb300_glm-5-fp4_1k1k_con512_ctx1_dep2_gen1_dep32_eplb0_mtp3_ccb-NIXL] TIMEOUT (90) - perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb300_glm-5-fp4_8k1k_con512_ctx1_dep2_gen1_dep32_eplb0_mtp3_ccb-NIXL] TIMEOUT (90) diff --git a/tests/integration/test_lists/test-db/l0_gb300_multi_nodes_perf_sanity_ctx1_node1_gpu4_gen1_node1_gpu4.yml b/tests/integration/test_lists/test-db/l0_gb300_multi_nodes_perf_sanity_ctx1_node1_gpu4_gen1_node1_gpu4.yml deleted file mode 100644 index a451b0fcf3d2..000000000000 --- a/tests/integration/test_lists/test-db/l0_gb300_multi_nodes_perf_sanity_ctx1_node1_gpu4_gen1_node1_gpu4.yml +++ /dev/null @@ -1,21 +0,0 @@ -version: 0.0.1 -l0_gb300_multi_nodes_perf_sanity_ctx1_node1_gpu4_gen1_node1_gpu4: -- condition: - ranges: - # 1 ctx worker with each 1 node and 4 GPUs - # 1 gen worker with each 1 node and 4 GPUs - system_gpu_count: - gte: 8 - lte: 8 - wildcards: - gpu: - - '*gb300*' - terms: - stage: post_merge - backend: pytorch - tests: - # deepseek-r1-fp4 - - perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb300_deepseek-r1-fp4_1k1k_con3072_ctx1_dep4_gen1_dep4_eplb0_mtp1_ccb-NIXL] TIMEOUT (90) - # kimi-k25-thinking-fp4 - - perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb300_kimi-k25-thinking-fp4_1k1k_con4_ctx1_dep4_gen1_tep4_eplb0_mtp0_ccb-NIXL] TIMEOUT (90) - - perf/test_perf_sanity.py::test_e2e[disagg_upload-e2e-gb300_deepseek-r1-fp4_1k1k_con3072_ctx1_dep4_gen1_dep4_eplb0_mtp1_ccb-NIXL] TIMEOUT (90) diff --git a/tests/integration/test_lists/test-db/l0_gb300_multi_nodes_perf_sanity_ctx1_node1_gpu4_gen1_node2_gpu8.yml b/tests/integration/test_lists/test-db/l0_gb300_multi_nodes_perf_sanity_ctx1_node1_gpu4_gen1_node2_gpu8.yml index 73b7863d9692..14aa2d0a4b24 100644 --- a/tests/integration/test_lists/test-db/l0_gb300_multi_nodes_perf_sanity_ctx1_node1_gpu4_gen1_node2_gpu8.yml +++ b/tests/integration/test_lists/test-db/l0_gb300_multi_nodes_perf_sanity_ctx1_node1_gpu4_gen1_node2_gpu8.yml @@ -33,7 +33,4 @@ l0_gb300_multi_nodes_perf_sanity_ctx1_node1_gpu4_gen1_node2_gpu8: tests: # deepseek-r1-fp4 128k8k - perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb300_deepseek-r1-fp4_128k8k_con256_ctx1_pp4_gen1_dep8_eplb0_mtp1_ccb-NIXL] TIMEOUT (180) - # kimi-k25-thinking-fp4 1k1k - - perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb300_kimi-k25-thinking-fp4_1k1k_con4096_ctx1_dep4_gen1_dep8_eplb0_mtp0_ccb-NIXL] TIMEOUT (90) - perf/test_perf_sanity.py::test_e2e[disagg_upload-e2e-gb300_deepseek-r1-fp4_128k8k_con256_ctx1_pp4_gen1_dep8_eplb0_mtp1_ccb-NIXL] TIMEOUT (180) - - perf/test_perf_sanity.py::test_e2e[disagg_upload-e2e-gb300_kimi-k25-thinking-fp4_1k1k_con4096_ctx1_dep4_gen1_dep8_eplb0_mtp0_ccb-NIXL] TIMEOUT (90) diff --git a/tests/integration/test_lists/test-db/l0_gb300_multi_nodes_perf_sanity_ctx1_node1_gpu4_gen1_node8_gpu32.yml b/tests/integration/test_lists/test-db/l0_gb300_multi_nodes_perf_sanity_ctx1_node1_gpu4_gen1_node8_gpu32.yml index ee2dba9895fb..3c6b989f1cbc 100644 --- a/tests/integration/test_lists/test-db/l0_gb300_multi_nodes_perf_sanity_ctx1_node1_gpu4_gen1_node8_gpu32.yml +++ b/tests/integration/test_lists/test-db/l0_gb300_multi_nodes_perf_sanity_ctx1_node1_gpu4_gen1_node8_gpu32.yml @@ -15,5 +15,4 @@ l0_gb300_multi_nodes_perf_sanity_ctx1_node1_gpu4_gen1_node8_gpu32: backend: pytorch tests: # kimi-k25-thinking-fp4 - - perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb300_kimi-k25-thinking-fp4_1k1k_con2048_ctx1_dep4_gen1_dep32_eplb0_mtp0_ccb-NIXL] TIMEOUT (90) - perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb300_kimi-k25-thinking-fp4_8k1k_con1024_ctx1_dep4_gen1_dep32_eplb416_mtp3_ccb-NIXL] TIMEOUT (120) diff --git a/tests/integration/test_lists/test-db/l0_gb300_multi_nodes_perf_sanity_node2_gpu8.yml b/tests/integration/test_lists/test-db/l0_gb300_multi_nodes_perf_sanity_node2_gpu8.yml index 61a822d5b29c..e0c7b5ea4199 100644 --- a/tests/integration/test_lists/test-db/l0_gb300_multi_nodes_perf_sanity_node2_gpu8.yml +++ b/tests/integration/test_lists/test-db/l0_gb300_multi_nodes_perf_sanity_node2_gpu8.yml @@ -15,6 +15,5 @@ l0_gb300_multi_nodes_perf_sanity_node2_gpu8: tests: # aggr config # deepseek-r1-fp4 - - perf/test_perf_sanity.py::test_e2e[aggr_upload-deepseek_r1_fp4_v2_2_nodes_grace_blackwell-r1_fp4_v2_dep8_mtp1_1k1k] TIMEOUT (90) - perf/test_perf_sanity.py::test_e2e[aggr_upload-deepseek_r1_fp4_v2_2_nodes_grace_blackwell-r1_fp4_v2_dep8_mtp1_8k1k] TIMEOUT (90) - perf/test_perf_sanity.py::test_e2e[aggr_upload-deepseek_r1_fp4_v2_2_nodes_grace_blackwell-r1_fp4_v2_tep8_mtp3] TIMEOUT (90) diff --git a/tests/integration/test_lists/waives.txt b/tests/integration/test_lists/waives.txt index ac681628990a..6c107c0a219b 100644 --- a/tests/integration/test_lists/waives.txt +++ b/tests/integration/test_lists/waives.txt @@ -393,31 +393,22 @@ perf/test_perf.py::test_perf[t5_base-plugin-float16-bs:8-input_output_len:60,20] perf/test_perf.py::test_perf[whisper_large_v3-bench-float16-input_output_len:128,20] SKIP perf/test_perf_sanity.py::test_e2e[aggr_upload-deepseek_r1_fp4_v2_grace_blackwell-r1_fp4_v2_dep4_mtp1_1k8k] SKIP (https://nvbugs/6422339) perf/test_perf_sanity.py::test_e2e[aggr_upload-deepseek_r1_fp8_blackwell-r1_fp8_tp8_mtp3_8k1k] SKIP (https://nvbugs/6432948) -perf/test_perf_sanity.py::test_e2e[aggr_upload-deepseek_v32_fp4_grace_blackwell-v32_fp4_dep4_mtp1_1k1k] SKIP (https://nvbugs/6374910) perf/test_perf_sanity.py::test_e2e[aggr_upload-dynamo_gpt_oss_120b_fp4_blackwell-gpt_oss_fp4_tep4_adp_cutlass_8k1k] SKIP (https://nvbugs/6374910) perf/test_perf_sanity.py::test_e2e[aggr_upload-glm5_fp4_blackwell-glm5_fp4_tep8_mtp3_8k1k] SKIP (https://nvbugs/6329155) perf/test_perf_sanity.py::test_e2e[aggr_upload-k25_thinking_fp4_2_nodes_grace_blackwell-k25_thinking_fp4_tep8_32k8k] SKIP (https://nvbugs/6422339) -perf/test_perf_sanity.py::test_e2e[aggr_upload-qwen3_5_397b_fp4_blackwell-qwen3_5_397b_fp4_tep8_1k1k] SKIP (https://nvbugs/6463814) perf/test_perf_sanity.py::test_e2e[aggr_upload-super_ad_blackwell-super_ad_ws1_1k1k] SKIP (https://nvbugs/6153575) perf/test_perf_sanity.py::test_e2e[disagg_upload-e2e-gb200_deepseek-r1-fp4_128k8k_con128_ctx1_pp8_gen1_dep16_eplb0_mtp1_ccb-NIXL] SKIP (https://nvbugs/6426890) perf/test_perf_sanity.py::test_e2e[disagg_upload-e2e-gb200_deepseek-r1-fp4_8k1k_con4096_ctx1_dep4_gen1_dep16_eplb0_mtp1_ccb-NIXL] SKIP (https://nvbugs/6463814) -perf/test_perf_sanity.py::test_e2e[disagg_upload-e2e-gb200_deepseek-v32-fp4_1k1k_con2048_ctx1_dep4_gen1_dep4_eplb0_mtp1_ccb-NIXL] SKIP (https://nvbugs/6463814) perf/test_perf_sanity.py::test_e2e[disagg_upload-e2e-gb200_deepseek-v32-fp4_32k4k_con2048_ctx1_dep4_gen1_dep32_eplb288_mtp1_ccb-NIXL] SKIP (https://nvbugs/6463814) perf/test_perf_sanity.py::test_e2e[disagg_upload-e2e-gb200_deepseek-v32-fp4_8k1k_con4096_ctx1_dep4_gen1_dep32_eplb256_mtp0_ccb-NIXL] SKIP (https://nvbugs/6463814) perf/test_perf_sanity.py::test_e2e[disagg_upload-e2e-gb200_kimi-k25-thinking-fp4_8k1k_con4096_ctx1_dep4_gen1_dep16_eplb0_mtp0_ccb-NIXL] SKIP (https://nvbugs/6463814) perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb200_deepseek-r1-fp4_128k8k_con128_ctx1_pp8_gen1_dep16_eplb0_mtp1_ccb-NIXL] SKIP (https://nvbugs/6463814) -perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb200_deepseek-v32-fp4_1k1k_con1024_ctx1_dep4_gen1_dep32_eplb256_mtp3_ccb-NIXL] SKIP (https://nvbugs/6418510) -perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb200_deepseek-v32-fp4_1k1k_con2048_ctx1_dep4_gen1_dep4_eplb0_mtp1_ccb-NIXL] SKIP (https://nvbugs/6426890) perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb200_deepseek-v32-fp4_32k4k_con2048_ctx1_dep4_gen1_dep32_eplb288_mtp1_ccb-NIXL] SKIP (https://nvbugs/6374872) perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb200_deepseek-v32-fp4_32k4k_con256_ctx1_dep8_gen1_dep8_eplb0_mtp0_ccb-NIXL] SKIP (https://nvbugs/6374893) perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb200_deepseek-v32-fp4_8k1k_con1024_ctx1_dep4_gen1_dep32_eplb256_mtp3_ccb-NIXL] SKIP (https://nvbugs/6463814) -perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb200_gpt-oss-120b-fp4_1k1k_con2048_ctx1_tp1_gen1_dep2_eplb0_mtp0_ccb-NIXL] SKIP (https://nvbugs/6324123) perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb200_kimi-k25-thinking-fp4_8k1k_con1024_ctx1_dep4_gen1_dep32_eplb416_mtp3_ccb-NIXL] SKIP (https://nvbugs/6379406) perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb200_kimi-k25-thinking-fp4_8k1k_con4096_ctx1_dep4_gen1_dep16_eplb0_mtp0_ccb-NIXL] SKIP (https://nvbugs/6463814) perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb200_qwen3-235b-fp4_8k1k_con64_ctx1_tp1_gen1_tep4_eplb0_mtp0_ccb-NIXL] SKIP (https://nvbugs/6418834) -perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb300_glm-5-fp4_1k1k_con1_ctx1_dep2_gen1_tep4_eplb0_mtp3_ccb-NIXL] SKIP (https://nvbugs/6418834) -perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb300_kimi-k25-thinking-fp4_1k1k_con2048_ctx1_dep4_gen1_dep32_eplb0_mtp0_ccb-NIXL] SKIP (https://nvbugs/6402069) -perf/test_perf_sanity.py::test_e2e[disagg_upload-gen_only-gb300_kimi-k25-thinking-fp4_1k1k_con4096_ctx1_dep4_gen1_dep8_eplb0_mtp0_ccb-NIXL] SKIP (https://nvbugs/6323074) perf/test_visual_gen_perf_sanity.py::test_visual_gen_e2e[vg_upload-wan22_i2v_a14b_blackwell-wan22_i2v_a14b_nvfp4_trtllm_cfg2_ulysses4] SKIP (https://nvbugs/6422339) test_doc.py::test_url_validity SKIP (https://nvbugs/6215684) test_e2e.py::test_draft_token_tree_quickstart_advanced_eagle3[Llama-3.1-8b-Instruct-llama-3.1-model/Llama-3.1-8B-Instruct-EAGLE3-LLaMA3.1-Instruct-8B] SKIP (https://nvbugs/6368053)