Skip to content

chore: upgrade the aiperf version in dynamo repo - #11061

Merged
pvijayakrish merged 4 commits into
mainfrom
pvijayakrish/aiperf-version-bump
Jun 29, 2026
Merged

pvijayakrish merged 4 commits into
mainfrom
pvijayakrish/aiperf-version-bump

Conversation

@pvijayakrish

@pvijayakrish pvijayakrish commented Jun 29, 2026

Copy link
Copy Markdown
Contributor

Overview:

Upgrade the aiperf version to 0.10.0 in dynamo repo.

  • Closes OPS-7432 chore-aiperf-verison-bump-for-dynamo-130

Summary by CodeRabbit

  • Bug Fixes

    • Updated benchmark environments to use a newer profiling tool version for more consistent runs and compatibility with current benchmarks.
    • Replaced older installation methods with a pinned release in several benchmark jobs.
  • Documentation

    • Refreshed benchmark and setup docs to match the new recommended tool version.
    • Clarified version pinning notes and installation guidance across benchmark recipes.

Signed-off-by: pvijayakrish <pvijayakrish@nvidia.com>
@pvijayakrish
pvijayakrish requested review from a team as code owners June 29, 2026 21:27
@pvijayakrish
pvijayakrish requested a review from a team June 29, 2026 21:27
@github-actions github-actions Bot added chore documentation Improvements or additions to documentation container labels Jun 29, 2026
Comment thread recipes/qwen3.6-35b/perf.yaml
Signed-off-by: pvijayakrish <pvijayakrish@nvidia.com>
@github-actions

github-actions Bot commented Jun 29, 2026

Copy link
Copy Markdown
Contributor

@coderabbitai

coderabbitai Bot commented Jun 29, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Walkthrough

All references to aiperf across recipe perf.yaml files, container dependency configs, benchmark scripts, and documentation are updated to aiperf==0.10.0. Several recipes that previously installed aiperf from a pinned GitHub commit are switched to the published PyPI release. The qwen3.6-35b recipe additionally removes the AIPERF_GIT_REF environment variable.

Changes

aiperf bump to 0.10.0

Layer / File(s) Summary
Core dependency and container config updates
benchmarks/pyproject.toml, container/deps/requirements.benchmark.txt, container/templates/frontend.Dockerfile, benchmarks/frontend/scripts/sweep_k8s/aiperf.py, benchmarks/frontend/scripts/README.md
Updates aiperf version to 0.10.0 in the project dependencies, benchmark requirements file, Dockerfile comment, and sweep script install command.
Recipe perf.yaml aiperf version updates
recipes/deepseek-r1/..., recipes/deepseek-v32-fp4/..., recipes/deepseek-v4/..., recipes/glm-5-nvfp4/..., recipes/gpt-oss-120b/..., recipes/kimi-k2.5/..., recipes/kimi-k2.6/..., recipes/llama-3-70b/..., recipes/nemotron-3-super/..., recipes/nemotron-3-ultra/..., recipes/qwen3-235b-a22b-fp8/..., recipes/qwen3-32b-fp8/..., recipes/qwen3-32b/..., recipes/qwen3-vl-30b/..., recipes/qwen3-vl-32b-fp8/...
Replaces all older aiperf version pins (0.6.0, 0.7.0, 0.8.0, 0.9.0) and git-commit-based installs with aiperf==0.10.0 from PyPI across all Kubernetes Job recipe perf.yaml files.
qwen3.6-35b: switch from git-ref to PyPI install
recipes/qwen3.6-35b/perf.yaml, recipes/qwen3.6-35b/README.md
Removes the AIPERF_GIT_REF env var and git-based install, replaces with aiperf==0.10.0 PyPI install plus an import sanity check, and updates the README to document the PyPI-based install.
Docs, README, and test comment updates
docs/benchmarks/deepseek-v3-2-wideep-routing.mdx, docs/benchmarks/kv-router-ab-testing.md, docs/recipes/deepseek-v3-2-nvfp4.mdx, recipes/nemotron-3-ultra/perf/README.md, tests/fault_tolerance/deploy/client.py
Updates aiperf version references in benchmark and recipe documentation and shortens a TODO comment in the fault tolerance test client.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~5 minutes

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Description check ⚠️ Warning The description is missing the required Details, reviewer start, and full Related Issues sections from the template. Add the missing template sections with具体 details, reviewer-start files, and a properly formatted Related Issues block that matches the repository template.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the main change: upgrading aiperf across the repository.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
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.

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

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

Caution

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

⚠️ Outside diff range comments (4)
recipes/qwen3-32b-fp8/trtllm/agg/perf.yaml (1)

27-33: 🩺 Stability & Availability | 🟠 Major | ⚡ Quick win

Make this shell block fail fast before switching to the PyPI pin.

This script still runs under /bin/sh without set -e, so a failed pip install or later aiperf profile can fall through to the trailing echo/ls and leave the Job green with no valid benchmark result. Please enable fail-fast at the top of the block (or explicitly || exit 1 the critical commands) before landing the new package version.

Minimal fix
         - |
+          set -eu
           apt-get update && apt-get install -y curl jq procps git && apt-get clean
           pip install "aiperf==0.10.0";
🤖 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 `@recipes/qwen3-32b-fp8/trtllm/agg/perf.yaml` around lines 27 - 33, The shell
block in the command script can continue after a failed install or benchmark
step because it runs under /bin/sh without fail-fast behavior. Update the block
that installs aiperf and runs the benchmark so it exits immediately on error,
either by enabling strict shell mode at the start or by explicitly guarding the
critical commands with immediate exits. Use the existing command block and the
aiperf install/profile steps as the key places to apply the fix.
recipes/qwen3-235b-a22b-fp8/trtllm/disagg/hopper/perf.yaml (1)

27-33: 🩺 Stability & Availability | 🟠 Major | ⚡ Quick win

Make this shell block fail fast before switching to the PyPI pin.

This script still runs under /bin/sh without set -e, so a failed pip install or later aiperf profile can fall through to the trailing echo/ls and leave the Job green with no valid benchmark result. Please enable fail-fast at the top of the block (or explicitly || exit 1 the critical commands) before landing the new package version.

Minimal fix
         - |
+          set -eu
           apt-get update && apt-get install -y curl jq procps git && apt-get clean
           pip install "aiperf==0.10.0";
🤖 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 `@recipes/qwen3-235b-a22b-fp8/trtllm/disagg/hopper/perf.yaml` around lines 27 -
33, The shell block in the command script can continue past failed setup or
profiling steps because it runs under /bin/sh without fail-fast behavior. Update
the block in the perf config to enable immediate failure at the start of the
script body, or explicitly guard the critical commands so that the apt-get, pip
install of aiperf, and any subsequent aiperf profile invocation cannot fall
through to later echo/ls steps; use the shell command block itself as the fix
point.
recipes/deepseek-r1/trtllm/disagg/wide_ep/gb200/perf.yaml (1)

28-34: 🩺 Stability & Availability | 🟠 Major | ⚡ Quick win

Make this shell block fail fast before bumping the pin.

This script still runs under /bin/sh without set -e, so a failed pip install or later aiperf profile can fall through to the trailing echo/ls and leave the Job green with no valid benchmark result. Please enable fail-fast at the top of the block (or explicitly || exit 1 the critical commands) before landing the new package version.

Minimal fix
         - |
+          set -eu
           apt-get update && apt-get install -y curl jq procps git && apt-get clean
           pip install aiperf==0.10.0;
🤖 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 `@recipes/deepseek-r1/trtllm/disagg/wide_ep/gb200/perf.yaml` around lines 28 -
34, The shell block in the benchmark command needs fail-fast behavior so
installation or profiling errors do not get masked by later commands. Update the
script body used by the command sequence to enable immediate exit on failure (or
add explicit exits around the critical install/profile steps) before the new
aiperf pin is used, so failures in the pip install or subsequent benchmark
commands stop the Job instead of reaching the trailing echo/ls. Use the command
block under the perf YAML entry to apply the fix consistently.
recipes/qwen3-32b-fp8/trtllm/disagg/perf.yaml (1)

27-33: 🩺 Stability & Availability | 🟠 Major | ⚡ Quick win

Make this shell block fail fast before switching to the PyPI pin.

This script still runs under /bin/sh without set -e, so a failed pip install or later aiperf profile can fall through to the trailing echo/ls and leave the Job green with no valid benchmark result. Please enable fail-fast at the top of the block (or explicitly || exit 1 the critical commands) before landing the new package version.

Minimal fix
         - |
+          set -eu
           apt-get update && apt-get install -y curl jq procps git && apt-get clean
           pip install "aiperf==0.10.0";
🤖 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 `@recipes/qwen3-32b-fp8/trtllm/disagg/perf.yaml` around lines 27 - 33, The
shell block in the perf command currently runs under /bin/sh without fail-fast
behavior, so failures in the apt-get or pip install steps can still reach later
commands and mask a bad benchmark run. Update the command block to fail
immediately before the aiperf pin is used by adding fail-fast handling at the
top of the script block in the command array (or explicitly guarding the
critical commands with exit-on-failure) so the benchmark job cannot continue
after a failed install or profile step.
🤖 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 `@recipes/glm-5-nvfp4/sglang/disagg/perf.yaml`:
- Line 69: The pip install step for aiperf in the benchmark setup is not
arm64-safe because aiperf==0.10.0 pulls source-only dependencies on Linux
aarch64 and will fail in the non-root user install path. Update the perf setup
to either use an arm64-capable base image that already includes the required
build toolchain or switch the aiperf dependency to a version with an arm64
wheel, keeping the change in the benchmark install block that also installs
transformers and tokenizers.

In `@recipes/gpt-oss-120b/trtllm/agg/perf.yaml`:
- Line 32: The perf recipe installs aiperf directly in the runtime image, but on
arm64 this can fail because crick is built from sdist and the base image lacks a
compiler toolchain. Update the setup around the pip install in the perf.yaml
recipe to ensure gcc/build-essential (or an equivalent build toolchain) is
installed before invoking pip install aiperf, or otherwise use a prebuilt image
with aiperf already baked in; keep the change localized to the aiperf install
step in this recipe.

In `@recipes/gpt-oss-120b/trtllm/disagg/perf.yaml`:
- Line 32: Add the compiler toolchain step before the aiperf installation in the
perf setup so Linux arm64 can build crick from source on GB200 nodes. Update the
startup sequence around the pip install for aiperf==0.10.0 to ensure
build-essential/gcc is present, or otherwise use a prebuilt image/dependency
path, so the install in this perf.yaml job no longer fails during startup.

In `@recipes/kimi-k2.5/trtllm/agg-eagle-kv-router/perf.yaml`:
- Line 54: The startup command in the perf job installs a package set that can
fail on arm64 because aiperf==0.10.0 brings in crick, which needs to build from
source on Linux aarch64. Update the job setup around the pip install step to
either install the required build toolchain and compiler headers before running
pip, or constrain this workload to amd64 via the relevant job/pod configuration.
Use the pip install command in the perf.yaml startup sequence as the anchor for
the fix.

In `@recipes/qwen3-32b-fp8/vllm/disagg/perf.yaml`:
- Line 22: The perf job installs aiperf in the Qwen disagg setup, but the base
image lacks a native build toolchain needed when crick is built from source on
Linux arm64. Update the setup step around the pip install in the disagg perf
workflow to install build-essential (or equivalent compiler tooling) before
invoking aiperf, or otherwise constrain the job to amd64 so the install path
does not require source compilation.

In `@recipes/qwen3-32b/vllm/agg-round-robin/perf.yaml`:
- Line 23: The perf job setup in the aiperf install step assumes aarch64 can
build source-only dependencies, but the container currently only installs
runtime tools and will fail on arm64. Update the job definition around the pip
install aiperf==0.10.0 step by either adding the required Linux build toolchain
to the image/setup or constraining this manifest to amd64 so the install path is
only used on supported architecture.

In `@recipes/qwen3-vl-32b-fp8/benchmark/perf.yaml`:
- Line 31: The benchmark setup in perf.yaml installs aiperf without ensuring
arm64 build dependencies are present, which can break on python:3.12-slim when
crick==0.0.8 falls back to a source build. Update the install step around the
aiperf command to add gcc and libc6-dev for arm64 before pip install, or
otherwise constrain the job to amd64; use the existing benchmark setup block to
keep the change localized.

---

Outside diff comments:
In `@recipes/deepseek-r1/trtllm/disagg/wide_ep/gb200/perf.yaml`:
- Around line 28-34: The shell block in the benchmark command needs fail-fast
behavior so installation or profiling errors do not get masked by later
commands. Update the script body used by the command sequence to enable
immediate exit on failure (or add explicit exits around the critical
install/profile steps) before the new aiperf pin is used, so failures in the pip
install or subsequent benchmark commands stop the Job instead of reaching the
trailing echo/ls. Use the command block under the perf YAML entry to apply the
fix consistently.

In `@recipes/qwen3-235b-a22b-fp8/trtllm/disagg/hopper/perf.yaml`:
- Around line 27-33: The shell block in the command script can continue past
failed setup or profiling steps because it runs under /bin/sh without fail-fast
behavior. Update the block in the perf config to enable immediate failure at the
start of the script body, or explicitly guard the critical commands so that the
apt-get, pip install of aiperf, and any subsequent aiperf profile invocation
cannot fall through to later echo/ls steps; use the shell command block itself
as the fix point.

In `@recipes/qwen3-32b-fp8/trtllm/agg/perf.yaml`:
- Around line 27-33: The shell block in the command script can continue after a
failed install or benchmark step because it runs under /bin/sh without fail-fast
behavior. Update the block that installs aiperf and runs the benchmark so it
exits immediately on error, either by enabling strict shell mode at the start or
by explicitly guarding the critical commands with immediate exits. Use the
existing command block and the aiperf install/profile steps as the key places to
apply the fix.

In `@recipes/qwen3-32b-fp8/trtllm/disagg/perf.yaml`:
- Around line 27-33: The shell block in the perf command currently runs under
/bin/sh without fail-fast behavior, so failures in the apt-get or pip install
steps can still reach later commands and mask a bad benchmark run. Update the
command block to fail immediately before the aiperf pin is used by adding
fail-fast handling at the top of the script block in the command array (or
explicitly guarding the critical commands with exit-on-failure) so the benchmark
job cannot continue after a failed install or profile step.
🪄 Autofix (Beta)

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: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 0ac9c808-0e4b-4167-a66d-c5d93b44e27a

📥 Commits

Reviewing files that changed from the base of the PR and between cc9ebac and ef47467.

📒 Files selected for processing (41)
  • benchmarks/frontend/scripts/README.md
  • benchmarks/frontend/scripts/sweep_k8s/aiperf.py
  • benchmarks/pyproject.toml
  • container/deps/requirements.benchmark.txt
  • container/templates/frontend.Dockerfile
  • docs/benchmarks/deepseek-v3-2-wideep-routing.mdx
  • docs/benchmarks/kv-router-ab-testing.md
  • docs/recipes/deepseek-v3-2-nvfp4.mdx
  • recipes/deepseek-r1/trtllm/disagg/wide_ep/gb200/perf.yaml
  • recipes/deepseek-v32-fp4/trtllm/agg-round-robin/perf.yaml
  • recipes/deepseek-v32-fp4/trtllm/disagg-kv-router/perf.yaml
  • recipes/deepseek-v4/deepseek-v4-pro/vllm/disagg/gb200/perf.yaml
  • recipes/glm-5-nvfp4/sglang/disagg/efa/perf.yaml
  • recipes/glm-5-nvfp4/sglang/disagg/perf.yaml
  • recipes/gpt-oss-120b/trtllm/agg/perf.yaml
  • recipes/gpt-oss-120b/trtllm/disagg/perf.yaml
  • recipes/kimi-k2.5/trtllm/agg-eagle-kv-router/perf.yaml
  • recipes/kimi-k2.5/trtllm/agg-eagle-round-robin/perf.yaml
  • recipes/kimi-k2.5/trtllm/agg-round-robin/perf.yaml
  • recipes/kimi-k2.5/trtllm/disagg-eagle-kv-router/perf.yaml
  • recipes/kimi-k2.6/perf/perf.yaml
  • recipes/llama-3-70b/vllm/agg/perf.yaml
  • recipes/llama-3-70b/vllm/disagg-multi-node/perf.yaml
  • recipes/llama-3-70b/vllm/disagg-single-node/perf.yaml
  • recipes/nemotron-3-super/perf/perf.yaml
  • recipes/nemotron-3-ultra/perf/README.md
  • recipes/nemotron-3-ultra/perf/perf.yaml
  • recipes/qwen3-235b-a22b-fp8/trtllm/agg/blackwell/perf.yaml
  • recipes/qwen3-235b-a22b-fp8/trtllm/agg/hopper/perf.yaml
  • recipes/qwen3-235b-a22b-fp8/trtllm/disagg/blackwell/perf.yaml
  • recipes/qwen3-235b-a22b-fp8/trtllm/disagg/hopper/perf.yaml
  • recipes/qwen3-32b-fp8/trtllm/agg/perf.yaml
  • recipes/qwen3-32b-fp8/trtllm/disagg/perf.yaml
  • recipes/qwen3-32b-fp8/vllm/disagg/perf.yaml
  • recipes/qwen3-32b/vllm/agg-round-robin/perf.yaml
  • recipes/qwen3-32b/vllm/disagg-kv-router/perf.yaml
  • recipes/qwen3-vl-30b/vllm/agg-embedding-cache/perf.yaml
  • recipes/qwen3-vl-32b-fp8/benchmark/perf.yaml
  • recipes/qwen3.6-35b/README.md
  • recipes/qwen3.6-35b/perf.yaml
  • tests/fault_tolerance/deploy/client.py

Comment thread recipes/glm-5-nvfp4/sglang/disagg/perf.yaml
- |
apt-get update && apt-get install -y curl jq procps git && apt-get clean
pip install git+https://github.com/ai-dynamo/aiperf.git@54cd6dc820bff8bfebc875da104e59d745e14f75;
pip install "aiperf==0.10.0";

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.

🩺 Stability & Availability | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '--- perf.yaml context ---\n'
sed -n '1,120p' recipes/gpt-oss-120b/trtllm/agg/perf.yaml

printf '\n--- aiperf references in repo ---\n'
rg -n "aiperf|crick|build-essential|gcc|python:3.12-slim|arm64|aarch64" recipes/gpt-oss-120b -S || true

Repository: ai-dynamo/dynamo

Length of output: 245


🌐 Web query:

aiperf 0.10.0 PyPI Linux aarch64 crick sdist build toolchain install notes

💡 Result:

When installing AIPerf version 0.10.0 on Linux aarch64 (arm64) systems, you must install the system build toolchain before running pip install because the dependency crick is provided only as a source distribution (sdist) and requires a C compiler at installation time [1][2][3]. For Debian or Ubuntu-based distributions, install the necessary tools using [1][2][3]: sudo apt install build-essential For RHEL or CentOS-based distributions, use [1][2][3]: sudo yum groupinstall "Development Tools" Once the build toolchain is present, you can proceed with the standard installation in a virtual environment [1][2][3]: python3 -m venv venv source venv/bin/activate pip install aiperf This requirement is specific to Linux aarch64 environments. Other platforms, such as Linux x86_64, macOS, and Windows, typically install from pre-built wheels and do not require a system build toolchain [1][2][3].

Citations:


🏁 Script executed:

#!/bin/bash
set -euo pipefail

sed -n '1,120p' recipes/gpt-oss-120b/trtllm/agg/perf.yaml

printf '%s\n' '--- nearby aiperf references ---'
rg -n "aiperf|python:3.12-slim|build-essential|gcc|arm64|aarch64" recipes/gpt-oss-120b/trtllm/agg/perf.yaml recipes/gpt-oss-120b -S || true

Repository: ai-dynamo/dynamo

Length of output: 6733


Install a build toolchain before pip install aiperf on arm64.

This recipe targets ARM64 nodes, and aiperf==0.10.0 still needs a system compiler there because crick installs from sdist. python:3.12-slim doesn’t include gcc/build-essential, so the runtime install will fail unless the toolchain is added or aiperf is baked into the image.

🤖 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 `@recipes/gpt-oss-120b/trtllm/agg/perf.yaml` at line 32, The perf recipe
installs aiperf directly in the runtime image, but on arm64 this can fail
because crick is built from sdist and the base image lacks a compiler toolchain.
Update the setup around the pip install in the perf.yaml recipe to ensure
gcc/build-essential (or an equivalent build toolchain) is installed before
invoking pip install aiperf, or otherwise use a prebuilt image with aiperf
already baked in; keep the change localized to the aiperf install step in this
recipe.

Comment thread recipes/gpt-oss-120b/trtllm/disagg/perf.yaml
ulimit -n 600000
apt-get update && apt-get install -y curl jq procps git && apt-get clean
pip install "aiperf==0.7.0" protobuf "transformers==4.57.3"
pip install "aiperf==0.10.0" protobuf "transformers==4.57.3"

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.

🩺 Stability & Availability | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== perf.yaml context =="
sed -n '1,140p' recipes/kimi-k2.5/trtllm/agg-eagle-kv-router/perf.yaml | cat -n

echo
echo "== search for aiperf/crick references =="
rg -n "aiperf|crick|arm64|aarch64|python:3.12-slim" recipes/kimi-k2.5/trtllm/agg-eagle-kv-router -S || true

Repository: ai-dynamo/dynamo

Length of output: 8115


🌐 Web query:

aiperf 0.10.0 PyPI Linux aarch64 crick sdist build toolchain arm64

💡 Result:

AIPerf version 0.10.0 is available on PyPI [1]. When installing aiperf on Linux aarch64 (ARM64) systems, you must install a system build toolchain before running pip install aiperf [2][3]. This requirement exists because one of the package's dependencies, crick, does not provide pre-built wheels for the aarch64 architecture and instead ships only a source distribution (sdist) [2][3]. Consequently, pip must compile the extension at install time, which requires a C compiler and development headers present on the host system [2][3]. To prepare your environment, install the appropriate build toolchain for your distribution: - Debian/Ubuntu: sudo apt install build-essential [2][3] - RHEL/CentOS: sudo yum groupinstall "Development Tools" [2][3] In contrast, Linux x86_64, macOS, and Windows environments typically install aiperf using pre-built wheels, which do not require a local build toolchain [2][3].

Citations:


Install a build toolchain before pip install on arm64. aiperf==0.10.0 pulls in crick, which only ships an sdist on Linux aarch64, so this python:3.12-slim job will fail during startup on arm64 unless you add build-essential/compiler headers first or pin the pod to amd64.

🤖 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 `@recipes/kimi-k2.5/trtllm/agg-eagle-kv-router/perf.yaml` at line 54, The
startup command in the perf job installs a package set that can fail on arm64
because aiperf==0.10.0 brings in crick, which needs to build from source on
Linux aarch64. Update the job setup around the pip install step to either
install the required build toolchain and compiler headers before running pip, or
constrain this workload to amd64 via the relevant job/pod configuration. Use the
pip install command in the perf.yaml startup sequence as the anchor for the fix.

- |
apt-get update && apt-get install -y curl jq procps git && apt-get clean
pip install git+https://github.com/ai-dynamo/aiperf.git@54cd6dc820bff8bfebc875da104e59d745e14f75;
pip install "aiperf==0.10.0";

@coderabbitai coderabbitai Bot Jun 29, 2026

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.

🩺 Stability & Availability | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== perf.yaml =="
cat -n recipes/qwen3-32b-fp8/vllm/disagg/perf.yaml

echo
echo "== file stats =="
wc -l recipes/qwen3-32b-fp8/vllm/disagg/perf.yaml

echo
echo "== nearby references to aiperf =="
rg -n "aiperf|crick|aarch64|arm64|gcc|build-essential" recipes/qwen3-32b-fp8 -S || true

Repository: ai-dynamo/dynamo

Length of output: 7872


🌐 Web query:

aiperf 0.10.0 aarch64 crick sdist build toolchain pip install

💡 Result:

When installing AIPerf version 0.10.0 on Linux aarch64 (arm64) systems, you must install the system build toolchain before running pip install because the dependency crick ships only as an sdist (source distribution) and requires a C compiler to build during the installation process [1][2][3]. For common Linux distributions, you can install the necessary build toolchain using the following commands: - Debian/Ubuntu: sudo apt install build-essential [1][3] - RHEL/CentOS: sudo yum groupinstall "Development Tools" [1][3] This requirement is specific to Linux aarch64 architectures. On Linux x86_64, macOS, and Windows, AIPerf is installed via pre-built wheels and does not require a system build toolchain [1][2][4].

Citations:


🌐 Web query:

PyPI aiperf 0.10.0 crick aarch64 build dependencies

💡 Result:

When installing aiperf 0.10.0 on aarch64 (ARM64) Linux, the dependency crick does not provide a pre-built wheel, forcing an installation from the source distribution (sdist) [1][2][3]. As a result, you must have a C compiler and the system build toolchain installed on your host system before running pip install aiperf [1][2][4]. To satisfy these build requirements, you should install the necessary development tools for your specific Linux distribution: - For Debian or Ubuntu-based systems: sudo apt install build-essential [1][3] - For RHEL, CentOS, or compatible systems: sudo yum groupinstall "Development Tools" [1][3] For other platforms, such as Linux x86_64, macOS, and Windows, aiperf and its dependencies typically install from pre-built wheels, meaning no additional system-level C compiler is required [1][4].

Citations:


Install a build toolchain before pip install aiperf aiperf==0.10.0 pulls in crick, which builds from source on Linux arm64. python:3.12-slim only installs curl/jq/procps/git here, so this job will fail on arm64 unless you add build-essential or pin the job to amd64.

🤖 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 `@recipes/qwen3-32b-fp8/vllm/disagg/perf.yaml` at line 22, The perf job
installs aiperf in the Qwen disagg setup, but the base image lacks a native
build toolchain needed when crick is built from source on Linux arm64. Update
the setup step around the pip install in the disagg perf workflow to install
build-essential (or equivalent compiler tooling) before invoking aiperf, or
otherwise constrain the job to amd64 so the install path does not require source
compilation.

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.

added a comment
#NOTE: aiperf>=0.8.0 depends on crick (no prebuilt arm64 wheel); on arm64
# nodes the apt-get step above must include gcc and libc6-dev so pip can
# compile crick from source.

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.

@pvijayakrish, thanks for adding the note — that helps document the caveat.

I don’t think this fully resolves the issue, though. At Line 22 the job still installs aiperf==0.10.0 after only installing curl jq procps git, so on an arm64 node it would still fail unless the command also installs the compiler headers/toolchain.

If this job can run on arm64, please update the apt-get install line to include the required packages (for example gcc and libc6-dev, or build-essential). If it is guaranteed to run only on amd64, then constraining the job to amd64 would also address it.


🧠 Learnings used
Learnt from: karen-sy
Repo: ai-dynamo/dynamo PR: 7915
File: recipes/qwen3-32b-fp8/vllm/disagg/deploy.yaml:13-25
Timestamp: 2026-04-09T05:39:40.946Z
Learning: For vLLM disaggregated deployment recipes under recipes/**/vllm/disagg, avoid setting `envFromSecret: hf-token-secret` (HuggingFace token) on the Frontend service. The HuggingFace token secret should only be provided to worker components (e.g., `VllmPrefillWorker`, `VllmDecodeWorker` or any component that actually pulls/loads model weights). Since the Frontend only routes requests, it should not receive the HF token secret. In reviews, flag Frontend/HPA/frontend pods that include `envFromSecret: hf-token-secret` unless there is a clear, automated need to access model assets in the Frontend.

Learnt from: karen-sy
Repo: ai-dynamo/dynamo PR: 7915
File: recipes/qwen3-32b-fp8/vllm/disagg/deploy.yaml:13-25
Timestamp: 2026-04-09T05:39:40.946Z
Learning: For vLLM disaggregated deployment recipes in ai-dynamo/dynamo (files under recipes/**/vllm/disagg/), do not add the `--disaggregation-mode decode` flag to the `VllmDecodeWorker` args unless there is a confirmed routing/handler behavior change. Dynamo routes requests to the same decode handler regardless of whether the flag is explicitly set, so omitting the flag in these recipes is intentional and should not be treated as a bug during review.

Learnt from: tanmayv25
Repo: ai-dynamo/dynamo PR: 8584
File: lib/backend-common/examples/rotating_tokens/docker-compose.yml:41-48
Timestamp: 2026-04-23T01:22:51.416Z
Learning: In this repository, `bitnamilegacy/etcd` is an intentional, repo-wide convention for deployments. When reviewing YAML files (e.g., docker-compose, Helm `values.yaml`, ECS task/compose manifests), do not flag occurrences of `bitnamilegacy/etcd` as issues or deviations from the standard. Treat any future migration away from it as a holistic, coordinated change documented in `deploy/helm/charts/platform/README.md`, not as isolated per-file replacements.

Learnt from: ritazh
Repo: ai-dynamo/dynamo PR: 8355
File: recipes/qwen3.6-35b-a3b/vllm/agg/deploy.yaml:43-55
Timestamp: 2026-05-03T17:54:20.684Z
Learning: In this repository, vLLM deployment recipe YAMLs that reference the vLLM runtime image should use the planned stable image tag `nvcr.io/nvidia/ai-dynamo/vllm-runtime:1.1.0` (which bundles vLLM 0.19.0+), not the dev tag `nvcr.io/nvidia/ai-dynamo/vllm-runtime:1.1.0-dev.1`. Update image references accordingly in recipes under `recipes/qwen3.6-35b-a3b/` and other similar recipe paths once `1.1.0` is published.

Learnt from: hutm
Repo: ai-dynamo/dynamo PR: 8927
File: recipes/deepseek-r1/trtllm/agg/b200/perf.yaml:35-35
Timestamp: 2026-05-29T00:27:15.634Z
Learning: For benchmark/performance Kubernetes Job manifests named `perf.yaml` in the ai-dynamo/dynamo repo, reviewers should treat using `sysctl -w net.ipv4.ip_local_port_range="1024 65000"` inside the container’s shell command/entrypoint together with `securityContext.privileged: true` as an intentional repo-wide convention. Do not flag or suggest changing either setting on a per-file basis, since using pod-level `securityContext.sysctls` for `net.*` would require kubelet `--allowed-unsafe-sysctls` allowlisting that may not be available on target clusters. If you want to harden this behavior, propose it as a coordinated change across all `perf.yaml` files holistically (not a single-file deviation).


# Install benchmarking tool
pip install aiperf==0.6.0
pip install aiperf==0.10.0

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.

🩺 Stability & Availability | 🟠 Major | 🏗️ Heavy lift

🧩 Analysis chain

🏁 Script executed:

sed -n '1,80p' recipes/qwen3-32b/vllm/agg-round-robin/perf.yaml

Repository: ai-dynamo/dynamo

Length of output: 2939


🌐 Web query:

aiperf 0.10.0 Linux aarch64 crick sdist build toolchain install notes

💡 Result:

When installing AIPerf 0.10.0 on a Linux aarch64 (ARM64) system, you must manually install a C build toolchain before running the installation command. This requirement exists because one of AIPerf's dependencies, crick, is distributed only as a source distribution (sdist) and requires compilation at install time [1][2][3]. To prepare your environment, install the appropriate build toolchain for your distribution: For Debian/Ubuntu systems: sudo apt install build-essential For RHEL/CentOS systems: sudo yum groupinstall "Development Tools" Once the toolchain is installed, you can proceed with the standard installation of AIPerf using pip: pip install aiperf Please note that this step is specific to Linux aarch64 environments. Other platforms, such as Linux x86_64, macOS, and Windows, receive pre-built wheels and do not require a local C compiler toolchain during the installation process [1][2][4].

Citations:


Add a build toolchain or pin this job to amd64

aiperf 0.10.0 needs a local C toolchain on Linux aarch64 because crick is source-only there. This pod only installs tmux, wget, curl, and jq into python:3.11, so arm64 runs will fail at pip install aiperf==0.10.0 unless you bake in the compiler tools or restrict the manifest to amd64.

🤖 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 `@recipes/qwen3-32b/vllm/agg-round-robin/perf.yaml` at line 23, The perf job
setup in the aiperf install step assumes aarch64 can build source-only
dependencies, but the container currently only installs runtime tools and will
fail on arm64. Update the job definition around the pip install aiperf==0.10.0
step by either adding the required Linux build toolchain to the image/setup or
constraining this manifest to amd64 so the install path is only used on
supported architecture.

apt-get update && apt-get install -y curl jq procps git && apt-get clean

pip install aiperf==0.9.0
pip install aiperf==0.10.0

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.

🩺 Stability & Availability | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '\n== perf.yaml relevant lines ==\n'
sed -n '1,260p' recipes/qwen3-vl-32b-fp8/benchmark/perf.yaml | nl -ba | sed -n '1,120p'

printf '\n== sweep_k8s/aiperf.py relevant lines ==\n'
sed -n '1,220p' benchmarks/frontend/scripts/sweep_k8s/aiperf.py | nl -ba | sed -n '1,140p'

printf '\n== frontend.Dockerfile relevant lines ==\n'
sed -n '1,120p' container/templates/frontend.Dockerfile | nl -ba | sed -n '1,80p'

printf '\n== search for aiperf / crick references ==\n'
rg -n "aiperf|crick|libc6-dev|gcc" recipes/qwen3-vl-32b-fp8/benchmark/perf.yaml benchmarks/frontend/scripts/sweep_k8s/aiperf.py container/templates/frontend.Dockerfile .ai -S || true

Repository: ai-dynamo/dynamo

Length of output: 226


🏁 Script executed:

#!/bin/bash
set -euo pipefail

python3 - <<'PY'
import json, urllib.request
urls = [
    "https://pypi.org/pypi/aiperf/0.10.0/json",
    "https://pypi.org/pypi/crick/0.0.8/json",
]
for url in urls:
    try:
        with urllib.request.urlopen(url, timeout=15) as r:
            data = json.load(r)
        print(f"== {url} ==")
        print("name:", data["info"]["name"], "version:", data["info"]["version"])
        files = data["releases"].get(data["info"]["version"], [])
        for f in files:
            print(f["filename"], f.get("packagetype"), f.get("python_version"))
    except Exception as e:
        print(f"FAILED {url}: {e}")
PY

Repository: ai-dynamo/dynamo

Length of output: 518


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '\n== perf.yaml relevant lines ==\n'
sed -n '1,260p' recipes/qwen3-vl-32b-fp8/benchmark/perf.yaml | cat -n | sed -n '1,120p'

printf '\n== sweep_k8s/aiperf.py relevant lines ==\n'
sed -n '1,220p' benchmarks/frontend/scripts/sweep_k8s/aiperf.py | cat -n | sed -n '1,140p'

printf '\n== frontend.Dockerfile relevant lines ==\n'
sed -n '1,120p' container/templates/frontend.Dockerfile | cat -n | sed -n '1,80p'

printf '\n== search for aiperf / crick / arm64 install deps ==\n'
rg -n "aiperf|crick|libc6-dev|gcc|aarch64|arm64" recipes/qwen3-vl-32b-fp8/benchmark/perf.yaml benchmarks/frontend/scripts/sweep_k8s/aiperf.py container/templates/frontend.Dockerfile .ai -S || true

Repository: ai-dynamo/dynamo

Length of output: 21825


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '\n== perf.yaml container/spec tail ==\n'
sed -n '120,260p' recipes/qwen3-vl-32b-fp8/benchmark/perf.yaml | cat -n

printf '\n== perf.yaml architecture/node scheduling hints ==\n'
rg -n "nodeSelector|affinity|arch|arm64|amd64|kubernetes.io/arch|node-name|tolerations" recipes/qwen3-vl-32b-fp8/benchmark/perf.yaml -S || true

printf '\n== PyPI simple pages for crick==0.0.8 and aiperf==0.10.0 (wheel filenames) ==\n'
python3 - <<'PY'
import ssl, urllib.request, re
ctx = ssl._create_unverified_context()
for url in [
    "https://pypi.org/simple/aiperf/",
    "https://pypi.org/simple/crick/",
]:
    try:
        with urllib.request.urlopen(url, context=ctx, timeout=20) as r:
            html = r.read().decode("utf-8", "replace")
        print(f"URL: {url}")
        for needle in ["aiperf-0.10.0", "crick-0.0.8"]:
            if needle in html:
                print(f"  contains {needle}")
        # print matching wheel links around versions of interest
        for pattern in [r'href="([^"]*aiperf-0\.10\.0[^"]*)"', r'href="([^"]*crick-0\.0\.8[^"]*)"' ]:
            hits = re.findall(pattern, html, flags=re.I)
            for h in hits[:20]:
                print(" ", h)
    except Exception as e:
        print(f"FAILED {url}: {e}")
PY

Repository: ai-dynamo/dynamo

Length of output: 8518


🏁 Script executed:

#!/bin/bash
set -euo pipefail

python3 - <<'PY'
import ssl, urllib.request, json, re
ctx = ssl._create_unverified_context()
for pkg, ver in [("aiperf","0.10.0"), ("crick","0.0.8")]:
    url = f"https://pypi.org/pypi/{pkg}/{ver}/json"
    try:
        with urllib.request.urlopen(url, context=ctx, timeout=20) as r:
            data = json.load(r)
        print(f"== {pkg} {ver} ==")
        files = data.get("releases", {}).get(ver, [])
        if not files:
            files = data.get("urls", [])
        for f in files:
            fn = f.get("filename", "")
            if fn:
                print(fn)
    except Exception as e:
        print(f"FAILED {url}: {e}")
PY

Repository: ai-dynamo/dynamo

Length of output: 1790


Install gcc/libc6-dev on arm64 before pip install aiperf==0.10.0.

aiperf is a pure-Python wheel, but its crick==0.0.8 dependency has no manylinux aarch64 wheel, so an unconstrained pod on python:3.12-slim can fail during the install step on arm64. Add the arm64 build deps here or pin the Job to amd64.

🤖 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 `@recipes/qwen3-vl-32b-fp8/benchmark/perf.yaml` at line 31, The benchmark setup
in perf.yaml installs aiperf without ensuring arm64 build dependencies are
present, which can break on python:3.12-slim when crick==0.0.8 falls back to a
source build. Update the install step around the aiperf command to add gcc and
libc6-dev for arm64 before pip install, or otherwise constrain the job to amd64;
use the existing benchmark setup block to keep the change localized.

Signed-off-by: pvijayakrish <pvijayakrish@nvidia.com>
@datadog-official

This comment has been minimized.

@pvijayakrish
pvijayakrish merged commit 05303aa into main Jun 29, 2026
86 of 87 checks passed
@pvijayakrish
pvijayakrish deleted the pvijayakrish/aiperf-version-bump branch June 29, 2026 22:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

chore container documentation Improvements or additions to documentation size/L

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants