[閱讀論文] [示範] [擁抱臉]
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。 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}, }