refactor(sdk): family-first perf-data layout with dual-read transition (AIC-1501)#1371
Conversation
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Enterprise Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Comment |
Perf Parquet Diff Report
Compared
Per-File Row Diff PreviewShowing the first 3 rows per diff kind for each changed parquet file. Full exact CSVs are in aic-core/src/aiconfigurator_core/systems/data/h200_sxm/attention/vllm/0.18.0/context_attention_perf.parquet
added rows - full CSV: framework,version,device,op_name,kernel_source,batch_size,isl,num_heads,num_key_value_heads,head_dim,beam_width,attn_dtype,kv_cache_dtype,step,window_size,latency
VLLM,0.18.0,NVIDIA H200,context_attention,vllm_flash_attn,1,1,1,1,128,1,bfloat16,bfloat16,0,0,0.009136000027259191
VLLM,0.18.0,NVIDIA H200,context_attention,vllm_flash_attn,1,1,1,1,128,1,bfloat16,bfloat16,0,0,0.00919999989370505
VLLM,0.18.0,NVIDIA H200,context_attention,vllm_flash_attn,1,1,1,1,128,1,bfloat16,bfloat16,0,128,0.009216000015536943aic-core/src/aiconfigurator_core/systems/data/h200_sxm/attention/vllm/0.18.0/generation_attention_perf.parquet
added rows - full CSV: framework,version,device,op_name,kernel_source,batch_size,isl,num_heads,num_key_value_heads,head_dim,beam_width,attn_dtype,kv_cache_dtype,step,window_size,latency
VLLM,0.18.0,NVIDIA H200,generation_attention,vllm_flash_attn,1,1,1,1,128,1,bfloat16,bfloat16,1,0,0.009535999968647957
VLLM,0.18.0,NVIDIA H200,generation_attention,vllm_flash_attn,1,1,1,1,128,1,bfloat16,bfloat16,1,0,0.009674666449427605
VLLM,0.18.0,NVIDIA H200,generation_attention,vllm_flash_attn,1,1,1,1,128,1,bfloat16,bfloat16,1,128,0.009557333464423815aic-core/src/aiconfigurator_core/systems/data/h200_sxm/comm/vllm/0.18.0/custom_allreduce_perf.parquet
added rows - full CSV: framework,version,device,op_name,kernel_source,allreduce_dtype,num_gpus,message_size,latency,backend
vLLM,0.18.0,NVIDIA H200,all_reduce,vLLM_custom_eager,bfloat16,2,1024,0.028388800621032717,vllm_eager
vLLM,0.18.0,NVIDIA H200,all_reduce,vLLM_custom_eager,bfloat16,2,1048576,0.027152318954467774,vllm_eager
vLLM,0.18.0,NVIDIA H200,all_reduce,vLLM_custom_eager,bfloat16,2,128,0.02771392107009888,vllm_eageraic-core/src/aiconfigurator_core/systems/data/h200_sxm/gemm/vllm/0.18.0/gemm_perf.parquet
added rows - full CSV: framework,version,device,op_name,kernel_source,gemm_dtype,m,n,k,latency
VLLM,0.18.0,NVIDIA H200,gemm,vllm_default,bfloat16,1,1024,1024,0.007621333003044128
VLLM,0.18.0,NVIDIA H200,gemm,vllm_default,bfloat16,1,1024,10240,0.01033155537313885
VLLM,0.18.0,NVIDIA H200,gemm,vllm_default,bfloat16,1,1024,12288,0.011239111423492432aic-core/src/aiconfigurator_core/systems/data/h200_sxm/linear_attention/vllm/0.18.0/gdn_perf.parquet
added rows - full CSV: framework,version,device,op_name,kernel_source,phase,batch_size,seq_len,num_tokens,d_model,d_conv,num_k_heads,head_k_dim,num_v_heads,head_v_dim,model_name,latency
vLLM,0.18.0,NVIDIA H200,gdn,causal_conv1d_update,generation,1,1,1,1024,4,16,128,16,128,Qwen/Qwen3.5-0.8B,0.0039680000394582745
vLLM,0.18.0,NVIDIA H200,gdn,causal_conv1d_update,generation,1,1,1,2048,4,16,128,16,128,Qwen/Qwen3.5-2B,0.003497600182890892
vLLM,0.18.0,NVIDIA H200,gdn,causal_conv1d_update,generation,1,1,1,2048,4,16,128,32,128,Qwen/Qwen3.5-35B-A3B,0.0033984001725912093aic-core/src/aiconfigurator_core/systems/data/h200_sxm/moe/vllm/0.18.0/moe_perf.parquet
added rows - full CSV: framework,version,device,op_name,kernel_source,moe_dtype,num_tokens,hidden_size,inter_size,topk,num_experts,moe_tp_size,moe_ep_size,distribution,latency
VLLM,0.18.0,NVIDIA H200,moe,vllm_fused_moe,bfloat16,1,2048,768,8,128,1,1,balanced,0.036714665591716766
VLLM,0.18.0,NVIDIA H200,moe,vllm_fused_moe,bfloat16,1,2048,768,8,128,1,1,power_law_1.01,0.03403519988059998
VLLM,0.18.0,NVIDIA H200,moe,vllm_fused_moe,bfloat16,1,2048,768,8,128,1,1,power_law_1.2,0.03452799916267395aic-core/src/aiconfigurator_core/systems/data/h200_sxm/vllm/0.18.0/context_attention_perf.parquet
removed rows - full CSV: framework,version,device,op_name,kernel_source,batch_size,isl,num_heads,num_key_value_heads,head_dim,beam_width,attn_dtype,kv_cache_dtype,step,window_size,latency
VLLM,0.18.0,NVIDIA H200,context_attention,vllm_flash_attn,1,1,1,1,128,1,bfloat16,bfloat16,0,0,0.009136000027259191
VLLM,0.18.0,NVIDIA H200,context_attention,vllm_flash_attn,1,1,1,1,128,1,bfloat16,bfloat16,0,0,0.00919999989370505
VLLM,0.18.0,NVIDIA H200,context_attention,vllm_flash_attn,1,1,1,1,128,1,bfloat16,bfloat16,0,128,0.009216000015536943aic-core/src/aiconfigurator_core/systems/data/h200_sxm/vllm/0.18.0/custom_allreduce_perf.parquet
removed rows - full CSV: framework,version,device,op_name,kernel_source,allreduce_dtype,num_gpus,message_size,latency,backend
vLLM,0.18.0,NVIDIA H200,all_reduce,vLLM_custom_eager,bfloat16,2,1024,0.028388800621032717,vllm_eager
vLLM,0.18.0,NVIDIA H200,all_reduce,vLLM_custom_eager,bfloat16,2,1048576,0.027152318954467774,vllm_eager
vLLM,0.18.0,NVIDIA H200,all_reduce,vLLM_custom_eager,bfloat16,2,128,0.02771392107009888,vllm_eageraic-core/src/aiconfigurator_core/systems/data/h200_sxm/vllm/0.18.0/gdn_perf.parquet
removed rows - full CSV: framework,version,device,op_name,kernel_source,phase,batch_size,seq_len,num_tokens,d_model,d_conv,num_k_heads,head_k_dim,num_v_heads,head_v_dim,model_name,latency
vLLM,0.18.0,NVIDIA H200,gdn,causal_conv1d_update,generation,1,1,1,1024,4,16,128,16,128,Qwen/Qwen3.5-0.8B,0.0039680000394582745
vLLM,0.18.0,NVIDIA H200,gdn,causal_conv1d_update,generation,1,1,1,2048,4,16,128,16,128,Qwen/Qwen3.5-2B,0.003497600182890892
vLLM,0.18.0,NVIDIA H200,gdn,causal_conv1d_update,generation,1,1,1,2048,4,16,128,32,128,Qwen/Qwen3.5-35B-A3B,0.0033984001725912093aic-core/src/aiconfigurator_core/systems/data/h200_sxm/vllm/0.18.0/gemm_perf.parquet
removed rows - full CSV: framework,version,device,op_name,kernel_source,gemm_dtype,m,n,k,latency
VLLM,0.18.0,NVIDIA H200,gemm,vllm_default,bfloat16,1,1024,1024,0.007621333003044128
VLLM,0.18.0,NVIDIA H200,gemm,vllm_default,bfloat16,1,1024,10240,0.01033155537313885
VLLM,0.18.0,NVIDIA H200,gemm,vllm_default,bfloat16,1,1024,12288,0.011239111423492432aic-core/src/aiconfigurator_core/systems/data/h200_sxm/vllm/0.18.0/generation_attention_perf.parquet
removed rows - full CSV: framework,version,device,op_name,kernel_source,batch_size,isl,num_heads,num_key_value_heads,head_dim,beam_width,attn_dtype,kv_cache_dtype,step,window_size,latency
VLLM,0.18.0,NVIDIA H200,generation_attention,vllm_flash_attn,1,1,1,1,128,1,bfloat16,bfloat16,1,0,0.009535999968647957
VLLM,0.18.0,NVIDIA H200,generation_attention,vllm_flash_attn,1,1,1,1,128,1,bfloat16,bfloat16,1,0,0.009674666449427605
VLLM,0.18.0,NVIDIA H200,generation_attention,vllm_flash_attn,1,1,1,1,128,1,bfloat16,bfloat16,1,128,0.009557333464423815aic-core/src/aiconfigurator_core/systems/data/h200_sxm/vllm/0.18.0/moe_perf.parquet
removed rows - full CSV: framework,version,device,op_name,kernel_source,moe_dtype,num_tokens,hidden_size,inter_size,topk,num_experts,moe_tp_size,moe_ep_size,distribution,latency
VLLM,0.18.0,NVIDIA H200,moe,vllm_fused_moe,bfloat16,1,2048,768,8,128,1,1,balanced,0.036714665591716766
VLLM,0.18.0,NVIDIA H200,moe,vllm_fused_moe,bfloat16,1,2048,768,8,128,1,1,power_law_1.01,0.03403519988059998
VLLM,0.18.0,NVIDIA H200,moe,vllm_fused_moe,bfloat16,1,2048,768,8,128,1,1,power_law_1.2,0.03452799916267395Artifact Contents
|
Sanity Check Chart Generation Report📥 Download all sanity charts from workflow artifacts New perf data files were detected in this PR. Please use the link above to Below is a report of whether the chart generation was successful for each op. Chart Generation Report for system: a100_sxm, backend: sglang, backend_version: 0.5.10
Chart Generation Report for system: a100_sxm, backend: sglang, backend_version: 0.5.9
Chart Generation Report for system: a100_sxm, backend: trtllm, backend_version: 1.0.0
Chart Generation Report for system: a100_sxm, backend: vllm, backend_version: 0.14.0
Chart Generation Report for system: b200_sxm, backend: sglang, backend_version: 0.5.10
Chart Generation Report for system: b200_sxm, backend: sglang, backend_version: 0.5.14
Chart Generation Report for system: b200_sxm, backend: sglang, backend_version: 0.5.9
Chart Generation Report for system: b200_sxm, backend: trtllm, backend_version: 1.2.0rc5
Chart Generation Report for system: b200_sxm, backend: trtllm, backend_version: 1.3.0rc10
Chart Generation Report for system: b200_sxm, backend: vllm, backend_version: 0.19.0
Chart Generation Report for system: b200_sxm, backend: vllm, backend_version: 0.24.0
Chart Generation Report for system: b300_sxm, backend: sglang, backend_version: 0.5.10
Chart Generation Report for system: b300_sxm, backend: sglang, backend_version: 0.5.14
Chart Generation Report for system: b300_sxm, backend: sglang, backend_version: 0.5.9
Chart Generation Report for system: b300_sxm, backend: trtllm, backend_version: 1.3.0rc10
Chart Generation Report for system: b300_sxm, backend: vllm, backend_version: 0.19.0
Chart Generation Report for system: b300_sxm, backend: vllm, backend_version: 0.24.0
Chart Generation Report for system: b60, backend: vllm, backend_version: 0.12.0
Chart Generation Report for system: b60, backend: vllm, backend_version: 0.20.0
Chart Generation Report for system: gb200, backend: sglang, backend_version: 0.5.10
Chart Generation Report for system: gb200, backend: sglang, backend_version: 0.5.14
Chart Generation Report for system: gb200, backend: sglang, backend_version: 0.5.9
Chart Generation Report for system: gb200, backend: trtllm, backend_version: 1.3.0rc10
Chart Generation Report for system: gb200, backend: vllm, backend_version: 0.14.0
Chart Generation Report for system: gb200, backend: vllm, backend_version: 0.19.0
Chart Generation Report for system: gb200, backend: vllm, backend_version: 0.24.0
Chart Generation Report for system: gb300, backend: sglang, backend_version: 0.5.10
Chart Generation Report for system: gb300, backend: sglang, backend_version: 0.5.14
Chart Generation Report for system: gb300, backend: sglang, backend_version: 0.5.9
Chart Generation Report for system: gb300, backend: trtllm, backend_version: 1.3.0rc10
Chart Generation Report for system: gb300, backend: vllm, backend_version: 0.19.0
Chart Generation Report for system: gb300, backend: vllm, backend_version: 0.24.0
Chart Generation Report for system: h100_sxm, backend: sglang, backend_version: 0.5.10
Chart Generation Report for system: h100_sxm, backend: sglang, backend_version: 0.5.14
Chart Generation Report for system: h100_sxm, backend: sglang, backend_version: 0.5.6.post2
Chart Generation Report for system: h100_sxm, backend: sglang, backend_version: 0.5.9
Chart Generation Report for system: h100_sxm, backend: trtllm, backend_version: 1.2.0rc5
Chart Generation Report for system: h100_sxm, backend: trtllm, backend_version: 1.3.0rc10
Chart Generation Report for system: h100_sxm, backend: vllm, backend_version: 0.14.0
Chart Generation Report for system: h100_sxm, backend: vllm, backend_version: 0.19.0
Chart Generation Report for system: h100_sxm, backend: vllm, backend_version: 0.24.0
Chart Generation Report for system: h200_sxm, backend: sglang, backend_version: 0.5.10
Chart Generation Report for system: h200_sxm, backend: sglang, backend_version: 0.5.14
Chart Generation Report for system: h200_sxm, backend: sglang, backend_version: 0.5.6.post2
Chart Generation Report for system: h200_sxm, backend: sglang, backend_version: 0.5.9
Chart Generation Report for system: h200_sxm, backend: trtllm, backend_version: 1.2.0rc5
Chart Generation Report for system: h200_sxm, backend: trtllm, backend_version: 1.3.0rc10
Chart Generation Report for system: h200_sxm, backend: vllm, backend_version: 0.14.0
Chart Generation Report for system: h200_sxm, backend: vllm, backend_version: 0.18.0
Chart Generation Report for system: h200_sxm, backend: vllm, backend_version: 0.19.0
Chart Generation Report for system: h200_sxm, backend: vllm, backend_version: 0.24.0
Chart Generation Report for system: l40s, backend: sglang, backend_version: 0.5.10
Chart Generation Report for system: l40s, backend: sglang, backend_version: 0.5.12
Chart Generation Report for system: l40s, backend: sglang, backend_version: 0.5.14
Chart Generation Report for system: l40s, backend: sglang, backend_version: 0.5.9
Chart Generation Report for system: l40s, backend: trtllm, backend_version: 1.0.0
Chart Generation Report for system: l40s, backend: trtllm, backend_version: 1.3.0rc15
Chart Generation Report for system: l40s, backend: vllm, backend_version: 0.14.0
Chart Generation Report for system: l40s, backend: vllm, backend_version: 0.22.0
Chart Generation Report for system: l40s, backend: vllm, backend_version: 0.24.0
Chart Generation Report for system: rtx_pro_6000_server, backend: sglang, backend_version: 0.5.10
Chart Generation Report for system: rtx_pro_6000_server, backend: sglang, backend_version: 0.5.14
Chart Generation Report for system: rtx_pro_6000_server, backend: trtllm, backend_version: 1.3.0rc10
Chart Generation Report for system: rtx_pro_6000_server, backend: vllm, backend_version: 0.19.0
Chart Generation Report for system: rtx_pro_6000_server, backend: vllm, backend_version: 0.24.0
|
|
Merge protocol (stacked PR): please do not merge this PR until its base PR has merged to main and GitHub has auto-retargeted this one to |
|
CI fix pushed ( |
|
CI fixes pushed (head
|
|
Round 2 (head |
Signed-off-by: Yiming Liu <yimingl@nvidia.com>
Signed-off-by: Yiming Liu <yimingl@nvidia.com>
…AIC-1501) Signed-off-by: Yiming Liu <yimingl@nvidia.com>
… (AIC-1501) Extend _iter_version_subdirs filter to skip directories starting with underscore in addition to dot, restoring behavior from the old _build_op_sources sibling walk. Underscore-prefixed directories follow staging conventions and should not be discovered as version directories. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Signed-off-by: Yiming Liu <yimingl@nvidia.com>
…lback (AIC-1501) Signed-off-by: Yiming Liu <yimingl@nvidia.com>
…omm roots (AIC-1501) Signed-off-by: Yiming Liu <yimingl@nvidia.com>
…IC-1501) Signed-off-by: Yiming Liu <yimingl@nvidia.com>
Signed-off-by: Yiming Liu <yimingl@nvidia.com>
… for migration script (AIC-1501) Signed-off-by: Yiming Liu <yimingl@nvidia.com>
Executed by the reviewed tools/perf_database/migrate_family_layout.py: 906 table moves (git mv — LFS OIDs unchanged), 27 SHARED_LAYER_REUSE.txt replicated to 255 family-scoped copies, 4 INCOMPLETE.txt replicated to 7, legacy dirs removed. VERIFY OK incl. per-table count manifest. Post-migration proof: full unit suite 2167 passed; integration suite 97 passed; real-tree loader smoke (10 systems, 89 backend/version pairs); kernel-source manifest normatively invariant (one informational median_pct_divergence stat shifts via pre-existing order-sensitive dedup). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Signed-off-by: Yiming Liu <yimingl@nvidia.com>
…er, DeepEP preflight, LFS rule, docs (AIC-1501) Signed-off-by: Yiming Liu <yimingl@nvidia.com>
…e (AIC-1501) Signed-off-by: Yiming Liu <yimingl@nvidia.com>
The CI unit-test container has no git; the repo fixture's 'git init' made every test in this file error there. scan/plan/verify are pure filesystem, so those tests now use a plain tmp_path tree; only the execute-path tests (git mv/rm/add) keep the real-repo fixture, behind a skipif on a missing git binary. With git: 40 passed. Without git on PATH: 31 passed, 9 skipped. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Signed-off-by: Yiming Liu <yimingl@nvidia.com>
The CI unit job runs pytest inside the test image, which had no git binary. The perf-database tool tests need one: changed_ops tests diff real git revisions, and the migrate_* execute-path tests drive git mv/rm/add. Test stage only; the shipped runtime image stays git-free. Verified against the exact base image (nvcr ubuntu jammy-20250619): git 2.34.1 installs cleanly. With this, the requires_git skips in test_migrate_family_layout.py become no-ops in CI (full 40-test coverage restored) while still guarding any future git-less environment. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Signed-off-by: Yiming Liu <yimingl@nvidia.com>
168d7f6 to
163813b
Compare
PR 2 of 4 of the Collector V3: op-centric collector management project (Linear: AIC-1501), implementing design §3 (
docs/perf_database/collector-v3-op-centric-design.md, shipped in #1370). Stacked on #1370 — the base branch isyimingl/aic-1500-collector-v3-manifest-v2, so this diff shows only PR 2's changes; GitHub retargets tomainwhen #1370 merges.What this does
The perf data tree physically reorganizes from
data/<system>/<backend>/<version>/todata/<system>/<family>/<backend>/<version>/(family = the 12 catalog families fromcollector/op_backend_catalog.yaml), making the operation family a first-class filesystem entity: one family's whole history is one subtree, a family upgrade adds exactly one directory, and per-op version pins (manifest v2, #1370) map 1:1 onto the layout. Every reader is dual-layout during a transition window (family-first, legacy fallback with a one-time deprecation warning), and the loader stays catalog-free at runtime — family dirs are discovered structurally (any first-level dir not namedtrtllm/sglang/vllm/nccl/oneccl), so no identity file ships in the wheel.How to review this (instead of 906 renames)
Audit
tools/perf_database/migrate_family_layout.py— the reviewed, fail-closed, idempotent migration tool that produced the data commit — plus the loader seams. The script: catalog-driven mapping (aborts on any unknown table stem or unexpected directory, before any move), plan/execute/verify modes, per-table count manifest (--verify --manifestindependently proves zero tables lost), deterministic sorted plans, puregit mvfor tables (LFS OIDs untouched). It was verified by two independent full rehearsals on copies of the real tree (implementer + reviewer, exact-match plans: 906 moves, 31 marker actions) before the real run.Code seams, in reading order:
_iter_backend_version_dirs+ rewired discovery/marker functions (aic-core/.../sdk/perf_database.py);resolve_op_data_path(operations/base.py) + the 27-site per-op rewire acrossoperations/andengine.py; family-aware_build_op_sources; dual-layout walkers inaudit_kernel_source.py(its(system, backend, version, path)yield tuples are invariant, sobackend_facts.pyneeded zero changes) andcreate_charts.py; Rustresolve_op_sourcesfallback + load gate + comm roots (mod.rs).Verification evidence
VERIFY OKincluding the count manifest (41 tables, 906 files, all counts identical); post-migration tree has zero legacy-depth parquet; idempotent re-plan is empty.op_kernel_source_manifest.yamlregeneration is normatively invariant pre-vs-post migration (identical tiers/systems/frameworks/row counts). One informational statistic (median_pct_divergenceforgdn_perf/causal_conv1d_update, 28.12→27.52) shifts because the audit tool's within-framework dedup is encounter-order-sensitive (pre-existing) and iteration order changed; the committed manifest also has known pre-existing drift (the daily job's own update PR has been open since May). No manifest regen ships here — the daily job will pick it up.h200_sxm/sglang/0.5.6.post2→ data found).Disclosures & transition notes
h200_sxm/*/vllm/0.18.0/*.parquet, 2.0 MB total): the old.gitattributesLFS rule was path-specific to the legacy location and is now dead (removed here). Every other parquet in the tree was already in-git binary, so this matches repo practice; content identity is proven by the manifest invariance run. Marker.txtreplicas remain LFS via the depth-agnostic rule (verified withgit check-attr).SHARED_LAYER_REUSE.txtreplicated 27→255 (one per family with sibling data, per design),INCOMPLETE.txt4→7. PR 3 replaces both with structuredreuse.yaml/collection_meta.yaml.maturin develop -m aic-core/rust/aiconfigurator-core/Cargo.tomlto rebuild the editable.abi3.so— a stale extension was the only test failure encountered during verification.verify_tree's shadowed family-name branch (dead code, one-shot tool); legacy-side underscore-skip shares its tested code path with the family side.Test plan
uv run pytest tests/unit -m unit -n 2(2172 passed) ·uv run pytest -m integration -n 2(97 passed) ·cargo test --manifest-path aic-core/rust/aiconfigurator-core/Cargo.toml perf_database(109 passed) · migration--verify --manifestOK · prediction-regression gate expected green in CI (data content unchanged; paths only).🤖 Generated with Claude Code