Gradium ha liberado como código abierto Phonon, una familia de pequeños modelos de texto a voz diseñados para ejecutarse en el dispositivo. El modelo TTS en el dispositivo Gradium Phonon está disponible en tamaños de 31M y 40M. Phonon 31m en inglés Phonon 31m se distribuye bajo Apache 2.0 y cabe en un archivo de 64.5 MB. Los desarrolladores obtienen voz natural sin llamadas a la nube, sin GPU y sin facturación por carácter.
TL;DR
- Tamaño: 31M de parámetros (excluyendo el tokenizador de audio), 64.5 MB en q8 GGUF, salida mono de 24 kHz. Phonon 40m: 40M, 74.6 MB.
- Funciona en: CPU, teléfonos, Raspberry Pi 5, navegadores (WASM, WebGPU) y GPU NVIDIA. No se requiere GPU.
- Rendimiento: el mejor Elo en inglés entre los modelos abiertos que Gradium probó; unos 7 ms hasta el primer audio en CPU.
- Mejor: 1.70% de WER en un conjunto difícil de 500 frases, frente al 3.50% de Kokoro (evaluación de Gradium).
- Peor: 0.51% de WER LLM en Seed-TTS, por detrás de Kokoro (0.45%) y Magpie (0.46%).
¿Qué es Gradium Phonon?
Phonon es una familia de TTS de pesos abiertos de Gradium, una empresa parisina de IA de voz surgida de Kyutai. Genera voz localmente en teléfonos, portátiles, placas y navegadores.
La familia tiene tres modelos:
- Phonon 31m: solo inglés, 37 voces integradas, Apache 2.0.
- Phonon 40m: 1 modelo por idioma (inglés, francés, alemán, español, portugués), CC BY-NC 4.0.
- Phonon 40m multilingüe: los 5 idiomas en 1 modelo, 102 voces, CC BY-NC 4.0.
¿Cómo funciona Phonon?
Phonon utiliza una arquitectura de transformer causal como columna vertebral. Su prefijo combina incrustaciones de texto y del hablante. Un tokenizador SentencePiece con un vocabulario de 4,000 tokens lee el texto en bruto, sin conversión a fonemas.
La columna vertebral genera 1 vector latente por fotograma de 80 ms. Un cabezal de flow-matching convierte ese vector más ruido en una incrustación de audio en un solo paso. Una variante más pequeña del Mimi decoder de Kyutai produce entonces audio PCM a 24 kHz. Un cabezal separado de fin de discurso decide cuándo detenerse.
Phonon 31m utiliza 6 capas de transformer, anchura 512 y 8 cabezas de atención. Phonon 40m utiliza 9 capas con la misma anchura. Ambos se destilan de un profesor Phonon más grande. El entrenamiento se ejecutó en un clúster de NVIDIA H100 con NCCL y CUDA Graphs.
Este trabajo se basa en la investigación Continuous Audio Language Models de Kyutai y en Pocket TTS.
</span> <div class="st"><span class="n">PASO 2</span><b>SentencePiece</b></div><span class="arr"></span> <div class="st"><span class="n">PASO 3</span><b>Transformer causal</b></div><span class="arr"></span> <div class="st"><span class="n">PASO 4</span><b>Cabezal de flow-matching</b></div><span class="arr"></span> <div class="st"><span class="n">PASO 5</span><b>Decodificador 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"> Atrás</button> <button class="btn" id="next">Siguiente paso </button> <button class="btn ghost" id="play">Transmitir fotogramas</button> <span class="cap">Cada barra es 1 fotograma latente = 80 ms de audio a 24 kHz</span> </div> </div> <div class="panel" id="p-bench"> <div class="seg" id="bseg"> <button class="on" data-b="wer">WER en conjunto difícil (menor es mejor)</button> <button data-b="elo">Elo en inglés (mayor es mejor)</button> <button data-b="seed">Seed-TTS WER</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">Tiempo hasta el primer audio</div><div class="val" id="g1">6.9 ms</div><div class="src" id="g1s"></div></div> <div class="gc"><div class="k">Velocidad frente a tiempo real</div><div class="val" id="g2">29.9x</div><div class="src" id="g2s"></div></div> </div> </div> id="g2s"></div></div> </div> <div class="note">Las filas del blog de Gradium corresponden a Phonon 31m; las filas de socios y notas de prensa no mencionan la variante. Un valor mayor de "x real time" significa más segundos de audio por segundo de cómputo. Medido por Gradium y sus socios de lanzamiento.</div> </div> <div class="panel" id="p-trade"> <div class="to"> <div class="tc p"><h4>Dónde destaca Phonon 31m</h4><ul> <li>1.70% de WER con conjunto fijo frente a 3.50% de Kokoro</li> <li>6.9 ms hasta el primer audio en una CPU de MacBook Air M5</li> <li>3.7x tiempo real en una Raspberry Pi 5</li> <li>Pesos, tokenizador y voces bajo Apache 2.0</li></ul></div> <div class="tc c"><h4>Dónde se queda corto</h4><ul> <li>0.51% de WER en Seed-TTS, por detrás de Kokoro con 0.45%</li> <li>Solo inglés en 31M; los modelos de 40m son CC BY-NC</li> <li>La prosodia se reinicia entre frases en textos largos</li> <li>Todos los benchmarks son ejecutados por Gradium</li></ul></div> </div> </div> <div class="ft"><span>Fuentes: gradium.ai/blog, huggingface.co/gradium · cifras autodeclaradas</span><span class="brand">Creado por 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=['Texto de entrada más una incrustación de hablante. La voz puede estar integrada, clonada o diseñada en Gradium Studio, y luego ejecutarse localmente.', 'El texto sin procesar se convierte en tokens de un vocabulario SentencePiece de 4,000 tokens. Sin conversión a fonemas, por lo que es más fácil añadir nuevos idiomas.', 'Un transformador causal (6 capas, ancho 512, 8 cabezas en 31m) genera 1 vector latente por fotograma de 80 ms, de forma autorregresiva.', 'Una cabeza de flow-matching convierte cada latente más ruido en una incrustación de audio continua en un solo paso. Una cabeza de fin de habla decide cuándo detenerse.', 'Una variante más pequeña del decodificador Mimi de Kyutai\'s convierte las incrustaciones en audio PCM de 24 kHz, transmitido en streaming mientras la generación continúa.']; 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 frases difíciles en inglés oraciones (números de teléfono, correos electrónicos, códigos postales). Magpie obtuvo 27.51%, fuera de esta escala. La tarjeta de Hugging Face indica 1.5% para Phonon 31m; el blog indica 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:'Pruebas de escucha emparejada a ciegas, inglés de EE. UU.: 468 evaluadores, 8,290 votos. Las barras comienzan en 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:'Oraciones de evaluación en inglés de Seed-TTS, WER asistido por LLM. Aquí Phonon 31m queda detrás de Kokoro y 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=[['CPU de MacBook Air M5','4 hilos, sin KleidiAI','6.9 ms','29.9x','blog de Gradium'], ['M5 + KleidiAI + Accelerate','4 hilos','5.4 ms','46.7x','blog de Gradium'], ['Raspberry Pi 5','CPU','38 ms','3.7x','blog de Gradium'], ['Snapdragon 8 Elite Gen 5','Oryon CPU','7.5 ms','24x','Gradium con Qualcomm'], ['CPU de Arm + KleidiAI','medido por Arm','28 ms','15x','Medido por Arm'], ['NVIDIA L40S','backend CUDA','5 ms','No divulgado','prensa de Gradium 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">¿Cómo rinde Phonon en los benchmarks?
Gradium realizó pruebas de escucha ciega por pares con 1,189 evaluadores y 17,270 votos. En inglés de EE. UU., Phonon 40m obtuvo 2117 Elo y Phonon 31m obtuvo 2098. Kokoro obtuvo 2043, NeuTTS 2034 y Magpie 1939.
La precisión se probó en un conjunto público de frases difíciles. Contiene 500 frases por idioma, llenas de números de teléfono, correos electrónicos y códigos postales. Phonon 31m obtuvo un WER de 1.70% frente al 3.50% de Kokoro y el 8.71% de NeuTTS Nano.
La normalización de texto integrada explica gran parte de esa diferencia.
En el conjunto más fácil de Seed-TTS, la diferencia se reduce. Phonon 31m obtuvo un LLM WER de 0.51%, mientras que Kokoro obtuvo 0.45%.
¿Qué tan rápido es Phonon en una CPU?
En una CPU de MacBook Air M5 con 4 hilos, Phonon 31m alcanza el primer audio en 6.9 ms. Funciona 29.9 veces más rápido que el tiempo real. Kokoro tarda 517 ms, porque no hace streaming. Con Arm KleidiAI y Apple Accelerate, Phonon 31m alcanza 46.7 veces el tiempo real.
En una Raspberry Pi 5, Phonon 31m arranca en 38 ms y funciona 3.7 veces más rápido que el tiempo real. Gradium dice que Kokoro necesita 7 segundos para arrancar allí.
En un Snapdragon 8 Elite Gen 5, Phonon arranca en 7.5 ms a 24 veces el tiempo real. En un NVIDIA L40S, CUDA alcanza el primer discurso en 5 ms. Una CPU AMD EPYC 7413 tarda 43 ms, según el comunicado de prensa.
Comparación: Phonon vs Kokoro, NeuTTS Nano y Kitten TTS
| Característica | Phonon 31m | Phonon 40m multilingüe | Kokoro-82M | NeuTTS Nano | Kitten TTS v0.8 |
|---|---|---|---|---|---|
| Desarrollador | Gradium | Gradium | hexgrad | Neuphonic | KittenML |
| Parámetros | 31M (excl. tokenizer) | 40M | 82M | ~228.7M en total, ~116.8M activos | 15M / 40M / 80M |
| Pesos | 64.5 MB (q8) | 74.6 MB (q8) | No divulgado | No divulgado | 25 a 80 MB |
| Idiomas | Inglés | EN, FR, DE, ES, PT | 8 (v1.0) | Inglés (la colección añade ES, FR, DE) | Inglés |
| Licencia | Apache 2.0 | CC BY-NC 4.0 | Apache 2.0 | NeuTTS Open License 1.0 | Apache 2.0 |
| WER fijo, EN (evaluación Gradium) | 1.70% | 2.11% | 3.50% | 8.71% | 7.40% (variante no divulgada) |
| Elo en inglés (evaluación Gradium) | 2098 | 2097 | 2043 | 2034 | No probado |
| WER del LLM Seed-TTS, EN (evaluación Gradium) | 0.51% | 0.48% | 0.45% | 0.62% | No probado |
| Primer audio, CPU M5, 4 hilos | 6.9 ms | 8.8 ms (arquitectura 40m) | 517 ms | No divulgado | No divulgado |
Las filas de benchmarks provienen del blog y de la ficha del modelo. Las filas de tamaño, idioma y licencia provienen de la propia ficha de cada modelo.
¿Cómo pueden los desarrolladores desplegar Phonon?
El runtime está bajo licencia MIT o Apache-2.0. Cubre Rust, Python (pip install ptts), Swift, C, C++ y el navegador mediante phonon-tts. También incluye un servidor compatible con OpenAI y un servidor WebSocket.
Phonon se carga en Transformers, MLX-Audio, Ollama y LM Studio. La clonación de voz y el diseño de voz se ejecutan en Gradium Studio, y luego la voz funciona localmente.
Puntos clave
- Phonon 31m es un modelo TTS en inglés de 31M y 64.5 MB bajo Apache 2.0.
- Reporta un WER de 1.70% en texto difícil, frente al 3.50% de Kokoro.
- El primer audio llega en 6.9 ms en una CPU de un MacBook Air M5.
- Funciona 3.7 veces más rápido que en tiempo real en una Raspberry Pi 5.
- Existen modelos multilingües de 40m, pero bajo una licencia no comercial.
Echa un vistazo al blog técnico, model card, runtime de GitHub y al conjunto de datos de frases difíciles. Todo el crédito va para el investigador de este proyecto. Además, no dudes en seguirnos en Twitter y no olvides unirte a nuestro ML SubReddit de más de 150k y suscribirte a nuestro Newsletter. ¡Espera! ¿estás en telegram? ahora también puedes unirte a nosotros en telegram.
¿Necesitas asociarte con nosotros para promocionar tu repositorio de GitHub O página de Hugging Face O lanzamiento de producto O webinar, etc.? Conéctate con nosotros
La entrada Gradium libera como código abierto Phonon, un modelo TTS en el dispositivo de 31M de parámetros bajo Apache 2.0 apareció primero en MarkTechPost.