Migración de Whisper de CPU a GPU#

Esta guía describe cómo trasladar el servicio de reconocimiento de voz Whisper de CPU a una GPU NVIDIA en la instalación cliente de Sherpa AI Server. No es necesario cambiar los demás servicios ni el modo de inicio de LLM seleccionado.

Requisitos#

Antes de cambiar, asegúrese de que:

  • en el servidor haya instalada una GPU NVIDIA con suficiente memoria de video;
  • nvidia-smi detecte la tarjeta gráfica;
  • estén instalados NVIDIA Container Toolkit y la compatibilidad con GPU NVIDIA en Docker;
  • la imagen aiserver-whisper:latest ya esté descargada;
  • el modelo Whisper esté descomprimido en ./whisper/models.

Verificación del acceso de Docker a la GPU#

nvidia-smi

Si nvidia-smi no detecta la GPU o Docker no está configurado para funcionar con NVIDIA Container Toolkit, primero resuelva ese problema. De lo contrario, el contenedor de Whisper no se iniciará en modo GPU.

Configuración de docker-compose.yml#

Abra docker-compose.yml y busque el servicio aiserver-whisper:

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

En el bloque del servicio, descomente las variables WHISPER_DEVICE, CUDA_DEVICE_INDEX y la sección deploy. La configuración final debe verse así:

  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 selecciona explícitamente la primera GPU disponible para el contenedor. CUDA_DEVICE_INDEX se usa como configuración de reserva cuando WHISPER_DEVICE no está presente; en el Compose del cliente, mantenga los índices alineados. Si Whisper debe usar otra GPU, especifique, por ejemplo, cuda:1 y CUDA_DEVICE_INDEX=1.

Importante: cuando LLM, Whisper y BGE Reranker se ejecutan al mismo tiempo, tenga en cuenta el consumo total de VRAM. La falta de memoria de video puede provocar el error CUDA out of memory.

Verificación de la configuración#

Antes de reiniciar, compruebe la sintaxis del archivo Compose:

docker compose --profile whisper config --quiet

El comando finaliza sin salida si la configuración es correcta.

Reinicio de Whisper en modo GPU#

Vuelva a crear solo el contenedor de Whisper para que se apliquen las nuevas variables de entorno y la reserva de GPU:

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

Un docker compose restart normal no es suficiente: ese comando no aplica cambios de configuración del contenedor.

Verificación del estado y los registros#

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

El contenedor aiserver-whisper debe estar en estado Up.

Verificación del dispositivo seleccionado#

Whisper publica información de diagnóstico en el endpoint /health:

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

Respuesta esperada:

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

La cantidad de GPU disponibles puede variar. Las señales clave de un cambio exitoso son que device comience con cuda y que cuda_available sea true.

Mientras se ejecuta la transcripción, también verifique el uso de la GPU:

watch -n 1 nvidia-smi

Posibles problemas#

could not select device driver "nvidia"#

Docker no detecta el runtime de NVIDIA. Compruebe la instalación de NVIDIA Container Toolkit y luego ejecute:

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

Después de reiniciar Docker, vuelva a crear el contenedor de Whisper.

cuda_available es false#

Compruebe nvidia-smi, la configuración de NVIDIA Container Toolkit y la presencia de la sección deploy.resources.reservations.devices en la configuración final:

docker compose --profile whisper config

CUDA out of memory#

No hay suficiente memoria de video libre en la GPU seleccionada. Detenga los procesos innecesarios de GPU, elija otra GPU o reduzca el modelo Whisper mediante la variable WHISPER_MODEL en .env.

Reversión a CPU#

Para volver Whisper a CPU:

  1. Comente o elimine WHISPER_DEVICE, CUDA_DEVICE_INDEX y la sección deploy del servicio aiserver-whisper.
  2. Verifique la configuración y vuelva a crear el contenedor:
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

Después de la reversión, /health debe devolver "device":"cpu" y "cuda_available":false.