[Читать газету] [Демо] [Обнимающее лицо]
Moshi — это базовая модель речевого текста и полнодуплексная система разговорного диалога. Он использует Mimi, современный потоковый нейронный аудиокодек. Mimi обрабатывает звук частотой 24 кГц, вплоть до представления 12,5 Гц с полосой пропускания 1,1 кбит/с, в полностью потоковом режиме (задержка 80 мс, размер кадра), но при этом работает лучше, чем существующие непотоковые кодеки, такие как SpeechTokenizer (50 Гц). , 4 кбит/с) или SemantiCodec (50 Гц, 1,3 кбит/с).
Moshi моделирует два потока звука : один соответствует Moshi, а другой — пользователю. При выводе поток пользователя берется с аудиовхода, а поток для Moshi — с выхода модели. По этим двум аудиопотокам Moshi предсказывает текстовые токены, соответствующие его собственной речи, его внутреннему монологу , что значительно повышает качество его генерации. Небольшой преобразователь глубины моделирует зависимости между кодовыми книгами для заданного временного шага, а большой преобразователь времени с параметром 7B моделирует временные зависимости. Moshi достигает теоретической задержки 160 мс (80 мс для размера кадра Mimi + 80 мс акустической задержки), а практическая общая задержка составляет всего 200 мс на графическом процессоре L4.
Поговорите с Моши прямо сейчас в нашей живой демонстрации.
Mimi использует предыдущие нейронные аудиокодеки, такие как SoundStream и EnCodec, добавляя преобразователь как в кодере, так и в декодере, а также адаптируя шаги для соответствия общей частоте кадров 12,5 Гц. Это позволяет Mimi приблизиться к средней частоте кадров текстовых токенов (~3-4 Гц) и ограничить количество шагов авторегрессии в Moshi. Подобно SpeechTokenizer, Mimi использует потери при дистилляции, чтобы первые токены кодовой книги соответствовали самоконтролируемому представлению из WavLM, что позволяет моделировать семантическую и акустическую информацию с помощью одной модели. Интересно, что, хотя Mimi является полностью каузальным и потоковым, он учится достаточно хорошо соответствовать некаузальному представлению из WavLM, не внося никаких задержек. Наконец, как и в случае с EBEN, Mimi использует только состязательную потерю обучения вместе с сопоставлением функций, демонстрируя значительные улучшения с точки зрения субъективного качества, несмотря на низкий битрейт.
В этом репозитории есть три отдельные версии стека вывода moshi.
Версия Python, использующая PyTorch, находится в каталоге moshi/
.
Версия Python, использующая MLX для компьютеров Mac серии M, находится в каталоге moshi_mlx/
.
Версия Rust, используемая в производстве, находится в каталоге rust/
. В частности, он содержит реализацию Mimi на Rust с привязками Python, доступными rustymimi
.
Наконец, код для живой демонстрации находится в каталоге client/
.
Мы выпускаем три модели:
наш речевой кодек Мими,
Моши настроил мужской синтетический голос (Мошико),
Моши настроил женский синтетический голос (Мошика).
В зависимости от серверной части формат файла и доступное квантование будут различаться. Вот список репозитория HuggingFace с каждой моделью. Mimi входит в состав каждого из них и всегда использует один и тот же формат контрольных точек.
Мошика для PyTorch (bf16): kyutai/moshika-pytorch-bf16.
Мошико для PyTorch (bf16): kyutai/moshiko-pytorch-bf16.
Мошика для MLX (int4, int8, bf16): kyutai/moshika-mlx-q4, kyutai/moshika-mlx-q8, kyutai/moshika-mlx-bf16.
Мошико для MLX (int4, int8, bf16): kyutai/moshiko-mlx-q4, kyutai/moshiko-mlx-q8, kyutai/moshiko-mlx-bf16.
Мошика для Rust/Candle (int8, bf16): kyutai/moshika-candle-q8, kyutai/moshika-mlx-bf16.
Мошико для Rust/Candle (int8, bf16): kyutai/moshiko-candle-q8, kyutai/moshiko-mlx-bf16.
Все модели выпускаются под лицензией CC-BY 4.0.
Вам понадобится как минимум Python 3.10, рекомендуется версия 3.12. Чтобы узнать конкретные требования, проверьте отдельные серверные каталоги. Вы можете установить клиенты PyTorch и MLX следующим образом:
pip install moshi # moshi PyTorch, из PyPIpip install moshi_mlx # moshi MLX, из PyPI, лучше всего с Python 3.12.# Или новейшие версии для Moshi и Moshi-MLX.pip install -e "git+https://git@github .com/kyutai-labs/moshi.git#egg=moshi&subdirectory=moshi"pip install -e "git+https://[email protected]/kyutai-labs/moshi.git#egg=moshi_mlx&subdirectory=moshi_mlx"pip installrustymimi # mimi, реализация ржавчины с привязками Python из PyPI
Если вы не используете Python 3.12, вы можете получить ошибку при установке moshi_mlx
rustymimi
(от чего зависит moshi_mlx
). Затем вам нужно будет установить набор инструментов Rust или переключиться на Python 3.12.
Хотя мы надеемся, что нынешняя кодовая база будет работать в Windows, мы не предоставляем для нее официальной поддержки. Мы протестировали версию MLX на MacBook Pro M3. На данный момент мы не поддерживаем квантование для версии PyTorch, поэтому вам понадобится графический процессор со значительным объемом памяти (24 ГБ).
Для использования серверной части Rust вам понадобится последняя версия набора инструментов Rust. Для компиляции поддержки графического процессора вам также понадобится правильно установленный для вашего графического процессора CUDA, в частности с помощью nvcc
.
API на основе PyTorch можно найти в каталоге moshi
. Он предоставляет потоковую версию аудиотокенизатора (mimi) и языковой модели (moshi).
Для запуска в интерактивном режиме вам необходимо запустить сервер, на котором будет запускаться модель, после чего вы можете использовать либо веб-интерфейс, либо клиент командной строки.
Запустите сервер с помощью:
python -m moshi.server [--gradio-tunnel] [--hf-repo kyutai/moshika-pytorch-bf16]
А затем получите доступ к веб-интерфейсу на локальном хосте: 8998. Если ваш графический процессор находится на удаленном компьютере, это не будет работать, поскольку веб-сайтам, использующим http, не разрешено использовать API аудио-ворлета. Есть два способа обойти это:
Перенаправьте удаленный порт 8998 на ваш локальный хост, используя флаг ssh -L
. Затем подключается к localhost:8998, как упоминалось ранее.
Используйте аргумент --gradio-tunnel
, он устанавливает туннель с URL-адресом, доступным откуда угодно. Имейте в виду, что этот туннель проходит через США и может привести к значительной задержке (до 500 мс из Европы). Вы можете использовать --gradio-tunnel-token
чтобы установить фиксированный секретный токен и повторно использовать один и тот же адрес с течением времени.
Вы можете использовать --hf-repo
, чтобы выбрать другую предварительно обученную модель, установив соответствующий репозиторий Hugging Face.
Доступ к серверу, который не является локальным, через http может вызвать проблемы с использованием микрофона в веб-интерфейсе (в некоторых браузерах это разрешено только с использованием https).
Также доступен локальный клиент, т.к.
python -m moshi.client [--url URL_TO_GRADIO]
Однако обратите внимание, что, в отличие от веб-браузера, этот клиент является базовым: он не выполняет эхокомпенсацию и не пытается компенсировать растущую задержку путем пропуска кадров.
Для получения дополнительной информации, в частности о том, как напрямую использовать API, посетите moshi/README.md.
После установки moshi_mlx
вы можете запустить
python -m moshi_mlx.local -q 4 # веса, квантованные до 4 битов python -m moshi_mlx.local -q 8 # веса, квантованные до 8 бит# И использование другой предварительно обученной модели: python -m moshi_mlx.local -q 4 --hf- репо кютай/moshika-mlx-q4 python -m moshi_mlx.local -q 8 --hf-repo kyutai/moshika-mlx-q8# будьте осторожны и всегда сопоставляйте флаги `-q` и `--hf-repo`.
Этот интерфейс командной строки также является базовым. Он не выполняет никакого эхоподавления и не пытается компенсировать растущую задержку пропуском кадров.
В качестве альтернативы вы можете запустить python -m moshi_mlx.local_web
, чтобы использовать веб-интерфейс, соединение осуществляется через http и будет по адресу localhost:8998.
Чтобы запустить сервер вывода Rust, используйте следующую команду из каталога rust
:
грузовой пробег --features cuda --bin moshi-backend -r -- --config moshi-backend/config.json автономный
При использовании macOS вы можете заменить --features cuda
на --features metal
.
В качестве альтернативы вы можете использовать config-q8.json
вместо config.json
, чтобы использовать квантованную модель q8. Вы можете выбрать другую предварительно обученную модель, например Moshika, изменив ключ "hf_repo"
в любом файле.
Как только сервер напечатает «прослушивание автономного работника», вы можете использовать веб-интерфейс. По умолчанию сервер Rust использует https, поэтому он будет находиться по адресу localhost:8998.
Вы получите предупреждения о том, что сайт небезопасен. При использовании Chrome вы можете обойти их, выбрав «Подробнее» или «Дополнительно», затем «Посетить этот небезопасный сайт» или «Перейти на локальный хост (небезопасно)».
Мы рекомендуем использовать веб-интерфейс, поскольку он обеспечивает дополнительное эхоподавление, повышающее общее качество модели. Обратите внимание, что большинство команд будут напрямую обслуживать этот пользовательский интерфейс по предоставленному URL-адресу, и, как правило, больше нечего делать.
В качестве альтернативы мы предоставляем интерфейсы командной строки для версий Rust и Python. Протокол тот же, что и для веб-интерфейса, поэтому на стороне сервера нечего менять.
Для справки, вот список клиентов Moshi.
Из каталога rust
выполните следующее:
грузовой пробег --bin moshi-cli -r -- tui --host localhost
python -m moshi.клиент
докер составить
Требуется набор инструментов NVIDIA Container Toolkit.
Веб-интерфейс можно создать из этого репозитория, выполнив следующие шаги (для этого потребуется установка npm
).
компакт-диск клиент установка npm npm запустить сборку
Веб-интерфейс можно будет найти в каталоге client/dist
.
Если вы хотите установить из клона этого репозитория, возможно, для дальнейшего развития Moshi, вы можете сделать следующее:
# Из корня клона repopip install -e 'moshi[dev]'pip install -e 'moshi_mlx[dev]'pre-commit install
Если вы хотите собрать rustymimi
локально (при условии, что у вас правильно установлен Rust):
pip install Maturin maturin dev -r -m ржавчина/mimi-pyo3/Cargo.toml
Прежде чем открывать проблему, ознакомьтесь с разделом «Часто задаваемые вопросы».
Настоящий код предоставляется по лицензии MIT для частей Python и лицензии Apache для серверной части Rust. Код веб-клиента предоставляется по лицензии MIT. Обратите внимание, что части этого кода основаны на AudioCraft, выпущенном по лицензии MIT.
Веса для моделей выпускаются по лицензии CC-BY 4.0.
Если вы используете Mimi или Moshi, процитируйте следующую статью:
@techreport{kyutai2024moshi, title={Moshi: a speech-text foundation model for real-time dialogue}, author={Alexandre D'efossez and Laurent Mazar'e and Manu Orsini and Am'elie Royer and Patrick P'erez and Herv'e J'egou and Edouard Grave and Neil Zeghidour}, year={2024}, eprint={2410.00037}, archivePrefix={arXiv}, primaryClass={eess.AS}, url={https://arxiv.org/abs/2410.00037}, }