Skip to content

[NVIDIA] Add GPT-OSS H200 TensorRT-LLM benchmark support - #8

Closed
kedarpotdar-nv wants to merge 10 commits into
mainfrom
kepotdar-gptoss-h200-trt
Closed

[NVIDIA] Add GPT-OSS H200 TensorRT-LLM benchmark support#8
kedarpotdar-nv wants to merge 10 commits into
mainfrom
kepotdar-gptoss-h200-trt

Conversation

@kedarpotdar-nv

Copy link
Copy Markdown
Collaborator

Summary

This PR adds support for running GPT-OSS-120B benchmarks on H200 GPUs using TensorRT-LLM.

Changes Made

  1. New Benchmark Script (benchmarks/gptoss_h200_trt_slurm.sh)
  • Implemented complete SLURM benchmark script for GPT-OSS 120B model on H200
  • Configured GPT-OSS specific TRT YAML config with proper variable expansion
  • Set up TensorRT-LLM server with appropriate parameters for H200 hardware
  • Integrated benchmark serving client for performance testing
  1. Workflow Integration (.github/workflows/gptoss-tmpl.yml)
  • Added new bmk-h200-trt job for H200 TensorRT-LLM benchmarks
  • Configured with appropriate TensorRT-LLM image (nvcr.io#nvidia/tensorrt-llm/release:1.1.0rc2.post1)
  • Set up tensor parallelism options: [1, 2, 4, 8]
  • Updated results collection to include H200 TensorRT-LLM results

@kimbochen

Copy link
Copy Markdown
Collaborator

Merged with another PR

@kimbochen kimbochen closed this Sep 15, 2025
@kimbochen
kimbochen deleted the kepotdar-gptoss-h200-trt branch September 15, 2025 22:30
jthomson04 pushed a commit to jthomson04/InferenceMAX that referenced this pull request Jan 21, 2026
@cquil11 cquil11 added the NVIDIA label Apr 8, 2026
@cquil11 cquil11 changed the title Add GPT-OSS H200 TensorRT-LLM benchmark support [NVIDIA] Add GPT-OSS H200 TensorRT-LLM benchmark support Apr 8, 2026
Oseltamivir added a commit that referenced this pull request Jun 23, 2026
Add summarize.py (compact NCCL/DeepEP results table, printed at end of every job) and make it the result gate. Fix review findings: benchmark failures/skipped-deepep now fail the job instead of reporting green (#1); DeepEP nodes from SLURM_NNODES not world_size//8 (#3); apply Buffer.set_num_sms so num_comm_sms is real (#8); nccl-tests -c 1 with a missing check footer is now invalid (#7); use context managers for file reads (#4,#5); launchers export COLLECTIVEX_IMAGE/_DIGEST for provenance (#9); trim workflow_dispatch sku options to launcher-backed pools (#2). Artifact-path finding (#6) already fixed via cx_collect_results.
Oseltamivir added a commit that referenced this pull request Aug 7, 2026
…ing more than it proved

From an external review of the PR (queries.md items #2 and #8). The review was right, and this is
the most substantive thing it found.

benchmark_chain discarded every combine result, so the 'chained regime' gate was a FRESH dispatch
and combine run after the chain finished. That proves the communicator still works afterwards; it
does not prove the chain's own outputs were correct. The distinction is not academic here -- this
project has already met invocation-dependent corruption that a later clean call would have hidden
(the Blackwell low-latency top-rung defect, DeepEP #700), which is exactly the failure the old
field's name implied it caught.

benchmark_chain now returns the period chain's final combined output, cloned after the closing
synchronize. The only change inside the timed loop is binding an existing call's return value, so
the measurement is untouched. Pass 2b compares that output against a freshly drained run_roundtrip
over the same problem, outside every timed region. Comparison is tolerance-based, not bit-equality:
combine kernels are not order-deterministic, and no analytic model exists for the plain combine.

Both verdicts are now separate fields, ANDed into passed:
  correctness.chain_last_output_passed  -- the chain's own output was right
  correctness.post_chain_state_passed   -- a fresh operation still passes afterwards
The second is the old chain_regime_passed under an honest name.

Stated plainly in code and docs: this validates the LAST pair, not all 128. Validating interior
pairs means device work or ~15 GB of retained output inside the timed loop, which would corrupt
the measurement the chain exists to produce. A corruption in pair 37 that later pairs overwrite is
still invisible, and the docs now say so instead of implying otherwise.

Item #8: both 'impossible' states are genuinely dead for new artifacts -- the budget gate rejects
non-positive chain counts, and removing chain_barrier killed the only other producer of a null
oracle. The single-kept-pair branch was reachable only by hand-setting chain_drop = chain_iters-1,
never by the scheduler. The gate now requires two kept pairs, Pass 3 asserts the oracle ran, and
the unavailable-health branch is gone.

Consumer note: this RENAMES an artifact field. Verified no consumer reads it -- summarize.py keys
on pair_period, and the frontend reader consumes outcome reasons rather than correctness
subfields. Artifacts already in the durable store keep chain_regime_passed under the old name.
160 tests green.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants