问答社区
Moshi:用于实时对话的语音文本基础模型全双工口语对话框架
Moshi是一种语音文本基础模型和全双工口语对话框架。它使用Mimi,一种最先进的流式神经音频编解码器。Mimi 以完全流式传输的方式(延迟为 80 毫秒,即帧大小)处理 24 kHz 音频,直至 12.5 Hz 表示,带宽为 1.1 kbps,但性能优于现有的非流式编解码器,如 SpeechTokenizer(50 Hz,4kbps)或SemantiCodec(50 Hz,1.3kbps)。
Moshi 模拟了两种音频流:一种对应于 Moshi,另一种对应于用户。在推理时,来自用户的流取自音频输入,而 Moshi 的流则从模型的输出中采样。沿着这两个音频流,Moshi 可以预测与其自己的语音(其内心独白)相对应的文本标记,这极大地提高了其生成的质量。小型深度变换器对给定时间步长的码本间依赖关系进行建模,而大型 7B 参数时间变换器对时间依赖关系进行建模。Moshi 实现了 160 毫秒的理论延迟(Mimi 的帧大小为 80 毫秒 + 80 毫秒的声学延迟),在 L4 GPU 上的实际总延迟低至 200 毫秒。
Mimi 以之前的神经音频编解码器(例如SoundStream 和EnCodec )为基础,在编码器和解码器中添加了 Transformer,并调整步幅以匹配 12.5 Hz 的整体帧速率。这使 Mimi 能够更接近文本标记的平均帧速率(~3-4 Hz),并限制 Moshi 中的自回归步骤数。与 SpeechTokenizer 类似,Mimi 使用蒸馏损失,以便第一个码本标记与WavLM 的自监督表示相匹配,从而允许使用单个模型对语义和声学信息进行建模。有趣的是,虽然 Mimi 是完全因果和流式传输的,但它学会了足够好地匹配来自 WavLM 的非因果表示,而不会引入任何延迟。最后,与EBEN,Mimi 仅使用对抗性训练损失以及特征匹配,尽管比特率较低,但在主观质量方面仍显示出强劲的改善。
这个 repo 中有三个不同版本的 moshi 推理堆栈。
- 使用PyTorch的Python版本在
moshi/
目录中。 - 适用于 M 系列 Mac 的使用 MLX 的 Python 版本位于
moshi_mlx/
目录中。 - 生产中使用的 Rust 版本位于
rust/
目录中。它特别包含 Rust 中的 Mimi 实现,并提供 Python 绑定rustymimi
。
最后,目录中提供了现场演示的代码client/
。
我们发布了三种型号:
- 我们的语音编解码器 Mimi,
- Moshi 对男性合成声音(Moshiko)进行了微调,
- Moshi 对女性合成声音(Moshika)进行了微调。
根据后端,可用的文件格式和量化会有所不同。以下是每个模型的 HuggingFace repo 列表。Mimi 捆绑在每个模型中,并且始终使用相同的检查点格式。
- PyTorch 的 Moshika(bf16):kyutai/moshika-pytorch-bf16。
- 适用于 PyTorch 的 Moshiko (bf16):kyutai/moshiko-pytorch-bf16。
- MLX 的 Moshika(int4、int8、bf16):kyutai/moshika-mlx-q4、kyutai/moshika-mlx-q8、 kyutai/moshika-mlx-bf16。
- MLX 的 Moshiko(int4、int8、bf16):kyutai/moshiko-mlx-q4、kyutai/moshiko-mlx-q8、 kyutai/moshiko-mlx-bf16。
- Moshika for Rust/Candle (int8, bf16): kyutai/moshika-candle-q8 , kyutai/moshika-mlx-bf16。
- Moshiko for 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, from PyPI
pip install moshi_mlx # moshi MLX, from PyPI, best with Python 3.12.
# Or the bleeding edge versions for Moshi and Moshi-MLX.
pip install -e "git+https://git@github.com/kyutai-labs/moshi.git#egg=moshi&subdirectory=moshi"
pip install -e "git+https://git@github.com/kyutai-labs/moshi.git#egg=moshi_mlx&subdirectory=moshi_mlx"
pip install rustymimi # mimi, rust implementation with Python bindings from PyPI
moshi_mlx
如果您使用的不是 Python 3.12,则在安装或rustymimi
(取决于)时可能会出现错误 moshi_mlx
。然后,您需要安装Rust 工具链,或切换到 Python 3.12。
虽然我们希望当前的代码库可以在 Windows 上运行,但我们不提供官方支持。我们已经在 MacBook Pro M3 上测试了 MLX 版本。目前,我们不支持 PyTorch 版本的量化,因此您需要具有大量内存(24GB)的 GPU。
要使用 Rust 后端,您需要最新版本的Rust 工具链。要编译 GPU 支持,您还需要为您的 GPU 正确安装CUDA,特别是nvcc
。
基于 PyTorch 的 API 可以在目录中找到moshi
。它提供了音频标记器 (mimi) 和语言模型 (moshi) 的流式版本。
为了以交互模式运行,您需要启动一个将运行模型的服务器,然后您可以使用 Web UI 或命令行客户端。
使用以下命令启动服务器:
python -m moshi.server [--gradio-tunnel] [--hf-repo kyutai/moshika-pytorch-bf16]
然后通过localhost:8998访问 Web UI 。如果您的 GPU 位于无法直接访问的远程机器上,--gradio-tunnel
则将创建一个隧道,其中包含可从任何地方访问的 URL。请记住,此隧道穿过美国,可能会增加显著的延迟(从欧洲最多 500 毫秒)。您可以使用它--gradio-tunnel-token
来设置固定的秘密令牌并随着时间的推移重复使用相同的地址。或者,您可能希望使用 SSH 来重定向您的连接。
您可以--hf-repo
通过设置适当的 Hugging Face 存储库来选择不同的预训练模型。
通过 http 访问非本地主机的服务器可能会导致在 Web UI 中使用麦克风出现问题(在某些浏览器中,仅允许使用 https)。
本地客户端也可用,因为
python -m moshi.client [--url URL_TO_GRADIO]
但请注意,与网络浏览器不同,此客户端是准系统:它不执行任何回声消除,也不会尝试通过跳帧来补偿不断增大的延迟。
有关更多信息,特别是如何直接使用 API,请查看moshi/README.md。
安装完成后moshi_mlx
,您可以运行
python -m moshi_mlx.local -q 4 # weights quantized to 4 bits
python -m moshi_mlx.local -q 8 # weights quantized to 8 bits
# And using a different pretrained model:
python -m moshi_mlx.local -q 4 --hf-repo kyutai/moshika-mlx-q4
python -m moshi_mlx.local -q 8 --hf-repo kyutai/moshika-mlx-q8
# be careful to always match the `-q` and `--hf-repo` flag.
这个命令行界面也是很基础的。它不执行任何回声消除,也不会尝试通过跳帧来补偿不断增加的延迟。
或者,您可以运行python -m moshi_mlx.local_web
以使用 Web UI,连接是通过 http 进行的,地址为localhost:8998。
为了运行 Rust 推理服务器,请在rust
目录中使用以下命令:
cargo run --features cuda --bin moshi-backend -r -- --config moshi-backend/config.json standalone
当使用 macOS 时,您可以--features cuda
用替换--features metal
。
或者,您可以config-q8.json
使用config.json
量化的 q8 模型。您可以通过更改任"hf_repo"
一文件中的密钥来选择不同的预训练模型,例如 Moshika。
一旦服务器打印出“独立工作器正在监听”,您就可以使用 Web UI。默认情况下,Rust 服务器使用 https,因此它将位于 localhost:8998。
您将收到有关该网站不安全的警告。使用 Chrome 时,您可以通过选择“详细信息”或“高级”,然后选择“访问此不安全的网站”或“继续访问本地主机(不安全)”来绕过这些警告。
我们建议使用 Web UI,因为它提供了额外的回声消除功能,有助于提高整体模型质量。请注意,大多数命令将直接在提供的 URL 中提供此 UI,并且通常无需执行任何其他操作。
或者,我们为 Rust 和 Python 版本提供命令行界面,协议与 Web UI 相同,因此服务器端无需进行任何更改。
作为参考,以下是 Moshi 的客户列表。
在rust
目录中运行以下命令:
cargo run --bin moshi-cli -r -- tui --host localhost
python -m moshi.client
可以通过以下步骤从此 repo 构建 Web UI(需要npm
安装)。
cd client
npm install
npm run build
然后可以在目录中找到 Web UI client/dist
。
如果您希望从该存储库的克隆进行安装,也许是为了进一步开发 Moshi,您可以执行以下操作:
# From the root of the clone of the repo
pip install -e 'moshi[dev]'
pip install -e 'moshi_mlx[dev]'
pre-commit install
如果您希望在本地构建rustymimi
(假设您已正确安装 Rust):
pip install maturin
maturin dev -r -m rust/mimi-pyo3/Cargo.toml
在打开问题之前,请查看常见问题解答部分。
本代码的 Python 部分遵循 MIT 许可证,Rust 后端遵循 Apache 许可证。Web 客户端代码遵循 MIT 许可证。请注意,本代码的部分内容基于AudioCraft,遵循 MIT 许可证发布。
模型的权重是根据 CC-BY 4.0 许可证发布的。
如果你使用 Mimi 或 Moshi,请引用以下论文,
@techreport{kyutai2024moshi,
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},
title = {Moshi: a speech-text foundation model for real-time dialogue},
institution = {Kyutai},
year={2024},
month={September},
url={http://kyutai.org/Moshi.pdf},
}