[阅读论文] [演示] [拥抱脸]
Moshi 是一个语音文本基础模型和全双工口语对话框架。它使用 Mimi,一种最先进的流式神经音频编解码器。 Mimi 以完全流式传输的方式处理 24 kHz 音频,低至 12.5 Hz 表示,带宽为 1.1 kbps(延迟 80 毫秒,帧大小),但性能比现有的非流式编解码器(如 SpeechTokenizer)(50 Hz 、4kbps)或 SemantiCodec(50 Hz、1.3kbps)。
Moshi 模拟两种音频流:一种对应于 Moshi,另一种对应于用户。推理时,来自用户的流取自音频输入,Moshi 的流取自模型的输出。沿着这两个音频流,Moshi 预测与自己的语音(即内心独白)相对应的文本标记,这极大地提高了其生成的质量。小型深度变换器对给定时间步长的码本间依赖性进行建模,而大型 7B 参数时间变换器对时间依赖性进行建模。 Moshi 的理论延迟为 160 毫秒(Mimi 帧大小为 80 毫秒 + 声学延迟 80 毫秒),在 L4 GPU 上实际总体延迟低至 200 毫秒。
现在就在我们的现场演示中与 Moshi 交谈。
Mimi 基于以前的神经音频编解码器(例如 SoundStream 和 EnCodec)构建,在编码器和解码器中添加了 Transformer,并调整步幅以匹配 12.5 Hz 的整体帧速率。这使得 Mimi 能够更接近文本标记的平均帧速率(~3-4 Hz),并限制 Moshi 中的自回归步骤数。与 SpeechTokenizer 类似,Mimi 使用蒸馏损失,以便第一个码本标记与 WavLM 的自监督表示相匹配,从而允许使用单个模型对语义和声学信息进行建模。有趣的是,虽然 Mimi 是完全因果和流式的,但它学会了充分匹配 WavLM 的非因果表示,而不会引入任何延迟。最后,与 EBEN 类似,Mimi仅使用对抗性训练损失以及特征匹配,尽管其比特率较低,但在主观质量方面显示出强劲的改进。
此存储库中有三个独立版本的 moshi 推理堆栈。
使用 PyTorch 的 Python 版本位于moshi/
目录中。
用于 M 系列 Mac 的使用 MLX 的 Python 版本位于moshi_mlx/
目录中。
生产中使用的 Rust 版本位于rust/
目录中。其中特别包含 Rust 中的 Mimi 实现,Python 绑定可用作rustymimi
。
最后,在client/
目录中提供了现场演示的代码。
我们发布了三个模型:
我们的语音编解码器 Mimi,
Moshi 对男性合成声音(Moshiko)进行了微调,
Moshi 对女性合成声音(Moshika)进行了微调。
根据后端的不同,可用的文件格式和量化也会有所不同。以下是每个模型的 HuggingFace 存储库的列表。 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 用于 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 install rustymimi # mimi,使用来自 PyPI 的 Python 绑定的 rust 实现
如果您没有使用 Python 3.12,则在安装moshi_mlx
或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 位于远程计算机上,则这将不起作用,因为不允许使用 http 的网站使用音频工作集 api。有两种方法可以解决这个问题:
使用 ssh -L
标志将远程 8998 端口转发到本地主机。然后如前所述连接到 localhost:8998。
使用--gradio-tunnel
参数,这会设置一个带有可从任何地方访问的 URL 的隧道。请记住,这条隧道穿过美国,可能会显着增加延迟(从欧洲出发最多 500 毫秒)。您可以使用--gradio-tunnel-token
设置固定的秘密令牌并随着时间的推移重复使用相同的地址。
您可以使用--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 # 权重量化为 4 位 python -m moshi_mlx.local -q 8 # 权重量化为 8 位# 并使用不同的预训练模型:python -m moshi_mlx.local -q 4 --hf-仓库 kyutai/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
来使用 Web UI,连接是通过 http 进行的,位于 localhost:8998。
为了运行 Rust 推理服务器,请在rust
目录中使用以下命令:
Cargo run --features cuda --bin moshi-backend -r -- --config moshi-backend/config.json 独立
使用 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
目录中运行以下命令:
货物运行--bin moshi-cli -r -- tui --host localhost
python -m moshi.client
码头工人组成
需要 NVIDIA 容器工具包
可以通过以下步骤从此存储库构建 Web UI(这些步骤需要安装npm
)。
光盘客户端 npm 安装 npm 运行构建
然后可以在client/dist
目录中找到 Web UI。
如果您希望从该存储库的克隆安装,也许为了进一步开发 Moshi,您可以执行以下操作:
# 从克隆的根目录 repopip install -e 'moshi[dev]'pip install -e 'moshi_mlx[dev]'pre-commit install
如果您希望在本地构建rustymimi
(假设您已正确安装 Rust):
pip 安装成熟 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, 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}, }