Skip to content

feat(benchmark): add vLLM HTTP to nightly benchmark - #481

Closed
paxiaatucsdedu wants to merge 2 commits into
smg-project:mainfrom
paxiaatucsdedu:pan/vllm-http-nightly-benchmark
Closed

paxiaatucsdedu wants to merge 2 commits into
smg-project:mainfrom
paxiaatucsdedu:pan/vllm-http-nightly-benchmark

Conversation

@paxiaatucsdedu

@paxiaatucsdedu paxiaatucsdedu commented Feb 20, 2026 •

Copy link
Copy Markdown
Contributor

Description

Problem

The nightly benchmark only ran vLLM over gRPC, without vLLM HTTP performance benchmark.

Solution

Remove the grpc_only: "true" restriction on the vLLM variant in the nightly benchmark workflow.

Changes

  • .github/workflows/nightly-benchmark.yml: Set grpc_only: "false" for the vLLM variant in all three jobs (single-worker, multi-worker, single-worker-h200).
  • e2e_test/benchmarks/test_nightly_perf.py: Updated module docstring to reflect that both protocols now run.

Test Plan

Checklist
  • cargo +nightly fmt passes
  • cargo clippy --all-targets --all-features -- -D warnings passes
  • (Optional) Documentation updated

Summary by CodeRabbit

  • Tests

    • Nightly benchmark workflow now runs both HTTP and gRPC for all runtime variants (vLLM no longer restricted to gRPC).
    • Added a pull-request trigger for nightly benchmark runs alongside scheduled runs.
    • Enabled test mode for nightly benchmarks to use constrained, faster single-concurrency test runs.
  • Bug Fixes

    • Adjusted model launch logic so vLLM HTTP runs use vLLM-specific launch arguments while non-vLLM HTTP/GRPC retain prior argument handling.

@github-actions github-actions Bot added ci CI/CD configuration changes tests Test changes labels Feb 20, 2026
@gemini-code-assist

Copy link
Copy Markdown
Contributor

Summary of Changes

Hello @paxiaatucsdedu, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request extends the nightly performance benchmarks to include vLLM over HTTP, addressing a previous limitation where only gRPC was tested. This change ensures a more comprehensive performance evaluation for vLLM across both communication protocols, with corresponding updates to the test configuration and documentation to reflect the expanded scope.

Highlights

  • vLLM HTTP Benchmarking: Enabled vLLM HTTP performance benchmarks in the nightly workflow, removing the previous grpc_only restriction.
  • Documentation Update: Updated the module docstring in the benchmark test file to reflect that both HTTP and gRPC protocols are now run for all runtimes.
  • Test Mode Activation: Activated a test mode within the nightly performance benchmark script.
Changelog
  • e2e_test/benchmarks/test_nightly_perf.py
    • Updated the module docstring to accurately reflect that both HTTP and gRPC protocols are now included in the benchmark for all runtimes.
    • Set the _TEST_MODE flag to True.
Ignored Files
  • Ignored by pattern: .github/workflows/** (1)
    • .github/workflows/nightly-benchmark.yml
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution. ↩

@coderabbitai

coderabbitai Bot commented Feb 20, 2026 •

Copy link
Copy Markdown

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Enable HTTP runs for vLLM in the nightly benchmark workflow (set vllm variants' grpc_only to false and add pull_request trigger), enable constrained test mode (_TEST_MODE = True) for nightly runs, and refactor model launch logic so HTTP vLLM uses a vllm-specific api_server command with its own args while PD/embedding/gRPC args remain for non-vLLM paths.

Changes

Cohort / File(s) Summary
Workflow Configuration
.github/workflows/nightly-benchmark.yml
Added pull_request trigger and changed vllm matrix variants' grpc_only from "true" to "false" for single, multi, and single-worker-h200 so HTTP tests may run for vLLM.
Test Harness Configuration
e2e_test/benchmarks/test_nightly_perf.py
Set _TEST_MODE = True and updated description wording so nightly runs use constrained/test params and both HTTP and gRPC are exercised for runtimes.
Model launch logic
e2e_test/infra/model_pool.py
Refactored command construction: when mode is HTTP and is_vllm() is true, build vllm.entrypoints.openai.api_server command using --model plus vLLM-specific flags (tensor-parallel-size, max-model-len, gpu-memory-utilization and spec.vllm_args). PD/embedding, gRPC, and PD decode/prefill arguments are appended only in the non-vLLM HTTP or gRPC branches. Control flow remains branch-based but isolates vLLM HTTP path.

Sequence Diagram(s)

sequenceDiagram
    participant PR as "Pull Request"
    participant GH as "GitHub Actions"
    participant Job as "nightly-benchmark job"
    participant Harness as "test_nightly_perf.py"
    participant Pool as "model_pool (launcher)"
    participant vLLM as "vLLM runtime"
    participant sgLang as "sgLang runtime"

    PR->>GH: push / pull_request trigger
    GH->>Job: start nightly-benchmark matrix
    Job->>Harness: invoke nightly benchmark script (TEST_MODE)
    Harness->>Pool: request model launch (mode=http/grpc)
    alt mode=http and is_vllm()
        Pool->>vLLM: build vllm api_server cmd (--model + vllm args)
        vLLM-->>Pool: started
    else non-vllm http or grpc
        Pool->>sgLang: build sgLang http/grpc cmd (+ gRPC/embedding/PD args)
        sgLang-->>Pool: started
    end
    Harness->>vLLM: run tests (if vLLM)
    Harness->>sgLang: run tests (if sgLang)
    vLLM-->>Harness: test results
    sgLang-->>Harness: test results
    Harness-->>Job: report results
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

Suggested reviewers

  • CatherineSue
  • key4ng
  • XinyueZhang369

Poem

🐰 I hopped into CI beneath moonlit beams,
HTTP and gRPC now share the streams,
Test mode snug with limits set tight,
vLLM gets its own launch tonight,
Nightly jobs hum — a rabbit claps with delight! 🥕✨

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately reflects the main change: adding vLLM HTTP support to the nightly benchmark by removing grpc_only restrictions.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.

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

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 532f934ca1

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread e2e_test/benchmarks/test_nightly_perf.py Outdated
@slin1237 slin1237 added the run-ci label to trigger ci workflow label Feb 20, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 3

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
.github/workflows/nightly-benchmark.yml (2)

417-419: ⚠️ Potential issue | 🟡 Minor

Commented-out multi-worker-h200 block still has grpc_only: "true" for vllm.

If this block is uncommented in a future PR, the HTTP protocol tests for vllm will be silently skipped, inconsistent with the intent of this change. Update the stale value while the context is fresh.

🔧 Suggested update inside the comment block
-  #         - { id: vllm,   runtime: vllm,   grpc_only: "true", setup_vllm: true, setup_trtllm: false, extra_deps: "genai-bench" }
+  #         - { id: vllm,   runtime: vllm,   grpc_only: "false", setup_vllm: true, setup_trtllm: false, extra_deps: "genai-bench" }
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.github/workflows/nightly-benchmark.yml around lines 417 - 419, The
commented-out multi-worker-h200 variant still sets the vllm variant's grpc_only:
"true", which would skip HTTP protocol tests if that block is later uncommented;
update the vllm variant in that commented block to grpc_only: "false" (or remove
the grpc_only override) so the vllm entry matches the intended HTTP testing
behavior; look for the commented block labeled multi-worker-h200 and the variant
entries referencing id: vllm and grpc_only to make the change.

162-164: 🧹 Nitpick | 🔵 Trivial

Dead code: the grpc_only == "true" filter can never trigger.

All three active jobs (single-worker, multi-worker, single-worker-h200) now have every variant set to grpc_only: "false". The K_FILTER augmentation block (… and grpc) is permanently unreachable. Consider either removing these blocks or retaining them with a comment explaining the intent (e.g., "reserved for future gRPC-only variants").

🧹 Minimal cleanup (apply to all three jobs)
-          K_FILTER="${{ matrix.model.test_class }}"
-          if [ "${{ matrix.variant.grpc_only }}" == "true" ]; then
-            K_FILTER="${{ matrix.model.test_class }} and grpc"
-          fi
+          K_FILTER="${{ matrix.model.test_class }}"

Also applies to: 269-271, 379-381

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

In @.github/workflows/nightly-benchmark.yml around lines 162 - 164, The K_FILTER
augmentation block that appends "and grpc" is dead because
matrix.variant.grpc_only is always set to "false"; update the workflow by either
removing the unreachable conditional that checks matrix.variant.grpc_only and
the associated K_FILTER modification, or keep the conditional but add a clear
comment like "reserved for future gRPC-only variants" to explain intent; locate
the conditional using the symbols K_FILTER and matrix.variant.grpc_only (also
update the identical blocks at the other occurrences mentioned) and apply the
same change consistently.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In @.github/workflows/nightly-benchmark.yml:
- Line 98: Remove the extra padding spaces inside the inline YAML mapping braces
for the vllm variant rows (e.g., the sequence item starting with "- { id: vllm, 
runtime: vllm,   grpc_only: "false", setup_vllm: true, setup_trtllm: false }")
so the key:value pairs are not separated by multi-space alignment; alternatively
add an inline YAMLlint disable comment for the `braces` rule on those same vllm
variant rows (and the analogous rows for the other variants with similar
formatting) to satisfy the linter.
- Around line 6-8: The workflow contains a pull_request trigger that targets the
feature branch "pan/vllm-http-nightly-benchmark" which is only needed for
testing that branch; remove the pull_request: block (or at least delete the
branches: - pan/vllm-http-nightly-benchmark entry) so the workflow on main no
longer references that feature branch, leaving only the intended triggers for
the nightly-benchmark workflow.

In `@e2e_test/benchmarks/test_nightly_perf.py`:
- Line 33: The file sets the global flag _TEST_MODE = True which forces nightly
benchmarks to run in reduced test mode; change _TEST_MODE to False (restore
production behavior) in e2e_test/benchmarks/test_nightly_perf.py and ensure no
subsequent test-only overrides exist (search for other assignments or
environment gating around _TEST_MODE) so scheduled runs use the full
concurrency/requests/scenario/timeout sweep rather than the limited test
parameters.

---

Outside diff comments:
In @.github/workflows/nightly-benchmark.yml:
- Around line 417-419: The commented-out multi-worker-h200 variant still sets
the vllm variant's grpc_only: "true", which would skip HTTP protocol tests if
that block is later uncommented; update the vllm variant in that commented block
to grpc_only: "false" (or remove the grpc_only override) so the vllm entry
matches the intended HTTP testing behavior; look for the commented block labeled
multi-worker-h200 and the variant entries referencing id: vllm and grpc_only to
make the change.
- Around line 162-164: The K_FILTER augmentation block that appends "and grpc"
is dead because matrix.variant.grpc_only is always set to "false"; update the
workflow by either removing the unreachable conditional that checks
matrix.variant.grpc_only and the associated K_FILTER modification, or keep the
conditional but add a clear comment like "reserved for future gRPC-only
variants" to explain intent; locate the conditional using the symbols K_FILTER
and matrix.variant.grpc_only (also update the identical blocks at the other
occurrences mentioned) and apply the same change consistently.

Comment thread .github/workflows/nightly-benchmark.yml Outdated
Comment thread .github/workflows/nightly-benchmark.yml
Comment thread e2e_test/benchmarks/test_nightly_perf.py Outdated

@gemini-code-assist gemini-code-assist 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.

Code Review

The pull request successfully updates the nightly benchmark to include vLLM HTTP performance, which is a valuable addition. The changes to the Python files are minimal and directly address the problem statement. The module docstring in test_nightly_perf.py has been updated to reflect the change, and a test mode flag has been set to True for local testing purposes. Overall, the changes are clear and functional.

Comment thread e2e_test/benchmarks/test_nightly_perf.py Outdated
Comment thread e2e_test/benchmarks/test_nightly_perf.py
@paxiaatucsdedu
paxiaatucsdedu force-pushed the pan/vllm-http-nightly-benchmark branch from 532f934 to 2ef7f53 Compare February 20, 2026 02:19

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 2ef7f53936

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread .github/workflows/nightly-benchmark.yml

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
.github/workflows/nightly-benchmark.yml (1)

419-419: ⚠️ Potential issue | 🟡 Minor

Stale grpc_only: "true" in commented-out multi-worker-h200 vLLM variant.

All three active jobs were updated to grpc_only: "false", but the commented-out multi-worker-h200 block was not. A developer enabling this job in the future would silently get gRPC-only vLLM runs, contrary to the intent of this PR.

🔧 Proposed fix
-#         - { id: vllm,   runtime: vllm,   grpc_only: "true", setup_vllm: true, setup_trtllm: false, extra_deps: "genai-bench" }
+#         - { id: vllm,   runtime: vllm,   grpc_only: "false", setup_vllm: true, setup_trtllm: false, extra_deps: "genai-bench" }
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.github/workflows/nightly-benchmark.yml at line 419, Update the
commented-out multi-worker-h200 vLLM variant so its grpc_only flag matches the
active jobs: change the stub line containing id: vllm, runtime: vllm, grpc_only:
"true", setup_vllm: true, setup_trtllm: false, extra_deps: "genai-bench" to use
grpc_only: "false" (i.e., edit the commented block referencing the vllm variant
/ multi-worker-h200 so grpc_only is "false" instead of "true").
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Outside diff comments:
In @.github/workflows/nightly-benchmark.yml:
- Line 419: Update the commented-out multi-worker-h200 vLLM variant so its
grpc_only flag matches the active jobs: change the stub line containing id:
vllm, runtime: vllm, grpc_only: "true", setup_vllm: true, setup_trtllm: false,
extra_deps: "genai-bench" to use grpc_only: "false" (i.e., edit the commented
block referencing the vllm variant / multi-worker-h200 so grpc_only is "false"
instead of "true").

---

Duplicate comments:
In @.github/workflows/nightly-benchmark.yml:
- Around line 6-8: Remove the temporary pull_request trigger for the feature
branch in .github/workflows/nightly-benchmark.yml by deleting the pull_request:
block (the branches: - pan/vllm-http-nightly-benchmark entry) so the workflow no
longer contains a dead trigger tied to that feature branch before merging to
main.
- Line 98: The inline YAML mapping for the vllm matrix entries violates
YAMLlint's braces spacing rule; update each occurrence of the mapping like { id:
vllm,   runtime: vllm,   grpc_only: "false", setup_vllm: true, setup_trtllm:
false } to use consistent single spaces after commas and no extra padding so it
reads { id: vllm, runtime: vllm, grpc_only: "false", setup_vllm: true,
setup_trtllm: false }; apply the same spacing fix to the other two identical
mappings (the ones with id: vllm elsewhere in the file).

In `@e2e_test/benchmarks/test_nightly_perf.py`:
- Line 33: The test flag _TEST_MODE is set to True and must be reverted to
False; change the constant _TEST_MODE = True back to _TEST_MODE = False in the
file (search for the symbol _TEST_MODE) so scheduled nightly runs use production
benchmark parameters and not the degraded test settings, then run the
benchmark/test suite to verify behavior and commit the change.

@paxiaatucsdedu
paxiaatucsdedu force-pushed the pan/vllm-http-nightly-benchmark branch from 2ef7f53 to 61e659d Compare February 20, 2026 02:24

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 61e659d19a

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread e2e_test/benchmarks/test_nightly_perf.py Outdated
Comment thread .github/workflows/nightly-benchmark.yml
on:
schedule:
- cron: '0 8 * * *'
pull_request:

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

instead of branch matching
just run it during pull request
then revert this later

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Sure thanks

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

The latest push still has pull_request: in the workflow. Please remove it before pushing for review — reviewers should not need to mentally track which lines are "temporary". Same applies to _TEST_MODE = True in test_nightly_perf.py.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

I'll keep pull_request: and _TEST_MODE = True while iterating on the PR so I can validate changes on each push without waiting for the nightly schedule. I'll remove both in the final commit before merge. I will squash everything into a clean commit at that point.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 570d59bd57

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread .github/workflows/nightly-benchmark.yml
@paxiaatucsdedu
paxiaatucsdedu force-pushed the pan/vllm-http-nightly-benchmark branch 2 times, most recently from 9484a01 to 3d28003 Compare February 20, 2026 04:57

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 3d2800337c

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread e2e_test/benchmarks/test_nightly_perf.py Outdated
Comment thread .github/workflows/nightly-benchmark.yml
Comment thread .github/workflows/nightly-benchmark.yml

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Duplicate comments:
In @.github/workflows/nightly-benchmark.yml:
- Line 96: Fix the YAMLlint "braces" errors by normalizing the spacing inside
the inline map braces for the vllm variant rows: replace entries like `{ id:
vllm,   runtime: vllm,   grpc_only: "false", setup_vllm: true, setup_trtllm:
false }` (and the equivalent entries on the other two vllm variant lines) with a
single-space style such as `{ id: vllm, runtime: vllm, grpc_only: "false",
setup_vllm: true, setup_trtllm: false }` so there are no extra alignment spaces
inside the braces and YAMLlint braces rule passes.
- Line 6: Remove the bare pull_request trigger from the workflow to avoid
running costly GPU jobs on every PR: delete the "pull_request:" stanza
(including any empty or branch-scoped variants like "pull_request: branches:
[...]" if present) so the workflow only runs via the existing "schedule" and
"workflow_dispatch" triggers; ensure no new PR trigger is added and keep
schedule and workflow_dispatch intact.

In `@e2e_test/benchmarks/test_nightly_perf.py`:
- Line 33: The _TEST_MODE flag is currently set to True causing nightly runs to
use degraded benchmark parameters; change the module-level variable _TEST_MODE
from True back to False in test_nightly_perf.py so scheduled nightly benchmarks
run the full production sweep (restore _TEST_MODE = False), then verify the
configured concurrency, request counts, scenarios (e.g., D(100,100)), and
timeout are back to their intended production values before merging.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: ec0e336fcc

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread e2e_test/infra/model_pool.py Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 3

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
e2e_test/infra/model_pool.py (1)

299-300: ⚠️ Potential issue | 🟡 Minor

Stale class docstring

The ModelPool class docstring says "Manages long-running SGLang worker processes" (line 300), but the pool now also manages vLLM HTTP workers.

✏️ Proposed fix
-    """Manages long-running SGLang worker processes across GPUs.
+    """Manages long-running model worker processes (SGLang, vLLM) across GPUs.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@e2e_test/infra/model_pool.py` around lines 299 - 300, The ModelPool class
docstring is stale — update the docstring for the ModelPool class to reflect
that it manages both long-running SGLang worker processes and vLLM HTTP workers;
locate the ModelPool class declaration and replace or extend the existing string
to mention vLLM HTTP workers explicitly and any relevant behavior differences so
the description accurately represents responsibilities.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@e2e_test/infra/model_pool.py`:
- Around line 536-555: The HTTP vLLM command construction duplicates logic and
hardcoded defaults from _build_grpc_cmd; extract the common construction into a
shared helper (e.g., a new static method _build_vllm_cmd or module-level helper)
that accepts differences like entrypoint module and grpc flag, or create
module-level constants for DEFAULT_MAX_MODEL_LEN and
DEFAULT_GPU_MEMORY_UTILIZATION and call a single builder from both the HTTP path
and _build_grpc_cmd; update the current inline list (the cmd definition that
uses "vllm.entrypoints.openai.api_server", model_path, DEFAULT_HOST, port,
tp_size, "--max-model-len", "16384", "--gpu-memory-utilization", "0.9", and
vllm_args) to call the new shared builder so defaults and vllm_args handling are
centralized.
- Around line 546-555: The command builder (_build_grpc_cmd) currently appends
hardcoded "--max-model-len 16384" and "--gpu-memory-utilization 0.9" then
extends with spec.get("vllm_args", []), which can create duplicate flags; change
the logic to inspect spec.get("vllm_args", []) (variable extra) first and only
append the default "--max-model-len" and "--gpu-memory-utilization" to cmd when
those keys are not present in extra (match both short/long forms and values),
keeping use of tp_size and existing cmd construction intact so duplicates are
avoided.
- Around line 534-555: The deep_health_check always calls /health_generate
causing vLLM HTTP workers to fail; add a boolean field use_health_generate: bool
= True to the ModelInstance dataclass, update deep_health_check to only call
/health_generate when self.use_health_generate is True (otherwise rely on
/health or the existing health_check logic), and when creating the ModelInstance
in the vLLM HTTP launch path inside _launch_model (the branch that builds the
vllm.entrypoints.openai.api_server cmd) set use_health_generate=False so vLLM
instances skip the nonexistent /health_generate endpoint.

---

Outside diff comments:
In `@e2e_test/infra/model_pool.py`:
- Around line 299-300: The ModelPool class docstring is stale — update the
docstring for the ModelPool class to reflect that it manages both long-running
SGLang worker processes and vLLM HTTP workers; locate the ModelPool class
declaration and replace or extend the existing string to mention vLLM HTTP
workers explicitly and any relevant behavior differences so the description
accurately represents responsibilities.

Comment thread e2e_test/infra/model_pool.py Outdated
Comment thread e2e_test/infra/model_pool.py Outdated
Comment thread e2e_test/infra/model_pool.py Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Duplicate comments:
In `@e2e_test/benchmarks/test_nightly_perf.py`:
- Line 33: The _TEST_MODE flag is currently set to True which forces degraded
benchmark parameters; change the constant _TEST_MODE to False so nightly runs
use full benchmark settings (restore normal concurrency, request counts,
scenarios, and timeouts) and prevent silent degraded results—update the
declaration of _TEST_MODE in test_nightly_perf.py accordingly.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 0d29ef0df7

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread e2e_test/infra/model_pool.py Outdated

@CatherineSue CatherineSue left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

The approach of inlining vLLM-specific command construction inside _launch_model doesn't follow the existing pattern. gRPC already handles runtime dispatch cleanly via _build_grpc_cmd / _launch_grpc_worker — HTTP should follow the same structure rather than scattering if is_vllm() branches in the shared launch path.

This also introduces several issues: deep_health_check will break (vLLM doesn't serve /health_generate), hardcoded defaults are duplicated across two locations, and SGLang-specific flags (embedding, PD disagg, worker_args) are silently skipped for vLLM HTTP without explicit intent.

Comment thread .github/workflows/nightly-benchmark.yml
Comment thread e2e_test/infra/model_pool.py Outdated
@paxiaatucsdedu

paxiaatucsdedu commented Feb 20, 2026 •

Copy link
Copy Markdown
Contributor Author

The approach of inlining vLLM-specific command construction inside _launch_model doesn't follow the existing pattern. gRPC already handles runtime dispatch cleanly via _build_grpc_cmd / _launch_grpc_worker — HTTP should follow the same structure rather than scattering if is_vllm() branches in the shared launch path.

This also introduces several issues: deep_health_check will break (vLLM doesn't serve /health_generate), hardcoded defaults are duplicated across two locations, and SGLang-specific flags (embedding, PD disagg, worker_args) are silently skipped for vLLM HTTP without explicit intent.

@CatherineSue Of course. Let me use the same structure for HTTP VLLM.

codex is right here. Why are we having the scope on pull_request?

This line is purely for testing if the code works. I will remove it before merging.

Signed-off-by: paxiaatucsdedu <paxia@ucsd.edu>
@paxiaatucsdedu
paxiaatucsdedu force-pushed the pan/vllm-http-nightly-benchmark branch from f03797a to 86486b8 Compare February 20, 2026 19:44

@CatherineSue CatherineSue left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I think the overall structure of the file is way too redundant.


# vLLM HTTP does not support /health_generate, use /health instead
if self.mode == ConnectionMode.HTTP and is_vllm():
return self._http_health_check(timeout)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Can we double check on vllm's health check endpoint? I remember they have something similar to /health_generate

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Sure. I searched /health key word in vllm code. Did not find something similar to /health_generate.

https://github.com/search?q=repo%3Avllm-project%2Fvllm+%22%2Fhealth%22&type=code&p=1

Comment thread e2e_test/infra/model_pool.py Outdated
Comment thread e2e_test/infra/model_pool.py Outdated
"--tensor-parallel-size",
str(tp_size),
"--max-model-len",
"16384",

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This override is repeatitive everywhere. Is this specific to vLLM? If it does, how does it work with different models? Do any of them have specific overrides?

Is this required by both gRPC and http mode for vLLM? If it does, why don't we introduce a new function to consolidate it insead of having it spreaded everywhere?

@paxiaatucsdedu paxiaatucsdedu Feb 20, 2026 •

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Is this specific to vLLM?

Yes.

If it does, how does it work with different models?

Models that need something different override it via vllm_args in model_specs.py.

Do any of them have specific overrides?

Yes. The specific overrides are in model_specs.py.

Is this required by both gRPC and http mode for vLLM? If it does, why don't we introduce a new function to consolidate it insead of having it spreaded everywhere?

Yes. The defaults were already hardcoded in _build_grpc_cmd on main. I will put them into a shared _VLLM_DEFAULT_ARGS constant in this PR.

Comment thread e2e_test/infra/model_pool.py Outdated

cmd = self._build_vllm_http_cmd(model_path, DEFAULT_HOST, port, tp_size, model_spec)

if instance_key:

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

You can simply use a key = instance_key or xxx for this, instead of having a 4-line if-else.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Of course. I see that _launch_grpc_worker uses the same 4-line if/else pattern in the main branch. Should I update that one as well in this PR?

Signed-off-by: paxiaatucsdedu <paxia@ucsd.edu>
@mergify

mergify Bot commented Feb 23, 2026

Copy link
Copy Markdown
Contributor

Hi @paxiaatucsdedu, this PR has merge conflicts that must be resolved before it can be merged. Please rebase your branch:

git fetch origin main
git rebase origin/main
# resolve any conflicts, then:
git push --force-with-lease

@mergify mergify Bot added the needs-rebase PR has merge conflicts that need to be resolved label Feb 23, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci CI/CD configuration changes needs-rebase PR has merge conflicts that need to be resolved run-ci label to trigger ci workflow tests Test changes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants