201 lines
5.8 KiB
Markdown
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 (STT→LLM→TTS) | **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*
|