perf(embeddings): skip unused BERT suffixes with exact token guards - #496
Draft
cdeust wants to merge 8 commits into
Draft
perf(embeddings): skip unused BERT suffixes with exact token guards#496cdeust wants to merge 8 commits into
cdeust wants to merge 8 commits into
Conversation
…en-embedding-prefix-audit
…en-embedding-prefix-audit
…en-embedding-prefix-audit
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
W3-3 : le modèle tokenise des suffixes qu’il n’utilisera pas. Un simple cap de caractères perd des tokens sur les espaces, contrôles Unicode ou mots longs ; le précédent audit de cette PR avait réfuté ce cap sans livrer d’optimisation.
Cause racine
WordPiece traite les mots complets avant troncature. La limite de256tokens ne définit donc pas une limite universelle de caractères :
a + 9998 espaces + butilise toute la chaîne pour seulement deux tokens ordinaires.Changement
Ajouter une garde au chemin scalaire du modèle BERT. Elle conserve l’entrée entière sauf si un préfixe terminé à une frontière de mot remplit déjà le budget réel du modèle. Normalizer, pre-tokenizer, WordPiece, template simple, troncature à droite et absence de prompt sont vérifiés au chargement ; les tokens ajoutés normalisés ou contenant des espaces excluent l’optimisation. Les erreurs du tokenizer restent visibles.
Le point de sondage1450 est tiré des observations versionnées ; il choisit où essayer, jamais une borne universelle de sûreté. La recherche de frontière utilise str.find ; la garde de coût évite une deuxième tokenisation des préfixes presque vides. Les textes stockés, clés du LRU, vecteurs normalisés et chemins batch restent complets. Les batches ont leur propre problème d’équivalence numérique et ne sont pas modifiés ici.
Preuve
Tête
1b5490898acbb7ccce2cc9941c8325242c0a829e. 16/16 vecteurs bit-à-bit identiques, avec IDs, masques et type IDs du vrai modèle également identiques. Python3.12.11, MiniLM CPU, snapshot1110a243fdf4706b3f48f1d95db1a4f5529b4d41, tokenizer SHA256be50c3628f2bf5bb5e3a7f17b1f74611b2561a3a27eeab05e5aa30f411572037. Mesure du vrai EmbeddingEngine.encode, garde désactivée puis activée sur le même modèle : cache vidé à chaque appel, modèle déjà chargé, quatre paires alternées et première paire exclue, sans tolérance numérique. Hash de l’entrée complète et normalisation inclus dans les temps.Sur la prose, la médiane wall passe de11,381 à10,134ms et la médiane CPU de20,168 à18,013ms. Les six cas éligibles sont raccourcis ; les autres restent entiers. Le tableau publie aussi leurs fluctuations/surcoûts : aucun gain uniforme ni extrapolation à un mélange de production n’est revendiqué.
Le superviseur figé exécute d’abord
/private/tmp/cortex-green-w3-3-guarded-runtime-model-v4.pysous l’environnement isolé, puisbash /private/tmp/cortex-green-local-gates.sh w3-3-guarded-v4 tests_py/infrastructure. Gates dans l’ordre : uv verrouillé, Ruff/format, craftsmanship, Pyright sans diagnostic, couche (767 passed, 97 skipped, 1 warning, 3 subtests passed in 30.00s), suite complète (7807 passed, 229 skipped, 3 warnings, 433 subtests passed in 163.47s (0:02:43)). L’audit explicite sur le tokenizer en cache passe aussi22tests. Aucun cache de modèle sous/tmp ; état Cortex isolé.Preuves :
/private/tmp/cortex-green-w3-3-guarded-v4-validation.json,/private/tmp/cortex-green-w3-3-guarded-runtime-model-v4.json(tous les échantillons, hash sources, uptime et df avant/après),/private/tmp/cortex-green-w3-3-guarded-v4-gates.log. Le point de sondage et les mesures de recherche de frontière sont versionnés dansdocs/provenance/green-w3-3-prefix-observations.json; justification dansdocs/provenance/green-w3-3-guarded-prefix.md.La reproduction qualité complète réunissant les corrections W3/W4 reste à produire ; ces tests et ces fixtures ne constituent pas un passage des floors. Les floors échouaient déjà dans la référence main mesurée séparément. Nouvelle CI distante à vérifier sur cette tête.
Conformité
Une branche et une PR W3-3, aucune fusion. Pas de cap brut arbitraire, pas de perte de texte, pas de nouveaux seuils de qualité, ni changement du modèle ou de normalisation. Le noyau scalaire reçoit les mêmes tenseurs. Module de garde sous300lignes, méthodes sous40 ; embedding_engine reste à300lignes, état de la garde détenu par le cycle de vie du modèle. Baseline craftsmanship non élargie. Un seul travail lourd local à la fois ; aucune base de production.
Les conditions de préfixe suivent les sources primaires BERT normalizer, BERT pre-tokenizer et WordPiece, vérifiées sur la version0.22.2 verrouillée.
Candidats issues
L’équivalence numérique des vrais batches W3-2/W3-4 et l’écart aux floors sous mélange de provenances restent des problèmes distincts. Aucun ticket créé automatiquement. Les mesures synthétiques ci-dessus ne définissent pas la fréquence des textes éligibles en production.
Runbook
Pas de migration ni de configuration de production. Les configurations de tokenizer non vérifiées continuent leur encodage complet ; aucune installation supplémentaire. Les tests avec modèle restent explicitement offline et utilisent le cache durable.