kazeia/BENCHMARK_ROOT_VS_NONROOT.md

201 lines
5.8 KiB
Markdown

# Benchmark Comparatif Root vs Non-Root — OnePlus Pad 3
*Date: 28 mars 2026 — Projet Kazeia*
## Configuration
- **Tablette**: OnePlus Pad 3 (OPD2415), Snapdragon 8 Elite (SM8750)
- **OS**: OxygenOS 16 (Android 16, API 36)
- **RAM**: 16 GB
- **Root**: Magisk v30.6
- **QNN SDK**: 2.42
- **ExecuTorch**: build-android (NDK r27d)
---
## Pipeline Conversationnel Complet
### Sans Root
| Étape | Technologie | Latence | Status |
|-------|------------|---------|--------|
| **VAD** | Énergie RMS | <1ms | Fonctionne |
| **STT** | whisper.cpp (CPU) | ~1500ms | Fonctionne |
| **LLM** | Aucun | - | Mode écho uniquement |
| **TTS** | Android TTS natif | ~200ms | Fonctionne |
| **Total** | - | ~1700ms | Pas de LLM, pas d'IA conversationnelle |
### Avec Root + NPU
| Étape | Technologie | Latence | Status |
|-------|------------|---------|--------|
| **VAD** | Énergie RMS | <1ms | Fonctionne |
| **STT** | whisper.cpp (CPU) | ~1500ms | Fonctionne |
| **LLM** | ExecuTorch Qwen3 (NPU) | ~1-5s (selon longueur) | **NOUVEAU** |
| **TTS** | Android TTS natif | ~200ms | Fonctionne |
| **Total** | - | ~3-7s | **Pipeline complet fonctionnel** |
---
## Benchmarks Détaillés
### STT — Whisper-Base (whisper.cpp CPU)
*Identique avec ou sans root (pas d'accélération NPU pour whisper.cpp)*
| Métrique | Valeur |
|----------|--------|
| Modèle | ggml-base.bin (148 MB) |
| Backend | CPU ARM (Cortex-X925) |
| Chargement | ~100ms |
| Transcription (1-2s audio) | 1000-1500ms |
| RTF moyen | 0.9-1.5 |
| Mel spectrogram | Natif C++ (whisper.cpp) |
| Auto-gain | Oui (normalisation audio) |
### LLM — ExecuTorch + QNN NPU (Root uniquement)
#### Qwen3-0.6B
| Métrique | Valeur |
|----------|--------|
| Modèle | hybrid_llama_qnn.pte (660 MB) |
| Backend | QNN HTP v79 (NPU) |
| Chargement | 0.86s |
| Prefill | 451 tok/s (31ms pour 14 tokens) |
| Génération | **93.15 tok/s** |
| TTFT (Time To First Token) | 31ms |
| RAM | ~698 MB |
| Qualité FR | Basique, réponses courtes |
#### Qwen3-1.7B
| Métrique | Valeur |
|----------|--------|
| Modèle | hybrid_llama_qnn.pte (1.7 GB) |
| Backend | QNN HTP v79 (NPU) |
| Chargement | 1.29s |
| Prefill | 1000 tok/s (27ms pour 27 tokens) |
| Génération | **46.6 tok/s** |
| TTFT | 27ms |
| RAM | ~1712 MB |
| Qualité FR | Bonne, réponses empathiques détaillées |
#### Comparaison modèles
| Modèle | Taille | tok/s | TTFT | RAM | Qualité FR |
|--------|--------|-------|------|-----|------------|
| Qwen3-0.6B | 660 MB | 93 | 31ms | 698 MB | Basique |
| Qwen3-1.7B | 1.7 GB | 46 | 27ms | 1.7 GB | Bonne |
| Mistral-Nemo 12B | 7.4 GB | ~5 | ~200ms | ~8 GB | Excellente |
### LLM — Sans Root
| Métrique | Genie SDK | ExecuTorch QNN |
|----------|-----------|----------------|
| Status | Erreur -7 | Erreur 4000 (libs manquantes) |
| Cause | SDK non installé sur device | `libQnnModelDlc.so` manquant, pas d'accès DSP |
| Résultat | Mode écho | Mode écho |
### TTS
| Métrique | Sans Root | Avec Root |
|----------|-----------|-----------|
| Android TTS | 200ms | 200ms |
| Chatterbox | OOM (1.4 GB) | OOM (1.4 GB)* |
*Chatterbox nécessite optimisation mémoire indépendante du root*
### Monitoring Système
| Métrique | Sans Root | Avec Root |
|----------|-----------|-----------|
| CPU % | Fonctionne | Fonctionne |
| GPU % | Permission denied | Fonctionne via `su` |
| NPU/DSP | N/A | Accès possible |
| RAM | Fonctionne | Fonctionne |
---
## Impact du Root — Synthèse
### Gains mesurés
| Fonctionnalité | Sans Root | Avec Root | Gain |
|----------------|-----------|-----------|------|
| **LLM** | Indisponible | 93 tok/s (0.6B) / 46 tok/s (1.7B) | **∞** |
| **Prefill** | - | 451-1000 tok/s | **∞** |
| **TTFT** | - | 27-31ms | **∞** |
| **Pipeline complet** | Non (écho) | Oui (STTLLMTTS) | **Pipeline fonctionnel** |
| **GPU monitoring** | 0% | Fonctionne | Visibilité |
| **Whisper STT** | 1500ms (CPU) | 1500ms (CPU) | 0% (même backend) |
### Ce que le root débloque concrètement
1. **Accès au DSP/NPU via ExecuTorch** LLM fonctionnel sur NPU
2. **libs QNN chargées correctement** `libQnnModelDlc.so` + Skel dans ADSP_LIBRARY_PATH
3. **SELinux permissive** pas de blocage d'accès
4. **Boot script** permissions persistantes au redémarrage
5. **GPU sysfs** monitoring temps réel
### Ce que le root ne change pas
1. Performances STT (whisper.cpp CPU identique)
2. TTS Android natif (identique)
3. Chatterbox TTS (OOM indépendant du root)
---
## Recommandations pour la Production
### Modèle LLM recommandé
**Qwen3-1.7B** meilleur compromis qualité/vitesse :
- 46 tok/s suffisant pour conversation temps réel
- Qualité FR bonne pour l'écoute émotionnelle
- 1.7 GB RAM acceptable sur 16 GB device
- TTFT 27ms = réponse quasi instantanée
### Prochaines optimisations
1. **Whisper sur NPU** : le `qnn_whisper_runner` est compilé, réduirait STT de 1500ms à ~50ms
2. **Chatterbox quantifié** : réduire les modèles TTS pour éviter OOM
3. **Streaming LLM** : afficher les tokens au fur et à mesure de la génération
4. **ExecuTorch JNI natif** : intégrer directement en C++ au lieu du subprocess `su`
---
## Procédure de Déploiement (Reproductible)
### 1. Root de la tablette
Voir `GUIDE_ROOT_ONEPLUS_PAD3.md`
### 2. Configuration post-root
```bash
# SELinux permissive
adb shell "su -c 'setenforce 0'"
# Boot script DSP
adb shell "su -c 'mkdir -p /data/adb/service.d && cat > /data/adb/service.d/kazeia_dsp.sh << EOF
#!/system/bin/sh
chmod 666 /dev/fastrpc-cdsp
chmod 666 /dev/fastrpc-cdsp-secure
setenforce 0
EOF
chmod 755 /data/adb/service.d/kazeia_dsp.sh'"
```
### 3. Déploiement ExecuTorch
Voir `DEPLOY_EXECUTORCH_NPU.md`
### 4. Déploiement app Kazeia
```bash
cd /opt/Kazeia/kazeia-android
./gradlew assembleDebug
adb install -r app/build/outputs/apk/debug/app-debug.apk
```
---
*Projet Kazeia — Damien Micottis & Richard Loyer*