O OmniVoice é um modelo de inteligência artificial para síntese de voz que pode ser executado inteiramente no seu próprio computador. Diferente de serviços como o ElevenLabs, que dependem da nuvem, ele permite gerar áudio localmente utilizando a GPU, oferecendo maior privacidade, funcionamento sem internet, ausência de limites de uso e tempos de resposta muito menores após a configuração inicial.
Neste tutorial, mostrarei exatamente como configurei o OmniVoice em um CachyOS com uma AMD Radeon RX 6600 utilizando ROCm. Embora o procedimento tenha sido realizado no CachyOS, ele também pode ser reproduzido em praticamente qualquer distribuição baseada em Arch Linux, como Arch Linux, EndeavourOS, Garuda Linux e Manjaro, com poucas ou nenhuma adaptação.
Ao final deste guia você terá o OmniVoice executando localmente, aproveitando toda a capacidade da GPU AMD para gerar vozes de alta qualidade sem depender de serviços externos.
Instalando o Python 3.11
O OmniVoice funciona melhor utilizando o Python 3.11.
pacman -S python311
Criando um ambiente virtual
Crie um diretório para o projeto e inicialize um ambiente virtual.
mkdir -p ~/dev/omnivoice
cd ~/dev/omnivoice
python3.11 -m venv .venv
Se você utiliza Fish Shell:
source .venv/bin/activate.fish
Caso utilize Bash:
source .venv/bin/activate
Atualizando o pip
pip install -U pip
Instalando o PyTorch com suporte ao ROCm
Instale a versão do PyTorch compatível com ROCm.
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/rocm6.4
Verificando se a GPU foi reconhecida
Execute:
python -c "import torch; print(torch.cuda.is_available()); print(torch.version.hip)"
O resultado esperado é parecido com este:
True
6.4.x
Se torch.cuda.is_available() retornar False, provavelmente o ROCm ainda não está reconhecendo corretamente sua GPU.
Instalando o OmniVoice
pip install omnivoice
Executando a interface Web
Inicie o servidor:
omnivoice-demo --ip 127.0.0.1 --port 8001
Depois abra no navegador:
http://127.0.0.1:8001
Toda a inferência acontece localmente na sua máquina. Nenhum áudio é enviado para servidores externos.
Caso a RX 6600 não seja detectada
Algumas placas RDNA2 precisam informar manualmente sua arquitetura ao ROCm.
Antes de iniciar o OmniVoice execute:
export HSA_OVERRIDE_GFX_VERSION=10.3.0
export PYTORCH_ROCM_ARCH=gfx1030
Depois execute novamente:
omnivoice-demo --ip 127.0.0.1 --port 8001
No meu caso essas variáveis foram necessárias para que a RX 6600 fosse utilizada corretamente.
Teste rápido via Python
Você também pode verificar se tudo está funcionando carregando o modelo diretamente.
from omnivoice import OmniVoice
import torch
model = OmniVoice.from_pretrained(
"k2-fsa/OmniVoice",
device_map="cuda:0",
dtype=torch.float16,
)
audio = model.generate(
text="Olá, este é um teste do OmniVoice."
)
Mesmo utilizando uma GPU AMD, o parâmetro continua sendo:
device_map="cuda:0"
Isso acontece porque o backend ROCm implementa a mesma interface CUDA utilizada pelo PyTorch.
Resumo da instalação
yay -S python311
mkdir -p ~/dev/omnivoice
cd ~/dev/omnivoice
python3.11 -m venv .venv
source .venv/bin/activate.fish
pip install -U pip
pip install torch torchvision torchaudio \
--index-url https://download.pytorch.org/whl/rocm6.4
python -c "import torch; print(torch.cuda.is_available()); print(torch.version.hip)"
pip install omnivoice
export HSA_OVERRIDE_GFX_VERSION=10.3.0
export PYTORCH_ROCM_ARCH=gfx1030
omnivoice-demo --ip 127.0.0.1 --port 8001
Conclusão
Depois dessa configuração, o OmniVoice passou a utilizar a RX 6600 normalmente no CachyOS. O processo de geração de voz ocorre inteiramente na GPU, proporcionando um desempenho muito superior ao da CPU.
Se você estiver utilizando outra placa RDNA2 ou RDNA3, talvez seja necessário ajustar as variáveis relacionadas à arquitetura (HSA_OVERRIDE_GFX_VERSION e PYTORCH_ROCM_ARCH), mas para a RX 6600 essa configuração funcionou sem problemas.