Architecture Designer — methodology

Method version 1.0 · engine: /engines/architecture-designer/ · composes Hardware Match, Model Match, Compute Fit, Camera Stream Capacity, the Thermal Feasibility Checker, Carrier Finder, the Jetson Configuration Checker, Jetson Power & PSU, Frigate Fit and Drive Endurance, plus four legacy rollups.

One whole architecture, composed and re-decided nowhere. This engine has no ranking function of its own. It owns exactly one judgement — how to put more than one model stage on one accelerator — and that judgement is class E, so it is labelled on every result and it caps the verdict.

Contents

  1. What it decides, and what it does not
  2. The composition: which engine answers which question
  3. Hardware Match’s answer is copied verbatim
  4. The pipeline: stages, rates and the fan-out
  5. Composing stages on one accelerator — the class E assumption
  6. How the verdict is composed, and where it is capped
  7. The rollups that are still legacy and class E
  8. Legacy figures with no V2 owner, and what happened to each
  9. What the result reports about its own coverage
  10. What invalidates a result
  11. Method changelog

1. What it decides, and what it does not

The Architecture Designer answers one question: given this workload, these constraints and this pipeline, what is the whole deployment — which platform, at how many nodes, with the cameras split how, running which model at each stage, against which constraints, with what bill of materials, and what should be measured before any of it is bought.

It does not decide which platform wins. That is Hardware Match's question, and its answer is copied here without change. It does not decide which model to run either — that is Model Match's, per stage. It does not compute a throughput, a latency, a memory figure, a thermal margin or a carrier verdict of its own: every one of those comes from the engine that owns it, stamped with that engine's name, so any number on the page can be reproduced by calling that engine directly with the same inputs. That is what makes the composed answer checkable rather than asserted.

What it does own is the composition itself: how the per-stage results are put together on one node, and what that composition is allowed to claim. There is exactly one judgement in that, it is unmeasured, and §5 is about nothing else.

2. The composition: which engine answers which question

QuestionOwnerWhat this engine takes from it
Which platform, how many nodes, how are the cameras splitHardware MatchThe winner verbatim: platform, node count, per-node camera assignment, unit and total hardware cost and power, the five term scores, the weight table, the ranked alternatives with their role labels, and the eliminated candidates with the constraint that eliminated each.
Which model runs at this stageModel MatchThe winning model for the stage's task on the chosen platform, at the stage's precision, with its throughput, utilization, latency tier, memory split and reference accuracy — and the stage's own alternatives and universe counts.
Does a pinned model hold this stageCompute FitThe same constraint objects for a model the caller named, so pinning changes who answers but not what is answered.
Decode, inference and memory at the nodeCamera Stream CapacityThe per-node decode, inference and memory constraints for the cameras assigned to one node.
Will it survive the enclosureThermal Feasibility CheckerAmbient rating, cooling capacity, the module power ceiling and the fan-in-a-sealed-box conflict.
Is there a board to plug it intoCarrier FinderWhether a carrier, system or devkit meets the stated needs, and which.
Will the software stack line upJetson Configuration CheckerJetPack, runtime and power-mode compatibility for the chosen module.
How big a supply, and can PoE carry itJetson Power & PSUThe module power ceiling and the PoE path.
Does the NVR software have a detector for itFrigate FitDetector, decode preset, host CPU, host link and preprocessing — asserted only for the surveillance use cases.
Will the drives hold and survive the writesDrive EnduranceCapacity, endurance, warranty horizon and sustained throughput.

Every constraint returned carries engine and check, its evidence class, its source records and the assumptions behind it. The result also carries sub_engines: the method version and dataset version of every engine that contributed, and a legacy flag on the four that are not V2 yet.

3. Hardware Match’s answer is copied verbatim

This is the rule the engine was built around, and it is worth stating in the flat form:

  • No second ranking pass. There is no scoring function in this engine. The platform, the node count, the per-node camera assignment, the hardware cost and the hardware power are what Hardware Match returned; the five term scores and the weight table on the page are its own, published so the total can be recomputed from the printed numbers.
  • No confidence re-pick. A LOW confidence on the winner is reported, never a reason to reach past it for the runner-up. The legacy orchestrator did exactly that — ranked, then spliced a multi-node economics winner to the front, then re-picked on a confidence tier — and the disagreements it produced are the reason this engine has one selection step instead of three.
  • No mutation of the alternatives. alternatives[] is Hardware Match's ranked list minus the winner, in its order, carrying its own role labels — lower_cost, lower_power, higher_headroom, stretch. Nothing here re-sorts it, filters it, re-scores it or adds a role to it. The page renders it in the order it arrives.
  • No override input. There is no field by which a caller picks the winner. Pinning a platform narrows the candidate set Hardware Match ranks and changes no other rule; it does not choose an answer, and if the pinned platform cannot hold the load the result says so instead of substituting one you did not ask about.

One consequence is worth being explicit about, because it looks like a bug until you see the alternative. Hardware Match ranks platforms against one model's load — the workload's model family and variant — because that is the question its five terms are defined over. The pipeline is then composed on the platform it picked. So a pipeline that does not fit on that platform is reported as not fitting, at whatever percentage of one accelerator it needs, rather than quietly triggering a second ranking pass against a different load. The result names the levers: reduce the fan-out, pin a smaller model, raise the node cap, or pin a platform.

4. The pipeline: stages, rates and the fan-out

A pipeline is up to four stages. Each stage carries a task, what it runs on, and a rate:

  • A stage that runs on camera frames is sized at cameras on one node × the detect rate × the motion share. An explicit per-stage frames-per-second figure overrides that; left blank, the stage inherits the workload's detect rate.
  • A stage that runs on an earlier stage's output is sized at the parent's rate × the fan-out, where the fan-out is how many detections each frame produces. It defaults to one per frame and the result marks it as defaulted when it was.

The fan-out is class E. Nothing measures how many objects your scenes contain; it is a statement about your deployment, not about the hardware, and it multiplies straight into the throughput the downstream stage is asked for — two detections per frame doubles that stage's required rate. It is therefore always shown, always labelled, and never silently chosen for you beyond the default of one.

Every stage is sized on one node, not on the fleet, because that is the machine the models actually share. A stage's model is Model Match's pick out of the models with a benchmark row on that platform, or Compute Fit's verdict on the model you pinned; either way, the throughput, latency, precision, runtime, batch and memory figures are that engine's own and are reproduced unchanged.

5. Composing stages on one accelerator — the class E assumption

When more than one stage lands on one node, they share one accelerator. This engine composes them by summing their utilizations and adding their memory on the shared memory budget. That is the whole model, and it has no measurement behind it.

There is no measured concurrent-model throughput anywhere in this corpus. That statement is precise, and it is worth unpacking, because two things that look like evidence for it are not:

  • The multi-stream scaling curve models N streams of ONE model. It says what happens to throughput when you feed a single loaded network more concurrent streams. It says nothing about two different networks contending for the same compute units, the same memory bandwidth and the same scheduler — and treating it as if it did would be borrowing a number from a question it was never asked.
  • The one multi-model source on record is a recommendation, not a measurement. It advises running the models in separate containers with CUDA stream priority rather than under MPS, and it budgets roughly 3 % container overhead. It does not measure the throughput either model achieves while the other is running. So it is cited as guidance and it is never turned into a coefficient; a 3 % container overhead is not a concurrency model.
  • The stage vocabulary in the research corpus is decode → preprocess → infer → postprocess — the internal stages of running one model, not two models sharing a device.

Summing is the honest choice among the available ones. It is not conservative in every direction: real contention can be worse than a sum, because two resident networks also contend for memory bandwidth and cache, and it can be better, because a stage that is latency-bound rather than throughput-bound may interleave into the other's gaps. Which of those dominates on your silicon, your runtime and your models is exactly the thing nobody has measured here.

So the sum is stamped class E — engineering heuristic, no source record — on the pipeline block, on the pipeline_accelerator_share constraint and in the assumptions, and the result links to the measurement protocol, which is how you replace this assumption with a number. Memory is composed the same way and reports UNKNOWN rather than an estimate whenever a stage has no memory split on record — an unknown is never filled in with a guess.

6. How the verdict is composed, and where it is capped

The architecture's verdict is the worst of: Hardware Match's verdict on the winning platform, every stage's verdict, and the status of every composed constraint. A FAIL anywhere makes it NO FIT; a NEAR LIMIT makes it FIT WITH RISKS; an UNKNOWN caps it at NEEDS VALIDATION and never eliminates anything.

On top of that there is one hard cap. Whenever more than one stage shares an accelerator, the verdict is capped at NEEDS VALIDATION, regardless of how much headroom the sum shows. A class E sum can prove a miss — 155 % of one accelerator is a miss under any concurrency model — but it can never confirm a fit, because the arithmetic that would confirm it is the arithmetic nobody has checked. A single-stage architecture is not capped: nothing is composed, so there is no assumption to carry.

Each stage is also reported on its own, with its own verdict, so a reader can see which part of the composition is solid and which part is the assumption.

7. The rollups that are still legacy and class E

Four whole-system figures on this page do not come from a V2 engine and carry no source record. They are labelled class E, line by line, on the result and on the page:

FigureLegacy engineClassReplaced by
Aggregate bitrate and network utilizationnetwork_bandwidthEDeployment Cost & TCO, which is where sourced cost lands
Storage footprint and drive sizing at retentionstorage_enduranceE
System power and PSU sizingpower_budgetE
Every bill-of-materials line except the compute moduledeployment_costE

The compute line is the exception: it is Hardware Match's, priced from a posted vendor listing, and carries its own class. The hardware cost and hardware power on the architecture block are likewise Hardware Match's, not the legacy rollup's — which is why those two figures and the whole-system rollup can differ on the same result and are shown separately rather than reconciled into one number.

A rollup that does not resolve is reported as null with a risk explaining why, never estimated. The legacy cost engine has no module row for several catalog platforms; on those the bill of materials is the compute line alone and the result says so.

8. Legacy figures with no V2 owner, and what happened to each

The engine this one replaces produced several figures that no V2 engine owns. Dropping them silently would hide a change in what the page claims, so each one is listed here with its disposition.

Legacy figureWhat it assertedDisposition
ENCODE_STREAM_CEILING A per-platform ceiling on simultaneous hardware encode sessions. Carried as a gap. The session counts have not yet been carried into a sourced V2 row, so no encode-session constraint is asserted here. Encode capacity is a real limit on a re-encoding NVR deployment; its absence is reported in gaps[] rather than replaced with a number.
ENCODE_DECODE_CONTENTION A penalty applied when the same block does encode and decode at once. Carried as a gap. Same reason: not yet a sourced V2 row. Decode is asserted by Camera Stream Capacity with its own sources; the contention penalty is not re-applied on top of it from an unsourced table.
memory_bandwidth_ceiling A throughput ceiling derived from module memory bandwidth. Dropped as unsourced. No source record stood behind the derivation, and a ceiling that cannot be cited cannot cap a published throughput.
scaling_curve_used Which multi-stream scaling curve had been applied. Dropped as unsourced. The multi-stream efficiency that is applied now is Compute Fit's, named in its own assumptions with its own class; a second, separately-labelled curve on the composed result asserted nothing checkable.
int8_map_drop_expected An expected accuracy loss in mAP points from INT8 quantisation. Dropped as unsourced. Quantised accuracy is now Model Match's, resolved per model and per precision from published figures with the evaluation set named — or reported as absent. A single generic drop applied to every model was a guess wearing a number.
sync_recommendation Advice on synchronising multi-node capture. Dropped as unsourced. It was editorial guidance with no record behind it and no engine that owned it.
_modules_required How many modules the deployment needed, computed inside the legacy orchestrator. Replaced. Node count is now part of the candidate Hardware Match ranks, so the figure on the result is hardware_match.winner.node_count — chosen inside the ranking rather than corrected afterwards, with the per-node camera assignment beside it.

9. What the result reports about its own coverage

  • Candidates, evaluated, feasible, excluded — and a per-registry count, so a platform that ten registries know well is distinguishable from one that three of them mention.
  • Thin coverage is named. A platform present in three or fewer of the platform registries is still evaluated and still ranked, and is capped at NEEDS VALIDATION with the reason stated.
  • Registry-only platforms are named. A platform that exists in a data registry but not in the hardware catalog is not a candidate, and the result lists which ones those are rather than leaving them silently absent.
  • Stages resolved and rollups resolved are counted, so a partial answer is visibly partial.
  • Every eliminated platform comes back with the exact constraint that eliminated it — the check, the engine, the status, what was required and what was available.

10. What invalidates a result

  • A new benchmark row. Throughput here is the pessimistic edge of the rows that resolve for each model on this platform. One new measured row can move a stage's available fps, its utilization, its evidence class and therefore the platform ranking underneath the whole architecture.
  • A firmware or JetPack change. A different JetPack, runtime or power mode changes what the configuration checker asserts, what throughput the benchmark rows apply to, and in some cases whether the configuration is supported at all. An architecture designed against one release is not evidence about another.
  • A different fan-out. The detections-per-frame figure multiplies straight into every downstream stage's required throughput. If your scenes carry four objects where the result assumed one, the downstream stage needs four times the rate and the composition changes completely.
  • A measurement that contradicts the sharing assumption. This is the one that matters most. The moment somebody measures two models running concurrently on this silicon, the summed utilization on this page is either confirmed or falsified — and if it is falsified, every multi-stage verdict computed from it moves. Until then the cap at NEEDS VALIDATION is the honest reading, and the measurement protocol is how you close it.
  • Anything the sub-engines' own caveats cover. Software versions, thermal state, input resolution, batch size, the multi-stream efficiency curve, and the fact that every benchmark row is inference-only.
  • The class E rollups. Network, storage, system power and the non-compute bill of materials are heuristics, not sourced figures. Do not put them in a purchase order without checking them against the vendor quotes.

11. Method changelog

MethodDateChange
1.02026-09-09First release. Composition with no ranking function of its own: Hardware Match's platform, node count, per-node camera assignment, cost and power copied verbatim, with no second ranking pass, no confidence re-pick and no mutation of the alternatives or their role labels; Model Match per stage, or Compute Fit for a pinned model; node-level constraints from the V2 engines that assert them, each stamped with its engine, class and sources. Multi-stage composition by summing per-stage accelerator utilization and adding memory on the shared budget, labelled class E and capping every multi-stage verdict at NEEDS VALIDATION. Network bandwidth, storage size, system power and the non-compute bill of materials retained as labelled class E legacy rollups. Legacy figures with no V2 owner disposed of explicitly rather than dropped silently.

Method changes bump the method version; the composite dataset version follows the newest of the registries the sub-engines read, and every result also carries the per-engine versions in sub_engines, with a legacy flag on the four rollup engines.