Skip to content

[TRTLLM-11324][perf] Add host performance regression test suite for PyExecutor - #12148

Merged
longlee0622 merged 2 commits into
NVIDIA:mainfrom
hyukn:perf/host_perf_regression_test
Apr 10, 2026
Merged

longlee0622 merged 2 commits into
NVIDIA:mainfrom
hyukn:perf/host_perf_regression_test

Conversation

@hyukn

@hyukn hyukn commented Mar 12, 2026 •

Copy link
Copy Markdown
Collaborator

Summary by CodeRabbit

Release Notes

  • Tests

    • Added host performance regression testing framework with support for multiple model configurations including DeepSeek-V3-Lite FP8 and Llama-3.1-8B.
    • Added module-level performance benchmarks for scheduler, sampler, and resource manager components.
    • Added speculative decoding performance tests for baseline and batched request scenarios.
  • Documentation

    • Added comprehensive guide for running and configuring host performance tests with metrics and prerequisites.

Description

Layered test suite for detecting host (CPU) overhead regressions in TensorRT-LLM's PyExecutor pipeline.

Module tests — pre-merge (CPU-bounded, ~15s total, no model weights)

  • Scheduler (21 scenarios): baseline/production/tight-memory at BS 1–256
  • Sampler (6 scenarios): greedy decoding + stop-word matching
  • KV Cache Manager (6 scenarios): generation + context allocation paths
  • Soft regression detection: compares against B200 baselines with 2x tolerance, prints REGRESSION DETECTED markers (test stays green; CI can grep)

E2E tests — post-merge (GPU + model weights required)

  • test_llmapi_perf (3 configs): LLM.generate() direct — cleanest host signal, no HTTP overhead
    • Llama-3.1-8B BS=8 (dense baseline)
    • DeepSeek-V3-Lite FP8 BS=8 (MoE/MLA)
    • Llama-8B + spec decode BS=1 (draft model overhead)
  • test_host_perf (1 config): trtllm-serve + benchmark_serving — full serving stack validation
    • Llama-3.1-8B BS=8

CI integration

  • 33 module test cases in l0_b200.yml pre-merge pytorch stage
  • 4 E2E test cases in l0_b200.yml post-merge pytorch stage
  • All entries use fully-qualified pytest nodeids validated against EXACT_MATCH

Test Coverage

  • All 33 module-level tests pass on B200 GPU
  • Confirmed CPU-bounded via nsys profiling (GPU util < 1%)
  • CI test list validation verified locally (0 mismatches)
  • Adapted to latest SampleState API (requests: list[LlmRequest])

PR Checklist

  • Please check this after reviewing the above items as appropriate for this PR.

GitHub Bot Help

To see a list of available CI bot commands, please comment /bot help.

@hyukn
hyukn force-pushed the perf/host_perf_regression_test branch 3 times, most recently from 8fe6459 to 98f0cc6 Compare March 16, 2026 15:04
@hyukn

hyukn commented Mar 16, 2026

Copy link
Copy Markdown
Collaborator Author

/bot run --disable-fail-fast

1 similar comment
@hyukn

hyukn commented Mar 17, 2026

Copy link
Copy Markdown
Collaborator Author

/bot run --disable-fail-fast

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #39155 [ run ] triggered by Bot. Commit: 98f0cc6 Link to invocation

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #39155 [ run ] completed with state FAILURE. Commit: 98f0cc6
/LLM/main/L0_MergeRequest_PR pipeline #30413 completed with status: 'FAILURE'

CI Report

⚠️ Action Required:

  • Please check the failed tests and fix your PR
  • If you cannot view the failures, ask the CI triggerer to share details
  • Once fixed, request an NVIDIA team member to trigger CI again

Link to invocation

@hyukn

hyukn commented Mar 17, 2026

Copy link
Copy Markdown
Collaborator Author

/bot run --disable-fail-fast

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #39191 [ run ] triggered by Bot. Commit: 9534f66 Link to invocation

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #39191 [ run ] completed with state SUCCESS. Commit: 9534f66
/LLM/main/L0_MergeRequest_PR pipeline #30441 completed with status: 'FAILURE'

CI Report

⚠️ Action Required:

  • Please check the failed tests and fix your PR
  • If you cannot view the failures, ask the CI triggerer to share details
  • Once fixed, request an NVIDIA team member to trigger CI again

Link to invocation

@hyukn

hyukn commented Mar 17, 2026

Copy link
Copy Markdown
Collaborator Author

/bot run --disable-fail-fast

1 similar comment
@hyukn

hyukn commented Mar 18, 2026

Copy link
Copy Markdown
Collaborator Author

/bot run --disable-fail-fast

@hyukn
hyukn force-pushed the perf/host_perf_regression_test branch from 9534f66 to b89052b Compare March 18, 2026 00:52
@hyukn

hyukn commented Mar 18, 2026

Copy link
Copy Markdown
Collaborator Author

/bot run --disable-fail-fast

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #39336 [ run ] triggered by Bot. Commit: b89052b Link to invocation

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #39337 [ run ] triggered by Bot. Commit: b89052b Link to invocation

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #39336 [ run ] completed with state ABORTED. Commit: b89052b

Link to invocation

@hyukn
hyukn marked this pull request as ready for review March 18, 2026 02:16
@hyukn
hyukn requested a review from a team as a code owner March 18, 2026 02:16
@coderabbitai

coderabbitai Bot commented Mar 18, 2026 •

Copy link
Copy Markdown
Contributor
📝 Walkthrough

Walkthrough

Introduces a comprehensive host performance regression testing framework for the PyExecutor pipeline, comprising configuration-driven E2E tests using trtllm-serve, LLM API-level benchmarks, and module-level performance tests for scheduler, sampler, and resource manager components. Includes test discovery, server/client orchestration, metrics extraction, multi-run statistical analysis, and configuration files for multiple model variants.

Changes

Cohort / File(s) Summary
Configuration & Documentation
tests/integration/defs/perf/host_perf/README.md, tests/integration/defs/perf/host_perf/__init__.py, tests/integration/defs/perf/host_perf/host_perf_*.yaml
Adds documentation describing two-layer host performance testing strategy and four YAML configuration files for DeepSeek-V3-Lite FP8, Llama-3.1-8B FP16, and Llama-3.1-8B with speculative decoding, each defining server/client configurations for host-overhead-dominant workloads.
E2E Performance Test Orchestration
tests/integration/defs/perf/host_perf/test_host_perf.py
Implements end-to-end host performance testing via trtllm-serve, including YAML-based test discovery, server startup/health checks, benchmark client invocation, metrics extraction, multi-run aggregation, and statistical reporting with Welch t-test scaffolding.
LLM API Performance Testing
tests/integration/defs/perf/host_perf/test_llmapi_perf.py
Adds direct LLM API-level performance benchmarking bypassing HTTP layer, with YAML-driven test discovery, synthetic prompt generation, warmup/measurement cycles, and metrics collection (token throughput, request throughput, output length).
Module-Level Performance Benchmarks
tests/integration/defs/perf/host_perf/test_module_scheduler.py, test_module_sampler.py, test_module_resource_manager.py
Introduces focused performance tests for individual pipeline components: scheduler CPU overhead across batch sizes with mock KV cache manager, sampler update operations with greedy and stop-word scenarios, and KVCacheManager resource allocation/preparation paths with configurable batch sizes and memory constraints.
Test Integration
tests/integration/test_lists/test-db/l0_b200.yml
Registers host performance regression test cases (scheduler, sampler, resource manager) into the test database, organized by module and execution context (CPU-only vs. GPU-required).

Sequence Diagram(s)

sequenceDiagram
    participant TestRunner as Test Runner
    participant Discovery as Test Discovery
    participant Config as Config Loader
    participant Server as trtllm-serve
    participant Client as benchmark_serving
    participant Metrics as Metrics Parser
    participant Output as Output/Logs

    TestRunner->>Discovery: discover_test_cases()
    Discovery->>Discovery: Scan YAML files
    Discovery-->>TestRunner: [HostPerfTestCase, ...]

    loop For each test case
        TestRunner->>Config: load_configs(test_case)
        Config-->>TestRunner: (HostPerfServerConfig, HostPerfClientConfig)
        
        TestRunner->>Server: Generate extra-llm-api-config.yml
        TestRunner->>Server: spawn trtllm-serve process
        
        TestRunner->>Server: wait_for_server_ready(health check)
        Server-->>TestRunner: Server is ready
        
        TestRunner->>Client: invoke benchmark_serving
        Client->>Server: Execute benchmark requests
        Server->>Client: Return responses
        Client-->>Output: Write metrics output
        
        TestRunner->>Metrics: parse_metrics(output)
        Metrics-->>TestRunner: Dict[metric_name, value]
        
        TestRunner->>Output: Store results & logs
        TestRunner->>Server: Terminate server process
    end

    opt Multi-run mode
        TestRunner->>TestRunner: run_multi_run_benchmark(num_runs)
        TestRunner->>TestRunner: report_multi_run_stats()
        TestRunner-->>Output: JSON summary + CV analysis
    end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 75.86% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The PR title clearly and concisely describes the main change: adding a host performance regression test suite for PyExecutor, with proper JIRA ticket reference and type annotation.
Description check ✅ Passed The PR description clearly explains what is being added: a layered test suite for detecting host overhead regressions with module tests (pre-merge) and E2E tests (post-merge), detailed test coverage, and CI integration changes.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
📝 Coding Plan
  • Generate coding plan for human review comments

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (9)
tests/integration/defs/perf/host_perf/test_module_sampler.py (3)

89-99: Use explicit | None for optional list parameters.

♻️ Suggested fix
 def make_scheduled_requests(
-    generation_requests: List[LlmRequest] = None,
-    context_requests: List[LlmRequest] = None,
+    generation_requests: list[LlmRequest] | None = None,
+    context_requests: list[LlmRequest] | None = None,
 ) -> ScheduledRequests:
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@tests/integration/defs/perf/host_perf/test_module_sampler.py` around lines 89
- 99, Update make_scheduled_requests signature to use explicit union type for
optional lists (e.g., generation_requests: List[LlmRequest] | None = None and
context_requests: List[LlmRequest] | None = None) so the parameters clearly
indicate they can be None; keep the body unchanged and retain references to
ScheduledRequests and LlmRequest used inside the function.

57-76: Use explicit | None for optional parameters.

The stop_words parameter defaults to None without explicit union type annotation.

♻️ Suggested fix
 def make_request(
     request_id: int,
     seq_slot: int,
     prompt_len: int = 128,
     max_new_tokens: int = 100000,
-    stop_words: list = None,
+    stop_words: list | None = None,
 ) -> LlmRequest:
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@tests/integration/defs/perf/host_perf/test_module_sampler.py` around lines 57
- 76, Update the make_request function signature to use an explicit optional
union type for stop_words (e.g., stop_words: list | None) so the parameter is
clearly annotated as optional; update any necessary imports or typing usage if
your codebase targets Python<3.10 (use Optional[list] or from typing import
Optional) and ensure the function body still checks "if stop_words:" and assigns
it to req.py_stop_words_list as before (refer to make_request, stop_words, and
req.py_stop_words_list).

79-86: Same fix needed for make_generation_requests.

♻️ Suggested fix
-def make_generation_requests(count: int, stop_words: list = None) -> List[LlmRequest]:
+def make_generation_requests(count: int, stop_words: list | None = None) -> list[LlmRequest]:
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@tests/integration/defs/perf/host_perf/test_module_sampler.py` around lines 79
- 86, make_generation_requests currently passes the same stop_words list
reference into every request, causing shared-mutable state across LlmRequest
objects; update the call inside make_generation_requests (where
make_request(...) is invoked) to pass a copy of stop_words (e.g.,
list(stop_words) or stop_words.copy() when stop_words is not None) so each
generated request gets its own stop_words list; keep the existing seq_slot
assignment and setting req.state = LlmRequestState.GENERATION_IN_PROGRESS.
tests/integration/defs/perf/host_perf/test_module_resource_manager.py (1)

91-101: Use explicit | None for optional parameters.

Per PEP 484, implicit Optional (default None without union type) is prohibited. With Python 3.10+, use the union syntax directly.

♻️ Suggested fix for type annotations
 def make_scheduled_requests(
-    generation_requests: List[LlmRequest] = None,
-    context_requests: List[LlmRequest] = None,
+    generation_requests: list[LlmRequest] | None = None,
+    context_requests: list[LlmRequest] | None = None,
 ) -> ScheduledRequests:

Based on learnings: "In TensorRT-LLM (Python requires >=3.10 and <4 as per setup.py), you can use Python 3.10+ features."

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@tests/integration/defs/perf/host_perf/test_module_resource_manager.py` around
lines 91 - 101, The function make_scheduled_requests currently uses implicit
Optional by defaulting generation_requests and context_requests to None; update
the type annotations to use explicit union syntax (generation_requests:
List[LlmRequest] | None and context_requests: List[LlmRequest] | None) so it
follows PEP 484 for Python 3.10+ and keep the same default values and behavior
inside the function; locate the signature for make_scheduled_requests and change
only the parameter annotations accordingly.
tests/integration/defs/perf/host_perf/test_module_scheduler.py (1)

40-40: Prefer PEP 585 built-in generics over typing.List.

Since TensorRT-LLM requires Python 3.10+, you can use built-in generic types directly without importing from typing.

♻️ Suggested refactor to use modern type hints
-from typing import List

Then update the type hints throughout the file:

  • List[float] → list[float]
  • List[LlmRequest] → list[LlmRequest]

Based on learnings: "In TensorRT-LLM (Python requires >=3.10 and <4 as per setup.py), you can use Python 3.10+ features (e.g., PEP 585 generics like dict[str, int], list[str], etc.) throughout the codebase."

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@tests/integration/defs/perf/host_perf/test_module_scheduler.py` at line 40,
Replace the legacy typing.List usage with PEP 585 built-in generics: remove the
"from typing import List" import and change all occurrences of List[...] to
list[...] (e.g., change List[float] → list[float] and List[LlmRequest] →
list[LlmRequest]) in this test module; search for the symbol "List" and update
the type annotations in functions and variable declarations such as those
referencing LlmRequest and numeric lists to use the native list[...] syntax.
tests/integration/defs/perf/host_perf/test_host_perf.py (3)

329-333: Consider handling CalledProcessError for better diagnostics.

If the benchmark client fails, subprocess.check_output raises CalledProcessError. While this will fail the test (appropriate behavior), catching it and logging the partial output could improve debugging.

💡 Optional: Enhanced error handling
-        output = subprocess.check_output(
-            client_cmd,
-            stderr=subprocess.STDOUT,
-            env=copy.deepcopy(os.environ),
-        ).decode()
+        try:
+            output = subprocess.check_output(
+                client_cmd,
+                stderr=subprocess.STDOUT,
+                env=copy.deepcopy(os.environ),
+            ).decode()
+        except subprocess.CalledProcessError as e:
+            print_info(f"[host_perf] Benchmark failed with exit code {e.returncode}")
+            print_info(f"[host_perf] Output: {e.output.decode() if e.output else 'None'}")
+            raise
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@tests/integration/defs/perf/host_perf/test_host_perf.py` around lines 329 -
333, The test currently calls subprocess.check_output(client_cmd,
stderr=subprocess.STDOUT, env=copy.deepcopy(os.environ)).decode() which will
raise subprocess.CalledProcessError on failure and loses partial output; wrap
this call in a try/except that catches subprocess.CalledProcessError, decode and
log or attach the partial output (e.output or e.output.decode(errors="replace"))
along with client_cmd for diagnostics, then re-raise the exception (or fail the
test) so behavior remains failing but with improved logs for debugging.

403-403: Minor: EN DASH in docstring.

Line 403 contains an EN DASH (–) instead of a HYPHEN-MINUS (-) in "Welch–Satterthwaite". This is flagged by Ruff (RUF002). While not a functional issue, consider using ASCII hyphen for consistency.

🔧 Proposed fix
-    Uses the Welch–Satterthwaite approximation for degrees of freedom.
+    Uses the Welch-Satterthwaite approximation for degrees of freedom.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@tests/integration/defs/perf/host_perf/test_host_perf.py` at line 403, Replace
the EN DASH in the docstring phrase "Welch–Satterthwaite" with a standard ASCII
hyphen-minus ("Welch-Satterthwaite") to satisfy linting (RUF002); locate the
docstring containing that phrase in
tests/integration/defs/perf/host_perf/test_host_perf.py (search for
"Welch–Satterthwaite") and edit the text accordingly so only the punctuation
changes.

49-49: Import style deviation from guidelines.

The import from tensorrt_llm._utils import get_free_port imports a function directly. Per coding guidelines, prefer importing the module and maintaining the namespace: from tensorrt_llm import _utils then _utils.get_free_port().

That said, this is a minor style point for test code and the current form is common in this codebase.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@tests/integration/defs/perf/host_perf/test_host_perf.py` at line 49, Replace
the direct function import with a module import to preserve namespace: change
the import of get_free_port to import the module (use _utils) by importing
tensorrt_llm._utils as _utils or using from tensorrt_llm import _utils, and then
update all call sites in this test (where get_free_port is invoked) to call
_utils.get_free_port() instead of get_free_port().
tests/integration/defs/perf/host_perf/test_llmapi_perf.py (1)

53-64: Consider extracting shared constants to avoid duplication.

MODEL_PATH_DICT and get_model_dir are duplicated between this file and test_host_perf.py (lines 55-58 and 84-88 respectively). Consider extracting these to a shared module (e.g., a host_perf_common.py or the existing conftest.py) to maintain a single source of truth.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@tests/integration/defs/perf/host_perf/test_llmapi_perf.py` around lines 53 -
64, Extract the duplicated constants and helper into a shared module: move
MODEL_PATH_DICT, HOST_PERF_CONFIG_DIR and get_model_dir into a new module (e.g.,
host_perf_common.py or place in existing conftest.py), export get_model_dir and
MODEL_PATH_DICT from there, then update both test_llmapi_perf.py and
test_host_perf.py to import MODEL_PATH_DICT and get_model_dir instead of
redefining them and remove the local duplicates; ensure get_model_dir still
calls llm_models_root() and paths resolve the same way after the refactor.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@tests/integration/defs/perf/host_perf/test_host_perf.py`:
- Around line 329-333: The test currently calls
subprocess.check_output(client_cmd, stderr=subprocess.STDOUT,
env=copy.deepcopy(os.environ)).decode() which will raise
subprocess.CalledProcessError on failure and loses partial output; wrap this
call in a try/except that catches subprocess.CalledProcessError, decode and log
or attach the partial output (e.output or e.output.decode(errors="replace"))
along with client_cmd for diagnostics, then re-raise the exception (or fail the
test) so behavior remains failing but with improved logs for debugging.
- Line 403: Replace the EN DASH in the docstring phrase "Welch–Satterthwaite"
with a standard ASCII hyphen-minus ("Welch-Satterthwaite") to satisfy linting
(RUF002); locate the docstring containing that phrase in
tests/integration/defs/perf/host_perf/test_host_perf.py (search for
"Welch–Satterthwaite") and edit the text accordingly so only the punctuation
changes.
- Line 49: Replace the direct function import with a module import to preserve
namespace: change the import of get_free_port to import the module (use _utils)
by importing tensorrt_llm._utils as _utils or using from tensorrt_llm import
_utils, and then update all call sites in this test (where get_free_port is
invoked) to call _utils.get_free_port() instead of get_free_port().

In `@tests/integration/defs/perf/host_perf/test_llmapi_perf.py`:
- Around line 53-64: Extract the duplicated constants and helper into a shared
module: move MODEL_PATH_DICT, HOST_PERF_CONFIG_DIR and get_model_dir into a new
module (e.g., host_perf_common.py or place in existing conftest.py), export
get_model_dir and MODEL_PATH_DICT from there, then update both
test_llmapi_perf.py and test_host_perf.py to import MODEL_PATH_DICT and
get_model_dir instead of redefining them and remove the local duplicates; ensure
get_model_dir still calls llm_models_root() and paths resolve the same way after
the refactor.

In `@tests/integration/defs/perf/host_perf/test_module_resource_manager.py`:
- Around line 91-101: The function make_scheduled_requests currently uses
implicit Optional by defaulting generation_requests and context_requests to
None; update the type annotations to use explicit union syntax
(generation_requests: List[LlmRequest] | None and context_requests:
List[LlmRequest] | None) so it follows PEP 484 for Python 3.10+ and keep the
same default values and behavior inside the function; locate the signature for
make_scheduled_requests and change only the parameter annotations accordingly.

In `@tests/integration/defs/perf/host_perf/test_module_sampler.py`:
- Around line 89-99: Update make_scheduled_requests signature to use explicit
union type for optional lists (e.g., generation_requests: List[LlmRequest] |
None = None and context_requests: List[LlmRequest] | None = None) so the
parameters clearly indicate they can be None; keep the body unchanged and retain
references to ScheduledRequests and LlmRequest used inside the function.
- Around line 57-76: Update the make_request function signature to use an
explicit optional union type for stop_words (e.g., stop_words: list | None) so
the parameter is clearly annotated as optional; update any necessary imports or
typing usage if your codebase targets Python<3.10 (use Optional[list] or from
typing import Optional) and ensure the function body still checks "if
stop_words:" and assigns it to req.py_stop_words_list as before (refer to
make_request, stop_words, and req.py_stop_words_list).
- Around line 79-86: make_generation_requests currently passes the same
stop_words list reference into every request, causing shared-mutable state
across LlmRequest objects; update the call inside make_generation_requests
(where make_request(...) is invoked) to pass a copy of stop_words (e.g.,
list(stop_words) or stop_words.copy() when stop_words is not None) so each
generated request gets its own stop_words list; keep the existing seq_slot
assignment and setting req.state = LlmRequestState.GENERATION_IN_PROGRESS.

In `@tests/integration/defs/perf/host_perf/test_module_scheduler.py`:
- Line 40: Replace the legacy typing.List usage with PEP 585 built-in generics:
remove the "from typing import List" import and change all occurrences of
List[...] to list[...] (e.g., change List[float] → list[float] and
List[LlmRequest] → list[LlmRequest]) in this test module; search for the symbol
"List" and update the type annotations in functions and variable declarations
such as those referencing LlmRequest and numeric lists to use the native
list[...] syntax.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 0b354729-0c7a-4532-abcc-c823252439fe

📥 Commits

Reviewing files that changed from the base of the PR and between 43d3ad8 and b89052b.

📒 Files selected for processing (11)
  • tests/integration/defs/perf/host_perf/README.md
  • tests/integration/defs/perf/host_perf/__init__.py
  • tests/integration/defs/perf/host_perf/host_perf_deepseek_v3_lite.yaml
  • tests/integration/defs/perf/host_perf/host_perf_llama8b.yaml
  • tests/integration/defs/perf/host_perf/host_perf_llama8b_spec_decode.yaml
  • tests/integration/defs/perf/host_perf/test_host_perf.py
  • tests/integration/defs/perf/host_perf/test_llmapi_perf.py
  • tests/integration/defs/perf/host_perf/test_module_resource_manager.py
  • tests/integration/defs/perf/host_perf/test_module_sampler.py
  • tests/integration/defs/perf/host_perf/test_module_scheduler.py
  • tests/integration/test_lists/test-db/l0_b200.yml

@hyukn
hyukn force-pushed the perf/host_perf_regression_test branch from b89052b to 21ebadd Compare March 18, 2026 02:40
@hyukn

hyukn commented Mar 18, 2026

Copy link
Copy Markdown
Collaborator Author

/bot run --disable-fail-fast

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #39337 [ run ] completed with state SUCCESS. Commit: b89052b
/LLM/main/L0_MergeRequest_PR pipeline #30583 completed with status: 'FAILURE'

CI Report

⚠️ Action Required:

  • Please check the failed tests and fix your PR
  • If you cannot view the failures, ask the CI triggerer to share details
  • Once fixed, request an NVIDIA team member to trigger CI again

Link to invocation

@hyukn

hyukn commented Mar 18, 2026

Copy link
Copy Markdown
Collaborator Author

/bot run --disable-fail-fast

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #39385 [ run ] triggered by Bot. Commit: 21ebadd Link to invocation

@hyukn

hyukn commented Apr 2, 2026

Copy link
Copy Markdown
Collaborator Author

/bot run --stage-list "DGX_B200-1_GPU-PyTorch" --disable-fail-fast

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #41375 [ run ] triggered by Bot. Commit: f420ff1 Link to invocation

@hyukn

hyukn commented Apr 2, 2026

Copy link
Copy Markdown
Collaborator Author

/bot run --stage-list "DGX_B200-1_GPU-PyTorch" --disable-fail-fast

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #41387 [ run ] triggered by Bot. Commit: f420ff1 Link to invocation

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #41375 [ run ] completed with state ABORTED. Commit: f420ff1

Link to invocation

@hyukn
hyukn force-pushed the perf/host_perf_regression_test branch from f420ff1 to f5fc721 Compare April 2, 2026 08:14
@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #41387 [ run ] completed with state FAILURE. Commit: f420ff1
/LLM/main/L0_MergeRequest_PR pipeline #32327 (Partly Tested) completed with status: 'FAILURE'

CI Report

⚠️ Action Required:

  • Please check the failed tests and fix your PR
  • If you cannot view the failures, ask the CI triggerer to share details
  • Once fixed, request an NVIDIA team member to trigger CI again

Link to invocation

@hyukn
hyukn force-pushed the perf/host_perf_regression_test branch from f5fc721 to a417bd3 Compare April 7, 2026 02:17
@hyukn

hyukn commented Apr 7, 2026

Copy link
Copy Markdown
Collaborator Author

/bot run --stage-list "DGX_B200-PyTorch-1, DGX_B200-PyTorch-2, DGX_B200-PyTorch-3" --disable-fail-fast

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #42030 [ run ] triggered by Bot. Commit: a417bd3 Link to invocation

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #42030 [ run ] completed with state SUCCESS. Commit: a417bd3
/LLM/main/L0_MergeRequest_PR pipeline #32875 (Partly Tested) completed with status: 'FAILURE'

CI Report

⚠️ Action Required:

  • Please check the failed tests and fix your PR
  • If you cannot view the failures, ask the CI triggerer to share details
  • Once fixed, request an NVIDIA team member to trigger CI again

Link to invocation

@hyukn
hyukn force-pushed the perf/host_perf_regression_test branch 4 times, most recently from d2c553f to fef371c Compare April 8, 2026 05:01
@hyukn

hyukn commented Apr 8, 2026

Copy link
Copy Markdown
Collaborator Author

/bot run --stage-list "DGX_B200-PyTorch-1, DGX_B200-PyTorch-2, DGX_B200-PyTorch-3" --disable-fail-fast

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #42278 [ run ] triggered by Bot. Commit: fef371c Link to invocation

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #42278 [ run ] completed with state SUCCESS. Commit: fef371c
/LLM/main/L0_MergeRequest_PR pipeline #33075 (Partly Tested) completed with status: 'FAILURE'

CI Report

⚠️ Action Required:

  • Please check the failed tests and fix your PR
  • If you cannot view the failures, ask the CI triggerer to share details
  • Once fixed, request an NVIDIA team member to trigger CI again

Link to invocation

@hyukn

hyukn commented Apr 8, 2026

Copy link
Copy Markdown
Collaborator Author

/bot run --disable-fail-fast

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #42340 [ run ] triggered by Bot. Commit: 92ed6f3 Link to invocation

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #42340 [ run ] completed with state SUCCESS. Commit: 92ed6f3
/LLM/main/L0_MergeRequest_PR pipeline #33127 completed with status: 'FAILURE'

CI Report

⚠️ Action Required:

  • Please check the failed tests and fix your PR
  • If you cannot view the failures, ask the CI triggerer to share details
  • Once fixed, request an NVIDIA team member to trigger CI again

Link to invocation

hyukn added 2 commits April 9, 2026 07:59
…ntegration

Add a comprehensive host performance regression test suite that detects
CPU-side overhead regressions in the PyExecutor inference pipeline.

Three test levels:
- Module tests: micro-benchmark scheduler, sampler, kv_cache (6 tests)
- E2E serve tests: trtllm-serve + benchmark_serving (3 tests)
  Llama8B dense, DeepSeek-V3-Lite MoE/MLA, Llama8B spec decode

Features:
- YAML-driven config discovery for E2E tests
- Baseline regression detection from baselines_b200.json
- OpenSearch DB integration via process_and_upload_test_results()
- Auto-detect upload from OPEN_SEARCH_DB_BASE_URL env var
- Reuses shared constants (PERF_METRIC_LOG_QUERIES, SUPPORTED_GPU_MAPPING)
  from test_perf_sanity.py to avoid duplication

Signed-off-by: Yukun He <23156053+hyukn@users.noreply.github.com>
…y.py

Remove test_host_perf.py and reuse the existing test_perf_sanity.py
infrastructure for host-overhead-dominant E2E benchmarks. The YAML
configs are moved to tests/scripts/perf-sanity/aggregated/ and the
small model entries are added to test_perf_sanity.py's MODEL_PATH_DICT.

This eliminates 485 lines of duplicated serve+benchmark logic while
preserving identical test coverage through perf_sanity's test_e2e.

Signed-off-by: Yukun He <23156053+hyukn@users.noreply.github.com>
@hyukn
hyukn force-pushed the perf/host_perf_regression_test branch from 01cc32c to 754cfd9 Compare April 9, 2026 07:59
@hyukn

hyukn commented Apr 9, 2026

Copy link
Copy Markdown
Collaborator Author

/bot run --disable-fail-fast

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #42506 [ run ] triggered by Bot. Commit: 754cfd9 Link to invocation

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #42506 [ run ] completed with state SUCCESS. Commit: 754cfd9
/LLM/main/L0_MergeRequest_PR pipeline #33250 completed with status: 'SUCCESS'
Pipeline passed with automatic retried tests. Check the rerun report for details.

CI Report

Link to invocation

@longlee0622
longlee0622 merged commit 7876dc7 into NVIDIA:main Apr 10, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants