Migração do Whisper de CPU para GPU#

Este guia descreve como mover o serviço de reconhecimento de fala Whisper de CPU para uma GPU NVIDIA na instalação cliente do Sherpa AI Server. Não é necessário alterar os demais serviços nem o modo de inicialização do LLM selecionado.

Requisitos#

Antes de fazer a troca, verifique se:

  • há uma GPU NVIDIA instalada no servidor com memória de vídeo suficiente;
  • nvidia-smi detecta a placa de vídeo;
  • o NVIDIA Container Toolkit e o suporte a GPU NVIDIA no Docker estão instalados;
  • a imagem aiserver-whisper:latest já foi baixada;
  • o modelo Whisper está descompactado em ./whisper/models.

Verificação do acesso do Docker à GPU#

nvidia-smi

Se nvidia-smi não detectar a GPU ou se o Docker não estiver configurado para funcionar com o NVIDIA Container Toolkit, corrija esse problema primeiro. Caso contrário, o contêiner do Whisper não será iniciado em modo GPU.

Configuração de docker-compose.yml#

Abra o docker-compose.yml e encontre o serviço aiserver-whisper:

  aiserver-whisper:
    container_name: aiserver-whisper
    image: aiserver-whisper:latest

No bloco do serviço, descomente as variáveis WHISPER_DEVICE, CUDA_DEVICE_INDEX e a seção deploy. A configuração final deve ficar assim:

  aiserver-whisper:
    container_name: aiserver-whisper
    image: aiserver-whisper:latest
    restart: unless-stopped
    profiles: ["whisper", "full"]
    environment:
      - WHISPER_MODEL=${WHISPER_MODEL:-base}
      - WHISPER_MODEL_DIR=/models
      - WHISPER_API_KEY=${WHISPER_API_KEY:-}
      - WHISPER_DEVICE=cuda:0
      - CUDA_DEVICE_INDEX=0
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]
    ports:
      - 3005:8000
    volumes:
      - ./whisper/models:/models:ro

WHISPER_DEVICE=cuda:0 seleciona explicitamente a primeira GPU disponível para o contêiner. CUDA_DEVICE_INDEX é usado como configuração de fallback quando WHISPER_DEVICE não está presente; no Compose do cliente, mantenha os índices alinhados. Se o Whisper precisar usar outra GPU, especifique, por exemplo, cuda:1 e CUDA_DEVICE_INDEX=1.

Importante: quando LLM, Whisper e BGE Reranker estiverem em execução ao mesmo tempo, leve em conta o consumo total de VRAM. A falta de memória de vídeo pode causar o erro CUDA out of memory.

Verificação da configuração#

Antes de reiniciar, verifique a sintaxe do arquivo Compose:

docker compose --profile whisper config --quiet

O comando termina sem saída se a configuração estiver correta.

Reiniciando o Whisper em modo GPU#

Recrie apenas o contêiner do Whisper para que as novas variáveis de ambiente e a reserva de GPU sejam aplicadas:

docker compose --profile whisper up -d --force-recreate aiserver-whisper

Um docker compose restart normal não é suficiente: esse comando não aplica alterações na configuração do contêiner.

Verificação do status e dos logs#

docker compose --profile whisper ps aiserver-whisper
docker compose --profile whisper logs --tail=100 aiserver-whisper

O contêiner aiserver-whisper deve estar no estado Up.

Verificação do dispositivo selecionado#

O Whisper publica informações de diagnóstico no endpoint /health:

curl -sS http://127.0.0.1:3005/health

Resposta esperada:

{
  "status": "healthy",
  "device": "cuda:0",
  "cuda_available": true,
  "cuda_device_count": 1
}

A quantidade de GPUs disponíveis pode variar. Os sinais principais de uma troca bem-sucedida são que device comece com cuda e que cuda_available seja true.

Enquanto a transcrição estiver em execução, verifique também o uso da GPU:

watch -n 1 nvidia-smi

Possíveis problemas#

could not select device driver "nvidia"#

O Docker não vê o runtime da NVIDIA. Verifique a instalação do NVIDIA Container Toolkit e então execute:

sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker

Depois de reiniciar o Docker, recrie o contêiner do Whisper novamente.

cuda_available é false#

Verifique nvidia-smi, as configurações do NVIDIA Container Toolkit e a presença da seção deploy.resources.reservations.devices na configuração final:

docker compose --profile whisper config

CUDA out of memory#

Não há memória de vídeo livre suficiente na GPU selecionada. Pare processos de GPU desnecessários, escolha outra GPU ou reduza o modelo Whisper pela variável WHISPER_MODEL no .env.

Reversão para CPU#

Para voltar o Whisper para CPU:

  1. Comente ou remova WHISPER_DEVICE, CUDA_DEVICE_INDEX e a seção deploy do serviço aiserver-whisper.
  2. Verifique a configuração e recrie o contêiner:
docker compose --profile whisper config --quiet
docker compose --profile whisper up -d --force-recreate aiserver-whisper
curl -sS http://127.0.0.1:3005/health

Após a reversão, /health deve retornar "device":"cpu" e "cuda_available":false.