# Guide de déploiement sur Hugging Face Spaces ## Prérequis - Compte Hugging Face: https://huggingface.co - Git installé localement - Token HF avec permissions write (https://huggingface.co/settings/tokens) ## Étapes de déploiement ### 1. Créer un Space sur Hugging Face ```bash # Visite https://huggingface.co/new-space # - Remplis le formulaire: # - Name: mms-asr-tts (ou autre nom) # - License: OpenRAIL (ou CC-BY-NC-4.0 pour correspondre à Meta) # - Space SDK: Docker # - Clique "Create Space" ``` ### 2. Cloner le Space ```bash git clone https://huggingface.co/spaces// cd ``` ### 3. Copier les fichiers du projet ```bash # Depuis le répertoire du projet cp app_v2.py app.py cp requirements.txt . cp Dockerfile . cp README.md . cp .gitignore . cp examples.py . cp client.py . ``` ### 4. Configurer le fichier de révision de Hugging Face Crée `README_SPACE.md` avec les métadonnées: ```yaml --- title: Meta MMS ASR/TTS description: API multilingue pour reconnaissance vocale et synthèse vocale sdk: docker pinned: false app_port: 7860 models: - facebook/mms-1b-all - facebook/mms-tts-eng - facebook/mms-tts-yor - facebook/mms-tts-beh - facebook/mms-tts-ddn - facebook/mms-tts-ewe - facebook/mms-tts-gej - facebook/mms-tts-tbz - facebook/mms-tts-bba tags: - ASR - TTS - Speech - Audio - Multilingual - MMS --- ``` ### 5. Pousser vers Hugging Face ```bash # Configure Git si nécessaire git config user.email "email@example.com" git config user.name "Your Name" # Ajoute et pousse git add . git commit -m "Initial commit: Meta MMS ASR/TTS API" git push ``` ### 6. Attendre le déploiement Le Space se construira automatiquement (5-15 minutes). Pendant ce temps: - Les dépendances seront installées - Les modèles seront téléchargés (peut prendre du temps) - L'application sera lancée ### 7. Tester le Space ```bash # Accède à: https://huggingface.co/spaces// # Teste les endpoints: # - GET / → Documentation # - GET /health → État # - POST /tts → Teste avec du texte en Yoruba/autres langues ``` ## Troubleshooting ### Erreur: "Model not found" Solution: Les modèles peuvent prendre du temps à télécharger. Attends 5-10 minutes et réessaie. ### Erreur: "CUDA out of memory" Solution: - Réduis MAX_AUDIO_LENGTH ou MAX_TEXT_LENGTH - Utilise CPU au lieu du GPU - Ajoute à requirements.txt: `transformers[deepspeed]` ### Erreur: "Port already in use" Solution: Le port 7860 est utilisé par défaut sur HF Spaces. Vérifier `app_port` dans README.md ## Optimisation pour Production ### Augmenter les ressources Modifie le `docker-compose.yml`: ```yaml deploy: resources: limits: memory: 8G reservations: memory: 4G devices: - driver: nvidia count: 1 # GPU capabilities: [gpu] ``` ### Ajouter du caching Modifie le Dockerfile pour persister les modèles: ```dockerfile ENV HF_HOME=/app/hf_cache ENV TORCH_HOME=/app/torch_cache ``` ### Ajouter de l'authentification Pour limiter l'accès: ```python from functools import wraps from flask import request def require_token(f): @wraps(f) def decorated(*args, **kwargs): token = request.headers.get('Authorization', '').replace('Bearer ', '') if token != os.getenv('API_TOKEN'): return {'error': 'Unauthorized'}, 401 return f(*args, **kwargs) return decorated @app.route('/tts', methods=['POST']) @require_token def tts(): # ... ``` ## Monitoring ### Logs Accède aux logs du Space: - https://huggingface.co/spaces///logs ### Métriques Ajoute à `app.py`: ```python from prometheus_client import Counter, Histogram requests_total = Counter('requests_total', 'Total requests', ['method', 'endpoint']) request_duration = Histogram('request_duration_seconds', 'Request duration', ['endpoint']) ``` ## Coûts - **Gratuit**: Un Space gratuit avec ressources limitées (2-4GB RAM, pas de GPU) - **Libre** (avec GPU): Nécessite un Space payant (~$5-20/mois selon GPU) ## Support Pour les problèmes: 1. Vérifie les logs: https://huggingface.co/spaces///logs 2. Consulte la doc: https://huggingface.co/docs/hub/spaces 3. Pose une question: https://discuss.huggingface.co ## Prochaines étapes 1. ✅ Déploie d'abord sur HF Spaces 2. Teste tous les endpoints 3. Collecte du feedback 4. Ajoute des fonctionnalités (streaming, batch processing, etc.)