Présentation du système

tiny-audio combine un encodeur vocal gelé pré‑entraîné, le grand modèle de langage Qwen et un projecteur de petite taille qui reste entraînable. Le projet indique qu’il est possible de former le système complet pour environ 25 $, en ajustant seulement les ~80 M de paramètres du projecteur. Cette architecture modulaire permet de lire le code source en quelques heures et d’exécuter la boucle d’entraînement sur un ordinateur portable en cinq minutes.

Performances et exigences matérielles

Sur le jeu de test LibriSpeech test‑clean, le modèle atteint un taux d’erreur de mots (WER) de 1,8 %. Sur un panel de 12 benchmarks totalisant 11 822 échantillons, le WER moyen est de 7,4 %. Les poids sont stockés en bf16, ce qui nécessite environ 6 Go de mémoire GPU ou Apple Silicon. La faible taille du modèle (80 M paramètres) explique la rapidité d’entraînement et la capacité à fonctionner sur du matériel de bureau.

Fonctionnalités avancées

Le pipeline expose plusieurs sorties enrichies : les horodatages mot à mot (forced alignment) et la diarisation des locuteurs. La diarisation s’appuie sur le modèle Nemotron‑3‑Diarization, appliqué en zéro‑shot à partir de la recette masked_asr de NeMo ; chaque locuteur est transcrit sur une copie audio où les autres voix sont masquées. Le système gère partiellement les chevauchements, chaque mot étant attribué au flux qui l’a entendu. Un mode streaming token‑par‑token est disponible via ASRModel.generate_streaming.

from transformers import pipeline
pipe = pipeline(
    "automatic-speech-recognition",
    model="mazesmazes/tiny-audio",
    trust_remote_code=True,
)
print(pipe("audio.wav")["text"])
# Horodatages
print(pipe("audio.wav", return_timestamps=True))
# Diarisation
print(pipe("meeting.wav", return_speakers=True, num_speakers=2))

Déploiement et mise à l’échelle

tiny-audio peut être servi via un serveur HTTP batché, notamment sur la plateforme RunPod. En mode batch, les requêtes simultanées sont regroupées en un même lot GPU, ce qui porte le débit à 460 × le temps réel avec 128 requêtes concurrentes sur une RTX 4090. Les commandes suivantes illustrent le déploiement :

poetry run ta runpod up --serve
poetry run ta runpod wait <POD_ID>
poetry run ta runpod deploy <HOST> <PORT>
TINY_AUDIO_API_KEY=my-secret poetry run ta runpod serve <HOST> <PORT> --no-attach

Une fois le serveur actif, l’API accepte les fichiers audio en POST ; l’accès non authentifié est possible si la variable TINY_AUDIO_API_KEY n’est pas définie, ce qui doit être géré selon les exigences de sécurité.