# Copyright (c) 2026, NVIDIA CORPORATION. All rights reserved. # SPDX-License-Identifier: Apache-2.0 version: 0.0.1 l0_b300: - condition: ranges: system_gpu_count: gte: 1 lte: 1 wildcards: gpu: - '*gb110*' - '*b300*' linux_distribution_name: ubuntu* cpu: x86_64 terms: stage: pre_merge backend: pytorch tests: # ------------- DeepSeek-V4.1 model, Engram and DSpark --------------- - unittest/_torch/modeling/test_modeling_deepseekv41.py - unittest/_torch/modules/test_engram_decode_hash.py - unittest/_torch/modules/test_engram_history_uploads.py - unittest/_torch/modules/test_engram_replay.py - unittest/_torch/speculative/hw_agnostic/test_dspark_v41.py - unittest/_torch/modules/test_mhc.py::test_fused_hc_lagged_matches_eager_composition # Covers tests/unittest/_torch/attention/. Two sub-trees moved in here from elsewhere # under tests/unittest/_torch/ and have no entry of their own on any list, so this entry # is what picks them up: # kernels/ fused attention kernels (ex thop/ and custom_ops/) # multi_gpu/ helix tests -- each case spawns a 2-rank MPIPoolExecutor pinned to GPU 0/1 # by absolute index, and they gate on >= 2 GPUs plus Blackwell. They also # rebind mpi4py's serializer at import time, which applies process-wide on # every stage that collects them, including where the tests themselves skip. # The sparse/dsa/test_cute_dsl_* files ignored below keep their own entries (pre-existing). - unittest/_torch/attention --ignore=unittest/_torch/attention/sparse/dsa/test_cute_dsl_fp8_paged_mqa_logits.py --ignore=unittest/_torch/attention/sparse/dsa/test_cute_dsl_fp4_paged_mqa_logits.py --ignore=unittest/_torch/attention/sparse/test_cute_dsl_gvr_topk_decode.py --ignore=unittest/_torch/attention/sparse/test_cute_dsl_gvr_topk_tiers.py --ignore=unittest/_torch/attention/sparse/msa/test_minimax_m3_sparse_attn_decode.py --ignore=unittest/_torch/attention/sparse/msa/test_msa_proxy_split.py TIMEOUT (90) # Run cold-JIT MSA coverage separately from the attention aggregate. # Cold-JIT runs take about 25 minutes; allow a 45-minute budget. - unittest/_torch/attention/sparse/msa/test_minimax_m3_sparse_attn_decode.py TIMEOUT (45) - unittest/_torch/attention/sparse/msa/test_msa_proxy_split.py - unittest/_torch/attention/sparse/dsa/test_cute_dsl_fp8_paged_mqa_logits.py - unittest/_torch/attention/sparse/dsa/test_cute_dsl_fp4_paged_mqa_logits.py - unittest/_torch/attention/sparse/test_cute_dsl_gvr_topk_decode.py TIMEOUT (120) - unittest/_torch/attention/sparse/test_cute_dsl_gvr_topk_tiers.py - unittest/_torch/modeling/test_qsa_runtime_wiring.py - unittest/_torch/modeling/test_qwen4_exp_support.py - unittest/_torch/moe/kernels/parallel - unittest/_torch/kernels/parallel TIMEOUT (90) - unittest/_torch/visual_gen/kernels/parallel - unittest/_torch/visual_gen/test_attention_flashinfer.py # ------------- Visual Gen sparse attention (sm103) --------------- - unittest/_torch/visual_gen/sparse_attention/sol/test_sol_attention.py - unittest/_torch/moe/kernels/serial - unittest/_torch/kernels/serial - unittest/_torch/executor # 250s - unittest/_torch/disaggregation # ------------- modules (non-MoE) --------------- - unittest/_torch/modules/test_fused_add_rms_norm_quant.py - unittest/_torch/modules/test_fused_activation_quant.py - unittest/_torch/modules/test_awq_quantization.py - unittest/_torch/modules/test_triton_linear.py - unittest/_torch/modules/test_mxfp8_linear.py - unittest/_torch/modules/test_group_rmn_norm.py - unittest/_torch/modules/test_low_m_gemm.py - unittest/_torch/modules/test_top_k.py - unittest/_torch/modules/test_qwen4_exp_hyper_connection.py - unittest/_torch/modules/test_qwen4_exp_ple.py - unittest/_torch/modules/test_qwen4_exp_ple_kernels.py - unittest/_torch/modules/test_qwen4_exp_ple_offload.py - unittest/_torch/modules/mamba - unittest/_torch/modules/tests_lora_modules # ------------- MoE components tests --------------- - unittest/_torch/moe/test_moe_load_balancer.py - unittest/_torch/moe/test_moe_routing.py - unittest/_torch/moe/fused_moe/test_deepgemm_fused_gather_finalize.py - unittest/_torch/moe/fused_moe/test_deepgemm_fused_expand_quant.py # ------------- Kimi K3 NVFP4: expert loading + SiTU --------------- # Listed test-by-test on purpose. The rest of this file has 19 failures that # predate this work (verified by running the base revision's copy against the # same source), so registering the whole module would import them into CI as # if they were ours. Those are reported separately; these are green. - unittest/_torch/moe/test_kimi_k3_situ_moe.py::test_kimi_k3_expert_ckpt_spec_selection - unittest/_torch/moe/test_kimi_k3_situ_moe.py::test_fp8_block_scaled_dequantization - unittest/_torch/moe/test_kimi_k3_situ_moe.py::test_materialize_handles_scalar_lazy_safetensors - unittest/_torch/moe/test_kimi_k3_situ_moe.py::test_nvfp4_streaming_expert_load_matches_whole_checkpoint[threads1] - unittest/_torch/moe/test_kimi_k3_situ_moe.py::test_nvfp4_streaming_expert_load_matches_whole_checkpoint[threads4] - unittest/_torch/moe/test_kimi_k3_situ_moe.py::test_nvfp4_streaming_expert_load_w1_w3_order_is_load_bearing - unittest/_torch/moe/test_kimi_k3_situ_moe.py::test_nvfp4_streaming_expert_load_rejects_duplicate_slot - unittest/_torch/moe/test_kimi_k3_situ_moe.py::test_nvfp4_streaming_drains_staging_per_expert - unittest/_torch/moe/test_kimi_k3_situ_moe.py::test_nvfp4_streamed_experts_forward_runs - unittest/_torch/moe/test_kimi_k3_situ_moe.py::test_cutlass_situ_bf16_matches_reference - unittest/_torch/moe/test_kimi_k3_situ_moe.py::test_nvfp4_kernel_actually_applies_situ[CUTEDSL] - unittest/_torch/moe/test_kimi_k3_situ_moe.py::test_nvfp4_kernel_actually_applies_situ[TRTLLM] - unittest/_torch/moe/test_kimi_k3_situ_moe.py::test_kimi_k3_allow_list_matches_what_the_backends_declare - unittest/_torch/moe/test_kimi_k3_situ_moe.py::test_explicit_cutedsl_fails_instead_of_degrading_to_cutlass - unittest/_torch/moe/test_kimi_k3_situ_moe.py::test_cutedsl_situ_betas_reach_the_kernel_cache_key - unittest/_torch/moe/test_kimi_k3_situ_moe.py::test_cutedsl_kernel_rejects_unusable_situ_betas[nan_beta] - unittest/_torch/moe/test_kimi_k3_situ_moe.py::test_cutedsl_kernel_rejects_unusable_situ_betas[nan_linear] - unittest/_torch/moe/test_kimi_k3_situ_moe.py::test_cutedsl_kernel_rejects_unusable_situ_betas[inf_beta] - unittest/_torch/moe/test_kimi_k3_situ_moe.py::test_cutedsl_kernel_rejects_unusable_situ_betas[inf_linear] - unittest/_torch/moe/test_kimi_k3_situ_moe.py::test_cutedsl_kernel_rejects_unusable_situ_betas[zero] - unittest/_torch/moe/test_kimi_k3_situ_moe.py::test_cutedsl_kernel_rejects_unusable_situ_betas[negative] - unittest/_torch/moe/test_moe_backend.py::test_situ_survives_resolution_not_just_construction[cutlass] - unittest/_torch/moe/test_moe_backend.py::test_situ_survives_resolution_not_just_construction[cutedsl] - unittest/_torch/moe/test_kimi_k3_situ_moe.py::test_nvfp4_experts_match_situ_reference[CUTLASS-static_1.0] - unittest/_torch/moe/test_kimi_k3_situ_moe.py::test_nvfp4_experts_match_situ_reference[TRTLLM-static_1.0] - unittest/_torch/moe/test_kimi_k3_situ_moe.py::test_megamoe_streamed_coverage_survives_per_expert_drain - unittest/_torch/moe/test_kimi_k3_situ_moe.py::test_megamoe_overrides_finalize_streamed_expert - unittest/_torch/moe/test_kimi_k3_situ_moe.py::test_mega_format_transform_is_slot_blockwise # ------------- MoE: test_moe_backend (by backend) --------------- - unittest/_torch/moe/test_moe_backend.py::test_trtllm_bf16_unquantized_moe - unittest/_torch/moe/test_moe_backend.py::test_trtllm_fp8_block_scales_fused_shared_experts - unittest/_torch/moe/test_moe_backend.py::test_trtllm_fp8_block_scales_fuse_shared_expert_layout - unittest/_torch/moe/test_moe_backend.py::test_trtllm_gen_nvfp4_situ_selects_padded_quant_method - unittest/_torch/moe/test_moe_backend.py::test_trtllm_gen_nvfp4_situ_fc31_scale_c_drops_dequant_scale # ------------- MoE: test_single_gpu (specific quant per backend) --------------- # CUTLASS backend: FP8, NVFP4, W4A8_MXFP4_MXFP8, W8A16 - unittest/_torch/moe/test_moe_module.py::test_configurable_moe_single_gpu[e60_k4_h2048_i1408-seq=1-dtype=torch.bfloat16-backend=CUTLASS-quant=FP8-routing=Renormalize] - unittest/_torch/moe/test_moe_module.py::test_configurable_moe_single_gpu[e60_k4_h2048_i1408-seq=1-dtype=torch.bfloat16-backend=CUTLASS-quant=NVFP4-routing=Renormalize] - unittest/_torch/moe/test_moe_module.py::test_configurable_moe_single_gpu[e60_k4_h2048_i1408-seq=1-dtype=torch.bfloat16-backend=CUTLASS-quant=W4A8_MXFP4_MXFP8-routing=Renormalize] - unittest/_torch/moe/test_moe_module.py::test_configurable_moe_single_gpu[e60_k4_h2048_i1408-seq=1-dtype=torch.bfloat16-backend=CUTLASS-quant=W8A16-routing=Renormalize] # TRTLLM backend: NVFP4, FP8_BLOCK_SCALES, W4A8_NVFP4_FP8, W4A16_MXFP4 - unittest/_torch/moe/test_moe_module.py::test_configurable_moe_single_gpu[e60_k4_h2048_i1408-seq=1-dtype=torch.bfloat16-backend=TRTLLM-quant=NVFP4-routing=Renormalize] - unittest/_torch/moe/test_moe_module.py::test_configurable_moe_single_gpu[e60_k4_h2048_i1408-seq=1-dtype=torch.bfloat16-backend=TRTLLM-quant=FP8_BLOCK_SCALES-routing=Renormalize] - unittest/_torch/moe/test_moe_module.py::test_configurable_moe_single_gpu[e60_k4_h2048_i1408-seq=1-dtype=torch.bfloat16-backend=TRTLLM-quant=W4A8_NVFP4_FP8-routing=Renormalize] - unittest/_torch/moe/test_moe_module.py::test_configurable_moe_single_gpu[e60_k4_h2048_i1408-seq=1-dtype=torch.bfloat16-backend=TRTLLM-quant=W4A16_MXFP4-routing=Renormalize] # CUTEDSL backend: NVFP4 - unittest/_torch/moe/test_moe_module.py::test_configurable_moe_single_gpu[e60_k4_h2048_i1408-seq=1-dtype=torch.bfloat16-backend=CUTEDSL-quant=NVFP4-routing=Renormalize] # DEEPGEMM backend: FP8_BLOCK_SCALES - unittest/_torch/moe/test_moe_module.py::test_configurable_moe_single_gpu[e60_k4_h2048_i1408-seq=1-dtype=torch.bfloat16-backend=DEEPGEMM-quant=FP8_BLOCK_SCALES-routing=Renormalize] # ---- end MoE tests ---- - accuracy/test_llm_api_pytorch.py::TestDeepSeekV3Lite::test_nvfp4[moe_backend=TRTLLM-mtp_nextn=0-fp8kv=True-attention_dp=False-cuda_graph=True-overlap_scheduler=True-torch_compile=False] - accuracy/test_llm_api_pytorch.py::TestDeepSeekV3Lite::test_nvfp4[moe_backend=CUTLASS-mtp_nextn=2-fp8kv=True-attention_dp=False-cuda_graph=True-overlap_scheduler=True-torch_compile=False] - accuracy/test_llm_api_pytorch.py::TestDeepSeekV3Lite::test_chunked_prefill[quant_dtype=fp8-kv_cache_reuse=True-fp8kv=True-overlap_scheduler=True] # Cover nvbugs 6084445 - accuracy/test_llm_api_pytorch.py::TestDeepSeekV3Lite::test_bfloat16_flashinfer[enable_chunked_prefill=False] - accuracy/test_llm_api_pytorch.py::TestDeepSeekV3Lite::test_bfloat16_flashinfer[enable_chunked_prefill=True] # TIMEOUT measured: 3122 cases in 13m54s on one GB300 (the cpu_only files run on the CPU # stage instead), so 30 is 2.2x headroom. - unittest/_torch/modeling_v2 --ignore=unittest/_torch/modeling_v2/comm TIMEOUT (30) - accuracy/modeling_v2/test_gpt_oss.py::TestModelingV2GptOss120bSm10xDefault::test_gsm8k[tp1] # qwen4_exp target, pre-merge: gsm8k; one MTP engine for gsm8k with the acceptance-length # floor (the only gate that sees a miscomputed draft layer), mmmu (the vision tower) and # synthetic videos; and 3k-6k-token pass keys with three drafts and IndexShare over bf16 KV, # the only prompts long enough to run the sparse attention path. The opt-in variants run # post-merge (below). - accuracy/modeling_v2/test_qwen4_exp.py::TestModelingV2Qwen38FlashNextNvfp4Sm103Tp1::test_gsm8k - accuracy/modeling_v2/test_qwen4_exp.py::TestModelingV2Qwen38FlashNextNvfp4Sm103Tp1::test_mtp1_gsm8k_mmmu_and_video - accuracy/modeling_v2/test_qwen4_exp.py::TestModelingV2Qwen38FlashNextNvfp4Sm103Tp1::test_mtp3_long_context_passkey - condition: ranges: system_gpu_count: gte: 1 lte: 1 wildcards: gpu: - '*gb110*' - '*b300*' linux_distribution_name: ubuntu* cpu: x86_64 terms: stage: post_merge backend: pytorch tests: # ---- moved to post-merge (MoE CI optimization) ---- - unittest/_torch/moe/test_moe_backend.py::test_moe_backend -k "CUTLASS" - unittest/_torch/moe/test_moe_backend.py::test_moe_backend -k "TRTLLM" - unittest/_torch/moe/test_moe_backend.py::test_moe_backend -k "CUTEDSL" - unittest/_torch/moe/test_moe_backend.py::test_moe_backend -k "DEEPGEMM" # qwen4_exp target, post-merge: the opt-in variants -- three drafts over CuteDSL experts, fp8 # KV and a bf16 recurrent state in one engine (gsm8k and the pass keys); seven drafts over # 3k-12k-token pass keys on NVFP4 KV and a bf16 state (the verify step's eight rows per # request); and the breakable prefill CUDA graph replayed against eager greedy continuations # at the bucket edges and with context and generation rows in one batch. - accuracy/modeling_v2/test_qwen4_exp.py::TestModelingV2Qwen38FlashNextNvfp4Sm103Tp1::test_mtp3_cutedsl_fp8_kv_bf16_state - accuracy/modeling_v2/test_qwen4_exp.py::TestModelingV2Qwen38FlashNextNvfp4Sm103Tp1::test_mtp7_long_context_passkey - accuracy/modeling_v2/test_qwen4_exp.py::TestModelingV2Qwen38FlashNextNvfp4Sm103Tp1::test_breakable_prefill_matches_eager