Repository navigation
perf(moe): vérification en lignes du 35B-A3B et lookup greedy opt-in - #100
Merged
Merged
Conversation
…sidente Les couches FullMoe (Qwen3.5/3.6 MoE) passent par l'attention en lignes du chemin dense suivie de la queue MoE shared en lignes. Les bras MoE de resident_layer_batch_supported (LinearMoe et FullMoe) dépendent désormais de SARAGOSSA_RUST_MOE_VERIFY_ROWS (défaut OFF) au lieu du flag de prefill SARAGOSSA_RUST_PREFILL_MOE_ROWS. SARAGOSSA_RUST_MOE_VERIFY_COOP (défaut OFF) choisit la queue coop sur tensor-cores.
Oracle R lignes contre R pas mono-ligne avec rollback par captures, bench de coût sans drafter (SARAGOSSA_RUST_VERIFY_ROWS_BENCH_ROWS), bench de la seule queue MoE, recouvrement des experts (capture du routeur dans la branche Shared du prefill résident) et simulation du lookup n-grammes.
SARAGOSSA_RUST_LOOKUP_GREEDY=n (défaut 0, borné à 8) : le lookup propose des drafts vérifiés en lignes sur l'arène résidente, rollback par captures. Sans proposition, le decode reste pipeliné et s'interrompt dès que le lookup propose. Mesures ρ(R), recouvrement des experts et ABBA du 35B documentés.
Le bras LinearMoe de resident_layer_batch_supported reprend sa condition historique ; SARAGOSSA_RUST_MOE_VERIFY_ROWS ne porte que l'extension FullMoe. La queue coop de la vérification, plus lente et hors tolérance, est retirée avec son flag (mesure conservée dans la doc). Le flag lookup greedy est documenté CLI seulement.
La boucle ne temporise pas : elle est inéligible quand decode_min_interval est actif (SARAGOSSA_RUST_MAX_TOK_S, set_decode_max_tokens_per_s). Test des conditions d'éligibilité sans poids.
Oracle modèle réel : 1, 2 et 8 drafts, budgets 1, 2 et 96, arrêts sur des tokens de la sortie, callback qui interrompt. Le bench ABBA échoue sur une sortie différente. Mesures ponctuelles M1/M3, bench de la queue MoE et capture du routeur retirés (résultats dans la doc) ; temps sans captures du bench de vérification documentés comme synthétiques.
Compteurs de test de la boucle (vérifications acceptées, vidanges du pipeline suivies d'une reprise, arrêts parmi des drafts acceptés), budgets 0 et 9 ajoutés à l'oracle contre l'AR. La table ρ(R) de la doc précise que la référence séquentielle est synthétique.
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.
Spéculation sur MoE (Qwen3.6-35B-A3B), opt-in.
SARAGOSSA_RUST_MOE_VERIFY_ROWS=1(défaut OFF) : les couchesFullMoese vérifient en lignes (attention en lignes + queue MoE gather), ce qui rend le 35B entièrement éligible à la vérification batchée avec captures/rollback. Le brasLinearMoegarde sa condition historique (PREFILL_MOE_ROWS).SARAGOSSA_RUST_LOOKUP_GREEDY=n(défaut 0, ≤ 8, CLI seulement) : boucle greedy « lookup n-grammes seul », decode pipeliné interrompu dès qu'une proposition existe ; inéligible sous plafond de débit, échantillonnage, contrainte ou stop_sequences.Mesures (35B, 4k) : ρ(R) = T(R lignes)/T(1) = 1,83 / 1,84 / 2,05 / 2,48 / 3,05 pour R = 2/3/4/5/9 → MTP no-go en l'état (seuil ρ(2) ≤ 1,30) ; le saut de 1 à 2 lignes vient de la queue MoE en lignes. Lookup contre AR, ABBA 3 paires, 400 tokens, sorties identiques : T6 (recopie) +19,6 % à 2 drafts, +87 % à 8 ; T0/T1/T2/T7 entre −2,5 et +2,1 %. Variante coop écartée (plus lente, dérive > 5e-3). Détails dans
docs/perf/mtp-pairwise.md.Tests : oracle
moe_verify_rows_match_single_rows_real_model(R lignes = R pas mono-ligne, rollback),lookup_greedy_matches_ar_real_model(identité AR bloquante, budgets 0/1/2/9/96, arrêts, callbacks, compteurs prouvant propositions acceptées et vidanges), test unitaire d'éligibilité ; DFlash 27B sans régression.🤖 Generated with Claude Code