Cluster Validation Suite (CVS) 0.3.0 release notes#
2026-10-23
6 min read time
These release notes describe notable changes since the previous CVS release.
Release highlights#
This release adds Run Deck output for most suites and first-class Slurm and SPUR support, letting cvs run launch as a job step without passwordless SSH. RCCL gains topology verification, per-node dmesg scanning during tests, and scale-up bandwidth references. ibperf adds vPOD-aware node pairing and tighter bandwidth enforcement. The legacy dmesg parser is removed; all kernel-log scanning now uses AMD node-scraper.
Added#
Run Deck output for health, platform, preflight, ibperf, MORI, ANC, RCCL, training, and inference suites. Install suites do not produce a Run Deck.
cvs runsupports Slurm and SPUR: launch withsrunorspur runand supported suites run without passwordless SSH. See Run Cluster Validation Suite (CVS) on managed compute.ibperf: vPOD-aware node pairing using
ibperf.pairing_mode.RCCL:
Scale-up bandwidth references (
cvs_params.fabric).Bus-bandwidth tolerance (
cvs_params.bus_bw_tolerance, default0.95).Topology verification: perf and regression compare the reported topology with the launched topology (
cvs_params.topology_check, defaultwarn).Per-test dmesg scanning between each test’s start and end markers (
cvs_params.dmesg_during_test, default"False").Sample config gates scale-out
all_reduce_perfat the published MI350X/MI355X acceptance bar inresults.thor; MI300X clusters must override those entries.Single-node 8-GPU guide configs
mi300x_rccl_single_node_config.jsonandmi350x_rccl_single_node_config.json.
Platform
test_check_be_nic_link_speedchecks backend NIC link speed againstnic_link_speed(default400000Mb/s).
Changed#
vLLM configs that set
HF_TOKENorHUGGING_FACE_HUB_TOKENincontainer.envfail to load; setpaths.hf_token_fileinstead, pointing to a path mounted in the container on each node.ibperf:
A node with no partner in the discovered NIC set fails and is excluded, instead of running as a server with no client.
Each node’s perftest binary must support ROCm DMA-BUF, unless
ibperf.require_dmabufis"False".
RCCL:
Perf, regression, and pairwise run through the orchestrator and work with the container backend.
Result files default to the run directory; each run verifies the directory is shared before launching. Container runs must mount it at the same host and container path.
verify_bw_dipandverify_lat_dipdefault to"False". Setting either to"True"with no matchingresultsreference now fails instead of warning and skipping; re-baseline thresholds first.A
nullresultsentry means no published threshold and skips the bandwidth gate; absent or empty entries still fail.Graphs and result tables chart rows the checks evaluate, with one series per data type (
<collective> [type=<dtype>]) when multipledata_typesare configured. Heatmap reference JSONs saved from earlier runs must be regenerated.
RCCL and Aorta report each check as a pytest sub-test, shown as per-case rows in the HTML report and JUnit XML. Sub-tests add to the JUnit
teststotal.Custom
Orchestratorsubclasses must implementexec_on_host,upload_to_head,download_from_head, anddownload_file.Node Smoke Tier 1, Tier 2, and Tier 3 run by default. To disable, set
node_smoke_tier1.connectivity_modeandnode_smoke_tier3.connectivity_modeto"skip".cvs runwrites a self-contained pytest HTML report and a text log under<workspace>/cvs_runs/<run_id>/by default. Use--no-htmland--no-log-fileto suppress them.Logged command lines show
<redacted>in place of token, password, secret, and API-key variable values; commands sent to nodes are unchanged.
Fixed#
Aorta script mode (the
aorta_singledefault) now appliestraining_overrides; previously runs silently used YAML values. The applied config is saved aseffective_config.yaml.Kernel-log health checks no longer echo each node’s full dmesg or journal into the run log and HTML report; each scan logs one summary line.
ibperf:
Runs on nodes with fewer than 8 GPUs instead of failing with
KeyError: 'card4'.verify_bwnow enforcesexpected_results; previously tests passed regardless of measured bandwidth. Configs withverify_bw: "True"might now fail; re-baseline thresholds for your cluster.The sample config sets
durationto10(was30); lower it in configs copied from the old sample.
RCCL:
Perf and regression thresholds and dip checks read the configured top-level
rccl.resultstable; regression reads its collectives fromrccl_test_params.NIC- and rank-keyed
resultsentries are validated like flat entries; invalid values fail with their config path.Bus-bandwidth verification fails when a configured message size has no result row, instead of skipping it.
Result files include the collective name, preserving results from every collective instead of only the last.
Pairwise and incremental runs no longer apply the full cluster’s flat bandwidth thresholds to each sub-run; only NIC- and rank-keyed thresholds carry over.
Malformed JSON results are reported, and a run with no result rows fails on missing bandwidth instead of crashing.
Preflight:
Node Smoke rows pass or fail only for checks Primus reported; a tier failure stays in the HTML report when rows do not show it.
Failure messages name the hosts that failed, not config sections such as
vpod_membership.
vLLM:
DeepSeek V4 sample configs no longer set
HF_HUB_OFFLINEorTRANSFORMERS_OFFLINE, which broke accuracy tasks.Suites accept
spec_decode_*statistics thatvllm bench servereports, instead of failing the sweep.vllm_singleacceptspipeline_parallel_sizegreater than1;vllm_distributedon one host serves with the configured pipeline width.A server that exits during startup fails the cell immediately, instead of waiting out the readiness timeout.
vLLM, ATOM, and SGLang no longer reset xGMI error counters when reading GPU metrics.
Pytest sub-test reports no longer replace the parent test’s Full Log link.
IB topology discovery recognizes AMD Pollara (Ionic) HCA names such as
ionic_0.Containers with
runtime.args.privileged: falsestart on hosts without/dev/infiniband; InfiniBand devices are passed only where the host has them.Platform
test_check_dmesg_driver_errorsno longer fails on[Firmware Bug]:lines or zero-valuedWALKER_ERROR,MAPPING_ERROR, andPROTECTION_FAULT_STATUSlines; non-zero values still fail.
Removed#
The legacy dmesg parser. All dmesg and kernel-journal scans now use AMD node-scraper.
CVS_DMESG_PARSERis no longer read; remove it from run scripts.