[Leia o jornal] [Demonstração] [Abraçando o rosto]
Moshi é um modelo básico de texto de fala e uma estrutura de diálogo falado full-duplex . Ele usa Mimi, um codec de áudio neural de streaming de última geração. Mimi processa áudio de 24 kHz, até uma representação de 12,5 Hz com uma largura de banda de 1,1 kbps, em um modo de streaming completo (latência de 80 ms, o tamanho do quadro), mas tem um desempenho melhor do que codecs existentes, sem streaming, como o SpeechTokenizer (50 Hz , 4kbps) ou SemantiCodec (50 Hz, 1,3kbps).
Moshi modela dois fluxos de áudio : um corresponde ao Moshi e o outro ao usuário. Na inferência, o fluxo do usuário é obtido da entrada de áudio e o de Moshi é amostrado da saída do modelo. Ao longo desses dois fluxos de áudio, Moshi prevê tokens de texto correspondentes à sua própria fala, seu monólogo interno , o que melhora muito a qualidade de sua geração. Um pequeno transformador de profundidade modela as dependências entre livros de código para um determinado intervalo de tempo, enquanto um grande transformador temporal de parâmetro 7B modela as dependências temporais. Moshi atinge uma latência teórica de 160ms (80ms para o tamanho do quadro do Mimi + 80ms de atraso acústico), com uma latência geral prática tão baixa quanto 200ms em uma GPU L4.
Fale com Moshi agora em nossa demonstração ao vivo.
Mimi baseia-se em codecs de áudio neurais anteriores, como SoundStream e EnCodec, adicionando um Transformer no codificador e no decodificador e adaptando os avanços para corresponder a uma taxa de quadros geral de 12,5 Hz. Isso permite que o Mimi se aproxime da taxa de quadros média dos tokens de texto (~3-4 Hz) e limite o número de etapas autorregressivas no Moshi. Da mesma forma que o SpeechTokenizer, o Mimi usa uma perda de destilação para que os primeiros tokens do livro de códigos correspondam a uma representação auto-supervisionada do WavLM, que permite modelar informações semânticas e acústicas com um único modelo. Curiosamente, embora o Mimi seja totalmente causal e streaming, ele aprende a combinar suficientemente bem a representação não causal do WavLM, sem introduzir quaisquer atrasos. Finalmente, e à semelhança do EBEN, o Mimi utiliza apenas uma perda de treino adversária , juntamente com a correspondência de características, apresentando fortes melhorias em termos de qualidade subjectiva apesar da sua baixa taxa de bits.
Existem três versões separadas da pilha de inferência moshi neste repositório.
A versão Python usando PyTorch está no diretório moshi/
.
A versão Python usando MLX para Macs da série M está no diretório moshi_mlx/
.
A versão do Rust usada na produção está no diretório rust/
. Contém em particular uma implementação Mimi em Rust, com ligações Python disponíveis como rustymimi
.
Finalmente, o código para a demonstração ao vivo é fornecido no diretório client/
.
Lançamos três modelos:
nosso codec de fala Mimi,
Moshi afinado em uma voz sintética masculina (Moshiko),
Moshi afinado em uma voz sintética feminina (Moshika).
Dependendo do back-end, o formato do arquivo e a quantização disponíveis variam. Aqui está a lista do repositório HuggingFace com cada modelo. Mimi está incluído em cada um deles e sempre usa o mesmo formato de ponto de verificação.
Moshika para PyTorch (bf16): kyutai/moshika-pytorch-bf16.
Moshiko para PyTorch (bf16): kyutai/moshiko-pytorch-bf16.
Moshika para MLX (int4, int8, bf16): kyutai/moshika-mlx-q4, kyutai/moshika-mlx-q8, kyutai/moshika-mlx-bf16.
Moshiko para MLX (int4, int8, bf16): kyutai/moshiko-mlx-q4, kyutai/moshiko-mlx-q8, kyutai/moshiko-mlx-bf16.
Moshika para Ferrugem/Vela (int8, bf16): kyutai/moshika-candle-q8, kyutai/moshika-mlx-bf16.
Moshiko para Ferrugem/Vela (int8, bf16): kyutai/moshiko-candle-q8, kyutai/moshiko-mlx-bf16.
Todos os modelos são lançados sob a licença CC-BY 4.0.
Você precisará de pelo menos Python 3.10, sendo 3.12 recomendado. Para requisitos específicos, verifique os diretórios de back-end individuais. Você pode instalar os clientes PyTorch e MLX com o seguinte:
pip install moshi # moshi PyTorch, do PyPIpip install moshi_mlx # moshi MLX, do PyPI, melhor com Python 3.12.# Ou as versões mais recentes para Moshi e Moshi-MLX.pip install -e "git+https://git@github .com/kyutai-labs/moshi.git#egg=moshi&subdirectory=moshi"instalação de pip -e "git+https://[email protected]/kyutai-labs/moshi.git#egg=moshi_mlx&subdirectory=moshi_mlx"instalação de pip Rustymimi # mimi, implementação de ferrugem com ligações Python do PyPI
Se você não estiver usando o Python 3.12, poderá receber um erro ao instalar moshi_mlx
ou rustymimi
(do qual moshi_mlx
depende). Em seguida, você precisará instalar o conjunto de ferramentas Rust ou mudar para Python 3.12.
Embora esperemos que a base de código atual funcione no Windows, não fornecemos suporte oficial para ela. Testamos a versão MLX em um MacBook Pro M3. No momento, não oferecemos suporte à quantização para a versão PyTorch, então você precisará de uma GPU com uma quantidade significativa de memória (24 GB).
Para usar o backend Rust, você precisará de uma versão recente do conjunto de ferramentas Rust. Para compilar o suporte a GPU, você também precisará do CUDA instalado corretamente para sua GPU, em particular com nvcc
.
A API baseada em PyTorch pode ser encontrada no diretório moshi
. Ele fornece uma versão streaming do tokenizer de áudio (mimi) e do modelo de linguagem (moshi).
Para executar no modo interativo, você precisa iniciar um servidor que executará o modelo. Você pode então usar a UI da web ou um cliente de linha de comando.
Inicie o servidor com:
python -m moshi.server [--gradio-tunnel] [--hf-repo kyutai/moshika-pytorch-bf16]
E então acesse a UI da web em localhost:8998. Se sua GPU estiver em uma máquina distante, isso não funcionará, pois sites que usam http não têm permissão para usar a API do worklet de áudio. Existem duas maneiras de contornar isso:
Encaminhe a porta 8998 remota para seu host local usando o sinalizador ssh -L
. Em seguida, conecta-se a localhost:8998 conforme mencionado anteriormente.
Use o argumento --gradio-tunnel
, isso configura um túnel com uma URL acessível de qualquer lugar. Tenha em mente que este túnel atravessa os EUA e pode adicionar uma latência significativa (até 500 ms da Europa). Você pode usar --gradio-tunnel-token
para definir um token secreto fixo e reutilizar o mesmo endereço ao longo do tempo.
Você pode usar --hf-repo
para selecionar um modelo pré-treinado diferente, definindo o repositório Hugging Face adequado.
Acessar um servidor que não seja localhost via http pode causar problemas com o uso do microfone na UI da web (em alguns navegadores isso só é permitido usando https).
Um cliente local também está disponível, como
python -m moshi.client [--url URL_TO_GRADIO]
No entanto, note que, ao contrário do navegador web, este cliente é básico: ele não realiza nenhum cancelamento de eco, nem tenta compensar um atraso crescente pulando quadros.
Para obter mais informações, em particular sobre como usar a API diretamente, consulte moshi/README.md.
Depois de instalar moshi_mlx
, você pode executar
python -m moshi_mlx.local -q 4 # pesos quantizados em 4 bitspython -m moshi_mlx.local -q 8 # pesos quantizados em 8 bits# E usando um modelo pré-treinado diferente:python -m moshi_mlx.local -q 4 --hf- repositório kyutai/moshika-mlx-q4 python -m moshi_mlx.local -q 8 --hf-repo kyutai/moshika-mlx-q8# tenha cuidado para sempre corresponder aos sinalizadores `-q` e `--hf-repo`.
Esta interface de linha de comando também é barebone. Ele não realiza nenhum cancelamento de eco, nem tenta compensar um atraso crescente pulando quadros.
Alternativamente, você pode executar python -m moshi_mlx.local_web
para usar a UI da web, a conexão é via http e será em localhost:8998.
Para executar o servidor de inferência Rust, use o seguinte comando no diretório rust
:
carga run --features cuda --bin moshi-backend -r -- --config moshi-backend/config.json autônomo
Ao usar o macOS, você pode substituir --features cuda
por --features metal
.
Alternativamente, você pode usar config-q8.json
em vez de config.json
para usar o modelo q8 quantizado. Você pode selecionar um modelo pré-treinado diferente, por exemplo, Moshika, alterando a chave "hf_repo"
em qualquer arquivo.
Depois que o servidor imprimir 'escuta do trabalhador autônomo', você poderá usar a interface da web. Por padrão, o servidor Rust usa https, portanto estará em localhost:8998.
Você receberá avisos sobre o site ser inseguro. Ao usar o Chrome, você pode ignorar isso selecionando "Detalhes" ou "Avançado" e depois "Visite este site inseguro" ou "Prosseguir para localhost (inseguro)".
Recomendamos o uso da interface da web, pois ela fornece cancelamento de eco adicional que ajuda na qualidade geral do modelo. Observe que a maioria dos comandos servirá diretamente essa UI na URL fornecida e, em geral, não há mais nada a fazer.
Alternativamente, fornecemos interfaces de linha de comando para as versões Rust e Python, o protocolo é o mesmo da UI da web, portanto não há nada a alterar no lado do servidor.
Para referência, aqui está a lista de clientes da Moshi.
No diretório rust
, execute o seguinte:
carga run --bin moshi-cli -r -- tui --host localhost
python -m moshi.client
docker compor
Requer NVIDIA Container Toolkit
A UI da web pode ser construída a partir deste repositório por meio das etapas a seguir (isso exigirá a instalação npm
).
cliente de CD instalação npm npm executar compilação
A UI da web pode então ser encontrada no diretório client/dist
.
Se você deseja instalar a partir de um clone deste repositório, talvez para desenvolver ainda mais o Moshi, você pode fazer o seguinte:
# Da raiz do clone do repopip install -e 'moshi[dev]'pip install -e 'moshi_mlx[dev]'pre-commit install
Se você deseja construir rustymimi
localmente (assumindo que o Rust esteja instalado corretamente):
pip instalar maturin maturin dev -r -m ferrugem/mimi-pyo3/Cargo.toml
Confira a seção Perguntas frequentes antes de abrir um problema.
O código atual é fornecido sob a licença MIT para as partes Python e a licença Apache para o backend Rust. O código do cliente web é fornecido sob a licença do MIT. Observe que partes deste código são baseadas no AudioCraft, lançado sob a licença do MIT.
Os pesos dos modelos são liberados sob a licença CC-BY 4.0.
Se você usar Mimi ou Moshi, cite o seguinte artigo,
@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}, }