Gradium открыла исходный код Phonon — TTS-модели для устройств с 31 млн параметров под Apache 2.0
Gradium открыла исходный код Phonon — семейства небольших моделей преобразования текста в речь, созданных для работы на устройстве. Модель Gradium Phonon для локального синтеза речи выпускается в версиях на 31 и 40 млн параметров. Англоязычная Phonon 31m распространяется по лицензии Apache 2.0 и помещается в файл размером 64,5 МБ. Разработчики получают естественную речь без обращения к облаку, графического процессора и оплаты за каждый символ.
Кратко
- Размер: 31 млн параметров (без учёта аудиотокенизатора), 64,5 МБ в формате q8 GGUF, монофонический вывод 24 кГц. Phonon 40m: 40 млн параметров, 74,6 МБ.
- Работает на: процессорах, телефонах, Raspberry Pi 5, в браузерах (WASM, WebGPU) и на графических процессорах NVIDIA. GPU не требуется.
- Производительность: максимальный показатель Elo среди протестированных Gradium открытых моделей для английского языка; около 7 мс до появления первого аудио на CPU.
- Лучший результат: 1,70% WER на сложном наборе из 500 предложений против 3,50% у Kokoro (оценка Gradium).
- Худший результат: WER 0,51% на наборе Seed-TTS LLM — ниже, чем у Kokoro (0,45%) и Magpie (0,46%).
Что такое Gradium Phonon?
Phonon — семейство моделей синтеза речи с открытыми весами от компании Gradium, занимающейся голосовым ИИ в Париже и выделившейся из Kyutai. Оно генерирует речь локально на телефонах, ноутбуках, одноплатных компьютерах и в браузерах.
В семейство входят три модели:
- Phonon 31m: только английский язык, 37 встроенных голосов, Apache 2.0.
- Phonon 40m: отдельная модель для каждого языка (английского, французского, немецкого, испанского и португальского), CC BY-NC 4.0.
- Phonon 40m multilingual: все 5 языков в одной модели, 102 голоса, CC BY-NC 4.0.
Как работает Phonon?
Phonon использует каузальный трансформер в качестве базовой архитектуры. Его префикс объединяет текстовые эмбеддинги и эмбеддинги говорящего. Токенизатор SentencePiece со словарём из 4000 токенов обрабатывает исходный текст без преобразования в фонемы.
Базовая модель генерирует один латентный вектор на каждый кадр длительностью 80 мс. Голова flow matching за один шаг превращает этот вектор вместе с шумом в аудиоэмбеддинг. Затем уменьшенная версия декодера Mimi от Kyutai выдаёт PCM-аудио с частотой 24 кГц. Отдельная голова определения конца речи решает, когда остановиться.
Phonon 31m использует 6 слоёв трансформера, ширину 512 и 8 голов внимания. Phonon 40m использует 9 слоёв при той же ширине. Обе модели дистиллированы из более крупной модели-учителя Phonon. Обучение выполнялось на кластере NVIDIA H100 с использованием NCCL и CUDA Graphs.
Работа основана на исследованиях Kyutai Continuous Audio Language Models и Pocket TTS.
Назад</button>
<button class="btn" id="next">Следующий шаг </button>
<button class="btn ghost" id="play">Поток кадров</button>
<span class="cap">Каждая полоска — 1 латентный кадр = 80 мс аудио с частотой 24 кГц</span>
</div>
</div>
<div class="panel" id="p-bench">
<div class="seg" id="bseg">
<button class="on" data-b="wer">WER на сложном наборе (меньше — лучше)</button>
<button data-b="elo">Elo для английского (больше — лучше)</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">Время до первого аудио</div><div class="val" id="g1">6.9 мс</div><div class="src" id="g1s"></div></div>
<div class="gc"><div class="k">Скорость относительно реального времени</div><div class="val" id="g2">29.9x</div><div class="src" id="g2s"></div></div>
</div>
<div class="note">Строки из блога Gradium относятся к Phonon 31m; в строках партнёров и пресс-релиза вариант модели не указан. Чем выше показатель «x относительно реального времени», тем больше секунд аудио обрабатывается за одну секунду вычислений. Измерения выполнены Gradium и партнёрами при запуске.</div>
</div>
<div class="panel" id="p-trade">
<div class="to">
<div class="tc p"><h4>В чём Phonon 31m превосходит другие модели</h4><ul>
<li>WER 1,70% на сложном наборе против 3,50% у Kokoro</li>
<li>6,9 мс до первого аудио на CPU MacBook Air M5</li>
<li>3,7x относительно реального времени на Raspberry Pi 5</li>
<li>Веса, токенизатор и голоса по лицензии Apache 2.0</li></ul></div>
<div class="tc c"><h4>В чём она уступает</h4><ul>
<li>WER 0,51% на Seed-TTS против 0,45% у Kokoro</li>
<li>Только английский язык в версии 31M; модели 40m распространяются по CC BY-NC</li>
<li>На длинном тексте просодия сбрасывается между предложениями</li>
<li>Все тесты проведены Gradium</li></ul></div>
</div>
</div>
<div class="ft"><span>Источники: gradium.ai/blog, huggingface.co/gradium · данные предоставлены самими разработчиками</span><span class="brand">Создано 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=['Введите текст и эмбеддинг говорящего. Голос может быть встроенным, клонированным или созданным в Gradium Studio, после чего он запускается локально.',
'Исходный текст преобразуется в токены с помощью словаря SentencePiece из 4000 токенов. Преобразование в фонемы не используется, поэтому добавлять новые языки проще.',
'Каузальный трансформер (6 слоёв, ширина 512, 8 голов в версии 31m) авторегрессионно генерирует 1 латентный вектор на каждый кадр длительностью 80 мс.',
'Голова flow matching за один шаг превращает каждый латентный вектор вместе с шумом в непрерывный аудиоэмбеддинг. Голова определения конца речи решает, когда остановиться.',
'Уменьшенная версия декодера Mimi от Kyutai преобразует эмбеддинги в PCM-аудио с частотой 24 кГц, которое передаётся в поток во время продолжения генерации.'];
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 сложных английских предложений (номера телефонов, электронные адреса, почтовые индексы). Magpie набрала 27,51%, что выходит за пределы этой шкалы. В карточке Hugging Face указано 1,5% для Phonon 31m; в блоге указано 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:'Слепые попарные тесты прослушивания, американский английский: 468 оценщиков, 8290 голосов. Полосы начинаются со значения 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, WER с помощью LLM. Здесь Phonon 31m уступает Kokoro и 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 потока, без KleidiAI','6,9 мс','29,9x','Блог Gradium'],
['M5 + KleidiAI + Accelerate','4 потока','5,4 мс','46,7x','Блог Gradium'],
['Raspberry Pi 5','CPU','38 мс','3,7x','Блог Gradium'],
['Snapdragon 8 Elite Gen 5','CPU Oryon','7,5 мс','24x','Gradium совместно с Qualcomm'],
['Arm CPU + KleidiAI','Измерено Arm','28 мс','15x','Измерено Arm'],
['NVIDIA L40S','Бэкенд CUDA','5 мс','Не раскрыто','Пресс-релиз Gradium']];
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">
Как Phonon показывает себя в тестах?
Gradium провела слепые попарные тесты прослушивания с участием 1189 оценщиков и 17 270 голосами. В американском английском Phonon 40m получила 2117 Elo, а Phonon 31m — 2098. Kokoro получила 2043, NeuTTS — 2034, а Magpie — 1939.
Точность проверялась на общедоступном наборе сложных предложений. Он содержит по 500 предложений на каждый язык, насыщенных номерами телефонов, электронными адресами и почтовыми индексами. Phonon 31m показала WER 1,70% против 3,50% у Kokoro и 8,71% у NeuTTS Nano.
Встроенная нормализация текста во многом объясняет эту разницу.
На более простом наборе Seed-TTS разрыв сокращается. Phonon 31m показала WER LLM 0,51%, тогда как Kokoro — 0,45%.
Насколько быстро Phonon работает на CPU?
На CPU MacBook Air M5 с 4 потоками Phonon 31m выдаёт первое аудио за 6,9 мс. Скорость работы в 29,9 раза выше реального времени. Kokoro требуется 517 мс, поскольку она не поддерживает потоковую передачу. С Arm KleidiAI и Apple Accelerate Phonon 31m достигает скорости 46,7x относительно реального времени.
На Raspberry Pi 5 Phonon 31m запускается за 38 мс и работает в 3,7 раза быстрее реального времени. По словам Gradium, Kokoro требуется 7 секунд только для запуска на этом устройстве.
На Snapdragon 8 Elite Gen 5 Phonon начинает работу за 7,5 мс при скорости 24x относительно реального времени. На NVIDIA L40S CUDA выдаёт первую речь за 5 мс. Процессору AMD EPYC 7413 требуется 43 мс, согласно пресс-релизу.
Сравнение: Phonon против Kokoro, NeuTTS Nano и Kitten TTS
| Характеристика | Phonon 31m | Phonon 40m multilingual | Kokoro-82M | NeuTTS Nano | Kitten TTS v0.8 |
|---|---|---|---|---|---|
| Разработчик | Gradium | Gradium | hexgrad | Neuphonic | KittenML |
| Параметры | 31M (без токенизатора) | 40M | 82M | ~228,7M всего, ~116,8M активных | 15M / 40M / 80M |
| Веса | 64,5 МБ (q8) | 74,6 МБ (q8) | Не раскрыто | Не раскрыто | от 25 до 80 МБ |
| Языки | Английский | EN, FR, DE, ES, PT | 8 (v1.0) | Английский (коллекция также включает ES, FR, DE) | Английский |
| Лицензия | Apache 2.0 | CC BY-NC 4.0 | Apache 2.0 | NeuTTS Open License 1.0 | Apache 2.0 |
| WER на сложном наборе, EN (оценка Gradium) | 1,70% | 2,11% | 3,50% | 8,71% | 7,40% (вариант не указан) |
| Elo для английского (оценка Gradium) | 2098 | 2097 | 2043 | 2034 | Не тестировалась |
| WER LLM Seed-TTS, EN (оценка Gradium) | 0,51% | 0,48% | 0,45% | 0,62% | Не тестировалась |
| Первое аудио, CPU M5, 4 потока | 6,9 мс | 8,8 мс (архитектура 40m) | 517 мс | Не раскрыто | Не раскрыто |
Данные для строк с результатами тестов взяты из блога Gradium и карточки модели. Данные о размере, языках и лицензии взяты из карточек соответствующих моделей.
Как разработчики могут развернуть Phonon?
Среда выполнения распространяется по лицензии MIT или Apache-2.0. Она поддерживает Rust, Python (pip install ptts), Swift, C, C++ и браузер через phonon-tts. Также поставляются сервер, совместимый с OpenAI, и сервер WebSocket.
Phonon загружается в Transformers, MLX-Audio, Ollama и LM Studio. Клонирование и создание голоса выполняются в Gradium Studio, после чего голос работает локально.
Основные выводы
- Phonon 31m — англоязычная модель синтеза речи на 31 млн параметров и размером 64,5 МБ, распространяемая по лицензии Apache 2.0.
- Заявленный WER на сложном тексте составляет 1,70% против 3,50% у Kokoro.
- Первое аудио появляется за 6,9 мс на CPU MacBook Air M5.
- На Raspberry Pi 5 модель работает в 3,7 раза быстрее реального времени.
- Мультиязычные модели 40m существуют, но распространяются по некоммерческой лицензии.
Ознакомьтесь с техническим блогом, карточкой модели, средой выполнения на GitHub и набором сложных предложений. Все заслуги принадлежат исследователю этого проекта. Также подписывайтесь на нас в Twitter и не забудьте присоединиться к нашему сабреддиту по машинному обучению с более чем 150 тыс. участников и подписаться на нашу рассылку. Стоп! Вы есть в Telegram? Теперь к нам можно присоединиться и в Telegram.
Хотите сотрудничать с нами для продвижения своего репозитория GitHub, страницы на Hugging Face, выпуска продукта, вебинара и т. д.? Свяжитесь с нами
Переведено автоматически с английского. Оригинал статьи — по ссылке ниже.