Gradium a rendu open source Phonon, une famille de petits modèles de synthèse vocale conçus pour fonctionner sur l'appareil. Le modèle de synthèse vocale sur appareil Gradium Phonon existe en tailles 31M et 40M. Le modèle anglais Phonon 31m est distribué sous Apache 2.0 et tient dans un fichier de 64.5 Mo. Les développeurs obtiennent une voix naturelle sans appel au cloud, sans GPU et sans facturation au caractère.
En bref
- Taille : 31M de paramètres (hors tokeniseur audio), 64.5 MB en q8 GGUF, sortie mono 24 kHz. Phonon 40m : 40M, 74.6 MB.
- Fonctionne sur : CPUs, téléphones, Raspberry Pi 5, navigateurs (WASM, WebGPU) et GPU NVIDIA. Aucun GPU requis.
- Performances : meilleur Elo anglais parmi les modèles ouverts testés par Gradium ; environ 7 ms avant le premier audio sur CPU.
- Le meilleur : 1.70 % de WER sur un jeu difficile de 500 phrases, contre 3.50 % pour Kokoro (évaluation de Gradium).
- Le pire : 0.51% de WER LLM Seed-TTS, derrière Kokoro (0.45%) et Magpie (0.46%).
Qu'est-ce que Gradium Phonon ?
Phonon est une famille de TTS à poids ouverts de Gradium, une entreprise parisienne d'IA vocale issue de Kyutai. Elle génère la parole localement sur téléphones, ordinateurs portables, cartes et navigateurs.
La famille a trois modèles:
- Phonon 31 min : Anglais uniquement, 37 voix intégrées, Apache 2.0.
- Phonon 40m : 1 modèle par langue (anglais, français, allemand, espagnol, portugais), CC BY-NC 4.0.
- Phonon 40m multilingue : 5 langues dans 1 modèle, 102 voix, CC BY-NC 4.0.
Comment fonctionne Phonon ?
Phonon utilise un backbone de transformer causal. Son préfixe combine des embeddings de texte et de locuteur. Un tokenizer SentencePiece avec un vocabulaire de 4,000 tokens lit le texte brut, sans conversion en phonèmes.
Le backbone génère 1 vecteur latent par trame de 80 ms. Une tête de flow-matching transforme ce vecteur plus du bruit en un embedding audio en une seule étape. Une variante plus petite du décodeur Mimi de Kyutai produit ensuite un audio PCM à 24 kHz. Une tête distincte de fin de parole décide quand s'arrêter.
Phonon 31m utilise 6 couches de transformer, une largeur de 512 et 8 têtes d'attention. Phonon 40m utilise 9 couches à la même largeur. Les deux sont distillés à partir d'un teacher Phonon plus grand. L'entraînement a été effectué sur un cluster de NVIDIA H100 avec NCCL et CUDA Graphs.
Ce travail s'appuie sur la recherche Continuous Audio Language Models de Kyutai et sur Pocket TTS.
</span> <div class="st"><span class="n">ÉTAPE 2</span><b>SentencePiece</b></div><span class="arr"></span> <div class="st"><span class="n">ÉTAPE 3</span><b>Transformer causal</b></div><span class="arr"></span> <div class="st"><span class="n">ÉTAPE 4</span><b>Tête de flow-matching</b></div><span class="arr"></span> <div class="st"><span class="n">ÉTAPE 5</span><b>Décodeur Mimi</b></div> </div> <div class="detail" id="how-d"></div> <div class="frames" id="frames"></div> <div class="ctl"> <button class="btn ghost" id="prev"> Retour</button> <button class="btn" id="next">Étape suivante </button> <button class="btn ghost" id="play">Streamer les trames</button> <span class="cap">Chaque barre représente 1 trame latente = 80 ms d'audio à 24 kHz</span> </div> </div> <div class="panel" id="p-bench"> <div class="seg" id="bseg"> <button class="on" data-b="wer">WER sur l'ensemble difficile (plus bas est mieux)</button> <button data-b="elo">Elo en anglais (plus haut est mieux)</button> <button data-b="seed">WER Seed-TTS</button> </div> <div id="bars"></div> <div class="note" id="bnote"></div> </div> <div class="panel" id="p-speed"> <div class="hw" id="hw"></div> <div class="gauge"> <div class="gc"><div class="k">Temps jusqu'au premier audio</div><div class="val" id="g1">6.9 ms</div><div class="src" id="g1s"></div></div> <div class="gc"><div class="k">Vitesse par rapport au temps réel</div><div class="val" id="g2">29.9x</div><div class="src" id="g2s"></div> id="g2s"></div></div> </div> <div class="note">Les lignes du blog Gradium correspondent au Phonon 31m ; les lignes des partenaires et des communiqués de presse ne nomment pas la variante. Un « x real time » plus élevé signifie plus de secondes d'audio par seconde de calcul. Mesuré par Gradium et ses partenaires de lancement.</div> </div> <div class="panel" id="p-trade"> <div class="to"> <div class="tc p"><h4>Là où le Phonon 31m domine</h4><ul> <li>WER figé de 1.70 % contre 3.50 % pour Kokoro</li> <li>6.9 ms jusqu'au premier audio sur un CPU MacBook Air M5</li> <li>3.7x en temps réel sur un Raspberry Pi 5</li> <li>Poids, tokenizer et voix sous Apache 2.0</li></ul></div> <div class="tc c"><h4>Là où il est en retrait</h4><ul> <li>WER Seed-TTS de 0.51 %, derrière Kokoro à 0.45 %</li> <li>Anglais uniquement à 31M ; les modèles 40m sont sous CC BY-NC</li> <li>La prosodie se réinitialise entre les phrases sur les textes longs</li> <li>Tous les benchmarks sont exécutés par Gradium</li></ul></div> </div> </div> <div class="ft"><span>Sources : gradium.ai/blog, huggingface.co/gradium · chiffres auto-déclarés</span><span class="brand">Réalisé par Marktechpost</span></div> </div> <script> (function(){ var R=document.getElementById('mtp-phonon'); function send(){try{parent.postMessage({mtpFrameHeight:R.offsetHeight+40,id:'mtp-phonon'},'*')}catch(e){}} R.querySelectorAll('.tab').forEach(function(t){t.addEventListener('click',function(){ R.querySelectorAll('.tab').forEach(function(x){x.classList.remove('on')});t.classList.add('on'); R.querySelectorAll('.panel').forEach(function(p){p.classList.remove('on')}); R.querySelector('#p-'+t.dataset.t).classList.add('on'); if(t.dataset.t==='bench')drawBars(cur); setTimeout(send,60);});}); R.querySelectorAll('.mc'). forEach(function(c){c.addEventListener('click',function(){ R.querySelectorAll('.mc').forEach(function(x){x.classList.remove('on')});c.classList.add('on'); document.getElementById('fam-d').textContent=c.dataset.d;setTimeout(send,30);});}); var steps=['Texte d\'entrée plus un embedding de locuteur. La voix peut être intégrée, clonée ou conçue dans Gradium Studio, puis exécutée en local.', 'Le texte brut devient des tokens issus d\'un vocabulaire SentencePiece de 4,000 tokens. Aucune conversion en phonèmes, ce qui facilite l\'ajout de nouvelles langues.', 'Un transformateur causal (6 couches, largeur 512, 8 têtes dans 31m) génère 1 vecteur latent par trame de 80 ms, de manière autorégressive.', 'Une tête de flow-matching transforme chaque latent plus du bruit en un embedding audio continu en une seule étape. Une tête de fin de discours décide quand s\'arrêter.', 'Une variante plus petite du décodeur Mimi de Kyutai convertit les embeddings en audio PCM 24 kHz, en streaming pendant que la génération continue.']; var si=0,sts=R.querySelectorAll('.st'); function setStep(i){si=(i+5)%5;sts.forEach(function(s,k){s.classList.toggle('on',k===si)});document.getElementById('how-d').textContent=steps[si];} setStep(0); document.getElementById('next').onclick=function(){setStep(si+1)}; document.getElementById('prev').onclick=function(){setStep(si-1)}; var F=document.getElementById('frames');for(var i=0;i<24;i++){var d=document.createElement('div');d.className='fr';F.appendChild(d);} var tm=null;document.getElementById('play').onclick=function(){ var fr=F.children,k=0;clearInterval(tm);setStep(2); for(var j=0;j<fr.length;j++){fr[j].classList.remove('live');fr[j].style.height='20%';} tm=setInterval(function(){if(k>=fr.length){clearInterval(tm);setStep(4);return;} fr[k].classList.add('live');fr[k].style.height=(30+Math.round(Math.abs(Math.sin(k*1.3))*65))+'%'; if(k===8)setStep(3);k++;},110);}; var B={wer:{max:9,u:'%',rows:[['Phonon 31m',1.70,1],['Phonon 40m multi',2.11,1],['Phonon 40m',2.22,1],['Kokoro',3.50],['Kitten TTS',7.40],['NeuTTS Nano',8.71]], n:'500 anglais difficile phrases (numéros de téléphone, adresses e-mail, codes postaux). Magpie a obtenu 27.51 %, hors de cette échelle. La carte Hugging Face indique 1.5 % pour Phonon 31m ; le blog indique 1.70 %.'}, elo:{max:2150,min:1900,u:'',rows:[['Phonon 40m',2117,1],['Phonon 31m',2098,1],['Phonon 40m multi',2097,1],['Pocket TTS 100m',2056],['Kokoro',2043],['NeuTTS',2034],['Magpie',1939]], n:'Blind pairwise listening tests, US English: 468 raters, 8,290 votes. Bars start at 1900 Elo.'}, seed:{max:0.7,u:'%',rows:[['Phonon 40m',0.45,1],['Kokoro',0.45],['Magpie',0.46],['Phonon 40m multi',0.48,1],['Phonon 31m',0.51,1],['NeuTTS',0.62]], n:'Seed-TTS English evaluation sentences, LLM-assisted WER. Here Phonon 31m trails Kokoro and Magpie.'}}; var cur='wer'; function drawBars(k){cur=k;var b=B[k],h='';b.rows.forEach(function(r){h+='<div class="bar'+(r[2]?' me':'')+'"><span class="lb">'+r[0]+'</span><div class="tr"><div class="fl" data-w="'+(((r[1]-(b.min||0))/(b.max-(b.min||0)))*100).toFixed(1)+'"></div></div><span class="v">'+(k==='elo'?r[1]:r[1].toFixed(2)+b.u)+'</span></div>'}); document.getElementById('bars').innerHTML=h;document.getElementById('bnote').textContent=b.n; setTimeout(function(){R.querySelectorAll('#bars .fl').forEach(function(f){f.style.width=f.dataset.w+'%'})},40);setTimeout(send,80);} R.querySelectorAll('#bseg button').forEach(function(x){x.onclick=function(){R.querySelectorAll('#bseg button').forEach(function(y){y.classList.remove('on')});x.classList.add('on');drawBars(x.dataset.b);}}); drawBars('wer'); var H=[['MacBook Air M5 CPU','4 threads, no KleidiAI','6.9 ms','29.9x','Gradium blog'], ['M5 + KleidiAI + Accelerate','4 threads','5.4 ms','46.7x','Gradium blog'], ['Raspberry Pi 5','CPU','38 ms','3.7x','Gradium blog'], ['Snapdragon 8 Elite Gen 5','Oryon CPU','7.5 ms','24x','Gradium with Qualcomm'], ['Arm CPU + KleidiAI','Arm-measured','28 ms','15x','Measured by Arm'], ['NVIDIA L40S','CUDA backend','5 ms','Not disclosed','Gradium press release']]; var hw=document.getElementById('hw'),hh='';H.forEach(function(r,i){hh+='<div class="hwc'+(i?'':' on')+'" data-i="'+i+'"><b>'+r[0]+'</b><small>'+r[1]+'</small></div>'});hw.innerHTML=hh; function count(el,txt){var m=txt.match(/[\d.]+/);if(!m){el.textContent=txt;return;}var end=parseFloat(m[0]),dec=(m[0].split('.')[1]||'').length,suf=txt.slice(m.index+m[0].length),t0=null; function f(ts){if(!t0)t0=ts;var p=Math.min((ts-t0)/600,1);el.textContent=(end*p).toFixed(dec)+suf;if(p<1)requestAnimationFrame(f);}requestAnimationFrame(f);} function pick(i){var r=H[i];R.querySelectorAll('.hwc').forEach(function(c){c.classList.toggle('on',+c.dataset.i===i)}); count(document.getElementById('g1'),r[2]);count(document.getElementById('g2'),r[3]); document.getElementById('g1s').textContent=r[4];document.getElementById('g2s').textContent=r[4];} R.querySelectorAll('.hwc').forEach(function(c){c.onclick=function(){pick(+c.dataset.i)}}); pick(0); window.addEventListener('load',send);window.addEventListener('resize',send);setTimeout(send,300); })(); </script> </body> </html> " style="width:100%;height:600px;border:0;display:block;background:transparent;" loading="lazy" scrolling="no">Comment Phonon se comporte-t-il sur les benchmarks ?
Gradium a mené des tests d'écoute en aveugle par paires avec 1,189 évaluateurs et 17,270 votes. En anglais américain, Phonon 40m a obtenu un score de 2117 Elo et Phonon 31m un score de 2098. Kokoro a obtenu 2043, NeuTTS 2034 et Magpie 1939.
La précision a été testée sur un ensemble public de phrases difficiles. Il contient 500 phrases par langue, remplies de numéros de téléphone, d'adresses e-mail et de codes postaux. Phonon 31m a obtenu un WER de 1.70 % contre 3.50 % pour Kokoro et 8.71 % pour NeuTTS Nano.
La normalisation de texte intégrée explique une grande partie de cet écart.
Sur l'ensemble Seed-TTS, plus facile, l'écart se réduit. Phonon 31m a obtenu un LLM WER de 0.51 %, tandis que Kokoro a obtenu 0.45 %.
Quelle est la vitesse de Phonon sur un CPU ?
Sur un CPU de MacBook Air M5 avec 4 threads, Phonon 31m atteint le premier audio en 6.9 ms. Il fonctionne 29.9x plus vite que le temps réel. Kokoro prend 517 ms, car il ne streame pas. Avec Arm KleidiAI et Apple Accelerate, Phonon 31m atteint 46.7x le temps réel.
Sur un Raspberry Pi 5, Phonon 31m démarre en 38 ms et fonctionne 3.7x plus vite que le temps réel. Gradium indique que Kokoro a besoin de 7 secondes pour y démarrer.
Sur Snapdragon 8 Elite Gen 5, Phonon démarre en 7.5 ms à 24x le temps réel. Sur un NVIDIA L40S, CUDA atteint la première parole en 5 ms. Un CPU AMD EPYC 7413 prend 43 ms, selon le communiqué de presse.
Comparaison : Phonon vs Kokoro, NeuTTS Nano et Kitten TTS
| Caractéristique | Phonon 31m | Phonon 40m multilingue | Kokoro-82M | NeuTTS Nano | Kitten TTS v0.8 |
|---|---|---|---|---|---|
| Développeur | Gradium | Gradium | hexgrad | Neuphonic | KittenML |
| Paramètres | 31M (hors tokenizer) | 40M | 82M | ~228.7M au total, ~116.8M actifs | 15M / 40M / 80M |
| Poids | 64.5 Mo (q8) | 74.6 Mo (q8) | Non divulgué | Non divulgué | 25 à 80 Mo |
| Langues | Anglais | EN, FR, DE, ES, PT | 8 (v1.0) | Anglais (la collection ajoute ES, FR, DE) | Anglais |
| Licence | Apache 2.0 | CC BY-NC 4.0 | Apache 2.0 | NeuTTS Open License 1.0 | Apache 2.0 |
| WER imposé, EN (évaluation Gradium) | 1.70% | 2.11% | 3.50% | 8.71% | 7,40 % (variante non divulguée) |
| Elo anglais (évaluation Gradium) | 2098 | 2097 | 2043 | 2034 | Non testé |
| Seed-TTS LLM WER, EN (évaluation Gradium) | 0.51% | 0.48% | 0.45% | 0.62% | Non testé |
| Premier audio, CPU M5, 4 threads | 6,9 ms | 8,8 ms (architecture 40m) | 517 ms | Non divulgué | Non divulgué |
Les lignes de référence proviennent du blog et de la fiche modèlede Gradium. Les lignes sur la taille, les langues et les licences proviennent de la fiche de chaque modèle.
Comment les développeurs peuvent-ils déployer Phonon ?
Le runtime est sous licence MIT ou Apache-2.0. Il couvre Rust, Python (pip install ptts), Swift, C, C++ et le navigateur via phonon-tts. Il inclut également un serveur compatible OpenAI et un serveur WebSocket.
Phonon se charge dans Transformers, MLX-Audio, Ollama et LM Studio. Le clonage de voix et la conception de voix s'exécutent dans Gradium Studio, puis la voix fonctionne localement.
Points clés à retenir
- Phonon 31m est un modèle TTS anglais de 31M et 64.5 MB sous licence Apache 2.0.
- Il affiche un WER de 1.70% sur du texte difficile, contre 3.50% pour Kokoro.
- Le premier audio arrive en 6.9 ms sur le CPU d'un MacBook Air M5.
- Il fonctionne 3.7x plus vite que le temps réel sur un Raspberry Pi 5.
- Des modèles multilingues 40m existent, mais sous une licence non commerciale.
Découvrez le blog technique, la fiche du modèle, le runtime GitHub et le jeu de données de phrases difficiles. Tout le mérite revient au chercheur de ce projet. Par ailleurs, n'hésitez pas à nous suivre sur Twitter et n'oubliez pas de rejoindre notre 150k+ML SubReddit et de vous abonner à notre Newsletter. Attendez ! êtes-vous sur telegram ? vous pouvez maintenant nous rejoindre également sur telegram.
Besoin de vous associer à nous pour promouvoir votre dépôt GitHub OU votre page Hugging Face OU le lancement d'un produit OU un webinaire, etc. ? Contactez-nous
L'article Gradium rend Phonon open source, un modèle TTS sur appareil de 31M de paramètres sous Apache 2.0 est apparu en premier sur MarkTechPost.