diff --git a/RAPPORT_RD.md b/RAPPORT_RD.md index 5decf6c..a68b402 100644 --- a/RAPPORT_RD.md +++ b/RAPPORT_RD.md @@ -26,7 +26,18 @@ briques (stack NPU+lm_head CPU) : 2B 13, 4B 7, 9B 2.1 tok/s. **2B briques 13/2.5 ## 6. Intégration #277 (dev) — débloquée, 2 fixes hang in-app = thinking non bridé + 1 thread. FIX : signature `generate(sys,usr,maxTok)`, ChatML+``, ngl0 + n_threads=8 → 14 tok/s. Bridge STATIC (0 NEEDED libllama, coexiste TTS). dist `/opt/Kazeia-engine/dist/` : libkazeia_engine.so + htp-v79.so + EngineLlmEngine.kt + docs. -## 7. R&D pousser prefill = HVX chunkwise GDN -55→100 crédible mais HMX accumule fp16 (pas bit-exact). Voie HVX qf32, 3-5 sem. lm_head NPU = mort (CPU 31ms < HVX 104). Fork qualcomm/llama.cpp cloné (`ql/`) avec IQ4_NL HVX — test bench IQ4_NL = à finir (quantize on-device). +## 7. R&D pousser prefill GDN — PISTE FERMÉE (26/05, mesuré) +Conclusion dure : **le calcul GDN n'est pas le goulot du prefill sur le fork ql**. A/B sur la même commande llama-bench (Qwen3.5-4B-Q4_0, pp512, ngl99/t8/b512, gate scalaire S_v=128) : +| Schéma GDN (HTP) | flops GDN | pp512 | +|---|---:|---:| +| serial f32 (vrai baseline) | 1× | **89.5** | +| serial fp16 (HVX 64-lane) | ~0.5× ALU | 89.65 | +| WY chunkwise | ~2.5× | 89.6 | + +Trois schémas de calcul (0,5× / 1× / 2,5× flops) → pp512 **plat**. Si l'arithmétique GDN limitait, le 2,5× s'effondrerait et le 0,5× grimperait. Donc le mur prefill (~89,5) est **ailleurs** : matmuls denses / FFN MoE / attention / conv / overhead op-batch. Ça corrige la vieille prémisse « GDN = l'ancre » (vraie sur l'ancien tree GDN-CPU série, **fausse** sur le fork GDN-HTP). Le « 98 » d'avant était un fantôme de mesure ; vrai baseline = 89,5. + +Corollaire : **aucune optim du kernel GDN** (chunkwise, HMX, fp16) ne peut bouger le prefill. HMX-per-tête en plus = NO-GO (matmuls 32×128 latency-bound ~12 µs, 28 têtes × 24 couches sérialisées sur le moteur HMX unique). Pour réellement pousser pp512 il faut profiler/attaquer les ops **non-GDN** sur HTP — autre chantier, et prefill = « utile pas vital ». + +Artefacts (branche `ql` gdn-chunkwise-wy) : kernel fp16 serial validé (oracle 28/28, `hvx_vec_mpyacc_f32_f16`, état fp16 paddé-64, aucune dérive à 256 tok — le gate exp(g<0) borne), gardé derrière env `KZ_F16` (défaut OFF = baseline f32 inchangé) ; kernel WY chunkwise conservé inutilisé comme base d'un éventuel batch-têtes. `GGML_HEXAGON_OPFILTER` existe sur ce fork ; profiler `GGML_HEXAGON_PROFILE` masqué par llama-bench (sortie DEBUG). ## 8. À FAIRE : quantize 4B IQ4_NL on-device + bench, brancher JNI, valider qualité FR. STT reste ORT-QAIRT. Détail commits : `git log`. diff --git a/ql b/ql index 35c9b1f..50e250d 160000 --- a/ql +++ b/ql @@ -1 +1 @@ -Subproject commit 35c9b1f39ebe5a7bb83986d64415a079218be78d +Subproject commit 50e250d7bce09f3cf312c1f4eb97f62f17ce1acd