Aorta benchmark test configuration file for Cluster Validation Suite (CVS)#
2026-09-24
8 min read time
The Aorta benchmark runs distributed training with RCCL in a container, collects PyTorch profiler traces, and validates iteration time and compute/communication overlap. Metrics are derived from host-side trace parsing (raw traces or TraceLens reports when available).
aorta_benchmark.yaml#
The shipped sample is cvs/input/config_file/aorta/aorta_benchmark.yaml (path relative to the CVS package directory; see How to run below).
Path placeholders#
When you run test_aorta, the suite loads the cluster file, resolves cluster placeholders (e.g. {user-id} in username), then resolves Aorta YAML placeholders with the same helper used by other CVS test configs: {user-id}, {user}, {home}, {home-mount-dir}, {node-dir-name}. Replacement values come from the validated cluster model (username and optional home_mount_dir_name / node_dir_name). Manual <changeme> markers are rejected.
You may instead use fully absolute paths with no placeholders. Other entry points that validate YAML directly (without test_aorta) do not perform this step unless they call the resolver explicitly.
Note
aorta_path must exist on the host unless aorta_auto_clone is true and aorta_clone_url is set; the runner can then clone into aorta_path during setup.
Example aorta_benchmark.yaml (aligned with the shipped sample)
aorta_path: /home/{user-id}/aorta
aorta_auto_clone: false
aorta_clone_url: null
container_mount_path: /mnt
base_config: config/profile_overlap_2gpu.yaml
docker:
image: jeffdaily/pytorch:torchrec-dlrm-complete
container_name: aorta-benchmark
shm_size: 17G
network_mode: host
privileged: true
rccl:
clone_url: https://github.com/ROCmSoftwarePlatform/rccl.git
branch: develop
build_path: /mnt/rccl
environment:
NCCL_MAX_NCHANNELS: 112
NCCL_MAX_P2P_NCHANNELS: 112
NCCL_DEBUG: VERSION
TORCH_NCCL_HIGH_PRIORITY: 1
OMP_NUM_THREADS: 1
RCCL_MSCCL_ENABLE: 0
training_overrides:
training.max_steps: 15
profiling.active: 6
build_script: scripts/launch_rocm.sh
experiment_script: scripts/launch_rocm.sh
gpus_per_node: 8
timeout_seconds: 3600
skip_rccl_build: true
analysis:
enable_tracelens: false
enable_gemm_analysis: false
tracelens_script: scripts/tracelens_single_config/run_tracelens_single_config.sh
gemm_script: scripts/gemm_analysis/run_tracelens_analysis.sh
skip_if_exists: false
multi_node:
master_launch_mode: auto
train_script: train.py
extra_torchrun_args: []
extra_train_args: []
extra_env: {}
collect_traces: true
expected_results:
max_avg_iteration_ms: 12000
min_compute_ratio: 0.01
min_overlap_ratio: 0.0
max_time_variance_ratio: 0.5
Parameters#
The middle column is the schema default: the value Pydantic applies when you omit that key from your YAML. It is not a promise about the checked-in sample file.
The dropdown above is the full shipped aorta_benchmark.yaml. Where the sample lists a key, that value wins for that file; compare the sample to the middle column to see explicit overrides.
Note
The shipped sample commonly overrides schema defaults for base_config, build_script, experiment_script, timeout_seconds, skip_rccl_build, training_overrides, analysis.enable_tracelens, and expected_results.
Configuration parameters |
Schema default if omitted |
Description |
|---|---|---|
|
(required) |
Absolute path to Aorta on the host; bind-mounted into the container. Placeholders resolved in |
|
|
If true and |
|
|
Git URL for Aorta when using auto-clone. |
|
|
Mount point inside the container for |
|
|
Aorta config file path relative to |
|
|
Docker image for the benchmark container. |
|
|
Container name. |
|
|
Shared memory size for the container. |
|
|
Docker network mode. |
|
true |
Run the container in privileged mode. |
|
|
RCCL Git URL (used when building RCCL in the container). |
|
|
RCCL branch to build. |
|
|
Path inside the container for the RCCL build. |
|
112 |
Maximum NCCL channels. |
|
112 |
Maximum NCCL P2P channels. |
|
|
NCCL debug level. |
|
1 |
High-priority NCCL streams. |
|
1 |
OpenMP thread count. |
|
0 |
MSCCL enable flag. |
|
|
Overrides passed to Aorta via |
|
|
RCCL build script path relative to the container mount (skipped when |
|
|
Experiment/launch script path relative to the container mount. |
|
8 |
GPUs per node. |
|
10800 |
Benchmark timeout in seconds. |
|
|
If true, skip building RCCL (use an existing build / container setup). |
|
|
Run TraceLens in the container when available (shipped sample sets |
|
|
Run GEMM analysis (sweep workflows). |
|
|
TraceLens script relative to |
|
|
GEMM analysis script relative to |
|
|
Skip analysis if |
|
|
|
|
|
Processes/GPUs per node passed as |
|
|
Port for the |
|
|
Override the rendezvous address ( |
|
|
Aorta training entry script relative to |
|
|
Additional |
|
|
Additional |
|
|
Extra environment variables exported inside each container before |
|
|
When true, the runner pulls each node’s |
|
optional |
Maximum acceptable average iteration time (ms). |
|
optional |
Minimum compute ratio (compute time / iteration time). |
|
optional |
Minimum compute–communication overlap ratio. |
|
optional |
Maximum iteration time variance across ranks (e.g. std/mean). |
Run Aorta benchmark commands#
Use the CVS package directory as the working directory: the directory that contains the input tree (in a typical clone, the inner cvs directory next to tests and lib). Example:
cd /path/to/your/cvs-checkout/cvs
cvs run test_aorta \
--cluster_file input/cluster_file/cluster.json \
--config_file input/config_file/aorta/aorta_benchmark.yaml \
-v --log-cli-level=INFO
Provide a valid cluster_file. Ensure aorta_path exists after placeholder resolution, or enable auto-clone with a valid URL. With skip_rccl_build: false, the runner builds RCCL from rccl.clone_url unless skipped; with skip_rccl_build: true, the experiment script runs without that build step. The runner collects torch_traces (PyTorch profiler output) and optionally runs TraceLens inside the container. Parsing and threshold checks run on the host.
Alternate mirrors for rccl.clone_url may work if they track the same upstream; the canonical default string in schema, runner, and sample is https://github.com/ROCmSoftwarePlatform/rccl.git.
Multi-node disaggregated launch#
By default, when the cluster file contains more than one node, test_aorta runs a disaggregated launch: a single Aorta container is started on every node, then the runner kicks off torchrun in parallel on each container with --nnodes, --node_rank, --master_addr, and --master_port set so the ranks rendezvous on the head node. This mirrors Aorta’s own scripts/multi_node/local_launch.sh pattern and brings the benchmark in line with the other multi-node CVS suites (sglang, pytorch-xdit), which only require one cluster.json for a multi-node run.
The multi-node behavior is controlled by the multi_node block in aorta_benchmark.yaml:
multi_node:
master_launch_mode: auto # auto | script | torchrun
nproc_per_node: 8 # defaults to gpus_per_node
master_port: 29500 # default: free ephemeral port
master_addr: 10.0.0.1 # default: head node's node_vpc_ips entry, else its identifier
train_script: train.py
extra_torchrun_args: []
extra_train_args: []
extra_env:
NCCL_SOCKET_IFNAME: bond0
NCCL_IB_HCA: rdma0,rdma1,rdma2,rdma3,rdma4,rdma5,rdma6,rdma7
NCCL_IB_GID_INDEX: "3"
collect_traces: true
Single-node clusters keep using the configured experiment_script (master_launch_mode: auto resolves to script). Force the disaggregated path with master_launch_mode: torchrun if you want it for a single-node cluster too.
When collect_traces is true, every node’s torch_profiler/ directories are rsynced back to <aorta_path>/combined_traces/node_<rank>/ on the head node and exposed as the torch_traces artifact, so the existing host parsers and threshold checks see one unified tree without further configuration.
Expected results and artifacts#
Validation uses expected_results when fields are set. Artifact layout depends on the Aorta run; the test report (e.g. aorta_benchmark_report.json under the runner output directory) summarizes metrics. Prefer scratch or local disk for aorta_path when NFS root_squash prevents the container from writing artifacts/ under your tree.