Skip to content

perf(moe): vérification en lignes du 35B-A3B et lookup greedy opt-in - #100

Merged
Destynova2 merged 8 commits into
mainfrom
perf/moe-verify-rows
Nov 2, 2026
Merged

Destynova2 merged 8 commits into
mainfrom
perf/moe-verify-rows

Conversation

@Destynova2

Copy link
Copy Markdown
Contributor

Spéculation sur MoE (Qwen3.6-35B-A3B), opt-in.

  • SARAGOSSA_RUST_MOE_VERIFY_ROWS=1 (défaut OFF) : les couches FullMoe se 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 bras LinearMoe garde 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

…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.
@Destynova2
Destynova2 merged commit cd23412 into main Nov 2, 2026
10 checks passed
@Destynova2
Destynova2 deleted the perf/moe-verify-rows branch November 2, 2026 23:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant