Une API pour transcrire l'audio avec Openai's Whisper Large V3! Alimenté par ? Transformers, Optimum & Flash-Attn
Caractéristiques:
Basé sur un projet CLI CLI incroyablement rapide. Vérifiez-le si vous aimez configurer ce projet localement ou comprendre l'arrière-plan de la pertinence incroyablement rapide.
Ce projet est axé sur la fourniture d'une API Fast Whisper déployable avec Docker sur les infrastructures cloud avec des GPU pour les cas d'utilisation de production évolutifs.
Avec le lancement de service GPU récent Fly.io, j'ai configuré le fichier de configuration de Fly pour se déployer facilement sur les machines à mouches! Cependant, vous pouvez le déployer sur n'importe quel autre environnement VM qui prend en charge les GPU et Docker.
Voici quelques repères que nous avons exécutés sur Nvidia A100 - 80 Go et Fly.io GPU Infra?
| Type d'optimisation | Il est temps de transcrire (150 minutes d'audio) |
|---|---|
grand-V3 (transformateurs) ( fp16 + batching [24] + Flash Attention 2 ) | ~ 2 ( 1 min 38 sec ) |
grand-V3 (transformateurs) ( fp16 + batching [24] + Flash Attention 2 + diarization ) | ~ 2 ( 3 min 16 sec ) |
Grand-V3 (Transformers) ( fp16 + batching [24] + Flash Attention 2 + fly machine startup ) | ~ 2 ( 1 min 58 sec ) |
Grand-V3 (Transformers) ( fp16 + batching [24] + Flash Attention 2 + diarization + fly machine startup ) | ~ 2 ( 3 min 36 sec ) |
Le temps de démarrage estimé pour la machine à mouche avec GPU et le chargement du modèle est d'environ 20 secondes. Le reste du temps est passé sur le calcul réel.
yoeven/insanely-fast-whisper-api:latest
Docker Hub: Yoeven / Insanyly-fast-whisper-api
app à la fly.toml si vous le souhaitezimage = 'yoeven/insanely-fast-whisper-api:latest' in fly.toml uniquement si vous souhaitez reconstruire l'image à partir du DockerfileInstallez Fly CLI si je ne l'ai pas déjà
Besoin d'exécuter cela la première fois que vous lancez une nouvelle application de mouche
fly launch Fly sera invite: Would you like to copy its configuration to the new app? (y/N) . Oui ( y ) pour copier la configuration à partir du dépôt.
Fly invitera: Do you want to tweak these settings before proceeding si vous n'avez rien à ajuster. La plupart des paramètres requis sont déjà configurés dans le fichier fly.toml . Pas n pour continuer et déployer.
La première fois que vous déploiez, cela prendra un certain temps car l'image est énorme. Les déploiements ultérieurs seront beaucoup plus rapides.
Exécutez ce qui suit si vous souhaitez configurer la diarisation du haut-parleur ou un jeton Auth pour sécuriser votre API:
fly secrets set ADMIN_KEY= < your_token > HF_TOKEN= < your_hf_key > Exécutez fly secrets list pour vérifier si les secrets existent.
Pour obtenir le jeton de face étreint pour la diarisation des haut-parleurs, vous devez faire ce qui suit:
pyannote/segmentation-3.0pyannote/speaker-diarization-3.1 Conditions utilisateurhf.co/settings/tokens .Votre API devrait ressembler à ceci:
https://insanely-fast-whisper-api.fly.dev
Exécutez fly logs -a insanely-fast-whisper-api pour afficher les journaux en temps réel de votre machine à mouches.
Puisqu'il s'agit d'une application dockerisée, vous pouvez le déployer sur n'importe quel fournisseur de cloud qui prend en charge Docker et GPU avec quelques ajustements de configuration.
Jigsawstack fournit un tas d'API puissants pour divers cas d'utilisation tout en gardant les coûts bas. Ce projet est disponible en tant qu'API entièrement géré ici avec une évolutivité de cloud améliorée pour la rentabilité et la disponibilité élevée. Inscrivez-vous ici gratuitement!
Si vous aviez configuré le secret de l'environnement ADMIN_KEY . Vous devrez passer x-admin-api-key dans l'en-tête avec la valeur de la clé que vous définissez précédemment.
Si elle est déployée sur la mouche, l'URL de base devrait ressembler à ceci:
https://{app_name}.fly.dev/{path}
Selon le fournisseur de cloud que vous déployez, l'URL de base sera différente.
/Transcrire ou traduire l'audio en texte
| Nom | valeur |
|---|---|
| URL (requise) | URL de l'audio |
| tâche | transcribe , translate par défaut: transcribe |
| langue | None , en , autres langues par défaut: None Auto détecte la langue |
| batch_size | Nombre de lots parallèles que vous souhaitez calculer. Réduisez si vous faites face à Ooms. par défaut: 64 |
| horodatage | chunk , word par défaut: chunk |
| diase_audio | Diarisez les clips audio par haut-parleur. Vous devrez définir hf_token. par défaut: false |
| webhook | Appel POST Webhook à la fin ou à l'erreur. par défaut: None |
| webhook.url | URL pour envoyer le webhook |
| webhook.headader | En-têtes à envoyer avec le webhook |
| is_async | Exécutez la tâche en arrière-plan et envoie des résultats à l'URL de webhook. true , false par défaut: false |
| managed_task_id | ID de tâche personnalisé utilisé pour faire référence à la tâche continue. par défaut: uuid() v4 will be generated for each transcription task |
/tasksObtenez toutes les tâches de transcription actives, à la fois des tâches de fond asynchrones et des tâches en cours
/status/{task_id}Obtenez le statut d'une tâche, les tâches terminées seront supprimées de la liste qui pourrait lancer une erreur
/cancel/{task_id} Annuler la tâche d'arrière-plan asynchrone. Seuls les travaux de transcription créés avec is_async définis sur true peuvent être annulés.
# clone the repo
$ git clone https://github.com/jigsawstack/insanely-fast-whisper-api.git
# change the working directory
$ cd insanely-fast-whisper-api
# install torch
$ pip3 install torch torchvision torchaudio
# upgrade wheel and install required packages for FlashAttention
$ pip3 install -U wheel && pip install ninja packaging
# install FlashAttention
$ pip3 install flash-attn --no-build-isolation
# generate updated requirements.txt if you want to use other management tools (Optional)
$ poetry export --output requirements.txt
# get the path of python
$ which python3
# setup virtual environment
$ poetry env use /full/path/to/python
# install the requirements
$ poetry install
# run the app
$ uvicorn app.app:app --reload Les machines à mouche sont chargées par la seconde et pourraient prendre jusqu'à 15 minutes de ralenti avant qu'il ne décide de se fermer. Vous pouvez arrêter la machine lorsque vous avez terminé avec l'API pour réduire les coûts. Vous pouvez le faire en envoyant une demande POST au point de terminaison suivant:
https://api.machines.dev/v1/apps/<app_name>/machines/<machine_id>/stop
En-tête d'autorisation:
Authorization Bearer <fly_token>
Apprenez plus ici
Ce projet fait partie de Jigsawstack - une suite d'API puissantes et conviviales pour divers cas d'utilisation tout en maintenant les coûts bas. Inscrivez-vous ici gratuitement!