diff --git a/THIRD_PARTY_NOTICES.md b/THIRD_PARTY_NOTICES.md index bd16f8724..3f1bffbe8 100644 --- a/THIRD_PARTY_NOTICES.md +++ b/THIRD_PARTY_NOTICES.md @@ -468,9 +468,12 @@ modified analytical adaptations of the indexer layout in `dsv41_sparse.py`. The measured operator databases and adjacent documentation under `src/aisimulate_core/systems/profiles/dsv41/` contain AISimulate timings -and geometry adapted from the same serving contracts. Their README identifies -the immutable measurement archive and the source-audited indexer metadata -correction; restoring the database does not change its measured timings. +and geometry adapted from the same serving contracts (modified). Their +README and adjacent provenance identify the immutable collection runtime +and source identities. The restored GB300 tables preserve their historical +timings and documented source-audited indexer metadata correction. The +B300 TP4 and TP2 tables are new native measurements with loaded-module dimension +validation; they do not inherit that historical correction. Source: https://github.com/sgl-project/sglang/tree/1aa0e962b206102b7c439a4a0c4981cfec6e87bc Copyright 2023-2024 SGLang Team and SGLang contributors. Licensed under Apache-2.0; its terms are diff --git a/python/aisimulate/THIRD_PARTY_NOTICES.md b/python/aisimulate/THIRD_PARTY_NOTICES.md index bd16f8724..3f1bffbe8 100644 --- a/python/aisimulate/THIRD_PARTY_NOTICES.md +++ b/python/aisimulate/THIRD_PARTY_NOTICES.md @@ -468,9 +468,12 @@ modified analytical adaptations of the indexer layout in `dsv41_sparse.py`. The measured operator databases and adjacent documentation under `src/aisimulate_core/systems/profiles/dsv41/` contain AISimulate timings -and geometry adapted from the same serving contracts. Their README identifies -the immutable measurement archive and the source-audited indexer metadata -correction; restoring the database does not change its measured timings. +and geometry adapted from the same serving contracts (modified). Their +README and adjacent provenance identify the immutable collection runtime +and source identities. The restored GB300 tables preserve their historical +timings and documented source-audited indexer metadata correction. The +B300 TP4 and TP2 tables are new native measurements with loaded-module dimension +validation; they do not inherit that historical correction. Source: https://github.com/sgl-project/sglang/tree/1aa0e962b206102b7c439a4a0c4981cfec6e87bc Copyright 2023-2024 SGLang Team and SGLang contributors. Licensed under Apache-2.0; its terms are diff --git a/python/aisimulate/collector/sglang/dsv41_native_runner.py b/python/aisimulate/collector/sglang/dsv41_native_runner.py index 618df72d8..a1c815baf 100644 --- a/python/aisimulate/collector/sglang/dsv41_native_runner.py +++ b/python/aisimulate/collector/sglang/dsv41_native_runner.py @@ -190,8 +190,26 @@ def collect_native_baselines(runner, options, tp_rank, provenance): experts = layers[2].mlp.experts gate = layers[2].mlp.gate lm_head = runner.model.lm_head - if tuple(gate.weight.shape) != (384, 5120) or tuple(lm_head.weight.shape) != (32320, 5120): - raise RuntimeError("native baseline GEMM physical padding differs from TP4 graph") + tp_size = runner.model.tp_size + # The measured all-reduce uses the default process group. Only pure TP + # may label that collective and the loaded expert shards with this size. + if dist.get_world_size() != tp_size or dist.get_rank() != tp_rank: + raise RuntimeError("native baseline process group differs from model TP ranks") + if dist.get_backend() != "nccl": + raise RuntimeError("native baseline collectives require the actual NCCL process group") + if experts.moe_tp_size != tp_size or experts.moe_ep_size != 1: + raise RuntimeError("native baseline experts require model TP with EP=1") + # ParallelLMHead is built from the loaded text config (SGLang@1aa0e962, + # models/deepseek_v4.py:4079-4085). Verify its physical shard before + # recording the GEMM key; a differently padded runtime must fail closed. + vocab_size = runner.model.config.vocab_size + local_vocab_size = vocab_size // tp_size + if ( + vocab_size % tp_size + or tuple(gate.weight.shape) != (384, 5120) + or tuple(lm_head.weight.shape) != (local_vocab_size, 5120) + ): + raise RuntimeError("native baseline GEMM physical padding differs from model TP graph") if type(experts.quant_method).__name__ != "Mxfp4FlashinferTrtllmMoEMethod": raise RuntimeError("native baseline MoE requires verified MXFP4 TRTLLM dispatch") if experts.quant_method.flashinfer_mxfp4_moe_precision != "default": @@ -222,7 +240,7 @@ def collect_native_baselines(runner, options, tp_rank, provenance): ), ( "gemm", - {"gemm_dtype": "bfloat16", "m": tokens, "n": 32320, "k": 5120}, + {"gemm_dtype": "bfloat16", "m": tokens, "n": local_vocab_size, "k": 5120}, lambda: lm_head.quant_method.apply(lm_head, hidden), _dispatch(lm_head, "quant_method.apply"), ), @@ -235,7 +253,7 @@ def collect_native_baselines(runner, options, tp_rank, provenance): "inter_size": 2304, "topk": 6, "num_experts": 384, - "moe_tp_size": 4, + "moe_tp_size": tp_size, "moe_ep_size": 1, "distribution": "uniform", }, @@ -251,7 +269,7 @@ def collect_native_baselines(runner, options, tp_rank, provenance): { "op_name": "all_reduce", "nccl_dtype": "half", - "num_gpus": 4, + "num_gpus": tp_size, "message_size": 2 * tokens * width, }, lambda payload=payload: dist.all_reduce(payload), diff --git a/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/README.md b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/README.md index 775f26bcb..b7f97da54 100644 --- a/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/README.md +++ b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/README.md @@ -3,31 +3,34 @@ SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All SPDX-License-Identifier: Apache-2.0 --> -# DeepSeek-V4.1 GB300 preview operator databases +# DeepSeek-V4.1 operator databases -These two systems roots contain the measured operator tables used by the +These systems roots contain the measured operator tables used by the DeepSeek-V4.1 SILICON predictor. They are included in the Python distribution. End-to-end ground truth, raw experiment logs, and prediction reports remain in -the immutable archive linked below. - -The database version is `dev-800cc9adea5b`, using the first 12 characters of -the actual collection image's SHA-256 digest. This identifies one immutable -development build. The complete image and source identities are recorded below -and in the collection sidecars. - -| Systems root | `decoder_replay` | V4.1 module rows | GEMM / MoE / NCCL rows | -| --- | --- | ---: | ---: | -| `full/` | `false` | 848 | 32 / 16 / 32 | -| `decoder_bounded/` | `true` | 948 | 32 / 16 / 32 | - -Each root contains `gb300.yaml` and the standard -`data/gb300////` layout, with a collection sidecar +external verification archives. + +The database versions identify immutable collection images: `dev-800cc9adea5b` +for GB300 and `dev-c4ca651192e5` for B300. Each suffix uses the first 12 characters +of that image's SHA-256 digest. Complete image and source identities are recorded +below and in the collection sidecars. Both systems contain TP4 data. B300 TP2 +full calibration is also available in the separate `tp2/full/` systems root described below. TP2 bounded is available in `tp2/decoder_bounded/`. + +| System | Systems root | `decoder_replay` | V4.1 module rows | GEMM / MoE / NCCL rows | +| --- | --- | --- | ---: | ---: | +| GB300 | `full/` | `false` | 848 | 32 / 16 / 32 | +| GB300 | `decoder_bounded/` | `true` | 948 | 32 / 16 / 32 | +| B300 | `full/` | `false` | 985 | 46 / 23 / 46 | +| B300 | `decoder_bounded/` | `true` | 1029 | 46 / 23 / 46 | + +Each root contains `gb300.yaml`, `b300_sxm.yaml` and the standard +`data/////` layout, with a collection sidecar and SHA-256 for each Parquet file. Latencies are in milliseconds. These are physical operator points, not independent workload counts. ## Selecting a database -Use `system_name="gb300"`, `backend="sglang"`, `backend_version="dev-800cc9adea5b"`, +Choose the matching system and image version below. Use `backend="sglang"`, `database_mode="SILICON"`, `forward_model="op_level"`, `strict_provenance=True`, and `enable_shared_layer=False`. Set TP and MoE TP to 4, and PP, MoE EP and attention DP to 1. Set `systems_path` to the matching root: @@ -38,25 +41,106 @@ from pathlib import Path import aisimulate_core decoder_replay = False -backend_version = "dev-800cc9adea5b" +system_name = "b300_sxm" # or "gb300" +backend_version = { + "gb300": "dev-800cc9adea5b", + "b300_sxm": "dev-c4ca651192e5", +}[system_name] profile = "decoder_bounded" if decoder_replay else "full" systems_path = str( Path(aisimulate_core.__file__).parent / "systems" / "profiles" / "dsv41" / profile ) ``` -Pass `backend_version`, `systems_path` and `decoder_replay` into the prediction configuration. +Pass `system_name`, `backend_version`, `systems_path` and `decoder_replay` into the prediction configuration. The flag does not select a database automatically. The profiles contain overlapping physical keys with different measured timings and must stay in separate roots; a mismatched root is not guaranteed to fail every lookup. -They do not replace the general GB300 database or its default runtime versions. +They do not replace the general hardware databases or their default runtime versions. Exact points return measured timings. The reader interpolates within an existing curve and uses an existing measured boundary with SOL ratios for extrapolation. A missing curve is a typed coverage error. Existing empirical operators can still contribute to a whole-model total. -## Measurement scope and provenance +## B300 TP2 full operator database + +Use `systems_path` ending in `systems/profiles/dsv41/tp2/full`, +`system_name="b300_sxm"`, `backend="sglang"`, +`backend_version="dev-c4ca651192e5-tp267c0e788b4b2"`, TP and MoE TP 2, +PP/MoE EP/attention DP 1, and `decoder_replay=False`. Retain the strict +SILICON/OP settings described above. This separate root preserves the TP4 +and GB300 tables, including their NCCL observations. + +The TP2 database contains 985 V4.1 module, 46 GEMM, 23 MoE and 46 NCCL rows. +All 145 frozen workloads completed on both ranks with one warmup and five +measured iterations; baselines used two warmups and five measured iterations. +All 1,100 aggregated records passed strict native exact lookup. The actual +runtime used request cap 4 and physical KV capacity 5120 on B300 driver +`610.57.04`. The version suffix binds the immutable image and qualified +startup-loader source/policy; it does not reuse the TP4 runtime identity. + +[TP2 full provenance](b300-tp2-full-provenance.json) records the source identity, +raw archive/admission hashes and every database file hash. Raw observations +remain external. Complete calibration and exact lookup establish table +coverage. Independent full native-forward heldout validation covers 38 geometries +and 322/380 fixed attempts, with SILICON MAPE **5.0551%** (prefill **2.1298%**, +decode **13.2460%**). The 58 native batch-split failures remain in the denominator. +The bounded root below has separate measurements. + +## B300 TP2 bounded operator database + +Use `systems_path` ending in `systems/profiles/dsv41/tp2/decoder_bounded` +with the same TP2 backend version and parallelism above, and +`decoder_replay=True`. This profile contains 1,029 V4.1 module, 46 GEMM, +23 MoE and 46 NCCL records from 154 frozen workloads, including the nine +bounded supplemental geometries. All 1,144 records passed strict native +exact lookup. Warmup, measured repetitions and physical-pool limits match +the TP2 full protocol; the actual driver was `610.57.04`. + +[TP2 bounded provenance](b300-tp2-bounded-provenance.json) identifies its +separate raw archive, admission and table hashes. These measured tables are +separate from the full profile. Independent bounded native-forward validation +covers 38 geometries and 326/380 fixed attempts, with SILICON MAPE **6.3582%** +(prefill **2.1822%**, decode **18.0512%**). The 54 native batch-split failures +remain in the denominator. + +Both TP2 profiles use predeclared heldout geometries disjoint from FPM calibration. +MAPE is the unweighted mean geometry error against the median of every qualified +fixed heldout attempt. No observed latency is a predictor input; no fitting or +failed-attempt removal occurs. These are native-forward results for the recorded +source-qualified runtime, not a blind benchmark or HTTP serving validation. +Actual wheel readers reproduce all 2,244 TP2 exact lookups and every heldout +prediction from both profiles. + +## B300 TP4 measurement scope and provenance + +The September 17, 2026 collection used four B300 SXM6 GPUs on driver `610.57.04`, +the AMD64 image +`sha256:c4ca651192e57e91989b5176c3665148131b9a171e53861dee87f5e57cef25b5`, +and the checkpoint revision listed below. Full and bounded-decoder collection +covered 145 and 154 frozen workloads respectively, including nine predefined +bounded-profile supplemental workloads. Each workload had one warmup and five +measured iterations on all four ranks. Baselines had two warmups and five +measured iterations. Aggregation takes the maximum across TP ranks per physical +invocation, then the median within the same profile and physical key. The raw +package version `0.0.0.dev0` remains provenance; loading uses the image dev selector. + +Both profiles use eager text execution, a physically observed 5120-token KV +capacity, HBM-resident Engram, unfused shared experts and separate NCCL 2.29.7 +collectives. CUDA graphs and fused all-reduce are disabled. Each complete +calibration passed source, workload, physical-pool and exact native-reader +checks. These checks establish database coverage, not heldout prediction accuracy. +The TP4 tables contain no TP2 observations. The separately admitted TP2 full +root above uses its own source-qualified startup runtime and raw measurements. + +[B300 TP4 provenance](b300-tp4-provenance.json) records table hashes, runtime and +checkpoint identities, collection settings, and hashes binding the external +raw archive and admission receipts. The tables and sidecars are unchanged +copies of the admitted outputs. The build's Git revision is unknown; the +serving-contract reference below is not asserted to identify the entire image. + +## GB300 measurement scope and provenance The September 2026 collection used four GB300 GPUs, the SGLang ARM64 image `sha256:800cc9adea5be1e18f48185451220c4bc487c545b7095c720d2ccc9ba9bb3b5d`, @@ -83,7 +167,7 @@ routing. CUDA graphs and fused all-reduce were disabled. Coverage is limited to the measured geometry and runtime; these tables do not qualify alternative topologies, offload, output equivalence, or general serving accuracy. -All 18 database file contents are byte-identical copies from AISimulate commit +All 18 GB300 database file contents are byte-identical copies from AISimulate commit [`24faa2e263c75c137c091b8e80b7c2d36740b864`](https://github.com/ai-dynamo/aisimulate/tree/24faa2e263c75c137c091b8e80b7c2d36740b864/data/experimental/deepseek-v41/gb300-silicon/indexer-identity-v2/prefix-refinement), under `data/experimental/deepseek-v41/gb300-silicon/indexer-identity-v2/` `prefix-refinement/{full,decoder_bounded}/systems/`. Only the SGLang version diff --git a/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/b300-tp2-bounded-provenance.json b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/b300-tp2-bounded-provenance.json new file mode 100644 index 000000000..530aeb92d --- /dev/null +++ b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/b300-tp2-bounded-provenance.json @@ -0,0 +1,86 @@ +{ + "backend_version": "dev-c4ca651192e5-tp267c0e788b4b2", + "collection": { + "baseline_iterations": 5, + "baseline_warmup": 2, + "checkpoint_revision": "fb2764a5cf321eaa5070ca8f9e892818f477c16d", + "geometry_count": 154, + "job_id": "4364038", + "max_running_requests": 4, + "measured_iterations": 5, + "physical_kv_tokens": 5120, + "rank_aggregation": "maximum per physical invocation, then median per physical key", + "run_id": "9c3c44cd-11df-4caa-a260-527145a9d584", + "warmup": 1 + }, + "database_files": { + "b300_sxm.yaml": "1b46526ebec20b518f73215b01d46e70354ccb316ca173fa67611892ac99ee97", + "data/b300_sxm/comm/nccl/2.29.7/collection_meta.yaml": "183d658404b8378744334728ca6899868a34165c4e09622927ec4adcd2d06644", + "data/b300_sxm/comm/nccl/2.29.7/nccl_perf.parquet": "9a3c6888b768168fa933114f0c6413b26d05952a06b57cf7e6cd861639ac11c4", + "data/b300_sxm/dsv41/sglang/dev-c4ca651192e5-tp267c0e788b4b2/collection_meta.yaml": "a45588047dddd38be75a08d714079e638cd0769483713e47ff57fc305527ddd7", + "data/b300_sxm/dsv41/sglang/dev-c4ca651192e5-tp267c0e788b4b2/dsv41_module_perf.parquet": "f388060ea5ca384e6d8c8603c49ac942d35297554267975923e57a26cf30ac55", + "data/b300_sxm/gemm/sglang/dev-c4ca651192e5-tp267c0e788b4b2/collection_meta.yaml": "9bf7e34df5141e373db46399e7088093450a1e2b25c2b737cbb5df3b8906afb5", + "data/b300_sxm/gemm/sglang/dev-c4ca651192e5-tp267c0e788b4b2/gemm_perf.parquet": "1b3aebbcdcc5d3aea9c9cccf706c9e341d63fa035ae87ba5c4dd0dd1aca699bf", + "data/b300_sxm/moe/sglang/dev-c4ca651192e5-tp267c0e788b4b2/collection_meta.yaml": "0b969a8158c870107d64b134e42e0c9a218da26b706b7d22f619e9db019cd6f8", + "data/b300_sxm/moe/sglang/dev-c4ca651192e5-tp267c0e788b4b2/moe_perf.parquet": "c8628c4357ed6e20cdf3bb5fcd77eb58b39bc7cfdde34cd5ac38c7db5e976c15" + }, + "evidence": { + "native_lookup_receipt_sha256": "2c5b7a52c5503c204a70a0e9e583ce8465357af02d78f60541139a7c20d61e4b", + "publication_adapter_manifest_sha256": "68bbd7545991b889347c96672f14c844fd3866450221c2fe110bbef138e294d0", + "raw_admission_sha256": "871c80f41485fb3707ca3dab48235cd89300fdaf3de333c49410e5ceb11111d6", + "raw_archive_sha256": "a962d7a84a39c3bcdb764177156b9536663aa1e038a25bdff71937ddf8b35083" + }, + "exact_native_lookup_counts": { + "dsv41": 1029, + "gemm": 46, + "moe": 23, + "nccl": 46 + }, + "execution_profile": "decoder_bounded", + "observed_hardware": { + "actual_driver_version": "610.57.04", + "gpu_names": [ + "NVIDIA B300 SXM6 AC" + ], + "raw_receipt_canonical_json_sha256": "67ac78e739828110ceddfb51c2525678c2ecfdfb9d0a0d2552b7bcf872131783", + "raw_receipt_location": "External raw archive identified in evidence.raw_archive_sha256", + "receipt_sha256": "a467e1ce8068ca4845f053ef0766e2a28e465d60ce8b7930d24790bc82160cc0" + }, + "qualification": "Complete OP calibration and strict exact lookup; independently observed native-forward heldout validation below. This does not establish general HTTP serving accuracy.", + "runtime_identity_sha256": "67c0e788b4b2bcdb1d55e684ee2742c1a50e63be881d0006e621c63204a49f28", + "schema_version": 1, + "source_qualified_runtime": { + "bridge_manifest_sha256": "e1f09392aefe01320590e2a25193131f1b6418d8121d236dce72d2fe24414372", + "image_manifest_digest": "sha256:c4ca651192e57e91989b5176c3665148131b9a171e53861dee87f5e57cef25b5", + "image_squashfs_sha256": "48a67d21c9186ffd15fd3c19c20a033c32a610c559f4837b9d02045585a79b17", + "kind": "native_startup_bridge", + "loader_source_descriptor_sha256": "762305550393b33cff4511bcfdef61e16cc7160ac030627c22e351b084f22e8e", + "loader_variant_identity_sha256": "257c9d5e61a19f4403b7baab566d3ab5b74a912bc1797be8d2bc648f21a162c5", + "schema": "dsv41.tp2.source-qualified-runtime.v1", + "startup_policy_sha256": "420c5722b2b4c447f8b331dfc95bbf831b568d2d85f99882cb0892b0d3b51981" + }, + "system": "b300_sxm", + "tp": 2, + "heldout_validation": { + "mape_percent": 6.358216768717344, + "phase_mape_percent": { + "prefill": 2.1821654264608807, + "decode": 18.05116052703544 + }, + "planned_geometries": 38, + "predicted_geometries": 38, + "planned_attempts": 380, + "qualified_and_predicted_attempts": 326, + "native_geometry_failures_retained": 54, + "run_id": "cb03f93d-5652-416e-95c6-b6847e106c78", + "mape_definition": "Unweighted mean geometry error against median of every qualified fixed heldout attempt; unavailable geometry retained in coverage.", + "fitting": false, + "observed_latency_passed_to_predictor": false, + "geometries_predeclared": true, + "blind_benchmark": false, + "comparison_sha256": "c674788be3976bf86bed453505348d13b7b06f7d26a8eadbe3bc239ff8bf7d9f", + "predictor_head": "6ad6af2d9047234b446eb8ab84971c7938e963eb", + "native_sha256": "31fa4a3a066a3cd0509c3f36fac02139ac3625a258e96b371aa8b7c780dc78fd", + "wheel_validation_receipt_sha256": "38c0ba091d52be040d375c4c295b7bd9e124546da466a6eae9573386939cb02b" + } +} diff --git a/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/b300-tp2-full-provenance.json b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/b300-tp2-full-provenance.json new file mode 100644 index 000000000..56daea35c --- /dev/null +++ b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/b300-tp2-full-provenance.json @@ -0,0 +1,86 @@ +{ + "backend_version": "dev-c4ca651192e5-tp267c0e788b4b2", + "collection": { + "baseline_iterations": 5, + "baseline_warmup": 2, + "checkpoint_revision": "fb2764a5cf321eaa5070ca8f9e892818f477c16d", + "geometry_count": 145, + "job_id": "4363517", + "max_running_requests": 4, + "measured_iterations": 5, + "physical_kv_tokens": 5120, + "rank_aggregation": "maximum per physical invocation, then median per physical key", + "run_id": "356ab240-1e95-420f-b17a-c9b159892862", + "warmup": 1 + }, + "database_files": { + "b300_sxm.yaml": "1b46526ebec20b518f73215b01d46e70354ccb316ca173fa67611892ac99ee97", + "data/b300_sxm/comm/nccl/2.29.7/collection_meta.yaml": "517ca5b988fbb6dc8c40343ede76ef3689a89e6db08ceb090071682c452078e4", + "data/b300_sxm/comm/nccl/2.29.7/nccl_perf.parquet": "0794f101d9b28b02607a115a466511b544815dc1b9ab7f8fed7183f7f97df103", + "data/b300_sxm/dsv41/sglang/dev-c4ca651192e5-tp267c0e788b4b2/collection_meta.yaml": "3a68a31bc25b727a32ddcb9c4df3ffb842f9e79a304c135f879d7f60900715c4", + "data/b300_sxm/dsv41/sglang/dev-c4ca651192e5-tp267c0e788b4b2/dsv41_module_perf.parquet": "25011b31ecb929d702fcc2de0b51b89ddb18b753da5d3445502a87669adf42d0", + "data/b300_sxm/gemm/sglang/dev-c4ca651192e5-tp267c0e788b4b2/collection_meta.yaml": "2b0fd3d227d01254fda90d6c2ae986062a4901bfcebb32df484a17ae877d4924", + "data/b300_sxm/gemm/sglang/dev-c4ca651192e5-tp267c0e788b4b2/gemm_perf.parquet": "1b64e723fbb63c950c5b058a7a218dc0cf4ba93efe613ddba879502cfdf35c28", + "data/b300_sxm/moe/sglang/dev-c4ca651192e5-tp267c0e788b4b2/collection_meta.yaml": "0a1901bf339abdac0bcc20ea9bb3db112172790859389fc53521879b008d33d9", + "data/b300_sxm/moe/sglang/dev-c4ca651192e5-tp267c0e788b4b2/moe_perf.parquet": "41df6d58e8ecbaf3acc9398630731917742de62e358f85383357d8ac662d9796" + }, + "evidence": { + "native_lookup_receipt_sha256": "f99bf906c6581db04659b0656705683bfb4b5bf6c90ec8849495333617c1920a", + "publication_adapter_manifest_sha256": "74449dcac03d2d3c0087eafb95f9ac9499165a397167ff5bea7f1307d71ff390", + "raw_admission_sha256": "606707c5c335f492622786ecb1903bbd0316ffb0ee98d5ea489627c8bd8723a4", + "raw_archive_sha256": "e5296463beeb765ee9c0fca81f75e03e09250507bc56bed7637d742b45dd2124" + }, + "exact_native_lookup_counts": { + "dsv41": 985, + "gemm": 46, + "moe": 23, + "nccl": 46 + }, + "execution_profile": "full", + "observed_hardware": { + "actual_driver_version": "610.57.04", + "gpu_names": [ + "NVIDIA B300 SXM6 AC" + ], + "raw_receipt_canonical_json_sha256": "14aa342528b8cb846cccf273312ce4aa9c9bf4d594007306d019d00a715c68b1", + "raw_receipt_location": "External raw archive identified in evidence.raw_archive_sha256", + "receipt_sha256": "3eceb773db45bf4f033cd4b78d09a6aaf8e4462dac85720a3fbf492bfa15f9dc" + }, + "qualification": "Complete OP calibration and strict exact lookup; independently observed native-forward heldout validation below. This does not establish general HTTP serving accuracy.", + "runtime_identity_sha256": "67c0e788b4b2bcdb1d55e684ee2742c1a50e63be881d0006e621c63204a49f28", + "schema_version": 1, + "source_qualified_runtime": { + "bridge_manifest_sha256": "e1f09392aefe01320590e2a25193131f1b6418d8121d236dce72d2fe24414372", + "image_manifest_digest": "sha256:c4ca651192e57e91989b5176c3665148131b9a171e53861dee87f5e57cef25b5", + "image_squashfs_sha256": "48a67d21c9186ffd15fd3c19c20a033c32a610c559f4837b9d02045585a79b17", + "kind": "native_startup_bridge", + "loader_source_descriptor_sha256": "762305550393b33cff4511bcfdef61e16cc7160ac030627c22e351b084f22e8e", + "loader_variant_identity_sha256": "257c9d5e61a19f4403b7baab566d3ab5b74a912bc1797be8d2bc648f21a162c5", + "schema": "dsv41.tp2.source-qualified-runtime.v1", + "startup_policy_sha256": "420c5722b2b4c447f8b331dfc95bbf831b568d2d85f99882cb0892b0d3b51981" + }, + "system": "b300_sxm", + "tp": 2, + "heldout_validation": { + "mape_percent": 5.055126029933799, + "phase_mape_percent": { + "prefill": 2.1298123538500913, + "decode": 13.246004322968181 + }, + "planned_geometries": 38, + "predicted_geometries": 38, + "planned_attempts": 380, + "qualified_and_predicted_attempts": 322, + "native_geometry_failures_retained": 58, + "run_id": "4c80826c-6db6-4f8d-99a2-7fa53e1e1c79", + "mape_definition": "Unweighted mean geometry error against median of every qualified fixed heldout attempt; unavailable geometry retained in coverage.", + "fitting": false, + "observed_latency_passed_to_predictor": false, + "geometries_predeclared": true, + "blind_benchmark": false, + "comparison_sha256": "026fd3106782d1c1cab1df6db9fdbd4d62eb143a99dffe9ee5f97ff78e8ff994", + "predictor_head": "6ad6af2d9047234b446eb8ab84971c7938e963eb", + "native_sha256": "31fa4a3a066a3cd0509c3f36fac02139ac3625a258e96b371aa8b7c780dc78fd", + "wheel_validation_receipt_sha256": "38c0ba091d52be040d375c4c295b7bd9e124546da466a6eae9573386939cb02b" + } +} diff --git a/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/b300-tp4-provenance.json b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/b300-tp4-provenance.json new file mode 100644 index 000000000..cb1777e74 --- /dev/null +++ b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/b300-tp4-provenance.json @@ -0,0 +1,147 @@ +{ + "attention_dp_size": 1, + "backend": "sglang", + "backend_version": "dev-c4ca651192e5", + "coverage": { + "accuracy_validation": "not performed; native admission and exact database lookup are not heldout accuracy results", + "admitted_tp_sizes": [ + 4 + ], + "tp2": "pending; no accepted calibration rows in this publication" + }, + "evidence_bindings": { + "campaign_sha256": "11eb718e0635d640e2e9cf9a509510cb2dbf31444269485926f835b443e8a417", + "checkpoint_receipt_sha256": "f0d2fa5999acaf1d9b3d9c68689a33223b93fca0cdc4a20a1569381dfea45921", + "config_sha256": "d7637228d27528f6bd259781b5a27258068f50bf637c9c83aab784d81579669d", + "driver_gate_sha256": "67de4d20ace14904edcb1cd310a69ef911bc7209d2938ad53971a2cfca8811d5", + "hardware_receipt_sha256": "1321829543c6d0ce067860db9eb920fd45c7f903833404dee7dba689cbb015c7", + "native_reader_commit": "63ea2f306d088d984944981eefa41d74ef4d8a55", + "native_reader_sha256": "80d462f229e6c7f3503b5aed81962c36557da40505707be906b05ded82f65acd", + "source_manifest_sha256": "d50217d8f78e4bd173774c36713650bbf44b058c9575ac8babba208a5c5173a2", + "terminal_archive_sha256": "ba853df37008125bc74d2f292a24d7b70f2313a249d01af957db971b328ae31e" + }, + "hardware": { + "allocated_gpus": 8, + "driver_version": "610.57.04", + "gpu_model": "NVIDIA B300 SXM6 AC", + "gpus_used": 4, + "nodes": 1 + }, + "measurement": { + "aggregation": "median of maximum across four TP ranks for each physical invocation, within each cell only", + "baseline_measured_iterations": 5, + "baseline_warmup": 2, + "cuda_graphs": false, + "custom_allreduce": false, + "dataset_role": "calibration", + "flashinfer_allreduce_fusion": false, + "latency_unit": "ms", + "module_measured_iterations_per_workload": 5, + "module_warmup": 1, + "moe_routing": "seeded uniform expert routing", + "nccl_message_size_unit": "elements", + "nccl_wire_dtype": "bfloat16", + "scope": "eager local module compute plus separately measured native GEMM/MoE/NCCL baselines", + "shared_experts_fusion": false, + "shared_physical_keys_across_workloads": "all observed physical invocations retained in within-cell median and sample_count" + }, + "model": { + "path": "deepseek-ai/DeepSeek-V4.1-Flash", + "revision": "fb2764a5cf321eaa5070ca8f9e892818f477c16d" + }, + "moe_ep_size": 1, + "moe_tp_size": 4, + "pp_size": 1, + "producer_commit": "638c99ed3e9a9c5381b698d0fb2deba77a0d89cc", + "profiles": { + "decoder_bounded": { + "base_launch_source_sha256": "dc5b2dde75ae976342e3ef3c764d4019129877e99ec738353593f9967d21671d", + "base_payload_inventory_sha256": "a26e80b6ee001ad0e6073b1b01a277045f44708de2c6571708b4e43507ce4c9f", + "binding_sha256": "02f5ab519db8675ecbb30e4035b980cf88661a161355ea5bf821e4a73757589b", + "decoder_replay": true, + "exact_native_lookup_counts": { + "dsv41": 1029, + "gemm": 46, + "moe": 23, + "nccl": 46 + }, + "files": { + "b300_sxm.yaml": "1b46526ebec20b518f73215b01d46e70354ccb316ca173fa67611892ac99ee97", + "data/b300_sxm/comm/nccl/2.29.7/collection_meta.yaml": "0c8d757536806f7fc5ddc4dc6ac6d0590b6dab879b51344fb09977ab3dcfbc7d", + "data/b300_sxm/comm/nccl/2.29.7/nccl_perf.parquet": "6d0552f572ccadf1e6a664491aa4246e1082bf736013a77c74f68affd0dec64f", + "data/b300_sxm/dsv41/sglang/dev-c4ca651192e5/collection_meta.yaml": "794abd832f030da73859ea5ca426ce827ad409c734c863f084471231812e6c4a", + "data/b300_sxm/dsv41/sglang/dev-c4ca651192e5/dsv41_module_perf.parquet": "be4d139dfcbe340efc1761236607b9a3f405acb21b9c5a8c0db181b9b5dce3e1", + "data/b300_sxm/gemm/sglang/dev-c4ca651192e5/collection_meta.yaml": "ec18dc2a7acd38efef2918c7ee270bcdd59144b85c42fd8c9117f4298414c9a4", + "data/b300_sxm/gemm/sglang/dev-c4ca651192e5/gemm_perf.parquet": "ad2c0c8edce177e1ec4636e0742f5ced3b573dff0f5c84acf621e45c874ea3e5", + "data/b300_sxm/moe/sglang/dev-c4ca651192e5/collection_meta.yaml": "013491e19461681614d928492a577a2bb7646ee2adea47f2e37c53b77481b054", + "data/b300_sxm/moe/sglang/dev-c4ca651192e5/moe_perf.parquet": "d3f7391e383181f48e9dca919eec56f37256876762ac58341afd6daca783aedb" + }, + "phase_workloads": { + "context": 117, + "generation": 37 + }, + "publication_receipt_sha256": "7de0bffb47b75d3c2ee9fb70d1ae553cd9a9f6af671a9d290036f6dac60f2088", + "raw_admission_sha256": "dddff0b98b1b823756073d0533aed35141fcef3d99cbd6451b0f9012b1e406d3", + "workload_count": 154 + }, + "full": { + "base_launch_source_sha256": "dc5b2dde75ae976342e3ef3c764d4019129877e99ec738353593f9967d21671d", + "base_payload_inventory_sha256": "a26e80b6ee001ad0e6073b1b01a277045f44708de2c6571708b4e43507ce4c9f", + "binding_sha256": "19d2cc9e522eb16fe02fb3c14a768570d0b053470d85346365204bc0533d86ee", + "decoder_replay": false, + "exact_native_lookup_counts": { + "dsv41": 985, + "gemm": 46, + "moe": 23, + "nccl": 46 + }, + "files": { + "b300_sxm.yaml": "1b46526ebec20b518f73215b01d46e70354ccb316ca173fa67611892ac99ee97", + "data/b300_sxm/comm/nccl/2.29.7/collection_meta.yaml": "889fd39f4c4660c727b0d8dca575f45f0664f756fe5a293d3968f3095a49721b", + "data/b300_sxm/comm/nccl/2.29.7/nccl_perf.parquet": "351a194a0b93a742c2b1916034df4bdee7ea06b46511e4f849847f76f6611f10", + "data/b300_sxm/dsv41/sglang/dev-c4ca651192e5/collection_meta.yaml": "846591543cf18f62b4a51bb2c0df35395d3d62b477981f41867d5a3cfedc5242", + "data/b300_sxm/dsv41/sglang/dev-c4ca651192e5/dsv41_module_perf.parquet": "e8d392db16593f98e9eccb05225baea3d6184bae921ba00ca1610d7b92122523", + "data/b300_sxm/gemm/sglang/dev-c4ca651192e5/collection_meta.yaml": "a0526f514fb4b33d3007a8de828aed095085c4ec2dc71ca05231b6fbdbd1103a", + "data/b300_sxm/gemm/sglang/dev-c4ca651192e5/gemm_perf.parquet": "2a4c5bea6eb19d3e7bfe89309691d83ab14d41c6cea8e88cf6f19deed351438d", + "data/b300_sxm/moe/sglang/dev-c4ca651192e5/collection_meta.yaml": "09d7ce29204da0cded5e89f860722737e81c19eb5047b8bc13e02d965a63d00d", + "data/b300_sxm/moe/sglang/dev-c4ca651192e5/moe_perf.parquet": "a78428db565165c5e7445912d257f0731254f9f4edf0d8e145e3bffda6e2338d" + }, + "phase_workloads": { + "context": 108, + "generation": 37 + }, + "publication_receipt_sha256": "e29c1ef41de45ad43f1f085344740e21ec8691aa4a05c3882b536d2e78c58167", + "raw_admission_sha256": "4fa30938ce4995bae847be03bd87dd9f7dd6afb068ff141d8b6b36da09f83168", + "workload_count": 145 + } + }, + "runtime": { + "base_qualification": "immutable image, exact approved source inventory and original completed launch with read-only payload/model mounts", + "build_commit": "unknown", + "direct_post_load_loader_witness_observed": false, + "image_architecture": "amd64", + "image_manifest_digest": "sha256:c4ca651192e57e91989b5176c3665148131b9a171e53861dee87f5e57cef25b5", + "image_squashfs_sha256": "48a67d21c9186ffd15fd3c19c20a033c32a610c559f4837b9d02045585a79b17", + "loader_variant": "base", + "nccl_version": "2.29.7", + "package_version": "0.0.0.dev0" + }, + "schema_version": 1, + "source_reference": { + "copyright": "Copyright 2023-2024 SGLang Team and SGLang contributors", + "license": "Apache-2.0", + "modified": true, + "paths": [ + "python/sglang/srt/models/deepseek_v4.py", + "python/sglang/srt/models/deepseek_v2.py", + "python/sglang/srt/layers/engram.py", + "python/sglang/srt/layers/attention/dsv4/compressor.py", + "python/sglang/srt/layers/attention/dsv4/dsv41_sparse.py" + ], + "repository": "https://github.com/sgl-project/sglang", + "revision": "1aa0e962b206102b7c439a4a0c4981cfec6e87bc", + "role": "adapted serving geometry reference; not asserted to be the image build commit" + }, + "system": "b300_sxm", + "tp_size": 4 +} diff --git a/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/decoder_bounded/b300_sxm.yaml b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/decoder_bounded/b300_sxm.yaml new file mode 100644 index 000000000..2e9f0caa7 --- /dev/null +++ b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/decoder_bounded/b300_sxm.yaml @@ -0,0 +1,27 @@ +data_dir: data/b300_sxm +gpu: + fp32_flops: 75000000000000 + mem_bw: 7750000000000 + mem_bw_empirical_scaling_factor: 0.8 + mem_empirical_constant_latency: 3.0e-06 + mem_capacity: 288400343040 + bfloat16_tc_flops: 2250000000000000 + int8_tc_flops: 153500000000000 + fp8_tc_flops: 4500000000000000 + fp4_tc_flops: 14000000000000000 + power: 1100 + sm_version: 103 +node: + num_gpus_per_node: 8 + inter_node_bw: 100000000000 + intra_node_bw: 900000000000 + pcie_bw: 128000000000 + p2p_latency: 1.0e-05 +misc: + nccl_mem: + 1: 0 + 2: 358612992 + 4: 411041792 + 8: 411041792 + other_mem: 3758096384 + nccl_version: 2.29.7 diff --git a/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/decoder_bounded/data/b300_sxm/comm/nccl/2.29.7/collection_meta.yaml b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/decoder_bounded/data/b300_sxm/comm/nccl/2.29.7/collection_meta.yaml new file mode 100644 index 000000000..70caf3360 --- /dev/null +++ b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/decoder_bounded/data/b300_sxm/comm/nccl/2.29.7/collection_meta.yaml @@ -0,0 +1,13 @@ +schema_version: 1 +runtime: + framework: sglang + image: lmsysorg/sglang + image_digest: sha256:c4ca651192e57e91989b5176c3665148131b9a171e53861dee87f5e57cef25b5 + version: 0.0.0.dev0 +tables: + nccl_perf: + status: complete + rows: 46 + data_sha256: 6d0552f572ccadf1e6a664491aa4246e1082bf736013a77c74f68affd0dec64f + provenance_admission_sha256: dddff0b98b1b823756073d0533aed35141fcef3d99cbd6451b0f9012b1e406d3 + measurement_kind: native_gpu_measurement diff --git a/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/decoder_bounded/data/b300_sxm/comm/nccl/2.29.7/nccl_perf.parquet b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/decoder_bounded/data/b300_sxm/comm/nccl/2.29.7/nccl_perf.parquet new file mode 100644 index 000000000..d09496e92 Binary files /dev/null and b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/decoder_bounded/data/b300_sxm/comm/nccl/2.29.7/nccl_perf.parquet differ diff --git a/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/decoder_bounded/data/b300_sxm/dsv41/sglang/dev-c4ca651192e5/collection_meta.yaml b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/decoder_bounded/data/b300_sxm/dsv41/sglang/dev-c4ca651192e5/collection_meta.yaml new file mode 100644 index 000000000..dd22af2fb --- /dev/null +++ b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/decoder_bounded/data/b300_sxm/dsv41/sglang/dev-c4ca651192e5/collection_meta.yaml @@ -0,0 +1,13 @@ +schema_version: 1 +runtime: + framework: sglang + image: lmsysorg/sglang + image_digest: sha256:c4ca651192e57e91989b5176c3665148131b9a171e53861dee87f5e57cef25b5 + version: 0.0.0.dev0 +tables: + dsv41_module_perf: + status: complete + rows: 1029 + data_sha256: be4d139dfcbe340efc1761236607b9a3f405acb21b9c5a8c0db181b9b5dce3e1 + provenance_admission_sha256: dddff0b98b1b823756073d0533aed35141fcef3d99cbd6451b0f9012b1e406d3 + measurement_kind: native_gpu_measurement diff --git a/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/decoder_bounded/data/b300_sxm/dsv41/sglang/dev-c4ca651192e5/dsv41_module_perf.parquet b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/decoder_bounded/data/b300_sxm/dsv41/sglang/dev-c4ca651192e5/dsv41_module_perf.parquet new file mode 100644 index 000000000..99e5dc644 Binary files /dev/null and b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/decoder_bounded/data/b300_sxm/dsv41/sglang/dev-c4ca651192e5/dsv41_module_perf.parquet differ diff --git a/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/decoder_bounded/data/b300_sxm/gemm/sglang/dev-c4ca651192e5/collection_meta.yaml b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/decoder_bounded/data/b300_sxm/gemm/sglang/dev-c4ca651192e5/collection_meta.yaml new file mode 100644 index 000000000..3b5de535f --- /dev/null +++ b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/decoder_bounded/data/b300_sxm/gemm/sglang/dev-c4ca651192e5/collection_meta.yaml @@ -0,0 +1,13 @@ +schema_version: 1 +runtime: + framework: sglang + image: lmsysorg/sglang + image_digest: sha256:c4ca651192e57e91989b5176c3665148131b9a171e53861dee87f5e57cef25b5 + version: 0.0.0.dev0 +tables: + gemm_perf: + status: complete + rows: 46 + data_sha256: ad2c0c8edce177e1ec4636e0742f5ced3b573dff0f5c84acf621e45c874ea3e5 + provenance_admission_sha256: dddff0b98b1b823756073d0533aed35141fcef3d99cbd6451b0f9012b1e406d3 + measurement_kind: native_gpu_measurement diff --git a/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/decoder_bounded/data/b300_sxm/gemm/sglang/dev-c4ca651192e5/gemm_perf.parquet b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/decoder_bounded/data/b300_sxm/gemm/sglang/dev-c4ca651192e5/gemm_perf.parquet new file mode 100644 index 000000000..2d2701e35 Binary files /dev/null and b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/decoder_bounded/data/b300_sxm/gemm/sglang/dev-c4ca651192e5/gemm_perf.parquet differ diff --git a/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/decoder_bounded/data/b300_sxm/moe/sglang/dev-c4ca651192e5/collection_meta.yaml b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/decoder_bounded/data/b300_sxm/moe/sglang/dev-c4ca651192e5/collection_meta.yaml new file mode 100644 index 000000000..d2601c7b4 --- /dev/null +++ b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/decoder_bounded/data/b300_sxm/moe/sglang/dev-c4ca651192e5/collection_meta.yaml @@ -0,0 +1,13 @@ +schema_version: 1 +runtime: + framework: sglang + image: lmsysorg/sglang + image_digest: sha256:c4ca651192e57e91989b5176c3665148131b9a171e53861dee87f5e57cef25b5 + version: 0.0.0.dev0 +tables: + moe_perf: + status: complete + rows: 23 + data_sha256: d3f7391e383181f48e9dca919eec56f37256876762ac58341afd6daca783aedb + provenance_admission_sha256: dddff0b98b1b823756073d0533aed35141fcef3d99cbd6451b0f9012b1e406d3 + measurement_kind: native_gpu_measurement diff --git a/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/decoder_bounded/data/b300_sxm/moe/sglang/dev-c4ca651192e5/moe_perf.parquet b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/decoder_bounded/data/b300_sxm/moe/sglang/dev-c4ca651192e5/moe_perf.parquet new file mode 100644 index 000000000..c75763e2e Binary files /dev/null and b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/decoder_bounded/data/b300_sxm/moe/sglang/dev-c4ca651192e5/moe_perf.parquet differ diff --git a/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/full/b300_sxm.yaml b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/full/b300_sxm.yaml new file mode 100644 index 000000000..2e9f0caa7 --- /dev/null +++ b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/full/b300_sxm.yaml @@ -0,0 +1,27 @@ +data_dir: data/b300_sxm +gpu: + fp32_flops: 75000000000000 + mem_bw: 7750000000000 + mem_bw_empirical_scaling_factor: 0.8 + mem_empirical_constant_latency: 3.0e-06 + mem_capacity: 288400343040 + bfloat16_tc_flops: 2250000000000000 + int8_tc_flops: 153500000000000 + fp8_tc_flops: 4500000000000000 + fp4_tc_flops: 14000000000000000 + power: 1100 + sm_version: 103 +node: + num_gpus_per_node: 8 + inter_node_bw: 100000000000 + intra_node_bw: 900000000000 + pcie_bw: 128000000000 + p2p_latency: 1.0e-05 +misc: + nccl_mem: + 1: 0 + 2: 358612992 + 4: 411041792 + 8: 411041792 + other_mem: 3758096384 + nccl_version: 2.29.7 diff --git a/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/full/data/b300_sxm/comm/nccl/2.29.7/collection_meta.yaml b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/full/data/b300_sxm/comm/nccl/2.29.7/collection_meta.yaml new file mode 100644 index 000000000..f99ef92eb --- /dev/null +++ b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/full/data/b300_sxm/comm/nccl/2.29.7/collection_meta.yaml @@ -0,0 +1,13 @@ +schema_version: 1 +runtime: + framework: sglang + image: lmsysorg/sglang + image_digest: sha256:c4ca651192e57e91989b5176c3665148131b9a171e53861dee87f5e57cef25b5 + version: 0.0.0.dev0 +tables: + nccl_perf: + status: complete + rows: 46 + data_sha256: 351a194a0b93a742c2b1916034df4bdee7ea06b46511e4f849847f76f6611f10 + provenance_admission_sha256: 4fa30938ce4995bae847be03bd87dd9f7dd6afb068ff141d8b6b36da09f83168 + measurement_kind: native_gpu_measurement diff --git a/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/full/data/b300_sxm/comm/nccl/2.29.7/nccl_perf.parquet b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/full/data/b300_sxm/comm/nccl/2.29.7/nccl_perf.parquet new file mode 100644 index 000000000..7fef62b17 Binary files /dev/null and b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/full/data/b300_sxm/comm/nccl/2.29.7/nccl_perf.parquet differ diff --git a/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/full/data/b300_sxm/dsv41/sglang/dev-c4ca651192e5/collection_meta.yaml b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/full/data/b300_sxm/dsv41/sglang/dev-c4ca651192e5/collection_meta.yaml new file mode 100644 index 000000000..58b4dce57 --- /dev/null +++ b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/full/data/b300_sxm/dsv41/sglang/dev-c4ca651192e5/collection_meta.yaml @@ -0,0 +1,13 @@ +schema_version: 1 +runtime: + framework: sglang + image: lmsysorg/sglang + image_digest: sha256:c4ca651192e57e91989b5176c3665148131b9a171e53861dee87f5e57cef25b5 + version: 0.0.0.dev0 +tables: + dsv41_module_perf: + status: complete + rows: 985 + data_sha256: e8d392db16593f98e9eccb05225baea3d6184bae921ba00ca1610d7b92122523 + provenance_admission_sha256: 4fa30938ce4995bae847be03bd87dd9f7dd6afb068ff141d8b6b36da09f83168 + measurement_kind: native_gpu_measurement diff --git a/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/full/data/b300_sxm/dsv41/sglang/dev-c4ca651192e5/dsv41_module_perf.parquet b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/full/data/b300_sxm/dsv41/sglang/dev-c4ca651192e5/dsv41_module_perf.parquet new file mode 100644 index 000000000..e74a67907 Binary files /dev/null and b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/full/data/b300_sxm/dsv41/sglang/dev-c4ca651192e5/dsv41_module_perf.parquet differ diff --git a/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/full/data/b300_sxm/gemm/sglang/dev-c4ca651192e5/collection_meta.yaml b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/full/data/b300_sxm/gemm/sglang/dev-c4ca651192e5/collection_meta.yaml new file mode 100644 index 000000000..13f5c27b9 --- /dev/null +++ b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/full/data/b300_sxm/gemm/sglang/dev-c4ca651192e5/collection_meta.yaml @@ -0,0 +1,13 @@ +schema_version: 1 +runtime: + framework: sglang + image: lmsysorg/sglang + image_digest: sha256:c4ca651192e57e91989b5176c3665148131b9a171e53861dee87f5e57cef25b5 + version: 0.0.0.dev0 +tables: + gemm_perf: + status: complete + rows: 46 + data_sha256: 2a4c5bea6eb19d3e7bfe89309691d83ab14d41c6cea8e88cf6f19deed351438d + provenance_admission_sha256: 4fa30938ce4995bae847be03bd87dd9f7dd6afb068ff141d8b6b36da09f83168 + measurement_kind: native_gpu_measurement diff --git a/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/full/data/b300_sxm/gemm/sglang/dev-c4ca651192e5/gemm_perf.parquet b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/full/data/b300_sxm/gemm/sglang/dev-c4ca651192e5/gemm_perf.parquet new file mode 100644 index 000000000..4247aeaac Binary files /dev/null and b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/full/data/b300_sxm/gemm/sglang/dev-c4ca651192e5/gemm_perf.parquet differ diff --git a/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/full/data/b300_sxm/moe/sglang/dev-c4ca651192e5/collection_meta.yaml b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/full/data/b300_sxm/moe/sglang/dev-c4ca651192e5/collection_meta.yaml new file mode 100644 index 000000000..553f49092 --- /dev/null +++ b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/full/data/b300_sxm/moe/sglang/dev-c4ca651192e5/collection_meta.yaml @@ -0,0 +1,13 @@ +schema_version: 1 +runtime: + framework: sglang + image: lmsysorg/sglang + image_digest: sha256:c4ca651192e57e91989b5176c3665148131b9a171e53861dee87f5e57cef25b5 + version: 0.0.0.dev0 +tables: + moe_perf: + status: complete + rows: 23 + data_sha256: a78428db565165c5e7445912d257f0731254f9f4edf0d8e145e3bffda6e2338d + provenance_admission_sha256: 4fa30938ce4995bae847be03bd87dd9f7dd6afb068ff141d8b6b36da09f83168 + measurement_kind: native_gpu_measurement diff --git a/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/full/data/b300_sxm/moe/sglang/dev-c4ca651192e5/moe_perf.parquet b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/full/data/b300_sxm/moe/sglang/dev-c4ca651192e5/moe_perf.parquet new file mode 100644 index 000000000..ecc72fc43 Binary files /dev/null and b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/full/data/b300_sxm/moe/sglang/dev-c4ca651192e5/moe_perf.parquet differ diff --git a/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/tp2/decoder_bounded/b300_sxm.yaml b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/tp2/decoder_bounded/b300_sxm.yaml new file mode 100644 index 000000000..2e9f0caa7 --- /dev/null +++ b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/tp2/decoder_bounded/b300_sxm.yaml @@ -0,0 +1,27 @@ +data_dir: data/b300_sxm +gpu: + fp32_flops: 75000000000000 + mem_bw: 7750000000000 + mem_bw_empirical_scaling_factor: 0.8 + mem_empirical_constant_latency: 3.0e-06 + mem_capacity: 288400343040 + bfloat16_tc_flops: 2250000000000000 + int8_tc_flops: 153500000000000 + fp8_tc_flops: 4500000000000000 + fp4_tc_flops: 14000000000000000 + power: 1100 + sm_version: 103 +node: + num_gpus_per_node: 8 + inter_node_bw: 100000000000 + intra_node_bw: 900000000000 + pcie_bw: 128000000000 + p2p_latency: 1.0e-05 +misc: + nccl_mem: + 1: 0 + 2: 358612992 + 4: 411041792 + 8: 411041792 + other_mem: 3758096384 + nccl_version: 2.29.7 diff --git a/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/tp2/decoder_bounded/data/b300_sxm/comm/nccl/2.29.7/collection_meta.yaml b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/tp2/decoder_bounded/data/b300_sxm/comm/nccl/2.29.7/collection_meta.yaml new file mode 100644 index 000000000..1a984cfb5 --- /dev/null +++ b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/tp2/decoder_bounded/data/b300_sxm/comm/nccl/2.29.7/collection_meta.yaml @@ -0,0 +1,13 @@ +schema_version: 1 +runtime: + framework: sglang + image: lmsysorg/sglang + image_digest: sha256:c4ca651192e57e91989b5176c3665148131b9a171e53861dee87f5e57cef25b5 + version: 0.0.0.dev0 +tables: + nccl_perf: + status: complete + rows: 46 + data_sha256: 9a3c6888b768168fa933114f0c6413b26d05952a06b57cf7e6cd861639ac11c4 + provenance_admission_sha256: 871c80f41485fb3707ca3dab48235cd89300fdaf3de333c49410e5ceb11111d6 + measurement_kind: native_gpu_measurement diff --git a/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/tp2/decoder_bounded/data/b300_sxm/comm/nccl/2.29.7/nccl_perf.parquet b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/tp2/decoder_bounded/data/b300_sxm/comm/nccl/2.29.7/nccl_perf.parquet new file mode 100644 index 000000000..27e57b118 Binary files /dev/null and b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/tp2/decoder_bounded/data/b300_sxm/comm/nccl/2.29.7/nccl_perf.parquet differ diff --git a/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/tp2/decoder_bounded/data/b300_sxm/dsv41/sglang/dev-c4ca651192e5-tp267c0e788b4b2/collection_meta.yaml b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/tp2/decoder_bounded/data/b300_sxm/dsv41/sglang/dev-c4ca651192e5-tp267c0e788b4b2/collection_meta.yaml new file mode 100644 index 000000000..35a60bee5 --- /dev/null +++ b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/tp2/decoder_bounded/data/b300_sxm/dsv41/sglang/dev-c4ca651192e5-tp267c0e788b4b2/collection_meta.yaml @@ -0,0 +1,13 @@ +schema_version: 1 +runtime: + framework: sglang + image: lmsysorg/sglang + image_digest: sha256:c4ca651192e57e91989b5176c3665148131b9a171e53861dee87f5e57cef25b5 + version: 0.0.0.dev0 +tables: + dsv41_module_perf: + status: complete + rows: 1029 + data_sha256: f388060ea5ca384e6d8c8603c49ac942d35297554267975923e57a26cf30ac55 + provenance_admission_sha256: 871c80f41485fb3707ca3dab48235cd89300fdaf3de333c49410e5ceb11111d6 + measurement_kind: native_gpu_measurement diff --git a/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/tp2/decoder_bounded/data/b300_sxm/dsv41/sglang/dev-c4ca651192e5-tp267c0e788b4b2/dsv41_module_perf.parquet b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/tp2/decoder_bounded/data/b300_sxm/dsv41/sglang/dev-c4ca651192e5-tp267c0e788b4b2/dsv41_module_perf.parquet new file mode 100644 index 000000000..be8ff8ac6 Binary files /dev/null and b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/tp2/decoder_bounded/data/b300_sxm/dsv41/sglang/dev-c4ca651192e5-tp267c0e788b4b2/dsv41_module_perf.parquet differ diff --git a/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/tp2/decoder_bounded/data/b300_sxm/gemm/sglang/dev-c4ca651192e5-tp267c0e788b4b2/collection_meta.yaml b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/tp2/decoder_bounded/data/b300_sxm/gemm/sglang/dev-c4ca651192e5-tp267c0e788b4b2/collection_meta.yaml new file mode 100644 index 000000000..1a38220e0 --- /dev/null +++ b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/tp2/decoder_bounded/data/b300_sxm/gemm/sglang/dev-c4ca651192e5-tp267c0e788b4b2/collection_meta.yaml @@ -0,0 +1,13 @@ +schema_version: 1 +runtime: + framework: sglang + image: lmsysorg/sglang + image_digest: sha256:c4ca651192e57e91989b5176c3665148131b9a171e53861dee87f5e57cef25b5 + version: 0.0.0.dev0 +tables: + gemm_perf: + status: complete + rows: 46 + data_sha256: 1b3aebbcdcc5d3aea9c9cccf706c9e341d63fa035ae87ba5c4dd0dd1aca699bf + provenance_admission_sha256: 871c80f41485fb3707ca3dab48235cd89300fdaf3de333c49410e5ceb11111d6 + measurement_kind: native_gpu_measurement diff --git a/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/tp2/decoder_bounded/data/b300_sxm/gemm/sglang/dev-c4ca651192e5-tp267c0e788b4b2/gemm_perf.parquet b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/tp2/decoder_bounded/data/b300_sxm/gemm/sglang/dev-c4ca651192e5-tp267c0e788b4b2/gemm_perf.parquet new file mode 100644 index 000000000..888bbc9f0 Binary files /dev/null and b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/tp2/decoder_bounded/data/b300_sxm/gemm/sglang/dev-c4ca651192e5-tp267c0e788b4b2/gemm_perf.parquet differ diff --git a/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/tp2/decoder_bounded/data/b300_sxm/moe/sglang/dev-c4ca651192e5-tp267c0e788b4b2/collection_meta.yaml b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/tp2/decoder_bounded/data/b300_sxm/moe/sglang/dev-c4ca651192e5-tp267c0e788b4b2/collection_meta.yaml new file mode 100644 index 000000000..dd36d0564 --- /dev/null +++ b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/tp2/decoder_bounded/data/b300_sxm/moe/sglang/dev-c4ca651192e5-tp267c0e788b4b2/collection_meta.yaml @@ -0,0 +1,13 @@ +schema_version: 1 +runtime: + framework: sglang + image: lmsysorg/sglang + image_digest: sha256:c4ca651192e57e91989b5176c3665148131b9a171e53861dee87f5e57cef25b5 + version: 0.0.0.dev0 +tables: + moe_perf: + status: complete + rows: 23 + data_sha256: c8628c4357ed6e20cdf3bb5fcd77eb58b39bc7cfdde34cd5ac38c7db5e976c15 + provenance_admission_sha256: 871c80f41485fb3707ca3dab48235cd89300fdaf3de333c49410e5ceb11111d6 + measurement_kind: native_gpu_measurement diff --git a/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/tp2/decoder_bounded/data/b300_sxm/moe/sglang/dev-c4ca651192e5-tp267c0e788b4b2/moe_perf.parquet b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/tp2/decoder_bounded/data/b300_sxm/moe/sglang/dev-c4ca651192e5-tp267c0e788b4b2/moe_perf.parquet new file mode 100644 index 000000000..66015a30a Binary files /dev/null and b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/tp2/decoder_bounded/data/b300_sxm/moe/sglang/dev-c4ca651192e5-tp267c0e788b4b2/moe_perf.parquet differ diff --git a/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/tp2/full/b300_sxm.yaml b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/tp2/full/b300_sxm.yaml new file mode 100644 index 000000000..2e9f0caa7 --- /dev/null +++ b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/tp2/full/b300_sxm.yaml @@ -0,0 +1,27 @@ +data_dir: data/b300_sxm +gpu: + fp32_flops: 75000000000000 + mem_bw: 7750000000000 + mem_bw_empirical_scaling_factor: 0.8 + mem_empirical_constant_latency: 3.0e-06 + mem_capacity: 288400343040 + bfloat16_tc_flops: 2250000000000000 + int8_tc_flops: 153500000000000 + fp8_tc_flops: 4500000000000000 + fp4_tc_flops: 14000000000000000 + power: 1100 + sm_version: 103 +node: + num_gpus_per_node: 8 + inter_node_bw: 100000000000 + intra_node_bw: 900000000000 + pcie_bw: 128000000000 + p2p_latency: 1.0e-05 +misc: + nccl_mem: + 1: 0 + 2: 358612992 + 4: 411041792 + 8: 411041792 + other_mem: 3758096384 + nccl_version: 2.29.7 diff --git a/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/tp2/full/data/b300_sxm/comm/nccl/2.29.7/collection_meta.yaml b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/tp2/full/data/b300_sxm/comm/nccl/2.29.7/collection_meta.yaml new file mode 100644 index 000000000..b562facb1 --- /dev/null +++ b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/tp2/full/data/b300_sxm/comm/nccl/2.29.7/collection_meta.yaml @@ -0,0 +1,13 @@ +schema_version: 1 +runtime: + framework: sglang + image: lmsysorg/sglang + image_digest: sha256:c4ca651192e57e91989b5176c3665148131b9a171e53861dee87f5e57cef25b5 + version: 0.0.0.dev0 +tables: + nccl_perf: + status: complete + rows: 46 + data_sha256: 0794f101d9b28b02607a115a466511b544815dc1b9ab7f8fed7183f7f97df103 + provenance_admission_sha256: 606707c5c335f492622786ecb1903bbd0316ffb0ee98d5ea489627c8bd8723a4 + measurement_kind: native_gpu_measurement diff --git a/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/tp2/full/data/b300_sxm/comm/nccl/2.29.7/nccl_perf.parquet b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/tp2/full/data/b300_sxm/comm/nccl/2.29.7/nccl_perf.parquet new file mode 100644 index 000000000..8e8e5267c Binary files /dev/null and b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/tp2/full/data/b300_sxm/comm/nccl/2.29.7/nccl_perf.parquet differ diff --git a/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/tp2/full/data/b300_sxm/dsv41/sglang/dev-c4ca651192e5-tp267c0e788b4b2/collection_meta.yaml b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/tp2/full/data/b300_sxm/dsv41/sglang/dev-c4ca651192e5-tp267c0e788b4b2/collection_meta.yaml new file mode 100644 index 000000000..fae32b694 --- /dev/null +++ b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/tp2/full/data/b300_sxm/dsv41/sglang/dev-c4ca651192e5-tp267c0e788b4b2/collection_meta.yaml @@ -0,0 +1,13 @@ +schema_version: 1 +runtime: + framework: sglang + image: lmsysorg/sglang + image_digest: sha256:c4ca651192e57e91989b5176c3665148131b9a171e53861dee87f5e57cef25b5 + version: 0.0.0.dev0 +tables: + dsv41_module_perf: + status: complete + rows: 985 + data_sha256: 25011b31ecb929d702fcc2de0b51b89ddb18b753da5d3445502a87669adf42d0 + provenance_admission_sha256: 606707c5c335f492622786ecb1903bbd0316ffb0ee98d5ea489627c8bd8723a4 + measurement_kind: native_gpu_measurement diff --git a/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/tp2/full/data/b300_sxm/dsv41/sglang/dev-c4ca651192e5-tp267c0e788b4b2/dsv41_module_perf.parquet b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/tp2/full/data/b300_sxm/dsv41/sglang/dev-c4ca651192e5-tp267c0e788b4b2/dsv41_module_perf.parquet new file mode 100644 index 000000000..9b9cf0585 Binary files /dev/null and b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/tp2/full/data/b300_sxm/dsv41/sglang/dev-c4ca651192e5-tp267c0e788b4b2/dsv41_module_perf.parquet differ diff --git a/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/tp2/full/data/b300_sxm/gemm/sglang/dev-c4ca651192e5-tp267c0e788b4b2/collection_meta.yaml b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/tp2/full/data/b300_sxm/gemm/sglang/dev-c4ca651192e5-tp267c0e788b4b2/collection_meta.yaml new file mode 100644 index 000000000..ed6848588 --- /dev/null +++ b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/tp2/full/data/b300_sxm/gemm/sglang/dev-c4ca651192e5-tp267c0e788b4b2/collection_meta.yaml @@ -0,0 +1,13 @@ +schema_version: 1 +runtime: + framework: sglang + image: lmsysorg/sglang + image_digest: sha256:c4ca651192e57e91989b5176c3665148131b9a171e53861dee87f5e57cef25b5 + version: 0.0.0.dev0 +tables: + gemm_perf: + status: complete + rows: 46 + data_sha256: 1b64e723fbb63c950c5b058a7a218dc0cf4ba93efe613ddba879502cfdf35c28 + provenance_admission_sha256: 606707c5c335f492622786ecb1903bbd0316ffb0ee98d5ea489627c8bd8723a4 + measurement_kind: native_gpu_measurement diff --git a/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/tp2/full/data/b300_sxm/gemm/sglang/dev-c4ca651192e5-tp267c0e788b4b2/gemm_perf.parquet b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/tp2/full/data/b300_sxm/gemm/sglang/dev-c4ca651192e5-tp267c0e788b4b2/gemm_perf.parquet new file mode 100644 index 000000000..ff4592af4 Binary files /dev/null and b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/tp2/full/data/b300_sxm/gemm/sglang/dev-c4ca651192e5-tp267c0e788b4b2/gemm_perf.parquet differ diff --git a/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/tp2/full/data/b300_sxm/moe/sglang/dev-c4ca651192e5-tp267c0e788b4b2/collection_meta.yaml b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/tp2/full/data/b300_sxm/moe/sglang/dev-c4ca651192e5-tp267c0e788b4b2/collection_meta.yaml new file mode 100644 index 000000000..855b558a4 --- /dev/null +++ b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/tp2/full/data/b300_sxm/moe/sglang/dev-c4ca651192e5-tp267c0e788b4b2/collection_meta.yaml @@ -0,0 +1,13 @@ +schema_version: 1 +runtime: + framework: sglang + image: lmsysorg/sglang + image_digest: sha256:c4ca651192e57e91989b5176c3665148131b9a171e53861dee87f5e57cef25b5 + version: 0.0.0.dev0 +tables: + moe_perf: + status: complete + rows: 23 + data_sha256: 41df6d58e8ecbaf3acc9398630731917742de62e358f85383357d8ac662d9796 + provenance_admission_sha256: 606707c5c335f492622786ecb1903bbd0316ffb0ee98d5ea489627c8bd8723a4 + measurement_kind: native_gpu_measurement diff --git a/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/tp2/full/data/b300_sxm/moe/sglang/dev-c4ca651192e5-tp267c0e788b4b2/moe_perf.parquet b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/tp2/full/data/b300_sxm/moe/sglang/dev-c4ca651192e5-tp267c0e788b4b2/moe_perf.parquet new file mode 100644 index 000000000..4743a7fce Binary files /dev/null and b/python/aisimulate/src/aisimulate_core/systems/profiles/dsv41/tp2/full/data/b300_sxm/moe/sglang/dev-c4ca651192e5-tp267c0e788b4b2/moe_perf.parquet differ diff --git a/python/aisimulate/tests/unit/collector/test_dsv41_native_baselines.py b/python/aisimulate/tests/unit/collector/test_dsv41_native_baselines.py new file mode 100644 index 000000000..eae8ef516 --- /dev/null +++ b/python/aisimulate/tests/unit/collector/test_dsv41_native_baselines.py @@ -0,0 +1,122 @@ +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 + +import json +import sys +from types import SimpleNamespace +from unittest.mock import Mock + +import pytest +from collector.sglang.collect_dsv41_module import aggregate_baseline_records +from collector.sglang.dsv41_native_runner import collect_native_baselines + +pytestmark = pytest.mark.unit + + +@pytest.fixture +def native_baseline(monkeypatch, tmp_path): + """Exercise the producer's actual row emission without CUDA or SGLang.""" + dist = Mock() + dist.get_backend.return_value = "nccl" + torch = Mock(distributed=dist) + torch.cuda.Event.return_value.elapsed_time.return_value = 1.25 + monkeypatch.setitem(sys.modules, "torch", torch) + monkeypatch.setitem(sys.modules, "torch.distributed", dist) + monkeypatch.setitem(sys.modules, "sglang.srt.layers.moe.topk", SimpleNamespace(StandardTopKOutput=Mock())) + + def make(tp_size, rank=0): + dist.get_world_size.return_value = tp_size + dist.get_rank.return_value = rank + # Two token counts, six selections per token; every rank agrees. + torch.bincount.return_value.cpu.return_value.tolist.side_effect = [[6] + [0] * 383, [12] + [0] * 383] + quant = type("Mxfp4FlashinferTrtllmMoEMethod", (), {"flashinfer_mxfp4_moe_precision": "default"})() + experts = Mock( + quant_method=quant, + reduce_results=False, + moe_tp_size=tp_size, + moe_ep_size=1, + w2_weight=SimpleNamespace(shape=(384, 5120, 2304 // tp_size // 2)), + ) + gate = Mock(weight=SimpleNamespace(shape=(384, 5120))) + lm_head = Mock(weight=SimpleNamespace(shape=(129280 // tp_size, 5120))) + layer = type("DeepseekV4DecoderLayer", (), {})() + layer.mlp = SimpleNamespace(experts=experts, gate=gate) + model = SimpleNamespace( + tp_size=tp_size, + config=SimpleNamespace(vocab_size=129280), + modules=lambda: [layer] * 40, + lm_head=lm_head, + ) + options = SimpleNamespace(output=tmp_path, workload_plan=None, batches=[], lengths=[], iterations=1) + provenance = { + "source_sha256": "a" * 64, + "config_sha256": "b" * 64, + "runtime_digest": "sha256:" + "c" * 64, + "execution_profile": "full", + } + return SimpleNamespace(model=model), options, provenance, experts, gate + + return make, torch, dist + + +@pytest.mark.parametrize(("tp_size", "local_vocab"), [(2, 64640), (4, 32320)]) +def test_baselines_emit_loaded_tp_keys_and_preserve_measurements(native_baseline, tmp_path, tp_size, local_vocab): + make, torch, dist = native_baseline + for rank in range(tp_size): + runner, options, provenance, experts, gate = make(tp_size, rank) + collect_native_baselines(runner, options, rank, provenance) + rows = [json.loads(line) for line in (tmp_path / f"baseline-rank-{rank}.jsonl").read_text().splitlines()] + assert [row["kind"] for row in rows] == ["gemm", "gemm", "moe", "nccl", "nccl"] * 2 + assert all(row["latency"] == 1.25 and row["sample"] == 2 and row["tp_rank"] == rank for row in rows) + assert [(r["m"], r["n"], r["k"]) for r in rows if r["kind"] == "gemm"] == [ + (1, 384, 5120), + (1, local_vocab, 5120), + (2, 384, 5120), + (2, local_vocab, 5120), + ] + assert [(r["num_tokens"], r["moe_tp_size"], r["moe_ep_size"]) for r in rows if r["kind"] == "moe"] == [ + (1, tp_size, 1), + (2, tp_size, 1), + ] + assert [(r["num_gpus"], r["message_size"]) for r in rows if r["kind"] == "nccl"] == [ + (tp_size, 10240), + (tp_size, 12288), + (tp_size, 20480), + (tp_size, 24576), + ] + assert gate.call_count == experts.call_count == runner.model.lm_head.quant_method.apply.call_count == 6 + assert dist.all_reduce.call_count == tp_size * 12 + assert torch.cuda.Event.call_count == tp_size * 60 + tables = aggregate_baseline_records(sorted(tmp_path.glob("baseline-rank-*.jsonl")), tp_size) + assert {kind: len(rows) for kind, rows in tables.items()} == {"gemm": 4, "moe": 2, "nccl": 4} + assert {r["message_size"] for r in tables["nccl"]} == {5120, 6144, 10240, 12288} + assert all(r["latency"] == 1.25 for rows in tables.values() for r in rows) + + +@pytest.mark.parametrize("mismatch", ["world_size", "rank", "backend", "moe_tp", "moe_ep", "lm_head", "gate", "vocab"]) +@pytest.mark.parametrize("tp_size", [2, 4]) +def test_baselines_reject_mislabeled_native_layout_before_measurement(native_baseline, tmp_path, mismatch, tp_size): + make, torch, dist = native_baseline + runner, options, provenance, experts, gate = make(tp_size) + other_tp = 4 if tp_size == 2 else 2 + if mismatch == "world_size": + dist.get_world_size.return_value = other_tp + elif mismatch == "rank": + dist.get_rank.return_value = 1 + elif mismatch == "backend": + dist.get_backend.return_value = "gloo" + elif mismatch == "moe_tp": + experts.moe_tp_size = other_tp + elif mismatch == "moe_ep": + experts.moe_ep_size = 2 + elif mismatch == "lm_head": + runner.model.lm_head.weight.shape = (129280 // other_tp, 5120) + elif mismatch == "gate": + gate.weight.shape = (192, 5120) + else: + runner.model.config.vocab_size = 129281 + with pytest.raises(RuntimeError, match="native baseline"): + collect_native_baselines(runner, options, 0, provenance) + torch.randn.assert_not_called() + dist.all_reduce.assert_not_called() + assert not list(tmp_path.glob("baseline-rank-*.jsonl"))