Skip to content

docs: Benchmarking guide interpreting results - #701

Merged
kthui merged 9 commits into
mainfrom
jacky-benchmarking-guide-result
Jun 12, 2025
Merged

docs: Benchmarking guide interpreting results#701
kthui merged 9 commits into
mainfrom
jacky-benchmarking-guide-result

Conversation

@kthui

@kthui kthui commented Apr 16, 2025

Copy link
Copy Markdown
Contributor

Overview:

Add interpreting result section for users to plot the pareto graph and what it means.

Details:

#509 (comment)

Where should the reviewer start?

N/A

Related Issues: (use one of the action keywords Closes / Fixes / Resolves / Relates to)

N/A

Summary by CodeRabbit

  • New Features
    • Introduced a script to visualize benchmark results with Pareto efficiency plots, enabling comparison of performance trade-offs.
  • Documentation
    • Enhanced the README with detailed benchmarking instructions, example commands, and guidance on interpreting results, including how to plot and analyze performance data.
  • Chores
    • Improved benchmarking script with flexible configuration options, artifact management, and deployment configuration recording for more robust and reproducible benchmarking.

@copy-pr-bot

copy-pr-bot Bot commented Apr 16, 2025

Copy link
Copy Markdown

This pull request requires additional validation before any workflows can run on NVIDIA's runners.

Pull request vetters can view their responsibilities here.

Contributors can view more details about this message here.

@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.

Actionable comments posted: 3

🔭 Outside diff range comments (1)
benchmarks/llm/perf.sh (1)

1-1: ⚠️ Potential issue

Broken she-bang – script may not be executed with Bash

#/bin/bash is missing the exclamation mark.
Use a portable she-bang (#!/usr/bin/env bash) to guarantee the script is run with Bash instead of /bin/sh.

-#/bin/bash
+#!/usr/bin/env bash
🧰 Tools
🪛 Shellcheck (0.10.0)

[error] 1-1: Use #!, not just #, for the shebang.

(SC1113)

♻️ Duplicate comments (2)
examples/llm/benchmarks/README.md (1)

166-175: Same crash / grammar issues duplicated

Replicate fixes from single-node section (--artifacts-root-dir, plural “options”, missing comma).

🧰 Tools
🪛 LanguageTool

[uncategorized] ~173-~173: You might be missing the article “the” here.
Context: ... careful in specifying these options in perf.sh script. They should closely ref...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)


[grammar] ~173-~173: Did you mean “this option” or “these options”?
Context: ...ee perf.sh --help to learn more about these option. In the above command, we described tha...

(IN_THESE_NN)


[uncategorized] ~175-~175: Possible missing comma found.
Context: ...and 1 decode worker with TP=8 For more information see [Collecting Performance Numbers](#c...

(AI_HYDRA_LEO_MISSING_COMMA)

examples/llm/benchmarks/plot_pareto.py (1)

60-75: ⚠️ Potential issue

parse_gpus breaks on missing/ string values & contains dead else

Multiplying None or string JSON values raises TypeError; the unconditional else masks unknown modes.

-    if deployment_config.get("mode") == "aggregated":
-        return deployment_config.get("tensor_parallelism") * deployment_config.get(
-            "data_parallelism"
-        )
-    else:
-        return deployment_config.get(
-            "prefill_tensor_parallelism"
-        ) * deployment_config.get("prefill_data_parallelism") + deployment_config.get(
-            "decode_tensor_parallelism"
-        ) * deployment_config.get(
-            "decode_data_parallelism"
-        )
+    mode = deployment_config.get("mode")
+    try {
+        if mode == "aggregated":
+            return int(deployment_config["tensor_parallelism"]) * int(deployment_config["data_parallelism"])
+        elif mode == "disaggregated":
+            return (
+                int(deployment_config["prefill_tensor_parallelism"]) * int(deployment_config["prefill_data_parallelism"])
+                + int(deployment_config["decode_tensor_parallelism"]) * int(deployment_config["decode_data_parallelism"])
+            )
+    } except (KeyError, ValueError, TypeError):
+        print(f"Warning: cannot parse GPU count from {deployment_config_json_path}")
+    return 0
🧰 Tools
🪛 Pylint (3.3.7)

[refactor] 63-74: Unnecessary "else" after "return", remove the "else" and de-indent the code inside it

(R1705)

🧹 Nitpick comments (6)
benchmarks/llm/perf.sh (1)

131-144: Duplicate mkdirartifact_dir already created

Lines 142-144 recreate the directory that was just proven not to exist.
The second mkdir -p (line 213) is redundant.

-# Create the new artifacts directory
-artifact_dir="${artifacts_root_dir}/artifacts_${index}"
-mkdir -p "${artifact_dir}"
+artifact_dir="${artifacts_root_dir}/artifacts_${index}"
examples/llm/benchmarks/README.md (2)

108-109: Grammar: “these option” → “these options”

Minor doc polish.

-... learn more about these option.
+... learn more about these options.
🧰 Tools
🪛 LanguageTool

[uncategorized] ~108-~108: You might be missing the article “the” here.
Context: ... careful in specifying these options in perf.sh script. They should closely ref...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)


[grammar] ~108-~108: Did you mean “this option” or “these options”?
Context: ...ee perf.sh --help to learn more about these option. In the above command, we described tha...

(IN_THESE_NN)


261-265: Spelling: “Iterpreting” → “Interpreting”

Header typo.

-## Iterpreting Results
+## Interpreting Results
examples/llm/benchmarks/plot_pareto.py (3)

159-176: pareto_efficient mutates outer df inside per-group loop

When multiple groups are processed later, earlier flags can be overwritten.
Safest fix – mark rows via df.loc[group.index] after computing efficient indices.


218-229: Hard-coded tick intervals make small/large datasets unreadable

Expose --x-interval / --y-interval CLI options or compute automatically using MaxNLocator.


243-255: CLI should accept multiple --artifacts dirs instead of a root

Matches earlier doc discussion; simplifies usage and removes globbing assumptions.

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 417e355 and fe19277.

📒 Files selected for processing (3)
  • benchmarks/llm/perf.sh (3 hunks)
  • examples/llm/benchmarks/README.md (4 hunks)
  • examples/llm/benchmarks/plot_pareto.py (1 hunks)
🧰 Additional context used
🪛 LanguageTool
examples/llm/benchmarks/README.md

[uncategorized] ~108-~108: You might be missing the article “the” here.
Context: ... careful in specifying these options in perf.sh script. They should closely ref...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)


[grammar] ~108-~108: Did you mean “this option” or “these options”?
Context: ...ee perf.sh --help to learn more about these option. In the above command, we described tha...

(IN_THESE_NN)


[uncategorized] ~110-~110: Possible missing comma found.
Context: ...and 1 decode worker with TP=4 For more information see [Collecting Performance Numbers](#c...

(AI_HYDRA_LEO_MISSING_COMMA)


[uncategorized] ~173-~173: You might be missing the article “the” here.
Context: ... careful in specifying these options in perf.sh script. They should closely ref...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)


[grammar] ~173-~173: Did you mean “this option” or “these options”?
Context: ...ee perf.sh --help to learn more about these option. In the above command, we described tha...

(IN_THESE_NN)


[uncategorized] ~175-~175: Possible missing comma found.
Context: ...and 1 decode worker with TP=8 For more information see [Collecting Performance Numbers](#c...

(AI_HYDRA_LEO_MISSING_COMMA)


[uncategorized] ~246-~246: You might be missing the article “the” here.
Context: ... careful in specifying these options in perf.sh script. They should closely ref...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)


[grammar] ~246-~246: Did you mean “this option” or “these options”?
Context: ...ee perf.sh --help to learn more about these option. In the above command, we described tha...

(IN_THESE_NN)


[uncategorized] ~248-~248: Possible missing comma found.
Context: ...ers for two nodes) with TP=4. For more information see [Collecting Performance Numbers](#c...

(AI_HYDRA_LEO_MISSING_COMMA)


[uncategorized] ~252-~252: Possible missing article found.
Context: ...ovide this information to the script in form of command line arguments. The benchmar...

(AI_HYDRA_LEO_MISSING_THE)


[style] ~252-~252: This phrase is redundant. Consider writing “various” or “different”.
Context: ...l to collect the performance numbers at various different request concurrencies. The perf.sh scri...

(VARIOUS_DIFFERENT)


[style] ~252-~252: This phrase is redundant. Consider writing “various” or “different”.
Context: ...n multiple times to collect numbers for various different deployments. Each script execution will...

(VARIOUS_DIFFERENT)


[typographical] ~292-~292: Do not use a colon (:) before a series that is introduced by a preposition (‘up’). Remove the colon or add a noun or a noun phrase after the preposition.
Context: ...ement is around <y_diff>/<y_old>x speed up: ![Example Pareto Plot](example_pareto_p...

(RP_COLON)


[style] ~292-~292: Using many exclamation marks might seem excessive (in this case: 20 exclamation marks for a text that’s 10692 characters long)
Context: ...t is around <y_diff>/<y_old>x speed up: ![Example Pareto Plot](example_pareto_plo...

(EN_EXCESSIVE_EXCLAMATION)

🪛 markdownlint-cli2 (0.17.2)
examples/llm/benchmarks/README.md

239-239: Headings must start at the beginning of the line
null

(MD023, heading-start-left)

🪛 Pylint (3.3.7)
examples/llm/benchmarks/plot_pareto.py

[refactor] 63-74: Unnecessary "else" after "return", remove the "else" and de-indent the code inside it

(R1705)


[refactor] 83-83: Too many local variables (19/15)

(R0914)


[refactor] 135-135: Too many local variables (16/15)

(R0914)

⏰ Context from checks skipped due to timeout of 90000ms (1)
  • GitHub Check: Build and Test - vllm
🔇 Additional comments (2)
examples/llm/benchmarks/README.md (1)

231-244: ⚠️ Potential issue

Plotting section outdated – plot_pareto.py expects --artifacts-root-dir

Running the script without the required argument throws argparse error.

-python3 /workspace/examples/llm/benchmarks/plot_pareto.py
+python3 /workspace/examples/llm/benchmarks/plot_pareto.py \
+  --artifacts-root-dir artifacts_root

Likely an incorrect or invalid review comment.

🧰 Tools
🪛 markdownlint-cli2 (0.17.2)

239-239: Headings must start at the beginning of the line
null

(MD023, heading-start-left)

examples/llm/benchmarks/plot_pareto.py (1)

90-99: Metric key is stale for GenAI-Perf ≥ 0.0.13

output_token_throughput_per_user was renamed to "Output token throughput (per sec)".
Fallback to the new key for forward compatibility.

-output_token_throughput_per_user = data.get(
-    "output_token_throughput_per_user", {}
-).get(stat_value)
+output_token_throughput_per_user = (
+    data.get("Output token throughput (per sec)", {}).get(stat_value)
+    or data.get("output_token_throughput_per_user", {}).get(stat_value)
+)

Comment thread benchmarks/llm/perf.sh
Comment thread benchmarks/llm/perf.sh
Comment thread examples/llm/benchmarks/README.md

@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.

Actionable comments posted: 3

🔭 Outside diff range comments (1)
benchmarks/llm/plot_pareto.py (1)

238-276: ⚠️ Potential issue

Shebang but file not executable – CI fails

plot_pareto.py has #!/usr/bin/env python3 yet the file mode is not executable, causing the “Pre Merge Validation” failure.

Either:

  1. Make it executable in Git (chmod +x benchmarks/llm/plot_pareto.py), or
  2. Drop the shebang if users will always call python3 script.py.

Pick one to unblock the pipeline.

♻️ Duplicate comments (1)
examples/llm/benchmarks/README.md (1)

166-175: Same grammar issue appears – keep docs consistent

The “Important” block repeats the “these option” wording. Please apply the same fix here to avoid drift between sections.

🧰 Tools
🪛 LanguageTool

[uncategorized] ~173-~173: You might be missing the article “the” here.
Context: ... careful in specifying these options in perf.sh script. They should closely ref...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)


[grammar] ~173-~173: Did you mean “this option” or “these options”?
Context: ...ee perf.sh --help to learn more about these option. In the above command, we described tha...

(IN_THESE_NN)


[uncategorized] ~175-~175: Possible missing comma found.
Context: ...and 1 decode worker with TP=8 For more information see [Collecting Performance Numbers](#c...

(AI_HYDRA_LEO_MISSING_COMMA)

🧹 Nitpick comments (6)
examples/llm/benchmarks/README.md (3)

101-110: Fix grammar + clarify option names in the Important call-out

There are two minor wording slips:

  1. “these option” → “these options”
  2. Missing article before perf.sh script.

While you are touching the paragraph, consider shortening the sentence—keeping only the what and why makes it easier to scan.

- > We should be careful in specifying these options in `perf.sh` script. They should closely reflect the deployment config that is being benchmarked.
+ > Be careful when specifying **these options** in the *perf.sh* script; they must exactly reflect the deployment configuration being benchmarked.
🧰 Tools
🪛 LanguageTool

[uncategorized] ~108-~108: You might be missing the article “the” here.
Context: ... careful in specifying these options in perf.sh script. They should closely ref...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)


[grammar] ~108-~108: Did you mean “this option” or “these options”?
Context: ...ee perf.sh --help to learn more about these option. In the above command, we described tha...

(IN_THESE_NN)


[uncategorized] ~110-~110: Possible missing comma found.
Context: ...and 1 decode worker with TP=4 For more information see [Collecting Performance Numbers](#c...

(AI_HYDRA_LEO_MISSING_COMMA)


252-255: Redundant phrase “various different” – tighten language

The sentence contains “various different” twice; “various” is enough.

- … at various different request concurrencies …
+ … at various request concurrencies …

Similarly for “various different deployments”.

🧰 Tools
🪛 LanguageTool

[uncategorized] ~252-~252: Possible missing article found.
Context: ...ovide this information to the script in form of command line arguments. The benchmar...

(AI_HYDRA_LEO_MISSING_THE)


[style] ~252-~252: This phrase is redundant. Consider writing “various” or “different”.
Context: ...l to collect the performance numbers at various different request concurrencies. The perf.sh scri...

(VARIOUS_DIFFERENT)


[style] ~252-~252: This phrase is redundant. Consider writing “various” or “different”.
Context: ...n multiple times to collect numbers for various different deployments. Each script execution will...

(VARIOUS_DIFFERENT)


291-299: Colon misuse before inline image

A colon directly before the image breaks Markdown linting (MD042 / RP_COLON). Just end the sentence or move the image to a new line.

- speed up: ![Example Pareto Plot](./example_plots/single_node_pareto_plot.png)
+ speed-up  
+ ![Example Pareto Plot](./example_plots/single_node_pareto_plot.png)
benchmarks/llm/plot_pareto.py (3)

63-74: Unnecessary else after return (pylint R1705)

After the first return, the else is superfluous. Removing it shortens indentation and improves readability.

🧰 Tools
🪛 Pylint (3.3.7)

[refactor] 63-74: Unnecessary "else" after "return", remove the "else" and de-indent the code inside it

(R1705)


159-176: pareto_efficient mutates outer df – hidden side-effect

The helper both computes the frontier and mutates df via df.at[…].
Side-effects inside an inner loop are easy to miss and make future refactors risky.

Return the set of efficient indices and do the mutation in the caller:

-                pareto_points.append(point)
-                df.at[point_id, "is_pareto_efficient"] = True
+                pareto_points.append((point_id, point))
...
-        return np.array(pareto_points)
+        return pareto_points

This keeps the function pure and the outer loop explicit.


218-229: Fixed tick interval (5) limits generality

Hard-coding x_interval = y_interval = 5 works for specific data ranges but crops or bunches larger datasets.

Expose these as optional CLI arguments with sensible defaults:

-    x_interval = 5
-    y_interval = 5
+    x_interval = args.x_tick or 5
+    y_interval = args.y_tick or 5

Add the parameters to argparse and document them in README.

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between fe19277 and 4f0bfa9.

⛔ Files ignored due to path filters (2)
  • examples/llm/benchmarks/example_plots/single_node_pareto_plot.png is excluded by !**/*.png
  • examples/llm/benchmarks/example_plots/two_node_pareto_plot.png is excluded by !**/*.png
📒 Files selected for processing (2)
  • benchmarks/llm/plot_pareto.py (1 hunks)
  • examples/llm/benchmarks/README.md (4 hunks)
🧰 Additional context used
🪛 Pylint (3.3.7)
benchmarks/llm/plot_pareto.py

[refactor] 63-74: Unnecessary "else" after "return", remove the "else" and de-indent the code inside it

(R1705)


[refactor] 83-83: Too many local variables (19/15)

(R0914)


[refactor] 135-135: Too many local variables (16/15)

(R0914)

🪛 GitHub Actions: Pre Merge Validation of (ai-dynamo/dynamo/refs/pull/701/merge) by tanmayv25.
benchmarks/llm/plot_pareto.py

[error] 1-1: File has a shebang but is not marked executable. Run 'chmod +x benchmarks/llm/plot_pareto.py' to fix.

🪛 LanguageTool
examples/llm/benchmarks/README.md

[uncategorized] ~108-~108: You might be missing the article “the” here.
Context: ... careful in specifying these options in perf.sh script. They should closely ref...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)


[grammar] ~108-~108: Did you mean “this option” or “these options”?
Context: ...ee perf.sh --help to learn more about these option. In the above command, we described tha...

(IN_THESE_NN)


[uncategorized] ~110-~110: Possible missing comma found.
Context: ...and 1 decode worker with TP=4 For more information see [Collecting Performance Numbers](#c...

(AI_HYDRA_LEO_MISSING_COMMA)


[uncategorized] ~173-~173: You might be missing the article “the” here.
Context: ... careful in specifying these options in perf.sh script. They should closely ref...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)


[grammar] ~173-~173: Did you mean “this option” or “these options”?
Context: ...ee perf.sh --help to learn more about these option. In the above command, we described tha...

(IN_THESE_NN)


[uncategorized] ~175-~175: Possible missing comma found.
Context: ...and 1 decode worker with TP=8 For more information see [Collecting Performance Numbers](#c...

(AI_HYDRA_LEO_MISSING_COMMA)


[uncategorized] ~246-~246: You might be missing the article “the” here.
Context: ... careful in specifying these options in perf.sh script. They should closely ref...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)


[grammar] ~246-~246: Did you mean “this option” or “these options”?
Context: ...ee perf.sh --help to learn more about these option. In the above command, we described tha...

(IN_THESE_NN)


[uncategorized] ~248-~248: Possible missing comma found.
Context: ... TP=4(or TP=8 for two nodes). For more information see [Collecting Performance Numbers](#c...

(AI_HYDRA_LEO_MISSING_COMMA)


[uncategorized] ~252-~252: Possible missing article found.
Context: ...ovide this information to the script in form of command line arguments. The benchmar...

(AI_HYDRA_LEO_MISSING_THE)


[style] ~252-~252: This phrase is redundant. Consider writing “various” or “different”.
Context: ...l to collect the performance numbers at various different request concurrencies. The perf.sh scri...

(VARIOUS_DIFFERENT)


[style] ~252-~252: This phrase is redundant. Consider writing “various” or “different”.
Context: ...n multiple times to collect numbers for various different deployments. Each script execution will...

(VARIOUS_DIFFERENT)


[typographical] ~301-~301: Do not use a colon (:) before a series that is introduced by a preposition (‘up’). Remove the colon or add a noun or a noun phrase after the preposition.
Context: ...ement is around <y_diff>/<y_old>x speed up: ![Example Pareto Plot](./example_plots/...

(RP_COLON)


[style] ~301-~301: Using many exclamation marks might seem excessive (in this case: 20 exclamation marks for a text that’s 10738 characters long)
Context: ...t is around <y_diff>/<y_old>x speed up: ![Example Pareto Plot](./example_plots/si...

(EN_EXCESSIVE_EXCLAMATION)

🪛 markdownlint-cli2 (0.17.2)
examples/llm/benchmarks/README.md

239-239: Headings must start at the beginning of the line
null

(MD023, heading-start-left)

⏰ Context from checks skipped due to timeout of 90000ms (1)
  • GitHub Check: Build and Test - vllm

Comment thread examples/llm/benchmarks/README.md
Comment thread benchmarks/llm/plot_pareto.py
Comment thread benchmarks/llm/plot_pareto.py

@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.

Actionable comments posted: 0

🔭 Outside diff range comments (1)
examples/llm/benchmarks/README.md (1)

326-331: 🛠️ Refactor suggestion

Consolidate Interpreting Results sections

The second top-level "## Interpreting Results" should be a subsection under the initial interpreting-results section (or merged into it). Consider renaming it to "### Example Comparison" (or similar) and adjusting the anchor link accordingly to maintain proper hierarchy.

♻️ Duplicate comments (1)
examples/llm/benchmarks/README.md (1)

261-263: Remove duplicate misspelled heading

The "## Iterpreting Results" heading is misspelled and duplicates the later "## Interpreting Results". Please remove or merge this section to avoid redundancy.

🧹 Nitpick comments (4)
examples/llm/benchmarks/README.md (4)

101-109: Explicit single-node perf.sh invocation is clear; minor grammar fix needed

The added example clarifies how to collect performance numbers for the disaggregated single-node scenario. Please pluralize "option" to "options" in the help reference.

- See `perf.sh --help` to learn more about these option.
+ See `perf.sh --help` to learn more about these options.
🧰 Tools
🪛 LanguageTool

[grammar] ~108-~108: Did you mean “this option” or “these options”?
Context: ...ee perf.sh --help to learn more about these option. In the above command, we described tha...

(IN_THESE_NN)


166-174: Explicit multinode perf.sh invocation is clear; minor grammar fix needed

The example for disaggregated multinode nicely demonstrates the command. Please pluralize "option" to "options" in the help text.

- See `perf.sh --help` to learn more about these option.
+ See `perf.sh --help` to learn more about these options.
🧰 Tools
🪛 LanguageTool

[grammar] ~173-~173: Did you mean “this option” or “these options”?
Context: ...ee perf.sh --help to learn more about these option. In the above command, we described tha...

(IN_THESE_NN)


231-247: Explicit aggregated perf.sh examples improve clarity; minor grammar fix needed

The single-node and two-node aggregated examples are helpful. Please pluralize "option" to "options" in the admonition (and consider adding a comma before "For more information").

- See `perf.sh --help` to learn more about these option.
+ See `perf.sh --help` to learn more about these options.
🧰 Tools
🪛 LanguageTool

[grammar] ~246-~246: Did you mean “this option” or “these options”?
Context: ...ee perf.sh --help to learn more about these option. In the above command, we described tha...

(IN_THESE_NN)

🪛 markdownlint-cli2 (0.17.2)

239-239: Headings must start at the beginning of the line
null

(MD023, heading-start-left)


252-252: Simplify redundant phrasing

The phrase "various different" is redundant. Consider using "various" or "different":

- ...collect the performance numbers at various different request concurrencies.
+ ...collect the performance numbers at various request concurrencies.
🧰 Tools
🪛 LanguageTool

[uncategorized] ~252-~252: Possible missing article found.
Context: ...ovide this information to the script in form of command line arguments. The benchmar...

(AI_HYDRA_LEO_MISSING_THE)


[style] ~252-~252: This phrase is redundant. Consider writing “various” or “different”.
Context: ...l to collect the performance numbers at various different request concurrencies. The perf.sh scri...

(VARIOUS_DIFFERENT)


[style] ~252-~252: This phrase is redundant. Consider writing “various” or “different”.
Context: ...n multiple times to collect numbers for various different deployments. Each script execution will...

(VARIOUS_DIFFERENT)

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 4f0bfa9 and 1e762db.

📒 Files selected for processing (1)
  • examples/llm/benchmarks/README.md (4 hunks)
🧰 Additional context used
🪛 LanguageTool
examples/llm/benchmarks/README.md

[grammar] ~108-~108: Did you mean “this option” or “these options”?
Context: ...ee perf.sh --help to learn more about these option. In the above command, we described tha...

(IN_THESE_NN)


[uncategorized] ~110-~110: Possible missing comma found.
Context: ...and 1 decode worker with TP=4 For more information see [Collecting Performance Numbers](#c...

(AI_HYDRA_LEO_MISSING_COMMA)


[grammar] ~173-~173: Did you mean “this option” or “these options”?
Context: ...ee perf.sh --help to learn more about these option. In the above command, we described tha...

(IN_THESE_NN)


[uncategorized] ~175-~175: Possible missing comma found.
Context: ...and 1 decode worker with TP=8 For more information see [Collecting Performance Numbers](#c...

(AI_HYDRA_LEO_MISSING_COMMA)


[grammar] ~246-~246: Did you mean “this option” or “these options”?
Context: ...ee perf.sh --help to learn more about these option. In the above command, we described tha...

(IN_THESE_NN)


[uncategorized] ~248-~248: Possible missing comma found.
Context: ... TP=4(or TP=8 for two nodes). For more information see [Collecting Performance Numbers](#c...

(AI_HYDRA_LEO_MISSING_COMMA)


[uncategorized] ~252-~252: Possible missing article found.
Context: ...ovide this information to the script in form of command line arguments. The benchmar...

(AI_HYDRA_LEO_MISSING_THE)


[style] ~252-~252: This phrase is redundant. Consider writing “various” or “different”.
Context: ...l to collect the performance numbers at various different request concurrencies. The perf.sh scri...

(VARIOUS_DIFFERENT)


[style] ~252-~252: This phrase is redundant. Consider writing “various” or “different”.
Context: ...n multiple times to collect numbers for various different deployments. Each script execution will...

(VARIOUS_DIFFERENT)


[typographical] ~300-~300: If you want to indicate numerical ranges or time ranges, consider using an en dash.
Context: ...s/user, the increase in tokens/s/gpu is 145 - 80 = 65, from the orange baseline to th...

(DASH_RULE)


[typographical] ~301-~301: Do not use a colon (:) before a series that is introduced by a preposition (‘up’). Remove the colon or add a noun or a noun phrase after the preposition.
Context: ...o the improvement is around 1.44x speed up: ![Example Pareto Plot](./example_plots/...

(RP_COLON)


[style] ~301-~301: Using many exclamation marks might seem excessive (in this case: 20 exclamation marks for a text that’s 10704 characters long)
Context: ...e improvement is around 1.44x speed up: ![Example Pareto Plot](./example_plots/si...

(EN_EXCESSIVE_EXCLAMATION)

🪛 markdownlint-cli2 (0.17.2)
examples/llm/benchmarks/README.md

239-239: Headings must start at the beginning of the line
null

(MD023, heading-start-left)

⏰ Context from checks skipped due to timeout of 90000ms (1)
  • GitHub Check: Build and Test - vllm

@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.

Actionable comments posted: 1

♻️ Duplicate comments (4)
examples/llm/benchmarks/README.md (2)

101-110: ⚠️ Potential issue

Add mandatory --artifacts-root-dir flag & fix plural typo.

perf.sh now requires --artifacts-root-dir; running the snippet as-is exits early.
The sentence “these option” should be “these options”.

-bash -x /workspace/benchmarks/llm/perf.sh --mode disaggregated --deployment-kind dynamo_vllm --prefill-tensor-parallelism 1 --prefill-data-parallelism 4 --decode-tensor-parallelism 4 --decode-data-parallelism 1
+bash -x /workspace/benchmarks/llm/perf.sh --mode disaggregated --deployment-kind dynamo_vllm \
+  --prefill-tensor-parallelism 1 --prefill-data-parallelism 4 \
+  --decode-tensor-parallelism 4 --decode-data-parallelism 1 \
+  --artifacts-root-dir /path/to/artifacts_root
@@
-See `perf.sh --help` to learn more about these option.
+See `perf.sh --help` to learn more about these options.
🧰 Tools
🪛 LanguageTool

[grammar] ~108-~108: Did you mean “this option” or “these options”?
Context: ...ee perf.sh --help to learn more about these option. In the above command, we described tha...

(IN_THESE_NN)


[uncategorized] ~110-~110: Possible missing comma found.
Context: ...and 1 decode worker with TP=4 For more information see [Collecting Performance Numbers](#c...

(AI_HYDRA_LEO_MISSING_COMMA)


261-304: 🛠️ Refactor suggestion

Duplicate / misspelled top-level heading – collapse into one section.

You currently have:

  • ## Iterpreting Results (misspelled, earlier)
  • ## Interpreting Results (later)

Keep one correctly spelled heading and remove the duplicate to maintain heading hierarchy.

-## Iterpreting Results
+## Interpreting Results
...
-## Interpreting Results
-
-In this section, we are comparing the [Disaggregated Single Node Benchmarking](#disaggregated-single-node-benchmarking)
-result to the [vLLM Aggregated Baseline Benchmarking](#vllm-aggregated-baseline-benchmarking) as an example. The multi-node
-results can also be compared in similar steps.
🧰 Tools
🪛 LanguageTool

[typographical] ~300-~300: If you want to indicate numerical ranges or time ranges, consider using an en dash.
Context: ...s/user, the increase in tokens/s/gpu is 145 - 80 = 65, from the orange baseline to th...

(DASH_RULE)


[typographical] ~301-~301: Do not use a colon (:) before a series that is introduced by a preposition (‘up’). Remove the colon or add a noun or a noun phrase after the preposition.
Context: ...o the improvement is around 1.44x speed up: ![Example Pareto Plot](./example_plots/...

(RP_COLON)


[style] ~301-~301: Using many exclamation marks might seem excessive (in this case: 20 exclamation marks for a text that’s 10704 characters long)
Context: ...e improvement is around 1.44x speed up: ![Example Pareto Plot](./example_plots/si...

(EN_EXCESSIVE_EXCLAMATION)

benchmarks/llm/plot_pareto.py (2)

48-56: parse_concurrency still breaks on nested paths – reuse previous fix.

The strict re.findall + length check raises on legitimate nested folders (run-8-concurrency16). Switch to re.search and return the first match:

-def parse_concurrency(name):
-    matches = re.findall(r"-concurrency(\d+)", name)
-    if len(matches) != 1:
-        raise Exception(f"non-unique matches: {matches}")
-    concurrency = 0
-    for c in matches:
-        concurrency += int(c)
-    return concurrency
+def parse_concurrency(name: str) -> int:
+    match = re.search(r"-concurrency(\d+)", name)
+    if not match:
+        raise ValueError(f"Cannot determine concurrency from {name}")
+    return int(match.group(1))

60-74: parse_gpus unsafe when keys are missing (None * int).

Add defensive checks and remove the unnecessary else after return:

-    if deployment_config.get("mode") == "aggregated":
-        return deployment_config.get("tensor_parallelism") * deployment_config.get(
-            "data_parallelism"
-        )
-    else:
-        return deployment_config.get(
-            "prefill_tensor_parallelism"
-        ) * deployment_config.get("prefill_data_parallelism") + deployment_config.get(
-            "decode_tensor_parallelism"
-        ) * deployment_config.get(
-            "decode_data_parallelism"
-        )
+    if deployment_config.get("mode") == "aggregated":
+        tp = deployment_config.get("tensor_parallelism")
+        dp = deployment_config.get("data_parallelism")
+        if tp is None or dp is None:
+            raise KeyError("`tensor_parallelism` or `data_parallelism` missing in deployment_config.json")
+        return tp * dp
+
+    tp_p = deployment_config.get("prefill_tensor_parallelism")
+    dp_p = deployment_config.get("prefill_data_parallelism")
+    tp_d = deployment_config.get("decode_tensor_parallelism")
+    dp_d = deployment_config.get("decode_data_parallelism")
+    if None in (tp_p, dp_p, tp_d, dp_d):
+        raise KeyError("Prefill/Decode TP/DP values missing in deployment_config.json")
+    return tp_p * dp_p + tp_d * dp_d
🧰 Tools
🪛 Pylint (3.3.7)

[refactor] 63-74: Unnecessary "else" after "return", remove the "else" and de-indent the code inside it

(R1705)

🧹 Nitpick comments (2)
examples/llm/benchmarks/README.md (1)

252-255: Remove “various different” redundancy.

-... collect the performance numbers at various different request concurrencies.
+... collect the performance numbers at various request concurrencies.
🧰 Tools
🪛 LanguageTool

[uncategorized] ~252-~252: Possible missing article found.
Context: ...ovide this information to the script in form of command line arguments. The benchmar...

(AI_HYDRA_LEO_MISSING_THE)


[style] ~252-~252: This phrase is redundant. Consider writing “various” or “different”.
Context: ...l to collect the performance numbers at various different request concurrencies. The perf.sh scri...

(VARIOUS_DIFFERENT)


[style] ~252-~252: This phrase is redundant. Consider writing “various” or “different”.
Context: ...n multiple times to collect numbers for various different deployments. Each script execution will...

(VARIOUS_DIFFERENT)

benchmarks/llm/plot_pareto.py (1)

186-190: Legend labels are noisy – drop the “Label ” prefix.

The legend currently shows “Label disaggregated_dynamo” etc. Use the label directly:

-            label=f"Label {label}",
+            label=label,
📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 1e762db and e8d851e.

📒 Files selected for processing (2)
  • benchmarks/llm/plot_pareto.py (1 hunks)
  • examples/llm/benchmarks/README.md (4 hunks)
🧰 Additional context used
🪛 Pylint (3.3.7)
benchmarks/llm/plot_pareto.py

[refactor] 63-74: Unnecessary "else" after "return", remove the "else" and de-indent the code inside it

(R1705)


[refactor] 83-83: Too many local variables (19/15)

(R0914)


[refactor] 135-135: Too many local variables (16/15)

(R0914)

🪛 LanguageTool
examples/llm/benchmarks/README.md

[grammar] ~108-~108: Did you mean “this option” or “these options”?
Context: ...ee perf.sh --help to learn more about these option. In the above command, we described tha...

(IN_THESE_NN)


[uncategorized] ~110-~110: Possible missing comma found.
Context: ...and 1 decode worker with TP=4 For more information see [Collecting Performance Numbers](#c...

(AI_HYDRA_LEO_MISSING_COMMA)


[grammar] ~173-~173: Did you mean “this option” or “these options”?
Context: ...ee perf.sh --help to learn more about these option. In the above command, we described tha...

(IN_THESE_NN)


[uncategorized] ~175-~175: Possible missing comma found.
Context: ...and 1 decode worker with TP=8 For more information see [Collecting Performance Numbers](#c...

(AI_HYDRA_LEO_MISSING_COMMA)


[grammar] ~246-~246: Did you mean “this option” or “these options”?
Context: ...ee perf.sh --help to learn more about these option. In the above command, we described tha...

(IN_THESE_NN)


[uncategorized] ~248-~248: Possible missing comma found.
Context: ... TP=4(or TP=8 for two nodes). For more information see [Collecting Performance Numbers](#c...

(AI_HYDRA_LEO_MISSING_COMMA)


[uncategorized] ~252-~252: Possible missing article found.
Context: ...ovide this information to the script in form of command line arguments. The benchmar...

(AI_HYDRA_LEO_MISSING_THE)


[style] ~252-~252: This phrase is redundant. Consider writing “various” or “different”.
Context: ...l to collect the performance numbers at various different request concurrencies. The perf.sh scri...

(VARIOUS_DIFFERENT)


[style] ~252-~252: This phrase is redundant. Consider writing “various” or “different”.
Context: ...n multiple times to collect numbers for various different deployments. Each script execution will...

(VARIOUS_DIFFERENT)


[typographical] ~300-~300: If you want to indicate numerical ranges or time ranges, consider using an en dash.
Context: ...s/user, the increase in tokens/s/gpu is 145 - 80 = 65, from the orange baseline to th...

(DASH_RULE)


[typographical] ~301-~301: Do not use a colon (:) before a series that is introduced by a preposition (‘up’). Remove the colon or add a noun or a noun phrase after the preposition.
Context: ...o the improvement is around 1.44x speed up: ![Example Pareto Plot](./example_plots/...

(RP_COLON)


[style] ~301-~301: Using many exclamation marks might seem excessive (in this case: 20 exclamation marks for a text that’s 10704 characters long)
Context: ...e improvement is around 1.44x speed up: ![Example Pareto Plot](./example_plots/si...

(EN_EXCESSIVE_EXCLAMATION)

⏰ Context from checks skipped due to timeout of 90000ms (2)
  • GitHub Check: Mirror Repository to GitLab
  • GitHub Check: Build and Test - vllm
🔇 Additional comments (1)
examples/llm/benchmarks/README.md (1)

231-247: Aggregated baseline example also misses --artifacts-root-dir.

Please append it and fix “these option(s)” as above to prevent user error.

🧰 Tools
🪛 LanguageTool

[grammar] ~246-~246: Did you mean “this option” or “these options”?
Context: ...ee perf.sh --help to learn more about these option. In the above command, we described tha...

(IN_THESE_NN)

Comment thread examples/llm/benchmarks/README.md

@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.

Actionable comments posted: 0

♻️ Duplicate comments (1)
examples/llm/benchmarks/README.md (1)

166-175: Please apply the same article and pluralization fixes to the multinode section’s perf.sh note as above.

🧰 Tools
🪛 LanguageTool

[uncategorized] ~173-~173: You might be missing the article “the” here.
Context: ... careful in specifying these options in perf.sh script. They should closely ref...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)


[grammar] ~173-~173: Did you mean “this option” or “these options”?
Context: ...ee perf.sh --help to learn more about these option. In the above command, we described tha...

(IN_THESE_NN)


[uncategorized] ~175-~175: Possible missing comma found.
Context: ...and 1 decode worker with TP=8 For more information see [Collecting Performance Numbers](#c...

(AI_HYDRA_LEO_MISSING_COMMA)

🧹 Nitpick comments (6)
examples/llm/benchmarks/README.md (6)

101-108: Fix grammar and article in perf.sh note
The important note incorrectly refers to “options in perf.sh script” and “these option.” It should add “the” before the script name and pluralize “options.”
Apply this diff:

<  > We should be careful in specifying these options in `perf.sh` script. See `perf.sh --help` to learn more about these option.
>  > We should be careful in specifying these options in the `perf.sh` script. See `perf.sh --help` to learn more about these options.
🧰 Tools
🪛 LanguageTool

[uncategorized] ~108-~108: You might be missing the article “the” here.
Context: ... careful in specifying these options in perf.sh script. They should closely ref...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)


[grammar] ~108-~108: Did you mean “this option” or “these options”?
Context: ...ee perf.sh --help to learn more about these option. In the above command, we described tha...

(IN_THESE_NN)


231-248: Fix grammar, spacing, and casing in aggregated perf.sh note
In the aggregated baseline note:

  • Add “the” before “perf.sh script” and pluralize “options.”
  • Correct the casing of vLLm to vLLM.
  • Insert a space before “(or” in the TP value.
    Apply this diff:
<  > We should be careful in specifying these options in `perf.sh` script. See `perf.sh --help` to learn more about these option. In the above command, we described that our deployment is using aggregated serving in `vLLm serve`. We have also accurately described that we have 2 workers with TP=4(or TP=8 for two nodes).
>  > We should be careful in specifying these options in the `perf.sh` script. See `perf.sh --help` to learn more about these options. In the above command, we described that our deployment is using aggregated serving in `vLLM serve`. We have also accurately described that we have 2 workers with TP=4 (or TP=8 for two nodes).
🧰 Tools
🪛 LanguageTool

[uncategorized] ~246-~246: You might be missing the article “the” here.
Context: ... careful in specifying these options in perf.sh script. They should closely ref...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)


[grammar] ~246-~246: Did you mean “this option” or “these options”?
Context: ...ee perf.sh --help to learn more about these option. In the above command, we described tha...

(IN_THESE_NN)


[uncategorized] ~248-~248: Possible missing comma found.
Context: ... TP=4(or TP=8 for two nodes). For more information see [Collecting Performance Numbers](#c...

(AI_HYDRA_LEO_MISSING_COMMA)


261-264: Correct typo in section heading
The heading “## Iterpreting Results” is misspelled. Update to:

- ## Iterpreting Results
+ ## Interpreting Results

267-270: Pin plotting dependencies for reproducibility
To prevent unexpected version changes, consider pinning matplotlib and seaborn. For example:

- pip3 install matplotlib seaborn
+ pip3 install 'matplotlib>=3.5' 'seaborn>=0.11'

271-277: Clarify the artifacts root placeholder in single-node example
The placeholder artifacts_root may be mistaken for a literal directory. Update the example to indicate it’s a user-supplied path:

- python3 /workspace/benchmarks/llm/plot_pareto.py --artifacts-root-dir artifacts_root
+ python3 /workspace/benchmarks/llm/plot_pareto.py --artifacts-root-dir <artifacts_root>

279-283: Clarify the artifacts root placeholder in two-node example
Similarly, make the placeholder explicit:

- python3 /workspace/benchmarks/llm/plot_pareto.py --artifacts-root-dir artifacts_root --title "Two Nodes"
+ python3 /workspace/benchmarks/llm/plot_pareto.py --artifacts-root-dir <artifacts_root> --title "Two Nodes"
📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between e8d851e and ea84ea8.

📒 Files selected for processing (1)
  • examples/llm/benchmarks/README.md (3 hunks)
🧰 Additional context used
🪛 LanguageTool
examples/llm/benchmarks/README.md

[uncategorized] ~108-~108: You might be missing the article “the” here.
Context: ... careful in specifying these options in perf.sh script. They should closely ref...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)


[grammar] ~108-~108: Did you mean “this option” or “these options”?
Context: ...ee perf.sh --help to learn more about these option. In the above command, we described tha...

(IN_THESE_NN)


[uncategorized] ~110-~110: Possible missing comma found.
Context: ...and 1 decode worker with TP=4 For more information see [Collecting Performance Numbers](#c...

(AI_HYDRA_LEO_MISSING_COMMA)


[uncategorized] ~173-~173: You might be missing the article “the” here.
Context: ... careful in specifying these options in perf.sh script. They should closely ref...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)


[grammar] ~173-~173: Did you mean “this option” or “these options”?
Context: ...ee perf.sh --help to learn more about these option. In the above command, we described tha...

(IN_THESE_NN)


[uncategorized] ~175-~175: Possible missing comma found.
Context: ...and 1 decode worker with TP=8 For more information see [Collecting Performance Numbers](#c...

(AI_HYDRA_LEO_MISSING_COMMA)


[uncategorized] ~246-~246: You might be missing the article “the” here.
Context: ... careful in specifying these options in perf.sh script. They should closely ref...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)


[grammar] ~246-~246: Did you mean “this option” or “these options”?
Context: ...ee perf.sh --help to learn more about these option. In the above command, we described tha...

(IN_THESE_NN)


[uncategorized] ~248-~248: Possible missing comma found.
Context: ... TP=4(or TP=8 for two nodes). For more information see [Collecting Performance Numbers](#c...

(AI_HYDRA_LEO_MISSING_COMMA)


[uncategorized] ~252-~252: Possible missing article found.
Context: ...ovide this information to the script in form of command line arguments. The benchmar...

(AI_HYDRA_LEO_MISSING_THE)


[style] ~252-~252: This phrase is redundant. Consider writing “various” or “different”.
Context: ...l to collect the performance numbers at various different request concurrencies. The perf.sh scri...

(VARIOUS_DIFFERENT)


[style] ~252-~252: This phrase is redundant. Consider writing “various” or “different”.
Context: ...n multiple times to collect numbers for various different deployments. Each script execution will...

(VARIOUS_DIFFERENT)


[typographical] ~300-~300: If you want to indicate numerical ranges or time ranges, consider using an en dash.
Context: ...s/user, the increase in tokens/s/gpu is 145 - 80 = 65, from the orange baseline to th...

(DASH_RULE)


[typographical] ~301-~301: Do not use a colon (:) before a series that is introduced by a preposition (‘up’). Remove the colon or add a noun or a noun phrase after the preposition.
Context: ...o the improvement is around 1.44x speed up: ![Example Pareto Plot](./example_plots/...

(RP_COLON)


[style] ~301-~301: Using many exclamation marks might seem excessive (in this case: 20 exclamation marks for a text that’s 10391 characters long)
Context: ...e improvement is around 1.44x speed up: ![Example Pareto Plot](./example_plots/si...

(EN_EXCESSIVE_EXCLAMATION)

⏰ Context from checks skipped due to timeout of 90000ms (1)
  • GitHub Check: Build and Test - vllm

@tanmayv25
tanmayv25 requested a review from rmccorm4 June 12, 2025 08:09
@kthui
kthui merged commit fc5ddd2 into main Jun 12, 2025
@kthui
kthui deleted the jacky-benchmarking-guide-result branch June 12, 2025 08:33
nealvaidya pushed a commit that referenced this pull request Jun 26, 2025
Co-authored-by: Ziqi Fan <ziqif@nvidia.com>
yao531441 pushed a commit to yao531441/dynamo that referenced this pull request May 13, 2026
Co-authored-by: Ziqi Fan <ziqif@nvidia.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

docs documentation Improvements or additions to documentation size/XL

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants