Skip to content

refactor: Share GuideLLM dashboard postprocessing - #162

Open
albertoperdomo2 wants to merge 14 commits into
openshift-psap:mainfrom
albertoperdomo2:feat/align-csv-export
Open

refactor: Share GuideLLM dashboard postprocessing#162
albertoperdomo2 wants to merge 14 commits into
openshift-psap:mainfrom
albertoperdomo2:feat/align-csv-export

Conversation

@albertoperdomo2

@albertoperdomo2 albertoperdomo2 commented Aug 5, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • Centralize GuideLLM dashboard KPI extraction and CSV export logic.
  • Add llm-d dashboard CSV post-processing with deployment metadata.
  • Reuse canonical router configuration and product-version handling.
  • Prevent dashboard metrics from being silently omitted from CSV exports.
  • Simplify the RHAIIS post-processing implementation.

Testing

  • Ruff and formatter checks pass.
  • llm-d profile/post-processing and Caliper KPI tests pass.

Summary by CodeRabbit

  • New Features
    • Added llm-d dashboard post-processing with KPI generation, deployment metadata, runtime details, accelerator information, and dashboard-compatible CSV export.
    • Added product version and GPU type labels to relevant benchmark configurations.
    • Added broader artifact parsing, including JSON results and deployment configuration details.
    • Standardized dashboard KPI processing across llm-d and RHAIIS workflows.
  • Bug Fixes
    • Hierarchical KPI labels now merge correctly across all records, including labels introduced later.
    • Benchmark concurrency rates now run from lowest to highest.
  • Tests
    • Added coverage for CSV export, metadata recovery, accelerator detection, and profile labels.

@openshift-ci

openshift-ci Bot commented Aug 5, 2026

Copy link
Copy Markdown

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by:
Once this PR has been reviewed and has the lgtm label, please assign kpouget for approval. For more information see the Code Review Process.

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@coderabbitai

coderabbitai Bot commented Aug 5, 2026

Copy link
Copy Markdown

Review Change Stack

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

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: f987dac5-69b9-44ee-a86b-cfb1f442a6d8

📥 Commits

Reviewing files that changed from the base of the PR and between aba278b and 565eac4.

📒 Files selected for processing (2)
  • projects/guidellm/postprocess/guidellm/dashboard.py
  • projects/guidellm/postprocess/guidellm/parsing/parsers.py
🚧 Files skipped from review as they are similar to previous changes (2)
  • projects/guidellm/postprocess/guidellm/dashboard.py
  • projects/guidellm/postprocess/guidellm/parsing/parsers.py

📝 Walkthrough

Walkthrough

GuideLLM dashboard helpers now parse artifacts, enrich metrics, generate KPIs, and export CSV data. The llm-d plugin uses these helpers and recovers deployment metadata. RHAIIS delegates to the shared implementation. KPI labels and orchestration settings were updated.

Changes

Dashboard KPI integration

Layer / File(s) Summary
Dashboard parsing and metadata enrichment
projects/guidellm/postprocess/guidellm/dashboard.py, projects/guidellm/postprocess/guidellm/parsing/parsers.py
Shared helpers extract benchmark metrics, curves, deployment metadata, and runtime fields from GuideLLM and LLMInferenceService artifacts.
Dashboard KPI generation and export
projects/guidellm/postprocess/guidellm/dashboard.py, projects/caliper/engine/kpi/format.py, projects/caliper/tests/test_kpi_format.py
The shared implementation generates per-rate KPIs, builds catalogs, exports dashboard CSV rows, and merges labels across KPI records.
RHAIIS shared dashboard migration
projects/rhaiis/postprocess/kpis.py, projects/rhaiis/postprocess/parser.py, projects/rhaiis/postprocess/plugin.py
RHAIIS delegates parsing enrichment, KPI computation, and CSV export to the shared dashboard helpers.
llm-d plugin and dashboard metadata
projects/llm_d/postprocess/llm_d/plugin.py, projects/llm_d/tests/test_postprocess_csv.py
The new llm-d plugin combines KPIs, recovers deployment metadata, exports dashboard-compatible CSV data, and validates metadata extraction from configuration and pod artifacts.
llm-d orchestration labels and wiring
projects/llm_d/orchestration/..., projects/llm_d/postprocess/.../__init__.py, projects/llm_d/tests/test_profiles.py
Orchestration selects the new plugin, writes dashboard.csv, adds deployment labels, orders benchmark rates, and verifies release preset values.

Estimated code review effort: 4 (Complex) | ~60 minutes

Sequence Diagram(s)

sequenceDiagram
  participant GuideLLMParser
  participant LlmDGuideLLMPlugin
  participant dashboard_helpers
  participant dashboard_csv
  GuideLLMParser->>LlmDGuideLLMPlugin: parse benchmark and deployment artifacts
  LlmDGuideLLMPlugin->>dashboard_helpers: enrich records and compute KPIs
  dashboard_helpers-->>LlmDGuideLLMPlugin: return dashboard KPI records
  LlmDGuideLLMPlugin->>dashboard_csv: export dashboard-compatible rows
  dashboard_csv-->>LlmDGuideLLMPlugin: write dashboard.csv
Loading

Possibly related PRs

Suggested labels: lgtm

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 40.91% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly describes the primary change: centralizing and sharing GuideLLM dashboard postprocessing logic.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches 💡 1
🛠️ Fix failing CI checks 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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.

@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: 8

🧹 Nitpick comments (5)
projects/guidellm/postprocess/guidellm/parsing/parsers.py (3)

132-140: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Update the docstring for the new return fields.

Line 139 states that the function returns product_version, deployment_profile, and model_name. The function now also returns replicas, tensor_parallel_size, router_config, image_tag, and runtime_args. Line 133 and line 136 also state "YAML" only, although the function now accepts a .json artifact.

♻️ Proposed update
         """
-        Extract multiple fields from LLMInferenceService YAML file.
+        Extract multiple fields from an LLMInferenceService YAML or JSON file.
 
         Args:
-            file_path: Path to llminferenceservice.yaml file
+            file_path: Path to the llminferenceservice.yaml, .yml, or .json file
 
         Returns:
-            Dictionary with extracted fields (product_version, deployment_profile, model_name)
+            Dictionary with extracted fields: product_version, deployment_profile,
+            model_name, replicas, tensor_parallel_size, router_config, image_tag,
+            and runtime_args. Absent fields are omitted.
         """
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@projects/guidellm/postprocess/guidellm/parsing/parsers.py` around lines 132 -
140, Update the docstring for the relevant YAML/JSON parsing function to
describe both YAML and JSON artifact inputs, and expand the Returns section to
include replicas, tensor_parallel_size, router_config, image_tag, and
runtime_args alongside the existing fields.

580-583: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Add a deterministic tiebreaker to the sort.

The sort places capture-state paths first, which matches the first-file-wins merge at lines 618-622. Python's sort is stable, so files inside each group keep the order of node.artifact_paths. If that list comes from a directory scan, the order can vary between runs, and the extracted metadata can then vary too.

Add the path as a secondary key.

♻️ Proposed change
-            llmisvc_files.sort(key=lambda path: "__capture_llmisvc_state" not in str(path))
+            llmisvc_files.sort(
+                key=lambda path: ("__capture_llmisvc_state" not in str(path), str(path))
+            )
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@projects/guidellm/postprocess/guidellm/parsing/parsers.py` around lines 580 -
583, Update the llmisvc_files sorting in the parser to retain capture-state
paths first while using each path itself as a deterministic secondary sort key.
Ensure the resulting order no longer depends on the original node.artifact_paths
traversal order before the first-file-wins merge.

118-124: 🗄️ Data Integrity & Integration | 🔵 Trivial | ⚡ Quick win

Parse llminferenceservice.json with json.load, not yaml.safe_load.

llminferenceservice.json is produced by oc get llminferenceservice -ojson, and a Kubernetes JSON output can use literal strings such as yes/no in annotation values. YAML 1.1 interprets those literals as booleans, so the .json artifact can change the extracted product_version/deployment_profile; update extract_fields_from_llmisvc to choose json.load for llminferenceservice.json and keep yaml.safe_load for YAML artifacts.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@projects/guidellm/postprocess/guidellm/parsing/parsers.py` around lines 118 -
124, Update extract_fields_from_llmisvc to branch on the artifact name before
loading content: use json.load for llminferenceservice.json and keep
yaml.safe_load for llminferenceservice.yaml and llminferenceservice.yml. Anchor
the change in the existing _is_llmisvc_artifact helper and the parsing logic in
extract_fields_from_llmisvc so the JSON path preserves literal annotation values
and does not run through the YAML parser.
projects/guidellm/postprocess/guidellm/dashboard.py (1)

71-75: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Document the request_latency_ exclusion.

SECONDS_TO_MS_COLUMNS selects every metric with unit "s" except the request_latency_* columns. The reason is not stated. A reader can interpret the exclusion as an oversight, because those metrics carry the same "s" unit. Add a short comment that states the dashboard expects request_latency_* in seconds.

♻️ Proposed comment
+# Dashboard latency columns are milliseconds, except request_latency_*, which
+# the dashboard expects in seconds.
 SECONDS_TO_MS_COLUMNS = frozenset(
     column
     for _, _, column, unit, _ in DASHBOARD_METRICS
     if unit == "s" and not column.startswith("request_latency_")
 )
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@projects/guidellm/postprocess/guidellm/dashboard.py` around lines 71 - 75,
Add a short explanatory comment immediately above SECONDS_TO_MS_COLUMNS stating
that the dashboard expects request_latency_* metrics to remain in seconds,
documenting why they are excluded despite having unit "s".
projects/caliper/tests/test_kpi_format.py (1)

6-28: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Add a case for a varying label.

The test locks the merge half of the contract. It does not lock the other half: a label with more than one distinct value in the same run must stay per-KPI and must not reach output["tests"][0]["labels"]. The update call at projects/caliper/engine/kpi/format.py line 69 relies on the first pass to exclude those keys. A regression in the first pass would leak a varying label to test level, and this test would still pass.

💚 Proposed additional test
def test_hierarchical_format_keeps_varying_labels_per_kpi():
    kpis = [
        {
            "run_id": "run-1",
            "kpi_id": "dashboard_ttft_median",
            "value": 1,
            "labels": {"model": "llama", "rate_index": "0"},
        },
        {
            "run_id": "run-1",
            "kpi_id": "dashboard_ttft_median",
            "value": 2,
            "labels": {"model": "llama", "rate_index": "1"},
        },
    ]
    model = type("Model", (), {"plugin_module": "missing.plugin"})()

    output = transform_kpis_to_hierarchical_format(kpis, model)

    test = output["tests"][0]
    assert test["labels"] == {"model": "llama"}
    assert [kpi["labels"]["rate_index"] for kpi in test["kpis"]] == ["0", "1"]
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@projects/caliper/tests/test_kpi_format.py` around lines 6 - 28, Extend the
hierarchical KPI formatting tests with a varying-label case in
test_hierarchical_format_keeps_varying_labels_per_kpi: use KPIs from the same
run where rate_index has different values, assert output["tests"][0]["labels"]
contains only the common model label, and verify each KPI retains its own
rate_index label.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@projects/guidellm/postprocess/guidellm/dashboard.py`:
- Around line 200-207: Harden _extract_dashboard_metrics against malformed
benchmark artifacts: at
projects/guidellm/postprocess/guidellm/dashboard.py#L200-L207, skip decoded
payloads that are not dictionaries; at `#L211-L218`, normalize an explicit null
mean to 0 before float conversion; and at `#L247-L253`, catch invalid
prompt_tokens/output_tokens coercion and skip or safely handle that record.
Preserve processing of valid files and metrics.
- Around line 211-218: The benchmark sorting logic in dashboard.py’s
benchmarks.sort key currently calls float() on the nested mean value, which
breaks when a benchmark reports null instead of a number. Update the sort key
path to coerce the extracted mean through a helper or inline fallback that
treats None as 0 before converting to float, while preserving the existing
nested metrics lookup and sort behavior for valid numeric means.
- Around line 254-256: Update _extract_dashboard_metrics to derive and store the
request-rate axis while iterating through benchmarks, alongside curves and
run_uuids. Change compute_dashboard_kpis to use this stored axis instead of
indexing request_rate from GuideLLMParser._create_aggregated_metrics, ensuring
skipped parser benchmarks cannot misalign KPI rate points.
- Around line 418-430: Update the group ordering in the rows-building loop
around groups and sorted(groups) so the second key element, rate_index, is
compared numerically rather than lexicographically. Preserve run_path as the
primary sort key and keep the existing row generation behavior unchanged.

In `@projects/guidellm/postprocess/guidellm/parsing/parsers.py`:
- Around line 173-179: Update the consumer condition around the
result-processing logic at line 621 to check whether field_value is not None
instead of using truthiness, preserving zero-valued replicas and
tensor_parallel_size entries extracted by the parser.
- Around line 151-155: Update the logging in the product-version extraction
block to report the normalized value assigned to result["product_version"],
rather than the raw product_version returned by
parse_product_version_from_annotation. Keep the existing extraction and storage
behavior unchanged.
- Around line 185-196: Update the serving-container extraction in the parser to
select the container with the intended serving name, falling back to index 0
when no name matches, before deriving image_tag and runtime_args. In the env
iteration, only access name and value fields for entries that are mappings,
while preserving the existing VLLM_ADDITIONAL_ARGS behavior.

In `@projects/llm_d/postprocess/plugin.py`:
- Around line 203-205: Restrict exported profile metadata to an explicit
non-sensitive allowlist in extract_kpi_labels_from_config() and
LlmDGuideLLMPlugin; remove runtime_args, env, and arbitrary
vllm_extra.args-derived values before writing KPI labels or CSV metadata. Update
projects/llm_d/postprocess/plugin.py at lines 203-205 and
projects/llm_d/orchestration/test_phase.py at lines 173-174, ensuring only
approved router_config or runtime metadata is emitted.

---

Nitpick comments:
In `@projects/caliper/tests/test_kpi_format.py`:
- Around line 6-28: Extend the hierarchical KPI formatting tests with a
varying-label case in test_hierarchical_format_keeps_varying_labels_per_kpi: use
KPIs from the same run where rate_index has different values, assert
output["tests"][0]["labels"] contains only the common model label, and verify
each KPI retains its own rate_index label.

In `@projects/guidellm/postprocess/guidellm/dashboard.py`:
- Around line 71-75: Add a short explanatory comment immediately above
SECONDS_TO_MS_COLUMNS stating that the dashboard expects request_latency_*
metrics to remain in seconds, documenting why they are excluded despite having
unit "s".

In `@projects/guidellm/postprocess/guidellm/parsing/parsers.py`:
- Around line 132-140: Update the docstring for the relevant YAML/JSON parsing
function to describe both YAML and JSON artifact inputs, and expand the Returns
section to include replicas, tensor_parallel_size, router_config, image_tag, and
runtime_args alongside the existing fields.
- Around line 580-583: Update the llmisvc_files sorting in the parser to retain
capture-state paths first while using each path itself as a deterministic
secondary sort key. Ensure the resulting order no longer depends on the original
node.artifact_paths traversal order before the first-file-wins merge.
- Around line 118-124: Update extract_fields_from_llmisvc to branch on the
artifact name before loading content: use json.load for llminferenceservice.json
and keep yaml.safe_load for llminferenceservice.yaml and
llminferenceservice.yml. Anchor the change in the existing _is_llmisvc_artifact
helper and the parsing logic in extract_fields_from_llmisvc so the JSON path
preserves literal annotation values and does not run through the YAML parser.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 953b5427-265b-423c-9d03-42f096168425

📥 Commits

Reviewing files that changed from the base of the PR and between 93bb296 and 203fffc.

📒 Files selected for processing (17)
  • projects/caliper/engine/kpi/format.py
  • projects/caliper/tests/test_kpi_format.py
  • projects/guidellm/postprocess/guidellm/dashboard.py
  • projects/guidellm/postprocess/guidellm/parsing/parsers.py
  • projects/llm_d/orchestration/config.d/cpt.yaml
  • projects/llm_d/orchestration/config.yaml
  • projects/llm_d/orchestration/presets.d/cks.yaml
  • projects/llm_d/orchestration/presets.d/cpt.yaml
  • projects/llm_d/orchestration/presets.d/rhoai-rc.yaml
  • projects/llm_d/orchestration/test_phase.py
  • projects/llm_d/postprocess/__init__.py
  • projects/llm_d/postprocess/plugin.py
  • projects/llm_d/tests/test_postprocess_csv.py
  • projects/llm_d/tests/test_profiles.py
  • projects/rhaiis/postprocess/kpis.py
  • projects/rhaiis/postprocess/parser.py
  • projects/rhaiis/postprocess/plugin.py

Comment thread projects/guidellm/postprocess/guidellm/dashboard.py
Comment thread projects/guidellm/postprocess/guidellm/dashboard.py
Comment thread projects/guidellm/postprocess/guidellm/dashboard.py
Comment thread projects/guidellm/postprocess/guidellm/dashboard.py Outdated
Comment thread projects/guidellm/postprocess/guidellm/parsing/parsers.py Outdated
Comment thread projects/guidellm/postprocess/guidellm/parsing/parsers.py
Comment thread projects/guidellm/postprocess/guidellm/parsing/parsers.py
Comment thread projects/llm_d/postprocess/llm_d/plugin.py
Comment thread projects/guidellm/postprocess/guidellm/parsing/parsers.py Outdated
Comment thread projects/llm_d/postprocess/plugin.py Outdated
Comment thread projects/llm_d/postprocess/llm_d/plugin.py
@openshift-ci openshift-ci Bot added the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label Aug 8, 2026
@openshift-ci openshift-ci Bot removed the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label Aug 10, 2026
Signed-off-by: Alberto Perdomo <aperdomo@redhat.com>
Signed-off-by: Alberto Perdomo <aperdomo@redhat.com>
@psap-forge-bot

Copy link
Copy Markdown

🔴 Execution of llm_d gpt-oss heavy-heterogeneous (PR#162) 🔴

Execution Engine Configuration

forge:
  args:
  - gpt-oss
  - heavy-heterogeneous
  - deployment-distributed-default
  - deployment-approximate-prefix-cache
  - deployment-precise-prefix-cache
  configOverrides:
    model_cache.pvc.access_mode: ReadWriteMany
    model_cache.pvc.storage_class_name: nfs-rwx
    platform.cluster.skip_gpu_readiness: true
    platform.operators.rhods-operator.channel: stable-3.5
    platform.rhoai.custom_catalog.enabled: true
    platform.rhoai.custom_catalog.image: quay.io/rhoai/rhoai-fbc-fragment@sha256:29c909eb7d499b4d1dfb11086c5cd554a257c0477d013f4837f08aa9e4385164
  project: llm_d

Artifact Links

Test Logs

00 Preflight 2 seconds

01 Test 57 minutes, 1 second

Test Description

This test evaluates the llm_d project using the gpt-oss-120b model under heavy, heterogeneous concurrent workloads. It specifically benchmarks text completion performance across three deployment profile variations—distributed-default, approximate-prefix-cache, and precise-prefix-cache—to assess how different caching and routing configurations handle varying request rates and prompt lengths.

🔄 02 Export-Artifacts

Post-processing Status

Signed-off-by: Alberto Perdomo <aperdomo@redhat.com>
Signed-off-by: Alberto Perdomo <aperdomo@redhat.com>
Signed-off-by: Alberto Perdomo <aperdomo@redhat.com>
Signed-off-by: Alberto Perdomo <aperdomo@redhat.com>
@psap-forge-bot

Copy link
Copy Markdown

🔴 Execution of llm_d gpt-oss heavy-heterogeneous (PR#162) 🔴

Execution Engine Configuration

forge:
  args:
  - gpt-oss
  - heavy-heterogeneous
  - deployment-distributed-default
  - deployment-approximate-prefix-cache
  - deployment-precise-prefix-cache
  configOverrides:
    model_cache.pvc.access_mode: ReadWriteMany
    model_cache.pvc.storage_class_name: nfs-rwx
    platform.cluster.skip_gpu_readiness: true
    platform.operators.rhods-operator.channel: stable-3.5
    platform.rhoai.custom_catalog.enabled: true
    platform.rhoai.custom_catalog.image: quay.io/rhoai/rhoai-fbc-fragment@sha256:29c909eb7d499b4d1dfb11086c5cd554a257c0477d013f4837f08aa9e4385164
  project: llm_d

Artifact Links

Test Logs

00 Preflight 2 seconds

01 Test 1 hour, 10 minutes, 45 seconds

Test Description

This llm_d project test evaluates the gpt-oss-120b model under the heavy-heterogeneous concurrent benchmark, specifically comparing three deployment profile variations (distributed-default, approximate-prefix-cache, and precise-prefix-cache) to assess their performance handling variable-length prompt and output workloads.

🔄 02 Export-Artifacts

Post-processing Status

@psap-forge-bot

Copy link
Copy Markdown

🔴 Execution of llm_d gpt-oss heavy-heterogeneous (PR#162) 🔴

Execution Engine Configuration

forge:
  args:
  - gpt-oss
  - heavy-heterogeneous
  - deployment-distributed-default
  - deployment-approximate-prefix-cache
  - deployment-precise-prefix-cache
  configOverrides:
    model_cache.pvc.access_mode: ReadWriteMany
    model_cache.pvc.storage_class_name: nfs-rwx
    platform.cluster.skip_gpu_readiness: true
    platform.operators.rhods-operator.channel: stable-3.5
    platform.rhoai.custom_catalog.enabled: true
    platform.rhoai.custom_catalog.image: quay.io/rhoai/rhoai-fbc-fragment@sha256:29c909eb7d499b4d1dfb11086c5cd554a257c0477d013f4837f08aa9e4385164
  project: llm_d

Artifact Links

Test Logs

00 Preflight 2 seconds

01 Test 12 minutes, 53 seconds

Test Description

This test evaluates the llm_d project by benchmarking the gpt-oss-120b model under a heavy-heterogeneous concurrent workload, specifically comparing three deployment profile variations: distributed-default, approximate-prefix-cache, and precise-prefix-cache. It measures how these distinct vLLM prefix caching and scheduling configurations impact throughput and latency.

🔄 02 Export-Artifacts

Post-processing Status

@psap-forge-bot

Copy link
Copy Markdown

🔴 Execution of llm_d gpt-oss heavy-heterogeneous (PR#162) 🔴

Execution Engine Configuration

forge:
  args:
  - gpt-oss
  - heavy-heterogeneous
  - deployment-distributed-default
  - deployment-approximate-prefix-cache
  - deployment-precise-prefix-cache
  configOverrides:
    deployments.defaults.replicas: 4
    deployments.defaults.tensor_parallelism: 2
    model_cache.pvc.access_mode: ReadWriteMany
    model_cache.pvc.storage_class_name: nfs-rwx
    platform.cluster.skip_gpu_readiness: true
    platform.operators.rhods-operator.channel: stable-3.5
    platform.rhoai.custom_catalog.enabled: true
    platform.rhoai.custom_catalog.image: quay.io/rhoai/rhoai-fbc-fragment@sha256:29c909eb7d499b4d1dfb11086c5cd554a257c0477d013f4837f08aa9e4385164
    workloads.benchmarks.heavy-heterogeneous.timeout_seconds: 7200
  project: llm_d

Artifact Links

Test Logs

00 Preflight 3 seconds

01 Test 2 hours, 6 minutes, 35 seconds

Test Description

This test benchmarks the gpt-oss-120b model using the llm_d project under heavy-heterogeneous workloads, evaluating performance across distributed-default, approximate-prefix-cache, and precise-prefix-cache deployment profiles.

🔄 02 Export-Artifacts

Post-processing Status

Signed-off-by: Alberto Perdomo <aperdomo@redhat.com>
@psap-forge-bot

Copy link
Copy Markdown

🟢 Execution of llm_d gpt-oss heavy-heterogeneous (PR#162) 🟢

Execution Engine Configuration

forge:
  args:
  - gpt-oss
  - heavy-heterogeneous
  - deployment-distributed-default
  - deployment-approximate-prefix-cache
  - deployment-precise-prefix-cache
  configOverrides:
    deployments.defaults.replicas: 4
    deployments.defaults.tensor_parallelism: 2
    model_cache.pvc.access_mode: ReadWriteMany
    model_cache.pvc.storage_class_name: nfs-rwx
    platform.cluster.skip_gpu_readiness: true
    platform.operators.rhods-operator.channel: stable-3.5
    platform.rhoai.custom_catalog.enabled: true
    platform.rhoai.custom_catalog.image: quay.io/rhoai/rhoai-fbc-fragment@sha256:29c909eb7d499b4d1dfb11086c5cd554a257c0477d013f4837f08aa9e4385164
    workloads.benchmarks.heavy-heterogeneous.timeout_seconds: 7200
    workloads.pvc_storage_class: nfs-rwx
  project: llm_d

Artifact Links

Test Logs

00 Preflight 3 seconds

01 Test 1 hour, 2 minutes, 19 seconds

Test Description

This test benchmarks the llm_d project using the GPT-OSS 120B model under a heavy-heterogeneous workload to evaluate three deployment profiles: distributed-default, approximate-prefix-cache, and precise-prefix-cache. It measures text completion performance and throughput across varying concurrency rates, comparing the impact of different prefix caching strategies and scheduler configurations on model serving.

🔄 02 Export-Artifacts

Post-processing Status

@psap-forge-bot

Copy link
Copy Markdown

🟢 Execution of llm_d gpt-oss heavy-heterogeneous (PR#162) 🟢

Execution Engine Configuration

forge:
  args:
  - gpt-oss
  - heavy-heterogeneous
  configOverrides:
    deployments.defaults.replicas: 4
    deployments.defaults.tensor_parallelism: 2
    model_cache.pvc.access_mode: ReadWriteMany
    model_cache.pvc.storage_class_name: nfs-rwx
    platform.cluster.skip_gpu_readiness: true
    platform.operators.rhods-operator.channel: stable-3.5
    platform.rhoai.custom_catalog.enabled: true
    platform.rhoai.custom_catalog.image: quay.io/rhoai/rhoai-fbc-fragment@sha256:29c909eb7d499b4d1dfb11086c5cd554a257c0477d013f4837f08aa9e4385164
    runtime.deployment_profile:
    - distributed-default
    - approximate-prefix-cache
    - precise-prefix-cache
    workloads.benchmarks.heavy-heterogeneous.timeout_seconds: 7200
    workloads.pvc_storage_class: nfs-rwx
  project: llm_d

Artifact Links

Test Logs

00 Preflight 3 seconds

01 Test 2 hours, 56 minutes, 29 seconds

Test Description

This test evaluates the llm_d project using the gpt-oss-120b model under a heavy-heterogeneous benchmark characterized by highly variable prompt and output token lengths with concurrent rates up to 300. It compares performance across three deployment profiles (distributed-default, approximate-prefix-cache, and precise-prefix-cache) to analyze the impact of different prefix caching strategies.

🔄 02 Export-Artifacts

Post-processing Status

@Harshith-umesh

Copy link
Copy Markdown
Member

/test fournos rhaiis nvidia benchmark hera ci-quick
/pipeline forge-full
/exclusive false
/cluster hera

@Harshith-umesh

Copy link
Copy Markdown
Member

@albertoperdomo2 since I'm not a collaborator on this PR, only you can run the above command.

@albertoperdomo2

Copy link
Copy Markdown
Collaborator Author

/test fournos rhaiis nvidia benchmark hera ci-quick
/pipeline forge-full
/exclusive false
/cluster hera

@psap-forge-bot

Copy link
Copy Markdown

🟢 Execution of rhaiis nvidia benchmark hera ci-quick 🟢

Execution Engine Configuration

forge:
  args:
  - nvidia
  - benchmark
  - hera
  - ci-quick
  configOverrides: {}
  project: rhaiis

Artifact Links

Test Logs

00 Pre-Cleanup 1 second

01 Prepare 2 seconds

02 Preflight 1 second

03 Test 5 minutes, 47 seconds

04 Post-Cleanup 4 seconds

🔄 05 Export-Artifacts

Post-processing Status

  • parse: success
  • artifacts_to_kpis: success
  • kpis_to_mlflow: success
  • kpis_to_csv: success
  • ⏭️ artifacts_to_ai_data: disabled

    kpi.artifacts_to_ai_data disabled

  • ⏭️ s3_import: disabled

    s3_import disabled

  • ⏭️ analyse_kpis: disabled

    analyze disabled

  • ⏭️ s3_export: disabled

    s3_export disabled

@psap-forge-bot

Copy link
Copy Markdown

@albertoperdomo2

Copy link
Copy Markdown
Collaborator Author

@Harshith-umesh PTAL 🙏🏽

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.

3 participants