[논문 읽기] [데모] [얼굴을 껴안다]
Moshi는 음성 텍스트 기반 모델이자 전이중 음성 대화 프레임워크입니다. 최첨단 스트리밍 신경 오디오 코덱인 Mimi를 사용합니다. Mimi는 1.1kbps의 대역폭으로 12.5Hz 표현까지 24kHz 오디오를 완전 스트리밍 방식(80ms의 지연 시간, 프레임 크기)으로 처리하지만 SpeechTokenizer(50Hz)와 같은 기존의 비스트리밍 코덱보다 성능이 뛰어납니다. , 4kbps) 또는 SemantiCodec(50Hz, 1.3kbps).
Moshi는 두 가지 오디오 스트림을 모델링합니다. 하나는 Moshi에 해당하고 다른 하나는 사용자에 해당합니다. 추론 시 사용자의 스트림은 오디오 입력에서 가져오고 Moshi의 스트림은 모델의 출력에서 샘플링됩니다. 이 두 오디오 스트림을 따라 Moshi는 자신의 음성, 내부 독백 에 해당하는 텍스트 토큰을 예측하여 생성 품질을 크게 향상시킵니다. 작은 Depth Transformer는 주어진 시간 단계에 대한 코드북 간 종속성을 모델링하는 반면, 대형 7B 매개변수 Temporal Transformer는 시간적 종속성을 모델링합니다. Moshi는 이론적으로 160ms(Mimi 프레임 크기의 경우 80ms + 음향 지연 80ms)의 지연 시간을 달성하며 실제 전체 지연 시간은 L4 GPU에서 200ms만큼 낮습니다.
지금 라이브 데모를 통해 Moshi와 대화해보세요.
Mimi는 SoundStream 및 EnCodec과 같은 이전 신경 오디오 코덱을 기반으로 인코더와 디코더 모두에 Transformer를 추가하고 12.5Hz의 전체 프레임 속도와 일치하도록 보폭을 조정합니다. 이를 통해 Mimi는 텍스트 토큰의 평균 프레임 속도(~3-4Hz)에 가까워지고 Moshi의 자동 회귀 단계 수를 제한할 수 있습니다. SpeechTokenizer와 마찬가지로 Mimi는 증류 손실을 사용하여 첫 번째 코드북 토큰이 WavLM의 자체 지도 표현과 일치하도록 하며, 이를 통해 단일 모델로 의미론적 및 음향 정보를 모델링할 수 있습니다. 흥미롭게도 Mimi는 완전히 인과적이고 스트리밍되지만 지연을 유발하지 않고 WavLM의 비인과적 표현을 충분히 잘 일치시키는 방법을 학습합니다. 마지막으로 EBEN과 마찬가지로 Mimi는 기능 매칭과 함께 적대적 훈련 손실만 사용하여 낮은 비트 전송률에도 불구하고 주관적인 품질 측면에서 강력한 개선을 보여줍니다.
이 저장소에는 moshi 추론 스택의 세 가지 버전이 있습니다.
PyTorch를 사용하는 Python 버전은 moshi/
디렉터리에 있습니다.
M 시리즈 Mac용 MLX를 사용하는 Python 버전은 moshi_mlx/
디렉터리에 있습니다.
프로덕션에 사용되는 Rust 버전은 rust/
디렉터리에 있습니다. 여기에는 특히 rustymimi
로 사용할 수 있는 Python 바인딩과 함께 Rust의 Mimi 구현이 포함되어 있습니다.
마지막으로 라이브 데모용 코드는 client/
디렉터리에 제공됩니다.
우리는 세 가지 모델을 출시합니다:
우리의 음성 코덱 Mimi,
Moshi는 남성 합성 음성(Moshiko)을 미세 조정했으며,
Moshi는 여성 합성 음성(Moshika)을 미세 조정했습니다.
백엔드에 따라 사용 가능한 파일 형식과 양자화가 달라집니다. 다음은 각 모델의 HuggingFace 저장소 목록입니다. Mimi는 각 항목에 번들로 제공되며 항상 동일한 체크포인트 형식을 사용합니다.
PyTorch용 Moshika(bf16): kyotai/moshika-pytorch-bf16.
PyTorch용 Moshiko(bf16): kyotai/moshiko-pytorch-bf16.
MLX용 Moshika(int4, int8, bf16): kyotai/moshika-mlx-q4, kyotai/moshika-mlx-q8, kyotai/moshika-mlx-bf16.
MLX용 Moshiko(int4, int8, bf16): kyotai/moshiko-mlx-q4, kyotai/moshiko-mlx-q8, kyotai/moshiko-mlx-bf16.
Rust/Candle용 Moshika(int8, bf16): kyotai/moshika-candle-q8, kyotai/moshika-mlx-bf16.
Rust/Candle용 Moshiko(int8, bf16): kyotai/moshiko-candle-q8, kyotai/moshiko-mlx-bf16.
모든 모델은 CC-BY 4.0 라이센스에 따라 출시됩니다.
최소한 Python 3.10이 필요하며 3.12가 권장됩니다. 특정 요구 사항은 개별 백엔드 디렉터리를 확인하세요. 다음을 사용하여 PyTorch 및 MLX 클라이언트를 설치할 수 있습니다.
pip install moshi # moshi PyTorch, from PyPIpip install moshi_mlx # moshi MLX, from PyPI, Python 3.12에 가장 적합함.# 또는 Moshi 및 Moshi-MLX.pip install -e "git+https://git@github의 최신 버전 .com/kyotai-labs/moshi.git#egg=moshi&subdirectory=moshi"pip install -e "git+https://[email protected]/kyotai-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)의 스트리밍 버전을 제공합니다.
대화형 모드에서 실행하려면 모델을 실행할 서버를 시작해야 하며 그런 다음 웹 UI 또는 명령줄 클라이언트를 사용할 수 있습니다.
다음을 사용하여 서버를 시작하십시오.
python -m moshi.server [--gradio-tunnel] [--hf-repo kytai/moshika-pytorch-bf16]
그런 다음 localhost:8998에서 웹 UI에 액세스합니다. GPU가 먼 시스템에 있는 경우 http를 사용하는 웹사이트는 오디오 worklet API를 사용할 수 없으므로 작동하지 않습니다. 이 문제를 해결하는 방법에는 두 가지가 있습니다.
ssh -L
플래그를 사용하여 원격 8998 포트를 로컬 호스트로 전달하십시오. 그런 다음 앞서 언급한 대로 localhost:8998에 연결합니다.
--gradio-tunnel
인수를 사용하면 어디에서나 액세스할 수 있는 URL로 터널을 설정합니다. 이 터널은 미국을 통과하므로 대기 시간이 상당히 늘어날 수 있습니다(유럽에서는 최대 500ms). --gradio-tunnel-token
사용하여 고정 비밀 토큰을 설정하고 시간이 지남에 따라 동일한 주소를 재사용할 수 있습니다.
--hf-repo
사용하면 적절한 Hugging Face 저장소를 설정하여 사전 훈련된 다른 모델을 선택할 수 있습니다.
http를 통해 localhost가 아닌 서버에 액세스하면 웹 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- 레포 큐타이/moshika-mlx-q4 python -m moshi_mlx.local -q 8 --hf-repo kytai/moshika-mlx-q8# `-q` 및 `--hf-repo` 플래그를 항상 일치시키도록 주의하세요.
이 명령줄 인터페이스도 기본입니다. 에코 제거를 수행하지 않으며 프레임을 건너뛰어 증가하는 지연을 보상하려고 시도하지도 않습니다.
또는 python -m moshi_mlx.local_web
실행하여 웹 UI를 사용할 수 있습니다. 연결은 http를 통해 이루어지며 localhost:8998에 있습니다.
Rust 추론 서버를 실행하려면 rust
디렉터리 내에서 다음 명령을 사용하세요.
화물 실행 --features cuda --bin moshi-backend -r -- --config moshi-backend/config.json 독립형
macOS를 사용하는 경우 --features cuda
--features metal
로 바꿀 수 있습니다.
또는 config.json
대신 config-q8.json
을 사용하여 양자화된 q8 모델을 사용할 수 있습니다. 두 파일 중 하나에서 "hf_repo"
키를 변경하여 다른 사전 훈련된 모델(예: Moshika)을 선택할 수 있습니다.
서버가 '독립형 작업자 청취'를 인쇄하면 웹 UI를 사용할 수 있습니다. 기본적으로 Rust 서버는 https를 사용하므로 localhost:8998에 위치합니다.
사이트가 안전하지 않다는 경고를 받게 됩니다. Chrome을 사용할 때 "세부 정보" 또는 "고급"을 선택한 다음 "안전하지 않은 사이트 방문" 또는 "localhost로 이동(안전하지 않음)"을 선택하여 이를 우회할 수 있습니다.
전반적인 모델 품질에 도움이 되는 추가 에코 제거 기능을 제공하는 웹 UI를 사용하는 것이 좋습니다. 대부분의 명령은 제공된 URL에서 이 UI를 직접 제공하며 일반적으로 더 이상 수행할 작업이 없습니다.
또는 Rust 및 Python 버전에 대한 명령줄 인터페이스를 제공합니다. 프로토콜은 웹 UI와 동일하므로 서버 측에서는 변경할 것이 없습니다.
참고로 Moshi의 클라이언트 목록은 다음과 같습니다.
rust
디렉터리 내에서 다음을 실행합니다.
화물 실행 --bin moshi-cli -r -- tui --host localhost
파이썬 -m moshi.client
도커 구성
NVIDIA 컨테이너 툴킷 필요
웹 UI는 다음 단계를 통해 이 저장소에서 구축할 수 있습니다( npm
설치해야 함).
CD 클라이언트 npm 설치 npm 실행 빌드
그러면 웹 UI는 client/dist
디렉터리에서 찾을 수 있습니다.
Moshi를 추가로 개발하기 위해 이 저장소의 복제본에서 설치하려면 다음을 수행할 수 있습니다.
# repopip 복제 루트에서 install -e 'moshi[dev]'pip install -e 'moshi_mlx[dev]'pre-commit install
rustymimi
로컬에서 빌드하려면(Rust가 제대로 설치되어 있다고 가정):
pip 설치 maturin maturin dev -r -m Rust/mimi-pyo3/Cargo.toml
이슈를 열기 전에 자주 묻는 질문(FAQ) 섹션을 확인하세요.
현재 코드는 Python 부분에 대한 MIT 라이선스와 Rust 백엔드에 대한 Apache 라이선스에 따라 제공됩니다. 웹 클라이언트 코드는 MIT 라이센스에 따라 제공됩니다. 이 코드의 일부는 MIT 라이센스에 따라 출시된 AudioCraft를 기반으로 합니다.
모델의 무게는 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}, }