Hardware Selector — methodology
Method version 3.1.0 · engine: /engines/hardware-selector/ · reads the Selector's own platform profiles and capacity model, the codec decode-ceiling table, the power-mode and PoE registries, the precision-support registry (HF6), and the production-carrier registry (IP67 only).
A quick estimate and a starting point, not a validated configuration. The complete-configuration validator is Hardware Match; every Selector result hands its workload and its pick to Hardware Match so the pick can be checked there.
Contents
1. Purpose, and its relationship to Hardware Match
The Hardware Selector answers one question quickly: for a camera workload described in a few tiles, which platform is a reasonable place to start, at how many nodes? It ranks complete configurations (a platform at the node count it needs) on its own modelled per-node stream capacity.
Transition status: the Selector stays a separate, quick estimator. It is not a thin view over Hardware Match and is not required to agree with it; a difference between the two is not a defect unless the Selector's pick breaks a hard physical limit Hardware Match sees. Hardware Match is the complete-configuration validator — per-node capacity from Camera Stream Capacity, decode, memory, power, thermal and carrier constraints — and its own methodology applies to its results only; nothing on that page describes how the Selector decides.
Every successful result carries scope_disclosure: an estimate_notice, the stated differences from Hardware Match, a hand-off link, the exact Hardware Match request as hardware_match_inputs (cameras, resolution, frame rate, codec, precision, goal, power limit, fanless, ambient, and the Selector's pick as pin), and not_carried — the Selector inputs Hardware Match does not evaluate from the hand-off (scenario, task, latency requirement, compliance).
2. Inputs and what each one does
| Input | Page values | Effect |
|---|---|---|
Task (model) | classification, object detection, segmentation, pose, multi-model | Selects the reference model for the capacity model and the compute-tier filter HF4. With no precision named, every task is sized at INT8. The shared task default for segmentation and pose (FP16, owner ruling of 2026-09-29) is held at INT8 here, #274: the Selector sizes per-node capacity from two models and its plans are not monotone in cameras, so the heavier FP16 sizing moved them the wrong way; it follows the task default once that is fixed. precision is listed in defaulted, and an assumption says the default is held (method 3.0.3). Segmentation and pose are sized on the Selector’s YOLOv8s detector proxy. |
| Streams | 1–16 | The camera load each configuration must carry; up to 32 cameras and 8 nodes per plan. |
| Resolution | 720p, 1080p, 4K | Capacity model input and decode ceiling row (HF5). |
| Power | ultra-low, low, moderate, high | Power envelope 5 / 15 / 40 / 150 W for HF2. |
| Environment | fanless, active cooled, industrial, mobile robot, edge rack | Fanless applies HF3 and the documented enclosure derate to sustained capacity. |
| Budget sensitivity | lowest cost, balanced, highest performance | Selects the ranking weight table (section 4). |
| Latency | batch, near real-time, real-time critical | Ranking preference on the modelled per-frame latency (section 5). |
| Compliance | none, IP67 | Sourced IP67 check, flag only (section 6). |
| Scenario | six deployment patterns | Informational: labels the summary and flags capability-profile caveats; never changes the ranking (section 7). |
| Ambient temperature | 25 / 35 / 45 / 55 °C | Heuristic thermal screen, warnings only (section 7). |
Inputs (WP-01). A field that is not stated takes its documented default and is listed in provenance.defaulted; a field that is stated but invalid — a count of 0, a negative, a fraction or a non-number, true in place of a count, an unknown value of an enumerated input, or an empty string — is rejected with VALIDATION_ERROR naming the field, never replaced by a default.
Input keys (WP-02). The engine accepts one list of input keys — the inputs documented here and their declared backward-compatible aliases. Unknown input keys are rejected with VALIDATION_ERROR naming the key: an invented or misspelt key is never silently ignored, a __ test hook never reaches the engine, and an alias sent together with the key it stands for is rejected too (the engine would read only one of them). export_json.inputs echoes every input the engine honoured, so replaying it reproduces the result.
3. Hard filters HF2–HF11
A platform is removed only by a hard filter. Each elimination carries its reason, and a request with nothing left is answered with NO_ELIGIBLE_PLATFORMS naming the binding constraint.
- HF11 PoE powered-device ceiling: when a PoE standard powers the node, a platform whose lowest supported power preset draws more than the standard delivers is removed (PoE and power-mode registries). Checked first.
- HF2 power envelope: removed when the platform's maximum power exceeds twice the selected envelope.
- HF3 cooling: fanless removes an actively cooled module unless a documented fanless enclosure exists for it; those pass with a sustained-capacity derate.
- HF4 compute floor: removed when the platform's capability tier is more than two tiers below the task's (one tier for generative and language tasks).
- HF5 decode ceiling: removed when the per-node stream count exceeds the published decode ceiling for the codec and resolution.
- HF6 precision: removed when the platform cannot run the requested precision.
- HF7 RT-DETR at INT8 on INT8-only accelerators; HF8 RT-DETR on Hailo; HF10 YOLO12 on the RK3588 NPU: model-support facts.
- HF9 a platform with no neural accelerator cannot run inference.
4. Capacity, ranking and the evidence floor
Each platform's per-node capacity comes from the Selector's own stream model (benchmark rows where they exist, interpolation or cross-platform scaling where they do not), capped by module memory and by the published decode ceiling. The node count is the smallest that carries the load within 8 nodes. Complete configurations are ranked by one weighted score over cost efficiency, deployment simplicity, evidence quality, power efficiency, capacity fit and compute headroom; the default weights are 0.35 / 0.25 / 0.20 / 0.10 / 0.10 / 0, and budget, reliability, minimum-node and vision-language intents select other published tables. The recommendation is the first ranked configuration whose capacity evidence meets the kernel evidence floor (interpolated or better); a configuration ranked above it on modelled capacity only is named as planning-only, never recommended. Accelerator-only configurations (host not costed) are shown separately and never ranked against complete systems.
5. The latency requirement
Targets (planning definitions, class E): real-time critical 33.3 ms per frame, one frame interval at 30 fps; near real-time 100 ms; batch no target, not evaluated. With no latency input the requirement is not evaluated.
Each feasible configuration's modelled per-frame latency is 1000 divided by the modelled single-stream frame rate at batch 1 from the same capacity model that sizes the plan. It is class D: it excludes capture, network and queueing and is not a measured end-to-end latency. Because the evidence is class D, a miss never removes a configuration. The requirement is an ordered ranking preference: with a target set, configurations that meet it rank ahead of those whose latency is unknown, which rank ahead of those that miss it, and the weighted score decides inside each group. Relaxing the requirement therefore never removes a configuration a stricter one accepted.
Every result publishes latency_check: the requirement, the target, the basis, and one row per feasible configuration with its modelled latency and a status — PASS, FAIL, UNKNOWN when the model has no frame rate, NOT APPLICABLE with no target. When no configuration with admissible evidence meets the target, the winner's FAIL is stated in a warning.
6. Compliance
IP67 is a sourced check against the production-carrier registry: a platform is PASS when a registry system for its module carries an IP67 rating that a cited source states, and UNKNOWN when no such system is on record. UNKNOWN is not PASS. The registry records no module as lacking an IP67 option, so the check flags and never removes a configuration; compliance_checks publishes one row per feasible configuration with the evidence behind each PASS.
ATEX and MIL-STD-810 are not modelled: no platform, carrier or enclosure in the registries carries a sourced ATEX or MIL-STD-810 certification. The page no longer offers them, and a request that names either is refused with a validation error on compliance_requirements rather than answered as if the requirement had been checked. Confirm those certifications with the enclosure vendor.
The advisory compliance values the API accepts (NDAA, EU AI Act, HIPAA, NERC CIP, ISO 26262, PCI DSS) produce warnings only; an unknown value is a validation error.
7. Scenario and ambient temperature
Scenario is informational. It labels the summary and flags capability-profile caveats — for example an accelerator whose profile says it is weak for this deployment pattern — and input_effects.deployment_scenario reports the winner's profile fit. It does not change the ranking, the capacity or the cost; Industrial Inspection and Multi-Camera Analytics map to the same profile.
Ambient temperature is a heuristic screen, not a thermal verdict. It produces a warning when a fanless platform exceeds its planning ambient limit or when an estimated junction temperature suggests derating; it does not change capacity, ranking or confidence. Fanless sizing uses the documented enclosure derate, whatever the ambient. For a thermal verdict use the Thermal Feasibility Checker or Hardware Match with an ambient.
8. Evidence limitations
- Per-node capacity is the Selector's own model, not Camera Stream Capacity per candidate; Hardware Match may size the same workload differently.
- Modelled latency is class D and one reference model per task; the real figure depends on the model, runtime and pipeline — measure on the target.
- Hardware costs come from catalog profiles and price rows where wired; gaps are class E until Deployment Cost & TCO prices the configuration.
- The IP67 check reads one registry and covers only systems recorded there; an absent rating means unknown, not unrated.
- The thermal screen is a rule of thumb (planning ambient limit, junction-temperature estimate); it is not a model of any enclosure.
9. Method changelog
| Method | Date | Change |
|---|---|---|
| 3.1.0 | 2026-09-29 | Inline Selector platforms Hailo-10H, RK3588S, RK3568 and Neousys Nuvo-9531 now read supportedPrecisions from the same precision-support registry as catalog platforms at module load (bug #277), so HF6 removes them for vendor-documented unsupported precisions (for example Hailo-10H at FP16, Rockchip SBCs at FP32 or INT4). OnLogic Factor 201 has no registry row and remains without a list. Winner changes only where those platforms had incorrectly stayed eligible under an unsupported precision. |
| 3.0.4 | 2026-09-29 | The precision filter HF6 reads the vendor-sourced support lists (bug #275): Jetson Thor T5000 is no longer removed for FP8, BF16 or INT4, the Jetson Orin modules and Hailo-8 / 8L for INT4, and RK3588 is now removed for INT4 (Rockchip's toolkits deploy no 4-bit weights on it); each removal records whether a vendor documents the exclusion (class A) or it is a catalog assertion (class E). The assumption that states the segmentation / pose hold is now a plain sentence without a ledger reference. No recommendation changes on the reference workloads. |
| 3.0.3 | 2026-09-29 | An absent precision is listed in defaulted, with an assumption naming the default. Segmentation and pose stay at INT8: the shared FP16 task default (owner ruling of 2026-09-29) is held at INT8 for the Selector, #274, until its per-node capacity comes from one model — with the FP16 default its plans were not monotone in cameras. Every recommendation is unchanged. |
| 3.0.2 | 2026-09-28 | Input rules (WP-01 remainder, WP-02): power / power_sensitivity, env / environment, scenario, model, resolution, flexibility_requirement and budget_sensitivity are checked and the error names the key sent; ambient_temperature_c "abc" is rejected instead of becoming 25 °C; defaults are listed in provenance.defaulted. Unknown input keys are rejected. No formula changed. |
| 3.0.1 | 2026-09-28 | Present-invalid inputs are rejected; absent inputs default and are recorded (WP-01): a stated but malformed streams / stream_count or camera_count — 0, negative, "four", true, 2.5, "" or above 256 — returns VALIDATION_ERROR naming the field instead of becoming the 4-stream default (or eliminating every platform); a stream count that is not stated takes the 4-stream default and is listed in provenance.defaulted. No formula changed. |
| 3.0 | 2026-09-28 | Breaking: the ATEX and MIL-STD-810 compliance values are removed (no sourced certification facts) and now return a validation error on compliance_requirements, as does any unknown compliance value or latency requirement. The latency requirement is wired as an ordered class D ranking preference with latency_check rows (real-time critical 33.3 ms, near real-time 100 ms, batch not evaluated). IP67 is a sourced check against the production-carrier registry with compliance_checks rows (PASS / UNKNOWN, never removes). Scenario and ambient temperature are published as informational and heuristic in input_effects. The result states it is an estimate and hands Hardware Match the exact inputs with the pick pinned (hardware_match_inputs, not_carried). First methodology page. |
| 2.3 | 2026-09-27 | Last version before this page. The latency, compliance (ATEX, IP67, MIL-STD-810) and scenario controls were accepted and changed nothing in the public result. |
Method changes bump the method version; results carry it in provenance.method_version with the dataset version of the registries the Selector reads.