diff --git a/.claude/scheduled_tasks.lock b/.claude/scheduled_tasks.lock deleted file mode 100644 index 83b14a8..0000000 --- a/.claude/scheduled_tasks.lock +++ /dev/null @@ -1 +0,0 @@ -{"sessionId":"45eccd49-4ce6-4a07-af1c-9bff461d40c9","pid":1030431,"procStart":"52754552","acquiredAt":1779633135793} \ No newline at end of file diff --git a/.claude/settings.local.json b/.claude/settings.local.json new file mode 100644 index 0000000..f3a09a2 --- /dev/null +++ b/.claude/settings.local.json @@ -0,0 +1,9 @@ +{ + "permissions": { + "allow": [ + "Bash(awk '{print $5,$9}')", + "Bash(/opt/Kazeia/to_delete/llama.cpp/build-native/bin/llama-quantize)", + "Bash(adb get-state *)" + ] + } +} diff --git a/RAPPORT_RD.md b/RAPPORT_RD.md new file mode 100644 index 0000000..4fae585 --- /dev/null +++ b/RAPPORT_RD.md @@ -0,0 +1,32 @@ +# Kazeia-Engine — Rapport R&D complet (24-25/05/2026) + +Synthèse de toute la session. Matériel : OnePlus Pad3, SM8750 (Snapdragon 8 Elite, Hexagon V79), 16 GB, sans root. Mémoire LPDDR5x ~77 GB/s, CPU ~25. NDK r27d, Hexagon SDK 6.5.0.0. + +## 1. Objectif +Faire tourner Qwen3.5-4B (et 9B) en GGUF, sans conversion `.pte`, en exploitant le NPU pour le prefill et le CPU pour le decode. Cible : égaler/battre ExecuTorch (4B `.pte` = 15 tok/s, 2.2 GB), empreinte mémoire mini. + +## 2. Le fait dur (mesuré, reproductible) +Decode M=1 = **memory-bandwidth bound**, pas compute. Le NPU n'aide pas le decode (bus DDR saturé), il aide le prefill (batché, compute-bound). Donc : **prefill NPU / decode CPU**, verrouillé pour 4B et 9B. + +## 3. Performances stables (r3, ±2%) — moteur llama.cpp upstream +| Modèle | prefill HTP | decode CPU | RAM | +|---|---:|---:|---:| +| Qwen3.5-4B-Q4_0 | ~50 (ngl99/t8/b512) | 9.8 | 2.4 GB | +| Qwen3.5-9B-Q4_0 | ~41 | 5.2 | 5.0 GB | +| Qwen3-4B dense | 103 | 17 | 2.2 GB | +| 4B ExecuTorch .pte | ~451 | 15 | 3.3 GB | +Prefill 3.5 plafonne à 55 : les 24 couches GDN tournent CPU (pas de kernel HTP). Le dense fait 103 (matmuls HMX). 30B/35B = OOM. r1 antérieurs (8.4→2.1) = bruit, écartés. + +## 4. Cascade Thinker+Guard : RAM OK +9B+Guard-4B = 7.5 GB ; 9B+Guard-8B = 9.5 GB ; +TTS/STT → 11.5. Tient sur 16 GB. 9B>4B en qualité FR. + +## 5. Engine vs briques +briques (stack NPU+lm_head CPU) : 2B 13, 4B 7, 9B 2.1 tok/s. **2B briques 13/2.5GB = sweet spot**, > engine 4B 9.8. Repo `/opt/Kazeia/to_delete/briques_qwen35`. Pour le 4B, `.pte` reste devant (15, 2.2GB). GGUF utile = 9B/modèles sans pte. + +## 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). + +## 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/dist/test_engine b/dist/test_engine deleted file mode 100755 index 72b3530..0000000 Binary files a/dist/test_engine and /dev/null differ diff --git a/dist/test_static b/dist/test_static deleted file mode 100755 index 4c5980d..0000000 Binary files a/dist/test_static and /dev/null differ diff --git a/dist/ts2 b/dist/ts2 deleted file mode 100755 index d426d0e..0000000 Binary files a/dist/ts2 and /dev/null differ diff --git a/ql b/ql new file mode 160000 index 0000000..35c9b1f --- /dev/null +++ b/ql @@ -0,0 +1 @@ +Subproject commit 35c9b1f39ebe5a7bb83986d64415a079218be78d