Repository navigation
fix(benchmarks): validate energy harness float32 outputs and carbon units - #469
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Symptôme
W0-2 / ⚪8 : le harnais comparait les valeurs des octets sérialisés au lieu des
composantes float32 et ne produisait pas de résultat carbone par 1 000 tokens.
Cette PR est empilée sur #468 ; aucune fusion n'est effectuée par Codex.
Cause racine
Contrat de représentation et unités manquants :
EmbeddingEnginerenvoie desblobs float32, et le calcul carbone doit recevoir explicitement ses facteurs.
Les deux chemins d'orchestration du capteur rendaient aussi son cycle de vie
plus difficile à vérifier.
Changement
Le runner valide les arguments avant modèle ou sudo.
--carbon-intensity(gCO2eq/kWh) et
--embodied(taux déjà alloué, gCO2eq/s) sont obligatoires.L'équivalence décode les blobs avec
numpy.frombuffer(dtype=float32)et refuseles sorties invalides ou au-delà de la tolérance explicitée. Le dénominateur
vient des vrais masques d'attention du tokenizer, comptés hors phases mesurées.
run.shorchestre seul l'autorisation et le capteur ; la charge Python restenon privilégiée. Le rapport archive les octets effectivement analysés, les
unités, les paramètres, le commit et les hashes sources. Le README décrit la
frontière CPU+GPU+ANE et les limites de l'estimation.
Preuve
Sur le même fixture float32
[0.5]puisnextafter(..., 1):La version initiale non suivie a été conservée localement pour reproduire ce
contre-exemple (SHA256 du script initial :
231e2fe24b11464ccc9c9f8dbf1ac75dfd863c5ca22c063f50ee39dbcf70cc6b).Il s'agit d'un test arithmétique, pas d'une mesure d'énergie.
.venv/bin/python -S benchmarks/energy/run_embedding_energy.py \ --duration-seconds 20 --repetitions 2 --validate-only # exit 2 : the following arguments are required: --carbon-intensity, --embodiedLa désactivation des site-packages (
-S) prouve que ce refus ne dépend pas duchargement de NumPy ou du modèle. Les tests du shell utilisent un faux sudo
et un faux capteur, sans mesure physique ni demande de mot de passe.
Validation finale du diff commité
c16b84e9, le 2026-09-06 sur macOS ARM64,Python 3.13.7 : verrouillage, Ruff (1 412 fichiers), craftsmanship et Pyright
(zéro diagnostic) passent. Couche : 145 passed en 32,55 s. Suite complète :
7 547 passed, 221 skipped, 123 subtests passed en 148,43 s.
Charge avant : 3,00 pour 10 cœurs ; disque libre avant/après : 66 GiB.
CI complète verte au même SHA :
run 34034623118.
Déclenchement
workflow_dispatchnécessaire car la base de cette PR est labranche W0-1 et l'ancien filtre de branches ne couvrait que
main.Les commandes de gates sont celles du contrat : synchronisation verrouillée
dev+sqlite+lint, Ruff check/format, craftsmanship, environnement Pyright prescrit
par CONTRIBUTING, Pyright, tests de
tests_py/benchmarks/, puis suite complète.PostgreSQL est explicitement inaccessible à localhost:1 ; les données de test
sont jetables. Logs :
/private/tmp/cortex-green-w0-2-final-gates.log.Conformité
/tmp.contrôlés et les erreurs sont explicites.
facteur carbone par défaut et aucun gain énergétique prétendu.
Candidats issues
Une validation physique du protocole reste à effectuer avec les facteurs et
la durée choisis par le propriétaire. La puissance CPU+GPU+ANE n'est pas la
consommation totale de la machine. La tolérance du probe n'est pas une borne
universelle d'erreur de l'inférence sur tous appareils et textes.
Runbook
Le propriétaire fournit les facteurs sourcés et lance
benchmarks/energy/run.shdepuis un terminal interactif, selon le README. Lui seul saisit son mot de passe
pour autoriser le capteur macOS. Aucune mesure physique n'a été lancée par cette PR.