Spaces:
Running
fix: correct MoE expert traffic, surface search limits, retire dennard naming
Browse filesEngine correctness:
- Fix the legacy MoE adapter's derived per-expert size: the denominator now
uses E - k routed experts, with shared experts folded into the fixed term,
so W_batch saturates at the total resident weight instead of overshooting
it (61 scraped MoE rows previously violated the upper-bound contract).
- Treat zero per-session allocation as unbounded session capacity instead of
no_session_capacity, and cap the batch search explicitly.
- Emit warnings when the batch search stops at the 10000 cap with the
per-session floor still satisfied, instead of silently underreporting the
KV-aware ceiling.
Data correction:
- nvidia--glm-5-2-nvfp4: the routed expert group was recorded as 1.668024072
GB from a split that double-counted shared-expert tensors; re-derived from
the same pinned shard headers as 1.592526600 GB so fixed + 256 experts now
reproduces the main resident total exactly. Catalog row and goldens updated.
Validation:
- validate-profiles now checks that saturated expert traffic (fixed + E
experts) stays within the swept resident footprint for both exact and
derived MoE adapters; this check is what caught the GLM 5.2 NVFP4 error.
Housekeeping (engine 1.1.0):
- Rename the Dennard orientation ceiling to the memory-power ceiling across
the engine contract, UI, docs, and tests, matching the source note that
retired the Dennard eponym: trace.dennard_ceiling_toks_per_s ->
trace.memory_power_ceiling_toks_per_s, ceilings.dennard_toks_per_s ->
ceilings.memory_power_toks_per_s, result.dennard -> result.memoryPowerCeiling.
Co-authored-by: Cursor <cursoragent@cursor.com>
- app.html +1 -1
- assets/app.js +5 -5
- assets/bounds-engine.js +47 -17
- assets/local-frontier-model-data.js +3 -3
- assets/local-frontier-profile-data.js +6 -6
- docs/bounds-engine-v1.md +16 -4
- docs/compare-table-metrics.md +5 -5
- docs/profiled-bounds-implementation-plan.md +7 -7
- profiles/models/nvidia--glm-5-2-nvfp4.json +5 -5
- scripts/profile-utils.mjs +18 -0
- scripts/test-bounds-engine.mjs +0 -0
|
@@ -39,7 +39,7 @@
|
|
| 39 |
<p>
|
| 40 |
The local copy adds model metadata and theoretical memory-side
|
| 41 |
decode bounds: single-session, KV-aware aggregate, and loose
|
| 42 |
-
|
| 43 |
</p>
|
| 44 |
</div>
|
| 45 |
</div>
|
|
|
|
| 39 |
<p>
|
| 40 |
The local copy adds model metadata and theoretical memory-side
|
| 41 |
decode bounds: single-session, KV-aware aggregate, and loose
|
| 42 |
+
memory-power ceilings.
|
| 43 |
</p>
|
| 44 |
</div>
|
| 45 |
</div>
|
|
@@ -2436,9 +2436,9 @@ function compareMemoryFitBatchLabel(result) {
|
|
| 2436 |
: "-";
|
| 2437 |
}
|
| 2438 |
|
| 2439 |
-
function
|
| 2440 |
return compareHasAuditedProfile(result)
|
| 2441 |
-
? compareNumberValue(result.
|
| 2442 |
: "-";
|
| 2443 |
}
|
| 2444 |
|
|
@@ -2514,7 +2514,7 @@ function compareDefaultColumns(groupBy) {
|
|
| 2514 |
{ key: "bStar", label: "Usable sessions b*" },
|
| 2515 |
{ key: "aggregate", label: "Aggregate tok/s at b*" },
|
| 2516 |
{ key: "perSession", label: "Per-session tok/s at b*" },
|
| 2517 |
-
{ key: "
|
| 2518 |
];
|
| 2519 |
}
|
| 2520 |
|
|
@@ -2577,7 +2577,7 @@ function compareResultTableRow(row, groupBy, workloadSettings) {
|
|
| 2577 |
bStar: compareCell(bStarLabel),
|
| 2578 |
aggregate: compareCell(aggregateLabel),
|
| 2579 |
perSession: compareCell(perSessionValue),
|
| 2580 |
-
|
| 2581 |
profile: compareCell(
|
| 2582 |
result.profile_resolution?.model_profile || "-",
|
| 2583 |
result.profile_resolution?.model_profile_status || "",
|
|
@@ -2660,7 +2660,7 @@ function comparePairDetailSection(row, workloadSettings) {
|
|
| 2660 |
kind: "list",
|
| 2661 |
title: "Calculation Details",
|
| 2662 |
description:
|
| 2663 |
-
"KV-aware bound: T(b) <= R / (W_batch(b) / b + K_read).
|
| 2664 |
rows: [
|
| 2665 |
compareLinkValue("Model", modelHref(model.id), model.id, model.name),
|
| 2666 |
compareLinkValue("Hardware", deviceHref(hardware.id), hardware.name),
|
|
|
|
| 2436 |
: "-";
|
| 2437 |
}
|
| 2438 |
|
| 2439 |
+
function compareMemoryPowerCeilingLabel(result) {
|
| 2440 |
return compareHasAuditedProfile(result)
|
| 2441 |
+
? compareNumberValue(result.memoryPowerCeiling, (value) => fmtTok(value, 0))
|
| 2442 |
: "-";
|
| 2443 |
}
|
| 2444 |
|
|
|
|
| 2514 |
{ key: "bStar", label: "Usable sessions b*" },
|
| 2515 |
{ key: "aggregate", label: "Aggregate tok/s at b*" },
|
| 2516 |
{ key: "perSession", label: "Per-session tok/s at b*" },
|
| 2517 |
+
{ key: "memoryPowerCeiling", label: "Memory-power bound" },
|
| 2518 |
];
|
| 2519 |
}
|
| 2520 |
|
|
|
|
| 2577 |
bStar: compareCell(bStarLabel),
|
| 2578 |
aggregate: compareCell(aggregateLabel),
|
| 2579 |
perSession: compareCell(perSessionValue),
|
| 2580 |
+
memoryPowerCeiling: compareCell(compareMemoryPowerCeilingLabel(result)),
|
| 2581 |
profile: compareCell(
|
| 2582 |
result.profile_resolution?.model_profile || "-",
|
| 2583 |
result.profile_resolution?.model_profile_status || "",
|
|
|
|
| 2660 |
kind: "list",
|
| 2661 |
title: "Calculation Details",
|
| 2662 |
description:
|
| 2663 |
+
"KV-aware bound: T(b) <= R / (W_batch(b) / b + K_read). The loose memory-power bound keeps C x R explicit and drops private read traffic.",
|
| 2664 |
rows: [
|
| 2665 |
compareLinkValue("Model", modelHref(model.id), model.id, model.name),
|
| 2666 |
compareLinkValue("Hardware", deviceHref(hardware.id), hardware.name),
|
|
@@ -1,4 +1,7 @@
|
|
| 1 |
(function attachBoundsEngine(root) {
|
|
|
|
|
|
|
|
|
|
| 2 |
const STATUS_CODES = Object.freeze({
|
| 3 |
FITS: "fits",
|
| 4 |
RESIDENT_NOT_FIT: "resident_not_fit",
|
|
@@ -47,7 +50,13 @@
|
|
| 47 |
const shared = Number(arch.shared_experts_per_token || 0);
|
| 48 |
const bytesPerParam = Number(adapter.weight_bytes_per_param || 0);
|
| 49 |
if (!total || !active || !experts || !bytesPerParam) return Number(adapter.active_weight_gb || 0);
|
| 50 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 51 |
const fixedParamB = Number(adapter.fixed_param_b || Math.max(0, active - (routed + shared) * expertParamB));
|
| 52 |
const sharedExpertParamB =
|
| 53 |
adapter.shared_expert_param_b === undefined ? expertParamB : Number(adapter.shared_expert_param_b);
|
|
@@ -129,7 +138,7 @@
|
|
| 129 |
const alloc = kvAllocGB(model, lAlloc);
|
| 130 |
const free = capacity - resident - Number(overhead || 0);
|
| 131 |
const bMem = alloc > 0 ? Math.max(0, Math.floor((free / alloc) + 1e-9)) : 0;
|
| 132 |
-
const maxSearch = Math.min(bMem,
|
| 133 |
let best = null;
|
| 134 |
for (let b = 1; b <= maxSearch; b += 1) {
|
| 135 |
const result = calculateBatchBound({ model, hardware, batch: b, rho: safeRho, lRead });
|
|
@@ -140,7 +149,7 @@
|
|
| 140 |
const active = Number(model.adapter.active_weight_gb || batchWeightGB(model, 1, safeRho));
|
| 141 |
const correction = capacity > 0 ? Math.max(0, 1 - ((resident + Number(overhead || 0)) / capacity)) : 0;
|
| 142 |
const memoryPower = capacity * bandwidth;
|
| 143 |
-
const
|
| 144 |
? safeRho * memoryPower / (alloc * active) * correction
|
| 145 |
: 0;
|
| 146 |
const fixed = fixedBatch
|
|
@@ -156,7 +165,7 @@
|
|
| 156 |
bMem,
|
| 157 |
best,
|
| 158 |
single,
|
| 159 |
-
|
| 160 |
fixed,
|
| 161 |
memoryPower,
|
| 162 |
status: fitStatuses({ free, bMem, fixed, best, rStar })
|
|
@@ -310,7 +319,7 @@
|
|
| 310 |
const bandwidth = Number(hardware.memory.bandwidth_gbps || 0);
|
| 311 |
const repo = profile?.repo || model?.id || "";
|
| 312 |
return {
|
| 313 |
-
engine_version:
|
| 314 |
schema_version: "1.0.0",
|
| 315 |
status_code: PROFILE_STATUS_CODES.UNSUPPORTED_PROFILE,
|
| 316 |
profile_resolution: {
|
|
@@ -338,7 +347,7 @@
|
|
| 338 |
q_at_b_star_gb_per_output_token: 0,
|
| 339 |
aggregate_toks_per_s: 0,
|
| 340 |
per_session_toks_per_s: 0,
|
| 341 |
-
|
| 342 |
},
|
| 343 |
ceilings: {},
|
| 344 |
usable_batch: {},
|
|
@@ -352,7 +361,7 @@
|
|
| 352 |
bMem: 0,
|
| 353 |
best: null,
|
| 354 |
single: { batch: 1, batchWeight: 0, readTraffic: 0, q: 0, aggregate: 0, perSession: 0 },
|
| 355 |
-
|
| 356 |
fixed: null,
|
| 357 |
memoryPower: capacity * bandwidth,
|
| 358 |
status: {
|
|
@@ -425,10 +434,15 @@
|
|
| 425 |
const resident = weight.resident;
|
| 426 |
const alloc = profiledKvAllocGB(profile, lAlloc);
|
| 427 |
const free = capacity - resident - overhead;
|
| 428 |
-
|
| 429 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 430 |
: 0;
|
| 431 |
-
const maxSearch = Math.min(bMem,
|
| 432 |
const usableBatches = [];
|
| 433 |
let best = null;
|
| 434 |
|
|
@@ -439,10 +453,26 @@
|
|
| 439 |
if (!best || result.aggregate > best.aggregate) best = result;
|
| 440 |
}
|
| 441 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 442 |
const single = calculateProfiledBatchBound({ profile, hardware, batch: 1, rho, lRead });
|
| 443 |
const correction = capacity > 0 ? Math.max(0, 1 - ((resident + overhead) / capacity)) : 0;
|
| 444 |
const active = weight.batchWeight(1, rho);
|
| 445 |
-
const
|
| 446 |
? rho * memoryPower / (alloc * active) * correction
|
| 447 |
: 0;
|
| 448 |
const statusCode = profileStatusCode({ free, bMem, best });
|
|
@@ -464,11 +494,11 @@
|
|
| 464 |
q_at_b_star_gb_per_output_token: best?.q ?? 0,
|
| 465 |
aggregate_toks_per_s: best?.aggregate ?? 0,
|
| 466 |
per_session_toks_per_s: best?.perSession ?? 0,
|
| 467 |
-
|
| 468 |
};
|
| 469 |
|
| 470 |
return {
|
| 471 |
-
engine_version:
|
| 472 |
schema_version: "1.0.0",
|
| 473 |
status_code: statusCode,
|
| 474 |
profile_resolution: {
|
|
@@ -486,11 +516,11 @@
|
|
| 486 |
single_session_toks_per_s: single.aggregate,
|
| 487 |
kv_aware_aggregate_toks_per_s: best.aggregate,
|
| 488 |
per_session_at_b_star_toks_per_s: best.perSession,
|
| 489 |
-
|
| 490 |
}
|
| 491 |
: {
|
| 492 |
single_session_toks_per_s: single.aggregate,
|
| 493 |
-
|
| 494 |
},
|
| 495 |
usable_batch: best
|
| 496 |
? {
|
|
@@ -498,7 +528,7 @@
|
|
| 498 |
selection_rule: "max_aggregate_over_floor_qualified_batches"
|
| 499 |
}
|
| 500 |
: {},
|
| 501 |
-
warnings
|
| 502 |
inputs_legacy: { lAlloc, lRead, overhead, rho, rStar },
|
| 503 |
capacity,
|
| 504 |
bandwidth,
|
|
@@ -508,7 +538,7 @@
|
|
| 508 |
bMem,
|
| 509 |
best,
|
| 510 |
single,
|
| 511 |
-
|
| 512 |
fixed: null,
|
| 513 |
memoryPower,
|
| 514 |
status: statuses
|
|
|
|
| 1 |
(function attachBoundsEngine(root) {
|
| 2 |
+
const ENGINE_VERSION = "1.1.0";
|
| 3 |
+
const BATCH_SEARCH_CAP = 10000;
|
| 4 |
+
|
| 5 |
const STATUS_CODES = Object.freeze({
|
| 6 |
FITS: "fits",
|
| 7 |
RESIDENT_NOT_FIT: "resident_not_fit",
|
|
|
|
| 50 |
const shared = Number(arch.shared_experts_per_token || 0);
|
| 51 |
const bytesPerParam = Number(adapter.weight_bytes_per_param || 0);
|
| 52 |
if (!total || !active || !experts || !bytesPerParam) return Number(adapter.active_weight_gb || 0);
|
| 53 |
+
// Non-active parameters are the E - k routed experts a token does not
|
| 54 |
+
// select; shared experts are always-on, so they must not appear in the
|
| 55 |
+
// derived per-expert size denominator. Using E - k - s here overestimates
|
| 56 |
+
// the expert size and makes W_batch saturate above the total resident
|
| 57 |
+
// weight. Explicit adapter overrides bypass the derivation for audited
|
| 58 |
+
// packages with nonuniform shared-expert sizes.
|
| 59 |
+
const expertParamB = Number(adapter.expert_param_b || ((total - active) / Math.max(1, experts - routed)));
|
| 60 |
const fixedParamB = Number(adapter.fixed_param_b || Math.max(0, active - (routed + shared) * expertParamB));
|
| 61 |
const sharedExpertParamB =
|
| 62 |
adapter.shared_expert_param_b === undefined ? expertParamB : Number(adapter.shared_expert_param_b);
|
|
|
|
| 138 |
const alloc = kvAllocGB(model, lAlloc);
|
| 139 |
const free = capacity - resident - Number(overhead || 0);
|
| 140 |
const bMem = alloc > 0 ? Math.max(0, Math.floor((free / alloc) + 1e-9)) : 0;
|
| 141 |
+
const maxSearch = Math.min(bMem, BATCH_SEARCH_CAP);
|
| 142 |
let best = null;
|
| 143 |
for (let b = 1; b <= maxSearch; b += 1) {
|
| 144 |
const result = calculateBatchBound({ model, hardware, batch: b, rho: safeRho, lRead });
|
|
|
|
| 149 |
const active = Number(model.adapter.active_weight_gb || batchWeightGB(model, 1, safeRho));
|
| 150 |
const correction = capacity > 0 ? Math.max(0, 1 - ((resident + Number(overhead || 0)) / capacity)) : 0;
|
| 151 |
const memoryPower = capacity * bandwidth;
|
| 152 |
+
const memoryPowerCeiling = alloc > 0 && active > 0
|
| 153 |
? safeRho * memoryPower / (alloc * active) * correction
|
| 154 |
: 0;
|
| 155 |
const fixed = fixedBatch
|
|
|
|
| 165 |
bMem,
|
| 166 |
best,
|
| 167 |
single,
|
| 168 |
+
memoryPowerCeiling,
|
| 169 |
fixed,
|
| 170 |
memoryPower,
|
| 171 |
status: fitStatuses({ free, bMem, fixed, best, rStar })
|
|
|
|
| 319 |
const bandwidth = Number(hardware.memory.bandwidth_gbps || 0);
|
| 320 |
const repo = profile?.repo || model?.id || "";
|
| 321 |
return {
|
| 322 |
+
engine_version: ENGINE_VERSION,
|
| 323 |
schema_version: "1.0.0",
|
| 324 |
status_code: PROFILE_STATUS_CODES.UNSUPPORTED_PROFILE,
|
| 325 |
profile_resolution: {
|
|
|
|
| 347 |
q_at_b_star_gb_per_output_token: 0,
|
| 348 |
aggregate_toks_per_s: 0,
|
| 349 |
per_session_toks_per_s: 0,
|
| 350 |
+
memory_power_ceiling_toks_per_s: 0
|
| 351 |
},
|
| 352 |
ceilings: {},
|
| 353 |
usable_batch: {},
|
|
|
|
| 361 |
bMem: 0,
|
| 362 |
best: null,
|
| 363 |
single: { batch: 1, batchWeight: 0, readTraffic: 0, q: 0, aggregate: 0, perSession: 0 },
|
| 364 |
+
memoryPowerCeiling: 0,
|
| 365 |
fixed: null,
|
| 366 |
memoryPower: capacity * bandwidth,
|
| 367 |
status: {
|
|
|
|
| 434 |
const resident = weight.resident;
|
| 435 |
const alloc = profiledKvAllocGB(profile, lAlloc);
|
| 436 |
const free = capacity - resident - overhead;
|
| 437 |
+
// A profile with zero per-session allocation is not bounded by memory at
|
| 438 |
+
// all; treat its session capacity as the search cap instead of zero.
|
| 439 |
+
const allocUnbounded = free >= 0 && alloc <= 0;
|
| 440 |
+
const bMem = free >= 0
|
| 441 |
+
? alloc > 0
|
| 442 |
+
? Math.max(0, Math.floor((free / alloc) + 1e-9))
|
| 443 |
+
: BATCH_SEARCH_CAP
|
| 444 |
: 0;
|
| 445 |
+
const maxSearch = Math.min(bMem, BATCH_SEARCH_CAP);
|
| 446 |
const usableBatches = [];
|
| 447 |
let best = null;
|
| 448 |
|
|
|
|
| 453 |
if (!best || result.aggregate > best.aggregate) best = result;
|
| 454 |
}
|
| 455 |
|
| 456 |
+
const warnings = [];
|
| 457 |
+
if (allocUnbounded) {
|
| 458 |
+
warnings.push(
|
| 459 |
+
"Profile reports zero per-session KV/state allocation; memory does not bound concurrency and the batch search is capped at " +
|
| 460 |
+
`${BATCH_SEARCH_CAP}.`
|
| 461 |
+
);
|
| 462 |
+
}
|
| 463 |
+
const searchTruncated =
|
| 464 |
+
best !== null && best.batch === maxSearch && (allocUnbounded || bMem > maxSearch);
|
| 465 |
+
if (searchTruncated) {
|
| 466 |
+
warnings.push(
|
| 467 |
+
`Batch search stopped at ${maxSearch} with the per-session floor still satisfied; ` +
|
| 468 |
+
"the reported KV-aware ceiling may understate the true bound."
|
| 469 |
+
);
|
| 470 |
+
}
|
| 471 |
+
|
| 472 |
const single = calculateProfiledBatchBound({ profile, hardware, batch: 1, rho, lRead });
|
| 473 |
const correction = capacity > 0 ? Math.max(0, 1 - ((resident + overhead) / capacity)) : 0;
|
| 474 |
const active = weight.batchWeight(1, rho);
|
| 475 |
+
const memoryPowerCeiling = alloc > 0 && active > 0
|
| 476 |
? rho * memoryPower / (alloc * active) * correction
|
| 477 |
: 0;
|
| 478 |
const statusCode = profileStatusCode({ free, bMem, best });
|
|
|
|
| 494 |
q_at_b_star_gb_per_output_token: best?.q ?? 0,
|
| 495 |
aggregate_toks_per_s: best?.aggregate ?? 0,
|
| 496 |
per_session_toks_per_s: best?.perSession ?? 0,
|
| 497 |
+
memory_power_ceiling_toks_per_s: memoryPowerCeiling
|
| 498 |
};
|
| 499 |
|
| 500 |
return {
|
| 501 |
+
engine_version: ENGINE_VERSION,
|
| 502 |
schema_version: "1.0.0",
|
| 503 |
status_code: statusCode,
|
| 504 |
profile_resolution: {
|
|
|
|
| 516 |
single_session_toks_per_s: single.aggregate,
|
| 517 |
kv_aware_aggregate_toks_per_s: best.aggregate,
|
| 518 |
per_session_at_b_star_toks_per_s: best.perSession,
|
| 519 |
+
memory_power_toks_per_s: memoryPowerCeiling
|
| 520 |
}
|
| 521 |
: {
|
| 522 |
single_session_toks_per_s: single.aggregate,
|
| 523 |
+
memory_power_toks_per_s: memoryPowerCeiling
|
| 524 |
},
|
| 525 |
usable_batch: best
|
| 526 |
? {
|
|
|
|
| 528 |
selection_rule: "max_aggregate_over_floor_qualified_batches"
|
| 529 |
}
|
| 530 |
: {},
|
| 531 |
+
warnings,
|
| 532 |
inputs_legacy: { lAlloc, lRead, overhead, rho, rStar },
|
| 533 |
capacity,
|
| 534 |
bandwidth,
|
|
|
|
| 538 |
bMem,
|
| 539 |
best,
|
| 540 |
single,
|
| 541 |
+
memoryPowerCeiling,
|
| 542 |
fixed: null,
|
| 543 |
memoryPower,
|
| 544 |
status: statuses
|
|
@@ -44433,13 +44433,13 @@ window.LOCAL_FRONTIER_MODEL_DATA = {
|
|
| 44433 |
"weight_precision": "ModelOpt NVFP4 + BF16 fixed tensors",
|
| 44434 |
"weight_bytes_per_param": 0.6169876465760088,
|
| 44435 |
"resident_weight_gb": 464.795267072,
|
| 44436 |
-
"active_weight_gb": 48.
|
| 44437 |
"kv_alloc_gb_per_1k_tokens": 2.558592,
|
| 44438 |
"kv_read_gb_per_1k_tokens": 2.558592,
|
| 44439 |
-
"expert_param_b": 2.
|
| 44440 |
"fixed_param_b": 57.21257234872586,
|
| 44441 |
"shared_expert_param_b": 0,
|
| 44442 |
-
"notes": "Manual correction on 2026-07-08 from current Hugging Face API metadata, pinned model card, target config, hf_quant_config, base GLM-5.2 config comparison, safetensors index, and direct range-read safetensors shard headers. Active traffic is the single-session expected-distinct MoE text-decode weight traffic. KV display fields charge FP8 expanded K/V for 78 layers plus FP8 GLM-5.2 IndexShare DSA indexer key cache for 21 full indexer layers. The audited profile supersedes the generated 376.6649 GB resident estimate and all-layers BF16-ish KV estimate."
|
| 44443 |
},
|
| 44444 |
"sources": [
|
| 44445 |
{
|
|
|
|
| 44433 |
"weight_precision": "ModelOpt NVFP4 + BF16 fixed tensors",
|
| 44434 |
"weight_bytes_per_param": 0.6169876465760088,
|
| 44435 |
"resident_weight_gb": 464.795267072,
|
| 44436 |
+
"active_weight_gb": 48.039663168,
|
| 44437 |
"kv_alloc_gb_per_1k_tokens": 2.558592,
|
| 44438 |
"kv_read_gb_per_1k_tokens": 2.558592,
|
| 44439 |
+
"expert_param_b": 2.581132067777651,
|
| 44440 |
"fixed_param_b": 57.21257234872586,
|
| 44441 |
"shared_expert_param_b": 0,
|
| 44442 |
+
"notes": "Manual correction on 2026-07-08 from current Hugging Face API metadata, pinned model card, target config, hf_quant_config, base GLM-5.2 config comparison, safetensors index, and direct range-read safetensors shard headers. Active traffic is the single-session expected-distinct MoE text-decode weight traffic. KV display fields charge FP8 expanded K/V for 78 layers plus FP8 GLM-5.2 IndexShare DSA indexer key cache for 21 full indexer layers. The audited profile supersedes the generated 376.6649 GB resident estimate and all-layers BF16-ish KV estimate. Corrected on 2026-07-09: the routed expert group size was re-derived as 1.592526600 GB after the earlier split double-counted shared-expert tensors inside the routed sum."
|
| 44443 |
},
|
| 44444 |
"sources": [
|
| 44445 |
{
|
|
@@ -1,6 +1,6 @@
|
|
| 1 |
window.LOCAL_FRONTIER_PROFILE_DATA = {
|
| 2 |
"schema_version": "1.0.0",
|
| 3 |
-
"generated_at": "2026-07-
|
| 4 |
"profiles": [
|
| 5 |
{
|
| 6 |
"id": "abhishekchohan--gemma-3-12b-it-quantized-w4a16",
|
|
@@ -44286,7 +44286,7 @@ window.LOCAL_FRONTIER_PROFILE_DATA = {
|
|
| 44286 |
},
|
| 44287 |
{
|
| 44288 |
"id": "nvidia--glm-5-2-nvfp4",
|
| 44289 |
-
"version": "1.0.
|
| 44290 |
"schema_version": "1.0.0",
|
| 44291 |
"status": "audited",
|
| 44292 |
"repo": "nvidia/GLM-5.2-NVFP4",
|
|
@@ -44309,7 +44309,7 @@ window.LOCAL_FRONTIER_PROFILE_DATA = {
|
|
| 44309 |
"main_resident_weight_gb": 442.986259968,
|
| 44310 |
"auxiliary_resident_weight_gb": 21.809007104,
|
| 44311 |
"fixed_weight_gb": 35.299450368,
|
| 44312 |
-
"routed_expert_weight_gb": 1.
|
| 44313 |
"routed_experts": 256,
|
| 44314 |
"routed_experts_per_token": 8,
|
| 44315 |
"shared_experts_per_token": 1,
|
|
@@ -44427,7 +44427,7 @@ window.LOCAL_FRONTIER_PROFILE_DATA = {
|
|
| 44427 |
"fixed_weight_gb",
|
| 44428 |
"routed_expert_weight_gb"
|
| 44429 |
],
|
| 44430 |
-
"notes": "Safetensors headers were range-read across all 47 shards. Stored tensors sum exactly to the index total_size of 464.795267072 GB: U8 362.387865600 GB, BF16 57.108379648 GB, F8_E4M3 45.298483200 GB, and F32 0.000538624 GB across 232385 tensors. Linked shard bytes total 464.823042096 GB, leaving 0.027775024 GB of safetensors header/container overhead outside tensor payloads. The input embedding contributes 1.903165440 GB resident-only, and auxiliary layer 78 contributes 19.905841664 GB resident-only. Ordinary decode main resident tensors therefore sum to 442.986259968 GB. Routed expert tensors
|
| 44431 |
},
|
| 44432 |
{
|
| 44433 |
"label": "Audited GLM-5.2 FP8 profile and Transformers GLM MoE DSA implementation",
|
|
@@ -44443,8 +44443,8 @@ window.LOCAL_FRONTIER_PROFILE_DATA = {
|
|
| 44443 |
],
|
| 44444 |
"review": {
|
| 44445 |
"reviewed_by": "local-frontier-profile-review",
|
| 44446 |
-
"reviewed_at": "2026-07-
|
| 44447 |
-
"notes": "Audited from live HF API metadata, pinned model card, target config, hf_quant_config, base GLM-5.2 config comparison, direct safetensors header range reads across all 47 shards, and the existing audited GLM-5.2 DSA/IndexShare profiles."
|
| 44448 |
},
|
| 44449 |
"notes": "This profile models ordinary text decode with documented FP8 KV cache. It intentionally does not assume expert-parallel placement details, sparse attention compute savings, runtime-specific MLA compression, or speculative decoding speedups without direct implementation evidence."
|
| 44450 |
},
|
|
|
|
| 1 |
window.LOCAL_FRONTIER_PROFILE_DATA = {
|
| 2 |
"schema_version": "1.0.0",
|
| 3 |
+
"generated_at": "2026-07-09T00:00:00.000Z",
|
| 4 |
"profiles": [
|
| 5 |
{
|
| 6 |
"id": "abhishekchohan--gemma-3-12b-it-quantized-w4a16",
|
|
|
|
| 44286 |
},
|
| 44287 |
{
|
| 44288 |
"id": "nvidia--glm-5-2-nvfp4",
|
| 44289 |
+
"version": "1.0.1",
|
| 44290 |
"schema_version": "1.0.0",
|
| 44291 |
"status": "audited",
|
| 44292 |
"repo": "nvidia/GLM-5.2-NVFP4",
|
|
|
|
| 44309 |
"main_resident_weight_gb": 442.986259968,
|
| 44310 |
"auxiliary_resident_weight_gb": 21.809007104,
|
| 44311 |
"fixed_weight_gb": 35.299450368,
|
| 44312 |
+
"routed_expert_weight_gb": 1.5925266,
|
| 44313 |
"routed_experts": 256,
|
| 44314 |
"routed_experts_per_token": 8,
|
| 44315 |
"shared_experts_per_token": 1,
|
|
|
|
| 44427 |
"fixed_weight_gb",
|
| 44428 |
"routed_expert_weight_gb"
|
| 44429 |
],
|
| 44430 |
+
"notes": "Safetensors headers were range-read across all 47 shards. Stored tensors sum exactly to the index total_size of 464.795267072 GB: U8 362.387865600 GB, BF16 57.108379648 GB, F8_E4M3 45.298483200 GB, and F32 0.000538624 GB across 232385 tensors. Linked shard bytes total 464.823042096 GB, leaving 0.027775024 GB of safetensors header/container overhead outside tensor payloads. The input embedding contributes 1.903165440 GB resident-only, and auxiliary layer 78 contributes 19.905841664 GB resident-only. Ordinary decode main resident tensors therefore sum to 442.986259968 GB. Routed expert tensors under model.layers.3-77 .mlp.experts.N. sum to 407.686809600 GB and divide exactly into 256 uniform expert groups of 1.592526600 GB. Non-expert ordinary decode traffic, including lm_head.weight, dense layers 0-2, attention, gates, norms, routers, shared experts, and the GLM-5.2 full-indexer tensors, sums to 35.299450368 GB, so fixed plus all 256 routed expert groups reproduces the 442.986259968 GB main resident total exactly. An earlier revision of this profile recorded 1.668024072 GB per routed expert from a tensor grouping that double-counted the always-on shared-expert tensors inside the routed sum; the corrected split was re-derived from the same shard headers at the same commit."
|
| 44431 |
},
|
| 44432 |
{
|
| 44433 |
"label": "Audited GLM-5.2 FP8 profile and Transformers GLM MoE DSA implementation",
|
|
|
|
| 44443 |
],
|
| 44444 |
"review": {
|
| 44445 |
"reviewed_by": "local-frontier-profile-review",
|
| 44446 |
+
"reviewed_at": "2026-07-09",
|
| 44447 |
+
"notes": "Audited from live HF API metadata, pinned model card, target config, hf_quant_config, base GLM-5.2 config comparison, direct safetensors header range reads across all 47 shards, and the existing audited GLM-5.2 DSA/IndexShare profiles. Re-reviewed 2026-07-09: the routed expert byte split was re-derived from the same pinned shard headers after a saturation consistency check flagged that fixed plus 256 routed experts exceeded the main resident total."
|
| 44448 |
},
|
| 44449 |
"notes": "This profile models ordinary text decode with documented FP8 KV cache. It intentionally does not assume expert-parallel placement details, sparse attention compute savings, runtime-specific MLA compression, or speculative decoding speedups without direct implementation evidence."
|
| 44450 |
},
|
|
@@ -249,14 +249,20 @@ Single-session ceiling:
|
|
| 249 |
single_session = R / (W_batch(1) / rho + K_read(L_read))
|
| 250 |
```
|
| 251 |
|
| 252 |
-
|
|
|
|
| 253 |
|
| 254 |
```text
|
| 255 |
D = C * R
|
| 256 |
resident_correction = 1 - (W_resident + O) / C
|
| 257 |
-
|
| 258 |
```
|
| 259 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 260 |
## Statuses
|
| 261 |
|
| 262 |
Root `status_code` values:
|
|
@@ -277,7 +283,7 @@ Successful and partial results include:
|
|
| 277 |
|
| 278 |
```json
|
| 279 |
{
|
| 280 |
-
"engine_version": "1.
|
| 281 |
"schema_version": "1.0.0",
|
| 282 |
"status_code": "ok",
|
| 283 |
"profile_resolution": {
|
|
@@ -305,12 +311,18 @@ Successful and partial results include:
|
|
| 305 |
"q_at_b_star_gb_per_output_token": 1.1106134884270131,
|
| 306 |
"aggregate_toks_per_s": 245.81008860846453,
|
| 307 |
"per_session_toks_per_s": 20.484174050705377,
|
| 308 |
-
"
|
| 309 |
},
|
| 310 |
"warnings": []
|
| 311 |
}
|
| 312 |
```
|
| 313 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 314 |
These numbers are for the audited NVIDIA ModelOpt artifact, not the rounded
|
| 315 |
Gemma worked example in the original note. The exact artifact has
|
| 316 |
18.782360732 GB resident tensors, BF16 fixed language traffic, quantized routed
|
|
|
|
| 249 |
single_session = R / (W_batch(1) / rho + K_read(L_read))
|
| 250 |
```
|
| 251 |
|
| 252 |
+
Memory-power orientation ceiling (named the Dennard ceiling before engine
|
| 253 |
+
1.1.0; the bound is unchanged):
|
| 254 |
|
| 255 |
```text
|
| 256 |
D = C * R
|
| 257 |
resident_correction = 1 - (W_resident + O) / C
|
| 258 |
+
memory_power_ceiling = rho * D / (K_alloc(L_alloc) * W_active) * resident_correction
|
| 259 |
```
|
| 260 |
|
| 261 |
+
The batch search is capped at 10000. If the per-session floor is still
|
| 262 |
+
satisfied at the cap — including when a profile reports zero per-session
|
| 263 |
+
allocation, so memory does not bound concurrency at all — the result carries a
|
| 264 |
+
warning that the reported KV-aware ceiling may understate the true bound.
|
| 265 |
+
|
| 266 |
## Statuses
|
| 267 |
|
| 268 |
Root `status_code` values:
|
|
|
|
| 283 |
|
| 284 |
```json
|
| 285 |
{
|
| 286 |
+
"engine_version": "1.1.0",
|
| 287 |
"schema_version": "1.0.0",
|
| 288 |
"status_code": "ok",
|
| 289 |
"profile_resolution": {
|
|
|
|
| 311 |
"q_at_b_star_gb_per_output_token": 1.1106134884270131,
|
| 312 |
"aggregate_toks_per_s": 245.81008860846453,
|
| 313 |
"per_session_toks_per_s": 20.484174050705377,
|
| 314 |
+
"memory_power_ceiling_toks_per_s": 16017.778400892654
|
| 315 |
},
|
| 316 |
"warnings": []
|
| 317 |
}
|
| 318 |
```
|
| 319 |
|
| 320 |
+
Engine 1.1.0 renamed the orientation-ceiling fields after the source note
|
| 321 |
+
retired the Dennard eponym: `trace.dennard_ceiling_toks_per_s` became
|
| 322 |
+
`trace.memory_power_ceiling_toks_per_s`, `ceilings.dennard_toks_per_s` became
|
| 323 |
+
`ceilings.memory_power_toks_per_s`, and the top-level `dennard` convenience
|
| 324 |
+
field became `memoryPowerCeiling`. The computed values are identical.
|
| 325 |
+
|
| 326 |
These numbers are for the audited NVIDIA ModelOpt artifact, not the rounded
|
| 327 |
Gemma worked example in the original note. The exact artifact has
|
| 328 |
18.782360732 GB resident tensors, BF16 fixed language traffic, quantized routed
|
|
@@ -114,7 +114,7 @@ set and should be visible without opening details.
|
|
| 114 |
| Usable sessions `b*` | `trace.b_star` | Derived concurrency that maximizes aggregate throughput while meeting the per-session floor. |
|
| 115 |
| Aggregate tok/s at `b*` | `trace.aggregate_toks_per_s` | Main total throughput estimate for useful concurrent serving. |
|
| 116 |
| Per-session tok/s at `b*` | `trace.per_session_toks_per_s` | Individual user/session throughput at the chosen concurrency. |
|
| 117 |
-
|
|
| 118 |
|
| 119 |
Default visual priority:
|
| 120 |
|
|
@@ -124,7 +124,7 @@ Default visual priority:
|
|
| 124 |
4. `Single-session tok/s`
|
| 125 |
5. `Fit`
|
| 126 |
6. `Max fit sessions`
|
| 127 |
-
7. `
|
| 128 |
|
| 129 |
The table may sort by aggregate throughput by default in one-model mode. In
|
| 130 |
one-hardware mode, preserve model selection order unless the user chooses a
|
|
@@ -144,8 +144,8 @@ sort.
|
|
| 144 |
|
| 145 |
When `status_code` is not `ok`, derived columns that depend on `b*` should show
|
| 146 |
`-`. Columns that are still meaningful may remain populated. For example,
|
| 147 |
-
`single_session_toks_per_s`, `b_mem`, and `
|
| 148 |
-
shown for `no_floor` if the engine produced valid values.
|
| 149 |
|
| 150 |
## Advanced Toggle
|
| 151 |
|
|
@@ -224,7 +224,7 @@ Minimum details for supported rows:
|
|
| 224 |
- `q(b_star)`
|
| 225 |
- aggregate tok/s at `b_star`
|
| 226 |
- per-session tok/s at `b_star`
|
| 227 |
-
-
|
| 228 |
- evidence links and warnings
|
| 229 |
|
| 230 |
For unsupported rows, show:
|
|
|
|
| 114 |
| Usable sessions `b*` | `trace.b_star` | Derived concurrency that maximizes aggregate throughput while meeting the per-session floor. |
|
| 115 |
| Aggregate tok/s at `b*` | `trace.aggregate_toks_per_s` | Main total throughput estimate for useful concurrent serving. |
|
| 116 |
| Per-session tok/s at `b*` | `trace.per_session_toks_per_s` | Individual user/session throughput at the chosen concurrency. |
|
| 117 |
+
| Memory-power bound | `trace.memory_power_ceiling_toks_per_s` | A memory-power orientation bound for sanity checking. |
|
| 118 |
|
| 119 |
Default visual priority:
|
| 120 |
|
|
|
|
| 124 |
4. `Single-session tok/s`
|
| 125 |
5. `Fit`
|
| 126 |
6. `Max fit sessions`
|
| 127 |
+
7. `Memory-power bound`
|
| 128 |
|
| 129 |
The table may sort by aggregate throughput by default in one-model mode. In
|
| 130 |
one-hardware mode, preserve model selection order unless the user chooses a
|
|
|
|
| 144 |
|
| 145 |
When `status_code` is not `ok`, derived columns that depend on `b*` should show
|
| 146 |
`-`. Columns that are still meaningful may remain populated. For example,
|
| 147 |
+
`single_session_toks_per_s`, `b_mem`, and `memory_power_ceiling_toks_per_s` can
|
| 148 |
+
be shown for `no_floor` if the engine produced valid values.
|
| 149 |
|
| 150 |
## Advanced Toggle
|
| 151 |
|
|
|
|
| 224 |
- `q(b_star)`
|
| 225 |
- aggregate tok/s at `b_star`
|
| 226 |
- per-session tok/s at `b_star`
|
| 227 |
+
- Memory-power bound
|
| 228 |
- evidence links and warnings
|
| 229 |
|
| 230 |
For unsupported rows, show:
|
|
@@ -1027,7 +1027,7 @@ Bounds results should be serializable and testable.
|
|
| 1027 |
"q_at_b_star_gb_per_output_token": 0.82,
|
| 1028 |
"aggregate_toks_per_s": 333,
|
| 1029 |
"per_session_toks_per_s": 20.8,
|
| 1030 |
-
"
|
| 1031 |
},
|
| 1032 |
"usable_batch": {
|
| 1033 |
"b_star": 16,
|
|
@@ -1037,7 +1037,7 @@ Bounds results should be serializable and testable.
|
|
| 1037 |
"single_session_toks_per_s": 120,
|
| 1038 |
"kv_aware_aggregate_toks_per_s": 333,
|
| 1039 |
"per_session_at_b_star_toks_per_s": 20.8,
|
| 1040 |
-
"
|
| 1041 |
},
|
| 1042 |
"warnings": []
|
| 1043 |
}
|
|
@@ -1060,7 +1060,7 @@ Required trace fields:
|
|
| 1060 |
- `q_at_b_star_gb_per_output_token`
|
| 1061 |
- `aggregate_toks_per_s`
|
| 1062 |
- `per_session_toks_per_s`
|
| 1063 |
-
- `
|
| 1064 |
|
| 1065 |
The trace must be stable enough for snapshot tests and readable enough for the
|
| 1066 |
calculation details UI.
|
|
@@ -1167,7 +1167,7 @@ W_active =
|
|
| 1167 |
W_resident for dense weight adapters
|
| 1168 |
W_batch(1) for MoE and other batch-dependent weight adapters
|
| 1169 |
|
| 1170 |
-
|
| 1171 |
rho * (C * R) / (K_alloc(L_alloc) * W_active) *
|
| 1172 |
(1 - (W_resident + overhead) / C)
|
| 1173 |
```
|
|
@@ -1214,7 +1214,7 @@ object:
|
|
| 1214 |
"q_at_b_star_gb_per_output_token": 0.82,
|
| 1215 |
"aggregate_toks_per_s": 333,
|
| 1216 |
"per_session_toks_per_s": 20.8,
|
| 1217 |
-
"
|
| 1218 |
}
|
| 1219 |
}
|
| 1220 |
```
|
|
@@ -1308,7 +1308,7 @@ Required `ceilings` fields when `status` is `ok`:
|
|
| 1308 |
- `single_session_toks_per_s`
|
| 1309 |
- `kv_aware_aggregate_toks_per_s`
|
| 1310 |
- `per_session_at_b_star_toks_per_s`
|
| 1311 |
-
- `
|
| 1312 |
|
| 1313 |
Required `usable_batch` fields when `status` is `ok`:
|
| 1314 |
|
|
@@ -1451,7 +1451,7 @@ Main result should show:
|
|
| 1451 |
- single-session decode ceiling
|
| 1452 |
- KV-aware aggregate decode ceiling
|
| 1453 |
- per-session rate at `b_star`
|
| 1454 |
-
-
|
| 1455 |
|
| 1456 |
Remove raw `Inspect concurrency` from the main UI.
|
| 1457 |
|
|
|
|
| 1027 |
"q_at_b_star_gb_per_output_token": 0.82,
|
| 1028 |
"aggregate_toks_per_s": 333,
|
| 1029 |
"per_session_toks_per_s": 20.8,
|
| 1030 |
+
"memory_power_ceiling_toks_per_s": 23700
|
| 1031 |
},
|
| 1032 |
"usable_batch": {
|
| 1033 |
"b_star": 16,
|
|
|
|
| 1037 |
"single_session_toks_per_s": 120,
|
| 1038 |
"kv_aware_aggregate_toks_per_s": 333,
|
| 1039 |
"per_session_at_b_star_toks_per_s": 20.8,
|
| 1040 |
+
"memory_power_toks_per_s": 23700
|
| 1041 |
},
|
| 1042 |
"warnings": []
|
| 1043 |
}
|
|
|
|
| 1060 |
- `q_at_b_star_gb_per_output_token`
|
| 1061 |
- `aggregate_toks_per_s`
|
| 1062 |
- `per_session_toks_per_s`
|
| 1063 |
+
- `memory_power_ceiling_toks_per_s`
|
| 1064 |
|
| 1065 |
The trace must be stable enough for snapshot tests and readable enough for the
|
| 1066 |
calculation details UI.
|
|
|
|
| 1167 |
W_resident for dense weight adapters
|
| 1168 |
W_batch(1) for MoE and other batch-dependent weight adapters
|
| 1169 |
|
| 1170 |
+
memory_power_ceiling =
|
| 1171 |
rho * (C * R) / (K_alloc(L_alloc) * W_active) *
|
| 1172 |
(1 - (W_resident + overhead) / C)
|
| 1173 |
```
|
|
|
|
| 1214 |
"q_at_b_star_gb_per_output_token": 0.82,
|
| 1215 |
"aggregate_toks_per_s": 333,
|
| 1216 |
"per_session_toks_per_s": 20.8,
|
| 1217 |
+
"memory_power_ceiling_toks_per_s": 23700
|
| 1218 |
}
|
| 1219 |
}
|
| 1220 |
```
|
|
|
|
| 1308 |
- `single_session_toks_per_s`
|
| 1309 |
- `kv_aware_aggregate_toks_per_s`
|
| 1310 |
- `per_session_at_b_star_toks_per_s`
|
| 1311 |
+
- `memory_power_toks_per_s`
|
| 1312 |
|
| 1313 |
Required `usable_batch` fields when `status` is `ok`:
|
| 1314 |
|
|
|
|
| 1451 |
- single-session decode ceiling
|
| 1452 |
- KV-aware aggregate decode ceiling
|
| 1453 |
- per-session rate at `b_star`
|
| 1454 |
+
- Memory-power orientation ceiling
|
| 1455 |
|
| 1456 |
Remove raw `Inspect concurrency` from the main UI.
|
| 1457 |
|
|
@@ -1,6 +1,6 @@
|
|
| 1 |
{
|
| 2 |
"id": "nvidia--glm-5-2-nvfp4",
|
| 3 |
-
"version": "1.0.
|
| 4 |
"schema_version": "1.0.0",
|
| 5 |
"status": "audited",
|
| 6 |
"repo": "nvidia/GLM-5.2-NVFP4",
|
|
@@ -23,7 +23,7 @@
|
|
| 23 |
"main_resident_weight_gb": 442.986259968,
|
| 24 |
"auxiliary_resident_weight_gb": 21.809007104,
|
| 25 |
"fixed_weight_gb": 35.299450368,
|
| 26 |
-
"routed_expert_weight_gb": 1.
|
| 27 |
"routed_experts": 256,
|
| 28 |
"routed_experts_per_token": 8,
|
| 29 |
"shared_experts_per_token": 1,
|
|
@@ -137,7 +137,7 @@
|
|
| 137 |
"fixed_weight_gb",
|
| 138 |
"routed_expert_weight_gb"
|
| 139 |
],
|
| 140 |
-
"notes": "Safetensors headers were range-read across all 47 shards. Stored tensors sum exactly to the index total_size of 464.795267072 GB: U8 362.387865600 GB, BF16 57.108379648 GB, F8_E4M3 45.298483200 GB, and F32 0.000538624 GB across 232385 tensors. Linked shard bytes total 464.823042096 GB, leaving 0.027775024 GB of safetensors header/container overhead outside tensor payloads. The input embedding contributes 1.903165440 GB resident-only, and auxiliary layer 78 contributes 19.905841664 GB resident-only. Ordinary decode main resident tensors therefore sum to 442.986259968 GB. Routed expert tensors
|
| 141 |
},
|
| 142 |
{
|
| 143 |
"label": "Audited GLM-5.2 FP8 profile and Transformers GLM MoE DSA implementation",
|
|
@@ -149,8 +149,8 @@
|
|
| 149 |
],
|
| 150 |
"review": {
|
| 151 |
"reviewed_by": "local-frontier-profile-review",
|
| 152 |
-
"reviewed_at": "2026-07-
|
| 153 |
-
"notes": "Audited from live HF API metadata, pinned model card, target config, hf_quant_config, base GLM-5.2 config comparison, direct safetensors header range reads across all 47 shards, and the existing audited GLM-5.2 DSA/IndexShare profiles."
|
| 154 |
},
|
| 155 |
"notes": "This profile models ordinary text decode with documented FP8 KV cache. It intentionally does not assume expert-parallel placement details, sparse attention compute savings, runtime-specific MLA compression, or speculative decoding speedups without direct implementation evidence."
|
| 156 |
}
|
|
|
|
| 1 |
{
|
| 2 |
"id": "nvidia--glm-5-2-nvfp4",
|
| 3 |
+
"version": "1.0.1",
|
| 4 |
"schema_version": "1.0.0",
|
| 5 |
"status": "audited",
|
| 6 |
"repo": "nvidia/GLM-5.2-NVFP4",
|
|
|
|
| 23 |
"main_resident_weight_gb": 442.986259968,
|
| 24 |
"auxiliary_resident_weight_gb": 21.809007104,
|
| 25 |
"fixed_weight_gb": 35.299450368,
|
| 26 |
+
"routed_expert_weight_gb": 1.5925266,
|
| 27 |
"routed_experts": 256,
|
| 28 |
"routed_experts_per_token": 8,
|
| 29 |
"shared_experts_per_token": 1,
|
|
|
|
| 137 |
"fixed_weight_gb",
|
| 138 |
"routed_expert_weight_gb"
|
| 139 |
],
|
| 140 |
+
"notes": "Safetensors headers were range-read across all 47 shards. Stored tensors sum exactly to the index total_size of 464.795267072 GB: U8 362.387865600 GB, BF16 57.108379648 GB, F8_E4M3 45.298483200 GB, and F32 0.000538624 GB across 232385 tensors. Linked shard bytes total 464.823042096 GB, leaving 0.027775024 GB of safetensors header/container overhead outside tensor payloads. The input embedding contributes 1.903165440 GB resident-only, and auxiliary layer 78 contributes 19.905841664 GB resident-only. Ordinary decode main resident tensors therefore sum to 442.986259968 GB. Routed expert tensors under model.layers.3-77 .mlp.experts.N. sum to 407.686809600 GB and divide exactly into 256 uniform expert groups of 1.592526600 GB. Non-expert ordinary decode traffic, including lm_head.weight, dense layers 0-2, attention, gates, norms, routers, shared experts, and the GLM-5.2 full-indexer tensors, sums to 35.299450368 GB, so fixed plus all 256 routed expert groups reproduces the 442.986259968 GB main resident total exactly. An earlier revision of this profile recorded 1.668024072 GB per routed expert from a tensor grouping that double-counted the always-on shared-expert tensors inside the routed sum; the corrected split was re-derived from the same shard headers at the same commit."
|
| 141 |
},
|
| 142 |
{
|
| 143 |
"label": "Audited GLM-5.2 FP8 profile and Transformers GLM MoE DSA implementation",
|
|
|
|
| 149 |
],
|
| 150 |
"review": {
|
| 151 |
"reviewed_by": "local-frontier-profile-review",
|
| 152 |
+
"reviewed_at": "2026-07-09",
|
| 153 |
+
"notes": "Audited from live HF API metadata, pinned model card, target config, hf_quant_config, base GLM-5.2 config comparison, direct safetensors header range reads across all 47 shards, and the existing audited GLM-5.2 DSA/IndexShare profiles. Re-reviewed 2026-07-09: the routed expert byte split was re-derived from the same pinned shard headers after a saturation consistency check flagged that fixed plus 256 routed experts exceeded the main resident total."
|
| 154 |
},
|
| 155 |
"notes": "This profile models ordinary text decode with documented FP8 KV cache. It intentionally does not assume expert-parallel placement details, sparse attention compute savings, runtime-specific MLA compression, or speculative decoding speedups without direct implementation evidence."
|
| 156 |
}
|
|
@@ -193,6 +193,16 @@ function checkAuditedProfile(relativePath, profile, errors) {
|
|
| 193 |
if (activeWeight > weightAdapter.resident_weight_gb + 1e-9) {
|
| 194 |
errors.push(`${relativePath}: active traffic exceeds resident footprint`);
|
| 195 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 196 |
if (
|
| 197 |
weightAdapter.main_resident_weight_gb !== undefined &&
|
| 198 |
weightAdapter.auxiliary_resident_weight_gb !== undefined
|
|
@@ -246,4 +256,12 @@ function checkAuditedProfile(relativePath, profile, errors) {
|
|
| 246 |
if (activeGb > residentGb + 1e-9) {
|
| 247 |
errors.push(`${relativePath}: active traffic exceeds resident footprint`);
|
| 248 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 249 |
}
|
|
|
|
| 193 |
if (activeWeight > weightAdapter.resident_weight_gb + 1e-9) {
|
| 194 |
errors.push(`${relativePath}: active traffic exceeds resident footprint`);
|
| 195 |
}
|
| 196 |
+
const saturatedWeight =
|
| 197 |
+
weightAdapter.fixed_weight_gb +
|
| 198 |
+
weightAdapter.routed_experts * weightAdapter.routed_expert_weight_gb;
|
| 199 |
+
const sweptResident =
|
| 200 |
+
weightAdapter.main_resident_weight_gb ?? weightAdapter.resident_weight_gb;
|
| 201 |
+
if (saturatedWeight > sweptResident + 1e-9) {
|
| 202 |
+
errors.push(
|
| 203 |
+
`${relativePath}: saturated expert traffic exceeds swept resident footprint`,
|
| 204 |
+
);
|
| 205 |
+
}
|
| 206 |
if (
|
| 207 |
weightAdapter.main_resident_weight_gb !== undefined &&
|
| 208 |
weightAdapter.auxiliary_resident_weight_gb !== undefined
|
|
|
|
| 256 |
if (activeGb > residentGb + 1e-9) {
|
| 257 |
errors.push(`${relativePath}: active traffic exceeds resident footprint`);
|
| 258 |
}
|
| 259 |
+
const saturatedGb =
|
| 260 |
+
(fixedParamB + weightAdapter.routed_experts * expertParamB) *
|
| 261 |
+
profile.serving.weight_bytes_per_param;
|
| 262 |
+
if (saturatedGb > residentGb + 1e-9) {
|
| 263 |
+
errors.push(
|
| 264 |
+
`${relativePath}: saturated expert traffic exceeds resident footprint`,
|
| 265 |
+
);
|
| 266 |
+
}
|
| 267 |
}
|
|
The diff for this file is too large to render.
See raw diff
|
|
|