Kazeia-engine/dist/decoder_patches/README.md

69 lines
3.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Snapshots decoder /opt/Kazeia/kazeia-tts-decoder-ggml/src/
Le repo decoder est externe (mono-repo /opt/Kazeia, fichiers untracked en
pratique). Ces snapshots gardent une trace des modifications apportées pour
Phase 2 du chantier BigVGAN HMX.
## Modifications par fichier
### decoder.h
- Ajout `std::vector<ggml_backend_t> backends` + `ggml_backend_sched_t sched`
dans `struct Decoder`.
- Ajout `bool owns_backends` pour la libération.
- Nouvelle méthode `load_with_backends(path, devs)` : variante de
`load_with_buft` qui prend une liste de backends et crée optionnellement
un sched (gated par env `KZTTS_DECODER_SCHED`).
- Nouvelle méthode `compute_graph(ctx, gf, n_threads)` qui dispatche vers
`sched_compute` si sched actif, sinon `ggml_graph_compute_with_ctx` legacy.
### gguf_loader.cpp
- Impl de `load_with_backends` : alloue les poids sur le buft du backend[0]
(HTP si présent) via `load_with_buft`. Sched créé seulement si
`KZTTS_DECODER_SCHED=1` (le sched complet nécessite refactor des stages).
- Impl de `compute_graph` : sched path ou compute_with_ctx legacy.
- `unload()` libère sched + backends si `owns_backends`.
### decoder.cpp
- Ajout du timing par stage dans `Decoder::forward` (gated par
`KZTTS_DECODER_PROFILE=1`). Imprime quant/preconv/pretr/upsample/bigvgan.
- (pas d'autres modifs structurelles : le refactor stage_bigvgan en pattern
sched-friendly reste à faire dans la session suivante)
## Modes de fonctionnement
| Env | Effet |
|---|---|
| (rien) | path CPU pur historique, poids CPU buffer (default) |
| `KZTTS_DECODER_HTP=1` | poids alloués sur HTP buffer, compute CPU pur via `opt_hostbuf=1` (HTP buffer CPU-mappable). Pas de gain HMX mais valide la chaîne. |
| `KZTTS_DECODER_HTP=1 KZTTS_DECODER_SCHED=1` | sched créé, mais stages encore en compute_with_ctx → assertion `buffer_id >= 0` au premier compute. **NE FONCTIONNE PAS** sans refactor stages. |
## Reste à faire (Phase 2 session suivante)
Refactor de `stage_bigvgan` (et causal_conv1d_TC, apply_snake_TC,
precompute_snake) pour le pattern sched :
1. `ggml_init(no_alloc=true)` avec mem_size réduit (metadata only)
2. `ggml_set_input(input_tensor)` sur l'input host
3. `ggml_set_output(output_tensor)` sur l'output final
4. Remplacer `memset(zeros->data)` + `ggml_concat` par `ggml_pad_ext`
5. Remplacer `precompute_snake` host (exp, 1/x) par ops in-graph
`ggml_exp + ggml_div`
6. Wrapping `sched_reset` + `sched_alloc_graph` +
`ggml_backend_tensor_set(input)` + `sched_graph_compute` +
`ggml_backend_tensor_get(output)`
Snake `sin` n'est pas supporté HTP → sched fallback automatique vers CPU
pour cette op. Le ping-pong est borné (snake = 0.4 Gops total sur 115).
Estimation : ~70 lignes propres, ~1 session focalisée. Cibles : decoder
3.2s → ~0.5-0.8s (gain ×4-6 réaliste avec HMX sur MUL_MAT).
## Rebuild
```
cd /opt/Kazeia/kazeia-tts-decoder-ggml/build-android-engine && \
make qwen3tts-decoder -j$(nproc)
# puis côté Kazeia-engine
cd /opt/Kazeia-engine/dist && ./build_tts_pipeline.sh
```