Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
54f7031
[None][chore] Remove all Llama-3.1-8B test coverage across integratio…
xinhe-nv Sep 4, 2026
5a94cd7
[None][fix] Remove leftover dead imports and stale test-list entries
xinhe-nv Sep 11, 2026
1739246
[None][fix] Fix waives.txt ordering
xinhe-nv Sep 11, 2026
e5d5c6a
[None][fix] Restore imports needed by the surviving Nemotron MTP smok…
xinhe-nv Sep 11, 2026
2061f06
[None][revert] Drop tests/unittest/_torch and tests/unittest/auto_dep…
xinhe-nv Sep 11, 2026
bceeaa5
[None][test] Restore disaggregated Eagle3 handoff and logprobs tests …
xinhe-nv Sep 13, 2026
6634e32
[TRTLLM-15124][test] move test_disaggregated_logprobs_serving to end …
xinhe-nv Sep 13, 2026
1f0f747
[TRTLLM-15124][test] replace Llama-3.1-8B with Qwen3-8B in test_disag…
xinhe-nv Sep 13, 2026
b322a6d
[TRTLLM-15124][test] replace Llama-3.1-8B with Qwen3-8B in test_disag…
xinhe-nv Sep 13, 2026
0e17059
[TRTLLM-15124][test] replace Llama-3.1-8B with Qwen3.5-4B in multi-no…
xinhe-nv Sep 13, 2026
80b008c
[None][chore] unwaive fixed tests in waives.txt
xinhe-nv Sep 13, 2026
4879c77
[TRTLLM-15124][test] use TestQwen3_30B_A3B in test_torch_compile_node…
xinhe-nv Sep 13, 2026
6c1eb04
Merge remote-tracking branch 'upstream/main' into worktree-TRTLLM-15124
xinhe-nv Sep 13, 2026
fb104d3
Merge branch 'main' into worktree-TRTLLM-15124
xinhe-nv Sep 14, 2026
06f6e61
Merge branch 'main' into worktree-TRTLLM-15124
xinhe-nv Sep 14, 2026
8f9eb28
Update waives.txt
xinhe-nv Sep 14, 2026
131a627
Merge branch 'main' into worktree-TRTLLM-15124
xinhe-nv Sep 14, 2026
9de9443
Merge branch 'main' into worktree-TRTLLM-15124
xinhe-nv Sep 14, 2026
365ba23
Merge branch 'main' into worktree-TRTLLM-15124
xinhe-nv Sep 15, 2026
de30ca9
Update waives.txt
xinhe-nv Sep 15, 2026
da25088
[TRTLLM-15124][fix] fix Mamba KV cache OOM in multi-node disagg compl…
xinhe-nv Sep 16, 2026
d579ce4
Merge remote-tracking branch 'origin/worktree-TRTLLM-15124' into work…
xinhe-nv Sep 16, 2026
54f58be
Merge remote-tracking branch 'upstream/main' into worktree-TRTLLM-15124
xinhe-nv Sep 16, 2026
300d54d
Merge remote-tracking branch 'upstream/main' into worktree-TRTLLM-15124
xinhe-nv Sep 16, 2026
9cbff3d
Merge branch 'main' into worktree-TRTLLM-15124
xinhe-nv Sep 17, 2026
4f99b4b
Update waives.txt
xinhe-nv Sep 17, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 0 additions & 12 deletions tests/integration/defs/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -680,18 +680,6 @@ def llama_model_root(request):
if request.param == "TinyLlama-1.1B-Chat-v1.0":
llama_model_root = os.path.join(models_root, "llama-models-v2",
"TinyLlama-1.1B-Chat-v1.0")
elif request.param == "llama-3.1-8b":
llama_model_root = os.path.join(models_root, "llama-3.1-model",
"Meta-Llama-3.1-8B")
elif request.param == "llama-3.1-8b-instruct-hf-fp8":
llama_model_root = os.path.join(models_root, "llama-3.1-model",
"Llama-3.1-8B-Instruct-FP8")
elif request.param == "llama-3.1-8b-instruct":
llama_model_root = os.path.join(models_root, "llama-3.1-model",
"Llama-3.1-8B-Instruct")
elif request.param == "llama-3.1-8b-hf-nvfp4":
llama_model_root = os.path.join(models_root, "nvfp4-quantized",
"Meta-Llama-3.1-8B")
assert os.path.exists(
llama_model_root
), f"{llama_model_root} does not exist under NFS LLM_MODELS_ROOT dir"
Expand Down
70 changes: 38 additions & 32 deletions tests/integration/defs/disaggregated/test_ad_disagg.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,32 +67,13 @@ def skip_b300():
AUTODEPLOY_DISAGG_SEED = 1234
REDUCED_TINYLLAMA_LAYERS = 2
REDUCED_DEEPSEEK_LAYERS = 2
LLAMA_EAGLE3_EXPECTED_TEXT = " Berlin\nWhat is the capital of France? Paris\nWhat is the capital of"
LLAMA_EAGLE3_EXPECTED_TOKEN_IDS = [
20437,
198,
3923,
374,
279,
6864,
315,
9822,
30,
12366,
198,
3923,
374,
279,
6864,
315,
]


MODEL_PATHS = {
"EAGLE3-LLaMA3.1-Instruct-8B": "EAGLE3-LLaMA3.1-Instruct-8B",
"Llama-3.1-8B-Instruct": "llama-3.1-model/Llama-3.1-8B-Instruct/",
"TinyLlama-1.1B-Chat-v1.0": "llama-models-v2/TinyLlama-1.1B-Chat-v1.0",
"DeepSeek-V3-Lite": "DeepSeek-V3-Lite/bf16",
"Qwen3-8B-eagle3": "Qwen3/qwen3_8b_eagle3",
"Qwen3-8B": "Qwen3/Qwen3-8B",
}


Expand Down Expand Up @@ -657,14 +638,19 @@ def test_chunked_prefill_handoff(model):
# ---------------------------------------------------------------------------


def llama_eagle3_config():
def qwen3_eagle3_config():
return {
"speculative_config": Eagle3DecodingConfig(
max_draft_len=3,
speculative_model=model_path("EAGLE3-LLaMA3.1-Instruct-8B"),
eagle3_layers_to_capture={1, 15, 28},
speculative_model=model_path("Qwen3-8B-eagle3"),
# TODO: these capture layers were carried over proportionally from
# the retired Llama-3.1-8B config (1/32, 15/32, 28/32 through the
# stack) and have NOT been validated against Qwen3-8B's actual
# layer count on GPU. Re-derive and confirm before relying on this
# test's output.
eagle3_layers_to_capture={1, 17, 31},
),
# Force the Eagle3 draft to match the BF16 Llama 3.1 target. Shared KV
# Force the Eagle3 draft to match the BF16 Qwen3-8B target. Shared KV
# cache management requires matching target and draft KV dtypes.
"speculative_model_kwargs": {"torch_dtype": "bfloat16"},
}
Expand Down Expand Up @@ -1039,18 +1025,39 @@ def test_async_sharded_generation_handoff():
@pytest.mark.skip_less_device(2)
@pytest.mark.timeout(900)
def test_async_eagle3_full_model_handoff():
"""Eagle3 one-model draft-token handoff, compared against an aggregate run.

Unlike the retired Llama-3.1-8B version of this test, this compares
against a freshly-computed aggregate (non-disaggregated) generation using
the same speculative_config, instead of hardcoded golden text/token IDs.
That avoids needing pre-recorded goldens for the new model pairing, at the
cost of also exercising the aggregate Eagle3 one-model path as a
dependency. This still needs a real GPU run to confirm Qwen3-8B +
Qwen3/qwen3_8b_eagle3 actually produce matching, non-trivial draft-token
output under this config (see the eagle3_layers_to_capture TODO in
qwen3_eagle3_config).
"""
prompt = "What is the capital of Germany?"
sampling_params_kwargs = {
"max_tokens": 16,
"ignore_eos": True,
"top_k": 1,
"seed": AUTODEPLOY_DISAGG_SEED,
}
extra_config = llama_eagle3_config()
extra_config = qwen3_eagle3_config()

aggregate_output = run_aggregate_generation(
"Qwen3-8B",
world_size=1,
prompt=prompt,
sampling_params_kwargs=sampling_params_kwargs,
extra_config=extra_config,
)
outputs = run_context_then_generation_handoff(
"Llama-3.1-8B-Instruct",
"Qwen3-8B",
worker_world_sizes=(1, 1),
generation_overlap=True,
prompt="What is the capital of Germany?",
prompt=prompt,
sampling_params_kwargs=sampling_params_kwargs,
extra_config=extra_config,
)
Expand All @@ -1064,7 +1071,6 @@ def test_async_eagle3_full_model_handoff():
assert outputs["generation"].token_ids
assert has_draft_tokens(outputs["context"])
assert has_draft_tokens(outputs["generation"])
assert outputs["context"].text == " Berlin"
assert outputs["context"].token_ids == LLAMA_EAGLE3_EXPECTED_TOKEN_IDS[:1]
assert outputs["generation"].text == LLAMA_EAGLE3_EXPECTED_TEXT
assert outputs["generation"].token_ids == LLAMA_EAGLE3_EXPECTED_TOKEN_IDS
assert outputs["context"].token_ids == aggregate_output.token_ids[:1]
assert outputs["generation"].text == aggregate_output.text
assert outputs["generation"].token_ids == aggregate_output.token_ids
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
hostname: localhost
model: llama-3.1-model/Llama-3.1-8B-Instruct
model: Qwen3/Qwen3-8B
free_gpu_memory_fraction: 0.25
backend: pytorch
disable_overlap_scheduler: true
Expand Down
23 changes: 9 additions & 14 deletions tests/integration/defs/disaggregated/test_disaggregated.py
Original file line number Diff line number Diff line change
Expand Up @@ -418,8 +418,8 @@ def get_test_config(test_desc, example_dir, test_root):
f"{test_configs_root}/disagg_config_ctxtp2_gentp2_gptoss_tllm.yaml",
"cancel_stress_test":
f"{test_configs_root}/disagg_config_cancel_stress_test.yaml",
"llama31_8b":
f"{test_configs_root}/disagg_config_ctxtp2_gentp2_llama31_8b.yaml",
"qwen3_8b":
f"{test_configs_root}/disagg_config_ctxtp2_gentp2_qwen3_8b.yaml",
"mamba_conc_greater_than_mbs":
f"{test_configs_root}/disagg_config_mamba_conc_greater_than_mbs.yaml",
"mamba_bs1_concurrency2":
Expand Down Expand Up @@ -2350,9 +2350,6 @@ def benchmark_model_root(request):
model_path = os.path.join(models_root, "DeepSeek-V3-Lite", "fp8")
elif (request.param == "DeepSeek-V3-Lite-bf16"):
model_path = os.path.join(models_root, "DeepSeek-V3-Lite", "bf16")
elif request.param == "llama-3.1-8b-instruct-hf-fp8":
model_path = os.path.join(models_root, "llama-3.1-model",
"Llama-3.1-8B-Instruct-FP8")
else:
raise ValueError(f"Failed to find the model: {request.param}")
return model_path
Expand Down Expand Up @@ -4074,11 +4071,8 @@ def test_disaggregated_cancel_large_context_requests(disaggregated_test_root,


@pytest.mark.skip_less_device(4)
@pytest.mark.parametrize("llama_model_root", ['llama-3.1-8b-instruct'],
indirect=True)
def test_disaggregated_logprobs_serving(disaggregated_test_root,
disaggregated_example_root, llm_venv,
llama_model_root):
disaggregated_example_root, llm_venv):
"""Test logprobs via OpenAI API in disaggregated serving with multi-GPU TP.

Covers the RCCA scenario (NVBug 5926823): disaggregated + streaming + logprobs,
Expand Down Expand Up @@ -4140,24 +4134,25 @@ def extract_logprobs(result, api_type):
logprobs = [item.get("logprob") for item in content]
return tokens, logprobs

setup_model_symlink(llm_venv, llama_model_root,
"llama-3.1-model/Llama-3.1-8B-Instruct")
model_path = "Qwen3/Qwen3-8B"
model_dir = f"{llm_models_root()}/{model_path}"
setup_model_symlink(llm_venv, model_dir, model_path)

config_file = get_test_config("llama31_8b", disaggregated_example_root,
config_file = get_test_config("qwen3_8b", disaggregated_example_root,
os.path.dirname(__file__))

env = llm_venv._new_env.copy()
env["UCX_TLS"] = get_ucx_tls()
ctx_workers, gen_workers, disagg_server, work_dir = [], [], None, None
config, ctx_workers, gen_workers, disagg_server, server_port, work_dir = \
setup_disagg_cluster(config_file, env=env,
model_name=llama_model_root,
model_name=model_dir,
cwd=llm_venv.get_working_directory(),
server_start_timeout=600)

server_host = config.get("hostname", "localhost")
server_url = f"http://{server_host}:{server_port}"
model_name = "llama-3.1-model/Llama-3.1-8B-Instruct"
model_name = model_path
max_tokens = 20
timeout = aiohttp.ClientTimeout(total=120)
# Use emoji prompt to also stress-test multi-byte tokenizer handling
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,9 +56,9 @@ def get_ucx_tls():
MODEL_PATHS = {
"DeepSeek-V3-Lite-fp8": "DeepSeek-V3-Lite/fp8",
"TinyLlama-1.1B-Chat-v1.0": "llama-models-v2/TinyLlama-1.1B-Chat-v1.0",
"Llama-3.1-8B-Instruct": "llama-3.1-model/Llama-3.1-8B-Instruct/",
"EAGLE3-LLaMA3.1-Instruct-8B": "EAGLE3-LLaMA3.1-Instruct-8B",
"Qwen3-8B-eagle3": "Qwen3/qwen3_8b_eagle3",
"Qwen3-8B-FP8": "Qwen3/Qwen3-8B-FP8",
"Qwen3-8B": "Qwen3/Qwen3-8B",
}


Expand Down Expand Up @@ -517,8 +517,9 @@ def test_disaggregated_llama_context_capacity(model, enable_cuda_graph,
print("All workers terminated.")


@pytest.mark.parametrize("model", ["Llama-3.1-8B-Instruct"])
@pytest.mark.parametrize("spec_dec_model_path", ["EAGLE3-LLaMA3.1-Instruct-8B"])
@skip_pre_hopper
@pytest.mark.parametrize("model", ["Qwen3-8B"])
@pytest.mark.parametrize("spec_dec_model_path", ["Qwen3-8B-eagle3"])
@pytest.mark.parametrize("generation_overlap", [False])
def test_disaggregated_spec_dec_batch_slot_limit(model, spec_dec_model_path,
generation_overlap):
Expand Down
Loading
Loading