# 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*