Go to file
Richard Loyer 970f731e01 chantier B STT #3 : decoder zero-copy + sanity vocab + checklist dev
Optim decoder identifiée après bench sur audio FR continu (39 tokens) :
le `std::vector<>::emplace_back(data)` à chaque step recopiait 12 MB de
self KV inutilement = 2.4 GB de bande passante mémoire sur le loop entier.

Refactor zero-copy :
 - Pré-allocation UNE FOIS des buffers persistants (self_k/v, mask, input_ids,
   position_ids) au début de transcribe()
 - Pré-création UNE FOIS des Ort::Value pointant sur ces buffers (les Ort::Value
   sont des "borrowing views" — ORT lit les buffers au Run())
 - Cache des indices k_self_out / v_self_out / logits_out (parsing 1 fois,
   pas N fois dans le loop)
 - Update self KV : memcpy direct depuis dec_outputs vers nos buffers persistants
   (qui sont déjà les inputs du step suivant)
 - mask_buf updaté à 1 fp16 par step (juste le slot R-to-L), pas 200

Bench zero-copy sur Snapdragon 8 Elite :
 - Decoder/token : 98 ms -> 36 ms (-63%)
 - Decoder total 39 tokens : 3831 ms -> 1390 ms (-64%)
 - RTF audio 10s FR continu : 0.42 -> 0.18 (mieux que prod 0.51)
 - RAM peak : 378 MB inchangée (zero-copy n'augmente pas la peak)

Sanity vérifié au runtime :
 - Logits decoder shape = 51865 elements (= constante VOCAB_SIZE OK,
   pas de buffer over-read sur argmax). Le vocab.json contient 50258 tokens
   texte, les 1607 manquants sont les tokens langue/timestamp non décodés.

Doc STT_INTEGRATION.md :
 - Chiffres perf à jour (RTF 0.18, decoder 36 ms/token)
 - Nouvelle section "Checklist d'intégration" (6 points à vérifier en premier
   côté app : System.loadLibrary, transcribe vs WhisperHybridEngine, null/edge,
   VAD drop-in, threading IO, cycle de vie release)
 - Roadmap optim future via Ort::IoBinding (gain estimé 30% sur decoder restant)
2026-05-31 22:26:40 +02:00
.claude Rapport R&D complet: synthese session, perf, cascade, #277, briques, reste a faire 2026-05-25 22:27:34 +02:00
dist chantier B STT #3 : decoder zero-copy + sanity vocab + checklist dev 2026-05-31 22:26:40 +02:00
docs GDN chunkwise P1.2: VTCM state prefill=neutre, prouve compute-bound 3S2/tok -> gain=WY matmul (palier dur). oracle 28/28, pp98 2026-05-26 16:30:08 +02:00
eval eval: verdict (assisté, à valider) -> ship Qwen3.5-lmq4 2026-05-26 23:23:00 +02:00
ql@6e0edba837 ql: bump pour qwen3 dense IMROPE (ql:6e0edba) 2026-05-28 13:54:27 +02:00
.gitignore chantier B STT #2 : S2 + S3 livrés (stt_engine ORT QNN + JNI + façade Kotlin + doc) 2026-05-31 22:15:58 +02:00
CHANTIER_HMX_DENSE.md chantier dense-HMX #4: 0x2e décodé = AEE_ECONNRESET (reset watchdog CDSP), pas une corruption de valeurs 2026-05-27 19:20:28 +02:00
CLAUDE.md chantier B STT #2 : S2 + S3 livrés (stt_engine ORT QNN + JNI + façade Kotlin + doc) 2026-05-31 22:15:58 +02:00
RAPPORT_RD.md RAPPORT §7: piste kernel GDN fermee — GDN-compute != goulot prefill (fork ql) 2026-05-26 21:46:05 +02:00
c4.sh Dist Kazeia-Engine: libs arm64+headers+JNI bridge+INTEGRATION/TTS doc; STT reste ORT 2026-05-24 21:55:01 +02:00
casc.sh Dist Kazeia-Engine: libs arm64+headers+JNI bridge+INTEGRATION/TTS doc; STT reste ORT 2026-05-24 21:55:01 +02:00
casc2.sh Dist Kazeia-Engine: libs arm64+headers+JNI bridge+INTEGRATION/TTS doc; STT reste ORT 2026-05-24 21:55:01 +02:00
casc3.sh Dist Kazeia-Engine: libs arm64+headers+JNI bridge+INTEGRATION/TTS doc; STT reste ORT 2026-05-24 21:55:01 +02:00
cascade_test.sh Dist Kazeia-Engine: libs arm64+headers+JNI bridge+INTEGRATION/TTS doc; STT reste ORT 2026-05-24 21:55:01 +02:00
cf.sh Dist Kazeia-Engine: libs arm64+headers+JNI bridge+INTEGRATION/TTS doc; STT reste ORT 2026-05-24 21:55:01 +02:00
qcmp.sh Dist Kazeia-Engine: libs arm64+headers+JNI bridge+INTEGRATION/TTS doc; STT reste ORT 2026-05-24 21:55:01 +02:00
spk.sh Dist Kazeia-Engine: libs arm64+headers+JNI bridge+INTEGRATION/TTS doc; STT reste ORT 2026-05-24 21:55:01 +02:00