open-standards/jouleclaw/jouleclaw-rs/crates/jouleclaw-energy/conformance/vendors/huawei-ascend-npu.json
Transaction Science 1a4a093744 jouleclaw: vendor-energy measurement protocol + honestly-empty fixtures
The EnergyCounter trait + Provenance taxonomy (HwShunt | ModelBased
| Estimator) is one half of JouleClaw's energy honesty story. The
other half is *actual measured numbers* from real silicon under
named workloads — so an operator can compute the energy cost of a
cascade walk before issuing it.

This commit ships the second half *honestly*. The workspace's dev
machine cannot produce HwShunt readings for any non-x86 CPU
silicon or any accelerator; filling fixture files with numbers from
blog posts or vendor whitepapers would corrupt the same provenance
contract the trait exists to enforce. So the fixtures ship EMPTY,
with the schema and counter binding stated, and `workload_not_run`
flagged true for every workload until someone with the hardware
fills them.

Six per-silicon-lineage stubs:

  conformance/PROTOCOL.md                   — how to measure
  conformance/vendors/template.json         — canonical shape
  conformance/vendors/intel-cpu-rapl.json   — Intel CPU / RAPL
  conformance/vendors/amd-cpu-rapl.json     — AMD CPU / RAPL
  conformance/vendors/nvidia-gpu-nvml.json  — NVIDIA GPU / NVML
  conformance/vendors/amd-gpu-rocm.json     — AMD GPU / ROCm
  conformance/vendors/apple-silicon-ioreport.json — Apple Silicon
  conformance/vendors/huawei-ascend-npu.json      — Huawei Ascend

Each has the counter impl + provenance + resolution + min sampling
window declared (those are properties of the counter trait, known
without running a workload), and every workload entry set to
`workload_not_run: true` with the numeric fields `null`.

Workload taxonomy (named so cross-silicon comparison is
meaningful, not cherry-picked): idle_1s, tier_L0_lookup,
tier_L1_local_index, tier_L3_model_7b_token, tier_L3_model_70b_token.
The whole point is to make expensive-tier-token energy visible
alongside the floor.

Cloud TPU / Intel Gaudi / Cambricon / Qualcomm Cloud AI are
deliberately NOT stubbed yet — a stub commits to a counter trait
impl, and the workspace doesn't ship one for those silicons today.
Add the stub when the impl lands.

Verifier: `cargo test -p jouleclaw-energy --test
vendor_energy_conformance`. Asserts schema well-formedness across
every fixture today. Once fixtures fill in, the same verifier
also checks the workload monotonicity ordering — so an operator
who tries to claim L3 model inference costs less energy than an
L0 lookup gets rejected on PR.

A third party with the hardware fills a fixture, signs it via
Ed25519, and PRs it back. Anyone holding the fixture-author's
public key can verify the claim was actually made by that
operator. Future work (NOT in this commit): a
jouleclaw-vendor-energy-attest binary that emits a wire-form
attestation in the same shape as JCR-1 receipts.

Co-Authored-By: Claude Opus 4.7 <[email protected]>
2026-06-04 03:43:22 -04:00

29 lines
1.1 KiB
JSON

{
"spec": "JouleClaw vendor-energy v1",
"schema_id": "vendor-energy/1",
"hardware": {
"vendor": "Huawei",
"model": "(not yet measured — e.g. \"Ascend 910B\" / \"Ascend 910C\")",
"tdp_w": null,
"host_os": null
},
"counter": {
"impl": "AscendSmiCounter",
"provenance": "HwShunt",
"resolution_uj": 1000000,
"min_window_ns": 50000000
},
"method": null,
"workloads": {
"idle_1s": {"workload_not_run": true, "joules_uj_total": null, "n_samples": null, "stddev_uj": null},
"tier_L0_lookup": {"workload_not_run": true, "joules_uj_total": null, "n_samples": null, "stddev_uj": null},
"tier_L1_local_index":{"workload_not_run": true, "joules_uj_total": null, "n_samples": null, "stddev_uj": null},
"tier_L3_model_7b_token": {"workload_not_run": true, "joules_uj_per_unit": null, "n_samples": null, "stddev_uj": null},
"tier_L3_model_70b_token": {"workload_not_run": true, "joules_uj_per_unit": null, "n_samples": null, "stddev_uj": null}
},
"date": null,
"attestation": {
"signed_by": null,
"attestation_url": null
}
}