Добавить поддержку speech-to-text (ASR) моделей

Привет!
@ivan-smetannikov-serokell (https://github.com/ivan-smetannikov-serokell)
Вот обновленный список моделей и гипотез ASR.
Исследование аудиоверификации Gonka
Цель
Разработайте механизм проверки, который сможет отличить исполнение эталонной большой аудиомодели от исполнения модифицированной, сжатой, квантованной, дистиллированной или замененной модели.
Основная цель — проверка того, что вывод был выполнен с помощью конкретного семейства целевых моделей с ожидаемым числовым поведением.
Трек А (основной)
Крупные LLM-программы в области аудио с открытым исходным кодом
Мотивация
Последние модели аудиоязыка с открытым исходным кодом сочетают в себе понимание звука и генерацию языка в единой архитектуре.
Типичная архитектура:
Аудиокодер → Проектор / Q-Former → Декодер LLM → Текстовые токены
Примеры:
Qwen3-Omni-30B-A3B-Instruct — https://huggingface.co/Qwen/Qwen3-Omni-30B-A3B-Instruct
Qwen2.5-Omni — https://huggingface.co/Qwen/Qwen2.5-Omni-7B
САЛМОНН-13Б — https://github.com/bytedance/SALMONN
Эти модели особенно привлекательны, поскольку они предоставляют тот же тип распределения вероятностей токенов, который обычно используется для оценки и проверки LLM в Gonka.
Гипотеза исследования
Большие аудио LLM создают стабильные вероятностные сигнатуры на тщательно отобранных звуковых подсказках.
Модификации модели, такие как:
квантование
замена архитектуры
внести измеримые изменения в распределения вероятностей токенов.
Конвейер проверки
Шаг 1
Подготовьте тестовый набор аудиозаданий.
Желаемые свойства:
многоязычная речь
шумная речь
перекрывающиеся динамики
длинноконтекстное аудио
двусмысленные высказывания
редкая терминология
Тест должен максимизировать неопределенность декодера и выявить тонкие различия в вероятности.
Также можно использовать тест с открытым исходным кодом, например. https://github.com/revdotcom/speech-datasets
Шаг 2
Выполните вывод по эталонной модели.
Собрать:
сгенерированные токены
токен logprobs
топ-к дистрибутивов
профиль энтропии
вероятность последовательности
Затем сравните артефакты вывода для разных моделей и разного оборудования:
FP16 (FP8) против INT4
A100 против H100
H100 против H100
Ожидаемый результат
Верификатор должен достоверно различать:
эталонная модель
низкобитные квантованные версии
модели-заменители меньшего размера
сохраняя при этом низкий уровень ложноположительных результатов.
Трек B (альтернативный)
Большие модели ASR с открытым исходным кодом
Мотивация
Многие производственные речевые системы используют специализированную архитектуру ASR, а не модели аудиоязыка.
Примеры включают:
Whisper Large V3 — https://huggingface.co/openai/whisper-large-v3
Whisper Large V3 Turbo — https://huggingface.co/openai/whisper-large-v3-turbo
Попугай — https://huggingface.co/nvidia/parakeet-tdt-0.6b-v2
NVIDIA NeMo ASR — https://github.com/NVIDIA/NeMo
Эти системы имеют принципиально другую архитектуру.
Типичный трубопровод:
Аудиокодер → Декодер / Головка CTC → Расшифровка
В результате снятие отпечатков токенов в стиле LLM не подходит.
Требуется отдельная методология проверки.
Гипотеза исследования
Даже когда транскрипты остаются идентичными, модификации модели изменяют доверительные распределения и характеристики правдоподобия последовательностей.
Эти эффекты можно измерить, чтобы выявить подмену модели или агрессивное сжатие.
Конвейер проверки
Шаг 1
Выполните эталонный вывод с помощью подготовленного эталонного теста.
Собрать:
стенограмма
баллы уверенности в словах
вероятность последовательности
кривые временной достоверности
Шаг 2
Вычисление отпечатков пальцев, специфичных для ASR.
Логарифм правдоподобия последовательности
Оценить:
log P(расшифровка | аудио)
Квантованные и дистиллированные модели часто систематически сдвигают это значение.
Профиль уверенности в слове
Проанализируйте распределение достоверности по словам.
Полезная статистика:
имею в виду уверенность
дисперсия
поведение хвоста
Кривая энтропии
Отслеживайте неопределенность во время декодирования.
Различные реализации модели часто создают характерные энтропийные сигнатуры.
Подпись калибровки
Измерьте взаимосвязь между прогнозируемой достоверностью и фактической ошибкой транскрипции. Это часто меняется после квантования или сжатия.
Ожидаемый результат
Верификатор должен различать:
эталонная модель ASR
квантованные развертывания
замещающие архитектуры
даже если окончательная расшифровка остается практически неизменной.

Привет. Мы — команда Serokell (https://serokell.io), и мы хотели бы заняться интеграцией ASR (преобразование речи в текст). Мы рассматриваем это предложение специально для ASR (TTS — это отдельная проблема, и мы оставляем ее здесь в стороне). Ниже: почему ASR хорошо подходит и какие модели, где проверка вывода затруднена, влияние PoC и сетевой нагрузки, а также предлагаемый нами план.
Почему ASR и какие модели
ASR — хорошая первая аудиомодальность для Gonka по трем причинам. Во-первых, насколько нам известно, сегодня ни одна децентрализованная сеть не предлагает стимулирующий ASR, поэтому слот выглядит открытым, а транскрипция является устоявшимся коммерческим рынком. Во-вторых, это добавляется к аппаратному обеспечению, которое уже работает в сети: модели ASR являются более легкими по сравнению с текущими LLM, поэтому графический процессор класса центра обработки данных обеспечивает транскрипцию с высокой пропускной способностью, что делает ASR новой модальностью и источником дохода на уже работающих аппаратных хостах. Дополнительным преимуществом является то, что относительно однородный парк серверов и графических процессоров потенциально облегчает вопрос межаппаратной стабильности журналов, поскольку большинство честных повторов происходит на одном и том же кристалле. И если сеть когда-либо расширится за счет более мелких моделей, малая занимаемая площадь ASR будет проще для новых хостов. В-третьих, выходные данные представляют собой последовательность токенов, которая является предварительным условием для повторного использования проверки logprob-distance в Gonka вообще.
Этот третий пункт несет в себе архитектурное ограничение, о котором следует четко говорить. Современный ASR делится на три семейства:
- Авторегрессионный кодер-декодер (Whisper): аудиокодер conv+transformer использует спектрограмму log-Mel, а декодер-трансформер авторегрессионно генерирует текстовые токены посредством перекрестного внимания. Существуют пробные журналы для каждого токена, и принуждение учителей четко определено. Это семейство совместимо с текущим потоком проверки.
- Audio-LLM (Qwen3-ASR, Voxtral): аудиокодер + адаптер проецирует звук в пространство встраивания стандартного LLM, предназначенного только для декодера, который затем декодирует текст. Выходная сторона — обычный LLM-декодер. Это семейство также совместимо с проверкой.
- Преобразователи CTC/RNN-T/TDT (NVIDIA Parakeet/Canary): кадрово-синхронное декодирование по решетке выравнивания с преобладанием пробелов, без распределения по текстовым токенам, обусловленного предшествующим текстом. Это самые быстрые модели в таблицах лидеров (RTFx ~ 2700–3400, в 10–100 раз больше семейств AR), но они несовместимы с текущими требованиями учителей по принудительному_токенам. Для их проверки потребуется другая метрика (оценка решетки/принудительного выравнивания), то есть отдельная исследовательская работа, выходящая за рамки, по крайней мере, на данный момент.
Таким образом, самая быстрая архитектура ASR — это именно та, которую Gonka не может дешево проверить. Наши рекомендуемые кандидаты на данный момент — Qwen3-ASR-1.7B в качестве основной цели (точность открытия SOTA, ~1,6%/3,4% WER на LibriSpeech test-clean/test-other, Apache-2.0, поддерживаемая конечной точкой транскрипции vLLM и декодер в стиле LLM, который соответствует существующему механизму проверки) и Whisper-large-v3 в качестве открытой базовой версии (MIT, широко используемый, ~2,0%/3,6% WER) для пороговой калибровки между графическими процессорами, которую более широкое сообщество может воспроизвести независимо. Теоретически один порт Enforced_tokens охватывает обе модели, поскольку обе являются моделями авторегрессионного декодера. Если более полное заполнение большого графического процессора является приоритетом, существуют более тяжелые аудио-LLM, такие как Voxtral-Small-24B, хотя лидеры по точности невелики, поэтому лучшим использованием большого оборудования здесь является высокая пакетная пропускная способность.
Валидация
Большая часть работы, включая одну неизвестную с технической точки зрения, находится в этом разделе.
Сегодня существует только обслуживающий уровень. Форк Gonka vLLM уже включает модуль voice_to_text/, реализующий /v1/audio/transcriptions , но это исходный код vLLM. Таким образом, вы можете предоставить стенограмму, но не хватает всего, что превращает обслуживание в модальность сети Gonka: запуск модели и доказательство ее честного запуска, перенаправление к ней платных запросов и вознаграждение за работу:
- Проверка: в этом вся суть. Gonka проверяет вывод, воспроизводя его с принудительной форсировкой учителя_tokens и сравнивая распределения logprob, но эта инфраструктура (vllm/validation.py, переопределение сэмплера в vllm/v1/sample/, переключатель logprobs_mode) подключена только к путиchat_completion/. Он не был портирован в voice_to_text/serving.py. Итак, сегодня вы можете предоставить стенограмму, но не можете доказать, что исполнитель действительно запустил модель, а модальность, которую вы не можете проверить, не может быть ненадежной.
- DAPI: нет пути аудиозапроса (нет маршрута, обработки полезной нагрузки или расчетной проводки для аудио), поэтому разработчик вообще не может отправить платный проверенный аудиозапрос.
- В цепочке: нет ModelType (перечисление категорий, LLM, VLM или ASR, обозначающее, какой путь обслуживания/проверки использует модель; поле имени модели уже существует отдельно), нет регистрации модели, нет соглашения о ценах на аудио.
Поскольку модуль voice_to_text/serving и строительные блоки Enforced_tokens (в пути чата) уже существуют, обслуживающая сторона на месте, и работа заключается в добавлении проверки Gonka поверх нее.
Безопасность проверки logprob Gonka основана на свойстве, которое мы наблюдаем на практике: для развернутых LLM/VLM распределение logprob по токенам от честного оборудования воспроизводится в пределах жесткого, калиброванного допуска, в то время как узел, пропустивший вычисления, не может его воспроизвести. ASR усложняет гарантию воспроизводимости, и проблема заключается на стороне ввода: аудиовход сначала проходит через аппаратно-чувствительный конвейер с плавающей запятой, прежде чем будет создан какой-либо logprob.
Текстовые входные данные LLM — это идентификаторы токенов: дискретные, точно воспроизводимые. Входные данные ASR — это необработанный звук, который проходит через интерфейс с большим количеством операций с плавающей запятой, которого нет в текстовых моделях: декодирование/ресэмплирование -> мел-спектрограмма -> сверточный стебель -> аудиокодер преобразователя -> перекрестное внимание на декодер. Каждый этап выполняется с плавающей запятой и чувствителен к архитектуре (свертки и сокращения cuDNN не идентичны по битам для разных поколений графических процессоров или форм пакетов). Enforced_tokens закрепляет путь токена декодера, но ничего не делает с кодировщиком. Таким образом, оставшаяся разница в измерении расстояния L1 валидатора для ASR составляет:
Различия с плавающей запятой декодера + разницы с плавающей запятой кодера/интерфейсного интерфейса, переносимые через перекрестное внимание.
Для текста этот второй член структурно равен нулю (текстовая модель не имеет кодировщика и предварительной обработки входных данных с плавающей запятой, поэтому перед декодером ничего не может отличаться), поэтому результат LLM «устанавливается». Для ASR оно присутствует и неизмеримо. Существует прямой прецедент: это тот же класс проблем, который, как показала работа VLM, можно решить: VLM имеет визуальный кодировщик с тем же символом, а тесты #1026 (https://github.com/gonka-ai/gonka/issues/1026)/PR #1150 (https://github.com/gonka-ai/gonka/pull/1150) сообщают об обнаружении мошенничества примерно на 99%. Две вещи также работают в нашу пользу: перекрестное внимание усредняется по многим позициям кодировщика, что уменьшает небольшие различия между кодировщиками, а в конструкции аудио-LLM выходной сигнал кодера проходит через весь стек LLM и повторно нормализуется на каждом уровне. Это причины ожидать, что честное разброс между графическими процессорами будет небольшим, но это аргументы в пользу того, как работает модель, и это число еще предстоит измерить. Измерение честного разброса logprob между графическими процессорами (и подтверждение того, что он остается ниже того, что достигает дешевая подделка) решает, жизнеспособн ли весь подход, и это первое, что мы должны сделать.
Проблема канонизации ввода. Аудио не имеет канонической формы байтов: один и тот же звук, как WAV, так и MP3, с разными частотами дискретизации дает разные байты и разные функции мелирования. Два честных узла, которые декодируют/пересчитывают по-разному, будут подавать в модель разные аудио и не соглашаться, создавая именно ту разницу, которую валидатор должен воспринимать как мошенничество. Таким образом, протокол должен требовать канонического ввода перед хешированием и перед моделью: декодировать в фиксированный формат (например, 16 кГц моно PCM) с закрепленным алгоритмом передискретизации и закрепленными параметрами mel, хешировать канонический PCM (а не отправленный контейнер) и распределять этот артефакт как по исполнителю, так и по валидатору. Для ввода текста этот шаг никогда не требовался.
Одно конкретное осложнение Шепота. Шепот разделяет длинный звук на границах тишины; разное оборудование может располагаться в разных точках разделения из-за округления FP при обнаружении тишины, что изменяет границы фрагментов и нарушает принуждение учителя. Исправление: сохраняйте явные временные метки фрагментов в полезных данных, чтобы валидатор воспроизводился с идентичными границами вместо повторного запуска обнаружения тишины.
Наш подход: расширить существующую проверку logprob на аудио. Мы сохраняем текущий метод доказательства вычислений Gonka: CompareLogits, конвейер калибровки SPRT и значение validation_threshold для каждой модели — все применяются без изменений. Здесь есть две работы:
- Изменение кода: перенос принудительного преподавания Enforced_tokens на путь кодер-декодер. Это отражает существующую реализацию пути чата и имеет хорошую область применения.
- Эмпирическое исследование по установке validation_threshold. Порог должен быть измерен эмпирически. Мы запускаем обе модели-кандидаты на нескольких типах графических процессоров, расшифровываем набор речевых данных под принуждением учителя, собираем распределения logprob для каждого токена, измеряем, насколько далеко расходится честное оборудование (диапазон честности), генерируем сценарии мошенничества (меньшая/квантованная/неправильная модель), чтобы получить диапазон мошенничества, и запускаем калибровку SPRT, чтобы найти порог, который разделяет эти две модели, если таковой существует. Это более масштабная из двух задач, которая несет в себе наибольший риск; это то, что охватывает Фаза 1 ниже.
Если это исследование покажет, что диапазон честной логарифмической вероятности узок, но не равен нулю, то запасной вариант представляет собой гибрид: более свободный порог, подкрепленный периодическим полным повторным выполнением.
Доказательство вычислений
PoC не нуждается в новой инфраструктуре: многомодельная инфраструктура PoC ( PoCModelConfig ) уже не зависит от модальности.
Фаза 1 (без новой инфраструктуры). Хосты ASR выполняют существующий спринт PoC точно так же, как это делают сегодня хосты VLM. Возможности ASR доказываются путем проверки вывода. Это позволит включить ASR в цепочку без какой-либо новой работы PoC.
Фаза 2 (отдельный GIP, позже): спринт, ориентированный на аудио, который отражает сегодняшний спринт по генерации токенов: в фиксированном временном окне хост расшифровывает как можно больше эталонного аудио, а пропускная способность измеряется и проверяется так же, как и текущий спринт (как мы понимаем текущий PoC), поэтому хост не может просто сообщить об этом самостоятельно. Эталонный звук должен быть непредсказуемым (например, полученным из хеша недавнего блока и вращающимся в каждой эпохе), чтобы его нельзя было предварительно расшифровать и кэшировать. PoCModelConfig.seq_len можно изменить в зависимости от длины клипа. Формула веса также должна учитывать форму пропускной способности ASR: у кодера фиксированная стоимость за 30-секундное окно, а у декодера масштабирование в зависимости от длины транскрипта. Это остается открытым вопросом проектирования Фазы 2.
Блокчейн и нагрузка на сеть
Ончейн: практически не изменился. Мы не помещаем в цепочку аудио, только существующие хеши/коммитты. Изменение протокола вывода не требуется, если мы используем синтетическое количество токенов: Prompt_token_count = ceil(duration_секунды × 50) . Цены и ограничитель пропускной способности работают без изменений в соответствии с этим соглашением, а условное депонирование соответствует существующей модели devshard: разработчик депонирует заранее, при необходимости делает выводы относительно хостов devshard, затем производит расчет и возвращает остаток. Звук движется по тому же принципу, если его цена определяется по продолжительности. Никаких изменений в model.proto также не требуется: модель может быть помечена как ASR по соглашению (флаг транскрипции --task в model_args плюс тип аудиоконтента в сохраненной полезной нагрузке), и именно так валидатор будет знать, что нужно воспроизвести по пути аудио, а не по пути чата. Насколько мы можем судить, именно так сегодня обращаются с VLM. Перечисление ModelType в model.proto было бы более чистым и явным способом пометить его (и в то же время правильно пометить VLM) за счет изменения прототипа и миграции состояния, но необязательно.
Офчейн: нагрузка растет. Аудио-полезные данные намного тяжелее текстовых, поэтому увеличивается как объем памяти, так и трафик. Мы будем хранить аудио в хранилище объектов с адресацией по содержимому (гибридный бэкэнд в Managed_storage.go уже поддерживает это); при размерах аудио встроенный Postgres BYTEA будет раздувать таблицы. Валидаторы извлекают аудиобайты только для тех выводов, которые они фактически проверяют. При типичной частоте выборки при проверке (~ 5–10%) объем за эпоху остается управляемым; Увеличение размера полезной нагрузки — это главное, что нужно планировать.
DAPI — самое сложное изменение инфраструктуры. Аудио использует multipart/form-data (двоичную загрузку), тогда как чат использует application/json, поэтому ему нужен новый post_audio_handler.go; метод ModifyRequestBody(), ориентированный на JSON, не охватывает составные части. Прокси-сервер MLNode уже дословно пересылает каждый путь /v1/*, поэтому никаких изменений здесь не требуется. Путь devshard требует одинаковой обработки в аналогичной области: валидаторы цепочки и devshard используют одну среду выполнения (shared_runtime.go), поэтому ветвь проверки звука записывается один раз для обоих, а в противном случае devshard просто нужна новая модель и ее цена на основе продолжительности, следуя текущему потоку.
Предлагаемый план
Мы хотели бы собрать для этого команду и перейти от исследований к интеграции. Предварительный план:
- Сначала исследуйте и снижайте риски. Запустите эксперимент по стабильности logprob между графическими процессорами, который решит, работает ли подход logprob для ASR: запустите Qwen3-ASR-1.7B и Whisper-large-v3 для всех типов графических процессоров парка под принуждением учителя, измерьте, насколько честные прогоны расходятся с тем, что дает более дешевая/неправильная модель, и проверьте, разделяет ли их единый порог. Определите порог проверки, контракт канонизации ввода и окончательный выбор модели. Это основной решающий эксперимент, он не требует изменений в форке или протоколе, и мы опубликуем результаты, прежде чем переходить к остальным.
- Реализуйте дизайн на основе полученных результатов. Добавляем тесты и документацию по ходу дела: переносим Enforced_tokens в путь транскрипции в ответвлении vLLM, добавляем обработчик звука DAPI и ветку проверки ASR, а также подключаем хранилище полезной нагрузки аудио.
- Напишите интеграционные тесты (testermint), охватывающие счастливые и несчастливые пути, включая хосты, которые пытаются обмануть проверку (поддельные или более дешевые стенограммы).
- Задокументируйте передачу сообществу и команде Gonka, а также отправьте регистрацию модели и любые предложения по управлению.
- [Необязательно] Обеспечьте постоянную поддержку и обслуживание модальности ASR.
Мы начнем с шага 1 независимо и поделимся результатами, прежде чем идти дальше. Если у команды Лаборатории машинного интеллекта ( @fedor-konovalенко (https://github.com/fedor-konovalko)) есть активные планы ASR, мы будем рады скоординировать разделение работы. Особенно приветствуются отзывы о подходе, моделях-кандидатах и воротах проверки.

Привет!
@ivan-smetannikov-serokell (https://github.com/ivan-smetannikov-serokell)
Вот обновленный список моделей и гипотез ASR.
Исследование аудиоверификации Gonka
Цель
Разработайте механизм проверки, который сможет отличить исполнение эталонной большой аудиомодели от исполнения модифицированной, сжатой, квантованной, дистиллированной или замененной модели.
Основная цель — проверка того, что вывод был выполнен с помощью конкретного семейства целевых моделей с ожидаемым числовым поведением.
Трек А (основной)
Крупные LLM-программы в области аудио с открытым исходным кодом
Мотивация
Последние модели аудиоязыка с открытым исходным кодом сочетают в себе понимание звука и генерацию языка в единой архитектуре.
Типичная архитектура:
Аудиокодер → Проектор / Q-Former → Декодер LLM → Текстовые токены
Примеры:
Qwen3-Omni-30B-A3B-Instruct — https://huggingface.co/Qwen/Qwen3-Omni-30B-A3B-Instruct
Qwen2.5-Omni — https://huggingface.co/Qwen/Qwen2.5-Omni-7B
САЛМОНН-13Б — https://github.com/bytedance/SALMONN
Эти модели особенно привлекательны, поскольку они предоставляют тот же тип распределения вероятностей токенов, который обычно используется для оценки и проверки LLM в Gonka.
Гипотеза исследования
Большие аудио LLM создают стабильные вероятностные сигнатуры на тщательно отобранных звуковых подсказках.
Модификации модели, такие как:
квантование
замена архитектуры
внести измеримые изменения в распределения вероятностей токенов.
Конвейер проверки
Шаг 1
Подготовьте тестовый набор аудиозаданий.
Желаемые свойства:
многоязычная речь
шумная речь
перекрывающиеся динамики
длинноконтекстное аудио
двусмысленные высказывания
редкая терминология
Тест должен максимизировать неопределенность декодера и выявить тонкие различия в вероятности.
Также можно использовать тест с открытым исходным кодом, например. https://github.com/revdotcom/speech-datasets
Шаг 2
Выполните вывод по эталонной модели.
Собрать:
сгенерированные токены
токен logprobs
топ-к дистрибутивов
профиль энтропии
вероятность последовательности
Затем сравните артефакты вывода для разных моделей и разного оборудования:
FP16 (FP8) против INT4
A100 против H100
H100 против H100
Ожидаемый результат
Верификатор должен достоверно различать:
эталонная модель
низкобитные квантованные версии
модели-заменители меньшего размера
сохраняя при этом низкий уровень ложноположительных результатов.
Трек B (альтернативный)
Большие модели ASR с открытым исходным кодом
Мотивация
Многие производственные речевые системы используют специализированную архитектуру ASR, а не модели аудиоязыка.
Примеры включают:
Whisper Large V3 — https://huggingface.co/openai/whisper-large-v3
Whisper Large V3 Turbo — https://huggingface.co/openai/whisper-large-v3-turbo
Попугай — https://huggingface.co/nvidia/parakeet-tdt-0.6b-v2
NVIDIA NeMo ASR — https://github.com/NVIDIA/NeMo
Эти системы имеют принципиально другую архитектуру.
Типичный трубопровод:
Аудиокодер → Декодер / Головка CTC → Расшифровка
В результате снятие отпечатков токенов в стиле LLM не подходит.
Требуется отдельная методология проверки.
Гипотеза исследования
Даже когда транскрипты остаются идентичными, модификации модели изменяют доверительные распределения и характеристики правдоподобия последовательностей.
Эти эффекты можно измерить, чтобы выявить подмену модели или агрессивное сжатие.
Конвейер проверки
Шаг 1
Выполните эталонный вывод с помощью подготовленного эталонного теста.
Собрать:
стенограмма
баллы уверенности в словах
вероятность последовательности
кривые временной достоверности
Шаг 2
Вычисление отпечатков пальцев, специфичных для ASR.
Логарифм правдоподобия последовательности
Оценить:
log P(расшифровка | аудио)
Квантованные и дистиллированные модели часто систематически сдвигают это значение.
Профиль уверенности в слове
Проанализируйте распределение достоверности по словам.
Полезная статистика:
имею в виду уверенность
дисперсия
поведение хвоста
Кривая энтропии
Отслеживайте неопределенность во время декодирования.
Различные реализации модели часто создают характерные энтропийные сигнатуры.
Подпись калибровки
Измерьте взаимосвязь между прогнозируемой достоверностью и фактической ошибкой транскрипции. Это часто меняется после квантования или сжатия.
Ожидаемый результат
Верификатор должен различать:
эталонная модель ASR
квантованные развертывания
замещающие архитектуры
даже если окончательная расшифровка остается практически неизменной.

Hello. We're a team at Serokell (https://serokell.io) and we'd like to take on the ASR (speech-to-text) integration. We're scoping this proposal to ASR specifically (TTS is a separate problem and we're leaving it aside here). Below: why ASR is a good fit and which models, where inference validation gets hard, PoC and network-load impact, and our proposed plan.
Why ASR, and which models
ASR is a good first audio modality for Gonka for three reasons. First, as far as we know, no decentralized network offers incentivized ASR today, so the slot looks open, and transcription is an established commercial market. Second, it's additive on the hardware the network already runs: ASR models are light relative to the current LLMs, so a datacenter-class GPU serves transcription at high throughput, which makes ASR a new modality and revenue stream on hardware hosts already run. As a side benefit, a relatively homogeneous server-GPU fleet makes the cross-hardware logprob-stability question potentially easier since most honest replays happen on similar silicon. And if the network ever broadens to smaller models, ASR's light footprint is easier to handle for new hosts. Third, the output is a token sequence, which is the precondition for reusing Gonka's logprob-distance validation at all.
That third point carries an architectural constraint the discussion should be explicit about. Modern ASR splits into three families:
- Autoregressive encoder-decoder (Whisper): a conv+transformer audio encoder consumes a log-Mel spectrogram, and a transformer decoder autoregressively emits text tokens via cross-attention. Per-token logprobs exist and teacher-forcing is well-defined. This family is validation-compatible with the current flow.
- Audio-LLM (Qwen3-ASR, Voxtral): an audio encoder + adapter projects audio into the embedding space of a stock decoder-only LLM, which then decodes text. The output side is an ordinary LLM decoder. This family is also validation-compatible.
- CTC / RNN-T / TDT transducers (NVIDIA Parakeet/Canary): frame-synchronous decoding over a blank-dominated alignment lattice, with no per-text-token distribution conditioned on prior text. These are the fastest models on the leaderboards (RTFx ~2,700–3,400, 10–100× the AR families), but they are not compatible with the current enforced_tokens teacher-forcing. Validating them would need a different metric (lattice/forced-alignment scoring), i.e. a separate research effort and out of scope, at least for now.
So the fastest ASR architecture is precisely the one Gonka cannot cheaply validate. Our recommended candidates for now are Qwen3-ASR-1.7B as the primary target (SOTA-open accuracy, ~1.6%/3.4% WER on LibriSpeech test-clean/test-other, Apache-2.0, supported by vLLM's transcription endpoint, and an LLM-style decoder that matches the existing validation machinery) and Whisper-large-v3 as an open baseline (MIT, widely used, ~2.0%/3.6% WER) for cross-GPU threshold calibration that the wider community can independently reproduce. In theory, a single enforced_tokens port covers both, since both are autoregressive-decoder models. If filling a large GPU more fully is a priority, heavier audio-LLMs like Voxtral-Small-24B exist, though the accuracy leaders are small, so the better use of big hardware here is high-batch throughput.
Validation
Most of the work, and the one open technical unknown, is in this section.
Only the serving layer exists today. The Gonka vLLM fork already ships a speech_to_text/ module implementing /v1/audio/transcriptions , but that is upstream vLLM code. So you can serve a transcript but what's missing is everything that turns serving into a Gonka network modality: running a model and proving it was run honestly, routing paid requests to it, and rewarding the work:
- Validation : the whole point. Gonka verifies inference by replaying it with enforced_tokens teacher-forcing and comparing logprob distributions, but that infrastructure ( vllm/validation.py , the sampler overrides in vllm/v1/sample/ , the logprobs_mode switch) is wired into the chat_completion/ path only. It has not been ported to speech_to_text/serving.py . So today you can serve a transcript but cannot prove the executor actually ran the model, and a modality you can't validate can't be trustless.
- DAPI : there's no audio request path (no route, payload handling, or settlement wiring for audio), so a developer can't submit a paid, validated audio request at all.
- On-chain : no ModelType (a category enum, LLM vs VLM vs ASR, marking which serving/validation path a model uses; the model-name field already exists separately), no model registration, no audio pricing convention.
Because the speech_to_text/ serving module and the enforced_tokens building blocks (on the chat path) already exist, the serving side is in place and the work is adding Gonka's validation on top.
Gonka's logprob validation security rests on a property we observe in practice: for the deployed LLMs/VLMs, the per-token logprob distribution from honest hardware is reproducible within a tight, calibrated tolerance, while a node that skipped the compute can't reproduce it. ASR makes that reproducibility harder to guarantee, and the problem is on the input side: the audio input first runs through a hardware-sensitive floating-point pipeline before any logprob is produced.
A text LLM's input is token IDs: discrete, exactly reproducible. ASR's input is raw audio that passes through a float-heavy front-end that text models don't have: decode/resample -> mel-spectrogram -> convolutional stem -> transformer audio encoder -> cross-attention into the decoder. Every stage is floating-point and architecture-sensitive (cuDNN convolutions and reductions are not bit-identical across GPU generations or batch shapes). enforced_tokens pins the decoder token path but does nothing to the encoder . So the leftover difference the validator's L1 distance measures for ASR is:
decoder float differences + encoder/front-end float differences carried in through cross-attention.
For text, that second term is structurally zero (a text model has no encoder and no float preprocessing of its input, so nothing before the decoder can differ), which is why the LLM result is "settled." For ASR it's present and unmeasured . There is a direct precedent: this is the same class of problem the VLM work has shown to be tractable: a VLM has a visual encoder with the same character, and the #1026 (https://github.com/gonka-ai/gonka/issues/1026) / PR #1150 (https://github.com/gonka-ai/gonka/pull/1150) benchmarks report ~99% fraud detection. Two things also work in our favor: cross-attention averages over many encoder positions, which shrinks small encoder differences, and in the audio-LLM design the encoder output passes through the full LLM stack and is re-normalized at every layer. These are reasons to expect the honest cross-GPU spread to be small, but they are arguments from how the model works, and the number still has to be measured. Measuring the honest cross-GPU logprob spread (and confirming it stays below what a cheap fake achieves) decides whether the whole approach is viable, and it's the first thing we'd do.
Input canonicalization problem. Audio has no canonical byte form: the same sound as WAV vs MP3 vs different sample rates yields different bytes and different mel features. Two honest nodes that decode/resample differently will feed the model different audio and disagree, creating exactly the difference the validator is meant to read as fraud. So the protocol must mandate a canonical input before hashing and before the model: decode to a fixed format (e.g. 16 kHz mono PCM) with a pinned resampling algorithm and pinned mel parameters , hash the canonical PCM (not the submitted container), and distribute that artifact to executor and validator alike. Text inputs never needed this step.
One concrete Whisper complication. Whisper splits long audio at silence boundaries; different hardware can land on different split points due to FP rounding in silence detection, which changes the chunk boundaries and breaks teacher-forcing. Fix: store explicit chunk timestamps in the payload so the validator replays with identical boundaries instead of re-running silence detection.
Our approach: extend the existing logprob validation to audio. We keep Gonka's current proof-of-compute method: CompareLogits , the SPRT calibration pipeline, and the per-model validation_threshold all apply unchanged. There are two pieces of work here:
- A code change : porting the enforced_tokens teacher-forcing to the encoder-decoder path. This mirrors the existing chat-path implementation and is well-scoped.
- An empirical study to set the validation_threshold . The threshold has to be measured empirically. We run both candidate models across several GPU types, transcribe a speech dataset under teacher-forcing, collect the per-token logprob distributions, measure how far honest hardware diverges (the honest band ), generate fraud scenarios (smaller/quantized/wrong model) to get a fraud band , and run SPRT calibration to find a threshold that separates the two, if one exists. This is the larger of the two tasks and carries most of the risk; it is what Phase 1 below covers.
If that study shows the honest logprob band is narrow but nonzero , the fallback is a hybrid: a looser threshold backed by occasional full re-execution.
Proof of Compute
PoC needs no new infrastructure: the multi-model PoC infrastructure ( PoCModelConfig ) is already modality-agnostic.
Phase 1 (no new infrastructure): ASR hosts run the existing PoC sprint, exactly as VLM hosts do today. ASR-specific capability is proven through inference validation. This gets ASR on-chain without any new PoC work.
Phase 2 (separate GIP, later): an audio-specific sprint that mirrors today's token-generation sprint: in a fixed time window a host transcribes as much reference audio as it can, and the throughput is measured and validated the same way the current sprint is (as we understand the current PoC), so a host can't just self-report it. The reference audio has to be unpredictable (e.g. derived from a recent block hash and rotated each epoch) so it can't be pre-transcribed and cached. PoCModelConfig.seq_len can be repurposed for the clip length. The weight formula also has to account for ASR's throughput shape: the encoder is a fixed cost per 30-second window while the decoder scales with transcript length. This stays an open Phase-2 design question.
Blockchain and network load
On-chain: essentially unchanged. We do not put audio on the chain, only the existing hashes/commitments. No Inference proto change is needed if we use a synthetic token count: prompt_token_count = ceil(duration_seconds × 50) . Pricing and the bandwidth-limiter work unchanged with that convention, and escrow follows the existing devshard model: the developer escrows up front, runs inferences against devshard hosts as needed, then settles and is refunded the remainder. Audio rides that same flow once it's priced by duration. No model.proto change is strictly required either: a model can be marked as ASR by convention (a --task transcription flag in model_args plus the audio content-type on the stored payload), which is how the validator would know to replay over the audio path instead of the chat path. As far as we can tell, this is how VLM is handled today. A ModelType enum in model.proto would be the cleaner, explicit way to mark it (and would label VLM properly at the same time), at the cost of a proto change and a state migration, but optional.
Off-chain: the load grows. Audio payloads are much heavier than text, so both storage and traffic increase. We'd store audio in a content-addressed object store (the hybrid backend in managed_storage.go already supports this); at audio sizes, inline Postgres BYTEA would bloat the tables. Validators fetch audio bytes only for the inferences they actually validate. At typical validation sample rates (~5–10%) the per-epoch volume stays manageable; the per-payload size increase is the main thing to plan for.
DAPI is the most complex infrastructure change. Audio uses multipart/form-data (a binary upload) where chat uses application/json , so it needs a new post_audio_handler.go ; the JSON-oriented ModifyRequestBody() doesn't cover multipart. MLNode's proxy already forwards every /v1/* path verbatim, so no changes are needed there . The devshard path needs the same treatment at similar scope: the chain and devshard validators share one runtime ( shared_runtime.go ), so the audio validation branch is written once for both, and the devshard otherwise just needs the new model and its duration-based pricing, following the current flow.
Proposed plan
We'd like to put a team on this and take it from research through integration. A tentative plan:
- Research and de-risk first. Run the cross-GPU logprob-stability experiment that decides whether the logprob approach works for ASR: run Qwen3-ASR-1.7B and Whisper-large-v3 across the fleet's GPU types under teacher-forcing, measure how far honest runs diverge versus what a cheaper/wrong model produces, and check that a single threshold separates them. Settle the validation threshold, the input-canonicalization contract, and the final model choice. This is the main deciding experiment, it needs no fork or protocol changes, and we'd publish the results before committing to the rest.
- Implement the design based on findings. Adding tests and documentation as we go: port enforced_tokens to the transcription path in the vLLM fork, add the DAPI audio handler and the ASR validation branch, and wire audio payload storage.
- Write integration tests (testermint), covering happy and unhappy paths, including hosts that try to cheat validation (faked or cheaper-model transcripts).
- Document the handoff to the community and the Gonka team, and submit the model registration and any governance proposal.
- [Optional] Provide ongoing support and maintenance for the ASR modality.
We'd start with step 1 independently and share the results before going further. If the Machine Intelligence Lab team ( @fedor-konovalenko (https://github.com/fedor-konovalenko) ) has active ASR plans, we'd welcome coordinating on where the work splits. Feedback on the approach, the candidate models, and the validation gate is especially welcome.

Hi!
@ivan-smetannikov-serokell (https://github.com/ivan-smetannikov-serokell)
Here is an updated list of ASR models and hypotheses
Gonka Audio Verification Research
Objective
Develop a verification mechanism that can distinguish execution on a reference large audio model from execution on a modified, compressed, quantized, distilled, or substituted model.
The primary goal is verification that inference was performed by a specific target model family with expected numerical behavior.
Track A (Primary)
Large Open-Source Audio LLMs
Motivation
Recent open-source audio-language models combine audio understanding and language generation in a single architecture.
Typical architecture:
Audio Encoder → Projector / Q-Former → LLM Decoder → Text Tokens
Examples:
Qwen3-Omni-30B-A3B-Instruct — https://huggingface.co/Qwen/Qwen3-Omni-30B-A3B-Instruct
Qwen2.5-Omni — https://huggingface.co/Qwen/Qwen2.5-Omni-7B
SALMONN-13B — https://github.com/bytedance/SALMONN
These models are especially attractive because they expose the same type of token probability distributions that are commonly used for LLM evaluation and validation in Gonka.
Research Hypothesis
Large audio LLMs produce stable probability signatures on carefully selected audio prompts.
Model modifications such as:
quantization
architecture replacement
introduce measurable changes in token probability distributions.
Validation Pipeline
Step 1
Prepare a benchmark set of audio challenges.
Desired properties:
multilingual speech
noisy speech
overlapping speakers
long-context audio
ambiguous utterances
rare terminology
The benchmark should maximize decoder uncertainty and expose subtle probability differences.
Also it is possible to use open source benchmark, e.g. https://github.com/revdotcom/speech-datasets
Step 2
Run inference on the reference model.
Collect:
generated tokens
token logprobs
top-k distributions
entropy profile
sequence likelihood
Then compare inference artifacts for different models and different hardware:
FP16 (FP8) vs INT4
A100 vs H100
H100 vs H100
Expected Outcome
The verifier should reliably distinguish:
reference model
low-bit quantized versions
smaller substitute models
while maintaining a low false-positive rate.
Track B (Alternative)
Large Open-Source ASR Models
Motivation
Many production speech systems use dedicated ASR architectures rather than audio-language models.
Examples include:
Whisper Large V3 — https://huggingface.co/openai/whisper-large-v3
Whisper Large V3 Turbo — https://huggingface.co/openai/whisper-large-v3-turbo
Parakeet — https://huggingface.co/nvidia/parakeet-tdt-0.6b-v2
NVIDIA NeMo ASR — https://github.com/NVIDIA/NeMo
These systems follow a fundamentally different architecture.
Typical pipeline:
Audio Encoder → Decoder / CTC Head → Transcript
As a result, LLM-style token fingerprinting is not appropriate.
A separate validation methodology is required.
Research Hypothesis
Even when transcripts remain identical, model modifications alter confidence distributions and sequence likelihood characteristics.
These effects can be measured to identify model substitution or aggressive compression.
Validation Pipeline
Step 1
Run reference inference with prepared benchmark.
Collect:
transcript
word confidence scores
sequence likelihood
temporal confidence curves
Step 2
Compute ASR-specific fingerprints.
Sequence Log-Likelihood
Evaluate:
log P(transcript | audio)
Quantized and distilled models often shift this value systematically.
Word Confidence Profile
Analyze confidence distributions across words.
Useful statistics:
mean confidence
variance
tail behavior
Entropy Curve
Track uncertainty throughout decoding.
Different model implementations often produce characteristic entropy signatures.
Calibration Signature
Measure relationship between predicted confidence and actual transcription error. This often changes after quantization or compression.
Expected Outcome
The verifier should distinguish:
reference ASR model
quantized deployments
substitute architectures
even when the final transcript remains largely unchanged.
Привет. Мы — команда Serokell (https://serokell.io), и мы хотели бы заняться интеграцией ASR (преобразование речи в текст). Мы рассматриваем это предложение специально для ASR (TTS — это отдельная проблема, и мы оставляем ее здесь в стороне). Ниже: почему ASR хорошо подходит и какие модели, где проверка вывода затруднена, влияние PoC и сетевой нагрузки, а также предлагаемый нами план.
Почему ASR и какие модели
ASR — хорошая первая аудиомодальность для Gonka по трем причинам. Во-первых, насколько нам известно, сегодня ни одна децентрализованная сеть не предлагает стимулирующий ASR, поэтому слот выглядит открытым, а транскрипция является устоявшимся коммерческим рынком. Во-вторых, это добавляется к аппаратному обеспечению, которое уже работает в сети: модели ASR являются более легкими по сравнению с текущими LLM, поэтому графический процессор класса центра обработки данных обеспечивает транскрипцию с высокой пропускной способностью, что делает ASR новой модальностью и источником дохода на уже работающих аппаратных хостах. Дополнительным преимуществом является то, что относительно однородный парк серверов и графических процессоров потенциально облегчает вопрос межаппаратной стабильности журналов, поскольку большинство честных повторов происходит на одном и том же кристалле. И если сеть когда-либо расширится за счет более мелких моделей, малая занимаемая площадь ASR будет проще для новых хостов. В-третьих, выходные данные представляют собой последовательность токенов, которая является предварительным условием для повторного использования проверки logprob-distance в Gonka вообще.
Этот третий пункт несет в себе архитектурное ограничение, о котором следует четко говорить. Современный ASR делится на три семейства:
Таким образом, самая быстрая архитектура ASR — это именно та, которую Gonka не может дешево проверить. Наши рекомендуемые кандидаты на данный момент — Qwen3-ASR-1.7B в качестве основной цели (точность открытия SOTA, ~1,6%/3,4% WER на LibriSpeech test-clean/test-other, Apache-2.0, поддерживаемая конечной точкой транскрипции vLLM и декодер в стиле LLM, который соответствует существующему механизму проверки) и Whisper-large-v3 в качестве открытой базовой версии (MIT, широко используемый, ~2,0%/3,6% WER) для пороговой калибровки между графическими процессорами, которую более широкое сообщество может воспроизвести независимо. Теоретически один порт Enforced_tokens охватывает обе модели, поскольку обе являются моделями авторегрессионного декодера. Если более полное заполнение большого графического процессора является приоритетом, существуют более тяжелые аудио-LLM, такие как Voxtral-Small-24B, хотя лидеры по точности невелики, поэтому лучшим использованием большого оборудования здесь является высокая пакетная пропускная способность.
Валидация
Большая часть работы, включая одну неизвестную с технической точки зрения, находится в этом разделе.
Сегодня существует только обслуживающий уровень. Форк Gonka vLLM уже включает модуль voice_to_text/, реализующий /v1/audio/transcriptions , но это исходный код vLLM. Таким образом, вы можете предоставить стенограмму, но не хватает всего, что превращает обслуживание в модальность сети Gonka: запуск модели и доказательство ее честного запуска, перенаправление к ней платных запросов и вознаграждение за работу:
Поскольку модуль voice_to_text/serving и строительные блоки Enforced_tokens (в пути чата) уже существуют, обслуживающая сторона на месте, и работа заключается в добавлении проверки Gonka поверх нее.
Безопасность проверки logprob Gonka основана на свойстве, которое мы наблюдаем на практике: для развернутых LLM/VLM распределение logprob по токенам от честного оборудования воспроизводится в пределах жесткого, калиброванного допуска, в то время как узел, пропустивший вычисления, не может его воспроизвести. ASR усложняет гарантию воспроизводимости, и проблема заключается на стороне ввода: аудиовход сначала проходит через аппаратно-чувствительный конвейер с плавающей запятой, прежде чем будет создан какой-либо logprob.
Текстовые входные данные LLM — это идентификаторы токенов: дискретные, точно воспроизводимые. Входные данные ASR — это необработанный звук, который проходит через интерфейс с большим количеством операций с плавающей запятой, которого нет в текстовых моделях: декодирование/ресэмплирование -> мел-спектрограмма -> сверточный стебель -> аудиокодер преобразователя -> перекрестное внимание на декодер. Каждый этап выполняется с плавающей запятой и чувствителен к архитектуре (свертки и сокращения cuDNN не идентичны по битам для разных поколений графических процессоров или форм пакетов). Enforced_tokens закрепляет путь токена декодера, но ничего не делает с кодировщиком. Таким образом, оставшаяся разница в измерении расстояния L1 валидатора для ASR составляет:
Для текста этот второй член структурно равен нулю (текстовая модель не имеет кодировщика и предварительной обработки входных данных с плавающей запятой, поэтому перед декодером ничего не может отличаться), поэтому результат LLM «устанавливается». Для ASR оно присутствует и неизмеримо. Существует прямой прецедент: это тот же класс проблем, который, как показала работа VLM, можно решить: VLM имеет визуальный кодировщик с тем же символом, а тесты #1026 (https://github.com/gonka-ai/gonka/issues/1026)/PR #1150 (https://github.com/gonka-ai/gonka/pull/1150) сообщают об обнаружении мошенничества примерно на 99%. Две вещи также работают в нашу пользу: перекрестное внимание усредняется по многим позициям кодировщика, что уменьшает небольшие различия между кодировщиками, а в конструкции аудио-LLM выходной сигнал кодера проходит через весь стек LLM и повторно нормализуется на каждом уровне. Это причины ожидать, что честное разброс между графическими процессорами будет небольшим, но это аргументы в пользу того, как работает модель, и это число еще предстоит измерить. Измерение честного разброса logprob между графическими процессорами (и подтверждение того, что он остается ниже того, что достигает дешевая подделка) решает, жизнеспособн ли весь подход, и это первое, что мы должны сделать.
Проблема канонизации ввода. Аудио не имеет канонической формы байтов: один и тот же звук, как WAV, так и MP3, с разными частотами дискретизации дает разные байты и разные функции мелирования. Два честных узла, которые декодируют/пересчитывают по-разному, будут подавать в модель разные аудио и не соглашаться, создавая именно ту разницу, которую валидатор должен воспринимать как мошенничество. Таким образом, протокол должен требовать канонического ввода перед хешированием и перед моделью: декодировать в фиксированный формат (например, 16 кГц моно PCM) с закрепленным алгоритмом передискретизации и закрепленными параметрами mel, хешировать канонический PCM (а не отправленный контейнер) и распределять этот артефакт как по исполнителю, так и по валидатору. Для ввода текста этот шаг никогда не требовался.
Одно конкретное осложнение Шепота. Шепот разделяет длинный звук на границах тишины; разное оборудование может располагаться в разных точках разделения из-за округления FP при обнаружении тишины, что изменяет границы фрагментов и нарушает принуждение учителя. Исправление: сохраняйте явные временные метки фрагментов в полезных данных, чтобы валидатор воспроизводился с идентичными границами вместо повторного запуска обнаружения тишины.
Наш подход: расширить существующую проверку logprob на аудио. Мы сохраняем текущий метод доказательства вычислений Gonka: CompareLogits, конвейер калибровки SPRT и значение validation_threshold для каждой модели — все применяются без изменений. Здесь есть две работы:
Если это исследование покажет, что диапазон честной логарифмической вероятности узок, но не равен нулю, то запасной вариант представляет собой гибрид: более свободный порог, подкрепленный периодическим полным повторным выполнением.
Доказательство вычислений
PoC не нуждается в новой инфраструктуре: многомодельная инфраструктура PoC ( PoCModelConfig ) уже не зависит от модальности.
Фаза 1 (без новой инфраструктуры). Хосты ASR выполняют существующий спринт PoC точно так же, как это делают сегодня хосты VLM. Возможности ASR доказываются путем проверки вывода. Это позволит включить ASR в цепочку без какой-либо новой работы PoC.
Фаза 2 (отдельный GIP, позже): спринт, ориентированный на аудио, который отражает сегодняшний спринт по генерации токенов: в фиксированном временном окне хост расшифровывает как можно больше эталонного аудио, а пропускная способность измеряется и проверяется так же, как и текущий спринт (как мы понимаем текущий PoC), поэтому хост не может просто сообщить об этом самостоятельно. Эталонный звук должен быть непредсказуемым (например, полученным из хеша недавнего блока и вращающимся в каждой эпохе), чтобы его нельзя было предварительно расшифровать и кэшировать. PoCModelConfig.seq_len можно изменить в зависимости от длины клипа. Формула веса также должна учитывать форму пропускной способности ASR: у кодера фиксированная стоимость за 30-секундное окно, а у декодера масштабирование в зависимости от длины транскрипта. Это остается открытым вопросом проектирования Фазы 2.
Блокчейн и нагрузка на сеть
Ончейн: практически не изменился. Мы не помещаем в цепочку аудио, только существующие хеши/коммитты. Изменение протокола вывода не требуется, если мы используем синтетическое количество токенов: Prompt_token_count = ceil(duration_секунды × 50) . Цены и ограничитель пропускной способности работают без изменений в соответствии с этим соглашением, а условное депонирование соответствует существующей модели devshard: разработчик депонирует заранее, при необходимости делает выводы относительно хостов devshard, затем производит расчет и возвращает остаток. Звук движется по тому же принципу, если его цена определяется по продолжительности. Никаких изменений в model.proto также не требуется: модель может быть помечена как ASR по соглашению (флаг транскрипции --task в model_args плюс тип аудиоконтента в сохраненной полезной нагрузке), и именно так валидатор будет знать, что нужно воспроизвести по пути аудио, а не по пути чата. Насколько мы можем судить, именно так сегодня обращаются с VLM. Перечисление ModelType в model.proto было бы более чистым и явным способом пометить его (и в то же время правильно пометить VLM) за счет изменения прототипа и миграции состояния, но необязательно.
Офчейн: нагрузка растет. Аудио-полезные данные намного тяжелее текстовых, поэтому увеличивается как объем памяти, так и трафик. Мы будем хранить аудио в хранилище объектов с адресацией по содержимому (гибридный бэкэнд в Managed_storage.go уже поддерживает это); при размерах аудио встроенный Postgres BYTEA будет раздувать таблицы. Валидаторы извлекают аудиобайты только для тех выводов, которые они фактически проверяют. При типичной частоте выборки при проверке (~ 5–10%) объем за эпоху остается управляемым; Увеличение размера полезной нагрузки — это главное, что нужно планировать.
DAPI — самое сложное изменение инфраструктуры. Аудио использует multipart/form-data (двоичную загрузку), тогда как чат использует application/json, поэтому ему нужен новый post_audio_handler.go; метод ModifyRequestBody(), ориентированный на JSON, не охватывает составные части. Прокси-сервер MLNode уже дословно пересылает каждый путь /v1/*, поэтому никаких изменений здесь не требуется. Путь devshard требует одинаковой обработки в аналогичной области: валидаторы цепочки и devshard используют одну среду выполнения (shared_runtime.go), поэтому ветвь проверки звука записывается один раз для обоих, а в противном случае devshard просто нужна новая модель и ее цена на основе продолжительности, следуя текущему потоку.
Предлагаемый план
Мы хотели бы собрать для этого команду и перейти от исследований к интеграции. Предварительный план:
Мы начнем с шага 1 независимо и поделимся результатами, прежде чем идти дальше. Если у команды Лаборатории машинного интеллекта ( @fedor-konovalенко (https://github.com/fedor-konovalko)) есть активные планы ASR, мы будем рады скоординировать разделение работы. Особенно приветствуются отзывы о подходе, моделях-кандидатах и воротах проверки.