Moshi 是一个语音文本基础模型和**全双工**口语对话框架。 它使用 Mimi,这是一种最先进的流式神经音频编解码器。Mimi 处理 24 kHz 音频,低至 12.5 Hz 的表示 带宽为 1.1 kbps,以完全流的方式(延迟为 80 毫秒,帧大小), 但性能优于现有的非流式处理编解码器,如 SpeechTokenizer (50 Hz, 4kbps) 或 SemantiCodec (50 Hz, 1.3kbps)。
Moshi 对两个音频流进行建模:一个对应于 Moshi,另一个对应于用户。 在推理时,来自用户的流取自音频输入 Moshi 的 1 个是从模型的输出中采样的。沿着这两个音频流,Moshi 预测与自己的语音、**内心独白**、 这大大提高了其生成的质量。一个小的 Depth Transformer 对给定时间步的码簿间依赖关系进行建模, 而一个大的 7B 参数 Temporal Transformer 则对时间依赖性进行建模。Moshi 实现了理论延迟 160 毫秒(Mimi 的帧大小为 80 毫秒 + 80 毫秒的声学延迟),在 L4 GPU 上,实际整体延迟低至 200 毫秒。
Mimi 基于以前的神经音频编解码器(如 SoundStream 和 EnCodec)构建,在编码器和解码器中添加了 Transformer。 以及调整步幅以匹配 12.5 Hz 的整体帧速率。这使 Mimi 可以更接近 文本标记的平均帧速率 (~3-4 Hz),并限制 Moshi 中的自回归步骤数。 与 SpeechTokenizer 类似,Mimi 使用蒸馏损失,以便第一个 codebook 标记匹配 来自 WavLM 的自监督表示,它允许使用单个模型对语义和声学信息进行建模。有趣的是,虽然 Mimi 是完全因果和流的,但它学会了很好地匹配非因果 表示形式,而不会引入任何延迟。最后,与 EBEN 类似, Mimi 仅使用对抗性训练损失以及特征匹配,在 主观质量,尽管比特率低。
主要功能
发布了三种型号:
- 我们的语音编解码器 Mimi,
- Moshi 在男性合成语音 (Moshiko) 上微调,
- Moshi 对女性合成声音 (Moshika) 进行了微调。
根据后端的不同,可用的文件格式和量化会有所不同。这是列表 的 HuggingFace 存储库中。Mimi 捆绑在它们中,并且始终使用相同的 checkpoint 格式。
- 适用于 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。
- Rust/Candle 的 Moshika (int8, bf16): kyutai/moshika-candle-q8, kyutai/moshika-mlx-bf16。
- Moshiko for Rust/Candle (int8, bf16): kyutai/moshiko-candle-q8, kyutai/moshiko-mlx-bf16.
安装使用
依赖
您至少需要 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
如果您未使用 Python 3.12,则可能会在安装 or 时收到错误(具体取决于)。然后,您需要安装 Rust 工具链,或切换到 Python 3.12。moshi_mlxrustymimimoshi_mlx
虽然我们希望目前的代码库可以在 Windows 上运行,但我们不提供官方支持。 我们已经在 MacBook Pro M3 上测试了 MLX 版本。目前,我们不支持量化 对于 PyTorch 版本,因此您需要具有大量内存 (24GB) 的 GPU。
要使用 Rust 后端,您需要最新版本的 Rust 工具链。 要编译 GPU 支持,您还需要为您的 GPU 正确安装 CUDA,特别是使用 .nvcc
Python (PyTorch)
可以在 目录中找到基于 PyTorch 的 API。它提供了一个流式处理 音频分词器 (MIMI) 和语言模型 (MOSHI) 的版本。moshi
为了在交互模式下运行,您需要启动一个服务器,该服务器将 运行模型,然后可以使用 Web UI 或命令行客户端。
使用以下命令启动服务器:
python -m moshi.server [--gradio-tunnel] [--hf-repo kyutai/moshika-pytorch-bf16]
然后访问 localhost:8998 上的 Web UI。 如果您的 GPU 位于远程计算机上,则不能作为使用 http 的网站使用 不允许使用 Audio Worklet API。有两种方法可以绕过 这:
- 使用 ssh 标志将远程 8998 端口转发到本地主机。然后 如前所述连接到 localhost:8998。-L
- 使用参数,这将设置一个 URL 可从任何地方访问的隧道。 请记住,这条隧道穿过美国,可能会增加显着的 延迟(来自欧洲的最长 500 毫秒)。您可以使用它来设置 修复了密钥令牌,并随着时间的推移重复使用相同的地址。--gradio-tunnel--gradio-tunnel-token
您可以通过设置适当的 Hugging Face 存储库来选择不同的预训练模型。--hf-repo
通过 http 访问非 localhost 的服务器可能会导致使用 Web UI 中的麦克风(在某些浏览器中,只允许使用 https) 的 URL 进行。
也可以使用本地客户端,因为
python -m moshi.client [--url URL_TO_GRADIO]
但请注意,与 Web 浏览器不同,此客户端是准系统:它不执行任何回声消除, 它也不会试图通过跳帧来补偿不断增长的延迟。
有关更多信息,特别是有关如何直接使用 API 的信息,请 查看 moshi/README.md。
用于 macOS 上的本地推理的 Python (MLX)
安装 后,您可以运行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.
此命令行界面也是准系统。它不执行任何回声消除, 它也不会试图通过跳帧来补偿不断增长的延迟。
或者,您可以运行以使用 Web UI 中,连接通过 HTTP 进行,并将位于 localhost:8998。python -m moshi_mlx.local_web
Rust
为了运行 Rust 推理服务器,请从内部使用以下命令 目录:rust
cargo run --features cuda --bin moshi-backend -r -- --config moshi-backend/config.json standalone
使用 macOS 时,您可以替换为 .--features cuda--features metal
或者,您可以使用 量化 Q8 模型。您可以选择不同的预训练模型,例如 Moshika、 通过更改任一文件中的密钥。config-q8.jsonconfig.json"hf_repo"
一旦服务器打印了 'standalone worker listening',你就可以使用 Web 用户界面。默认情况下,Rust 服务器使用 https,因此它将位于 localhost:8998。
您将收到有关该网站不安全的警告。使用 chrome 时,您 可以通过选择“Details(详细信息)”或“Advanced(高级)”来绕过这些操作,然后选择“访问此不安全 site“或”Proceed to localhost (unsafe)”。
客户端
我们建议使用 Web UI,因为它提供了额外的回声消除功能,有助于 整体模型质量。请注意,大多数命令将直接用于此 UI ,并且通常无需执行任何其他操作。
或者,我们提供命令行界面 对于 Rust 和 Python 版本,协议与 Web UI 相同,因此 服务器端没有什么可更改的。
作为参考,这里是 Moshi 的客户列表。
Rust 命令行
在目录中,运行以下命令:rust
cargo run --bin moshi-cli -r -- tui --host localhost
使用 PyTorch 的 Python
python -m moshi.client
Docker Compose(仅限 CUDA)
docker compose up
网页用户界面
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
如果您希望在本地构建(假设您已正确安装 Rust):rustymimi
pip install maturin
maturin dev -r -m rust/mimi-pyo3/Cargo.toml