Перевод Whisper с CPU на GPU#

Эта инструкция описывает перевод сервиса распознавания речи Whisper с CPU на NVIDIA GPU в клиентской установке Sherpa AIServer. Остальные сервисы и выбранный режим запуска LLM изменять не требуется.

Требования#

Перед переключением убедитесь, что:

  • на сервере установлена NVIDIA GPU с достаточным объёмом видеопамяти;
  • команда nvidia-smi видит видеокарту;
  • установлены NVIDIA Container Toolkit и поддержка NVIDIA GPU в Docker;
  • образ aiserver-whisper:latest уже загружен;
  • модель Whisper распакована в ./whisper/models.

Проверка доступа Docker к GPU#

nvidia-smi

Если nvidia-smi не видит GPU или Docker не настроен для работы с NVIDIA Container Toolkit, сначала устраните эту проблему. Иначе контейнер Whisper не запустится в GPU-режиме.

Настройка docker-compose.yml#

Откройте docker-compose.yml и найдите сервис aiserver-whisper:

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

В блоке сервиса раскомментируйте переменные WHISPER_DEVICE, CUDA_DEVICE_INDEX и секцию deploy. Итоговая конфигурация должна выглядеть так:

  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 явно выбирает первую доступную контейнеру видеокарту. CUDA_DEVICE_INDEX используется как резервная настройка при отсутствии WHISPER_DEVICE; в клиентском Compose оставляйте индексы согласованными. Если Whisper должен использовать другую GPU, укажите, например, cuda:1 и CUDA_DEVICE_INDEX=1.

Важно: при одновременном запуске LLM, Whisper и BGE Reranker учитывайте суммарное потребление VRAM. Нехватка видеопамяти может привести к ошибке CUDA out of memory.

Проверка конфигурации#

Перед перезапуском проверьте синтаксис Compose-файла:

docker compose --profile whisper config --quiet

Команда завершается без вывода, если конфигурация корректна.

Перезапуск Whisper в GPU-режиме#

Пересоздайте только контейнер Whisper, чтобы применились новые переменные окружения и reservation GPU:

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

Обычного docker compose restart недостаточно: эта команда не применяет изменения конфигурации контейнера.

Проверка статуса и логов#

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

Контейнер aiserver-whisper должен находиться в статусе Up.

Проверка выбранного устройства#

Whisper публикует диагностическую информацию на эндпоинте /health:

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

Ожидаемый ответ:

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

Количество доступных GPU может отличаться. Ключевые признаки успешного переключения: device начинается с cuda, а cuda_available имеет значение true.

Во время транскрибации дополнительно проверьте загрузку GPU:

watch -n 1 nvidia-smi

Возможные проблемы#

could not select device driver "nvidia"#

Docker не видит NVIDIA runtime. Проверьте установку NVIDIA Container Toolkit, затем выполните:

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

После перезапуска Docker снова пересоздайте контейнер Whisper.

cuda_available имеет значение false#

Проверьте nvidia-smi, настройки NVIDIA Container Toolkit и наличие секции deploy.resources.reservations.devices в итоговой конфигурации:

docker compose --profile whisper config

CUDA out of memory#

На выбранной GPU недостаточно свободной видеопамяти. Остановите лишние GPU-процессы, выберите другую GPU или уменьшите модель Whisper через переменную WHISPER_MODEL в .env.

Откат на CPU#

Чтобы вернуть Whisper на CPU:

  1. Закомментируйте или удалите WHISPER_DEVICE, CUDA_DEVICE_INDEX и секцию deploy из сервиса aiserver-whisper.
  2. Проверьте конфигурацию и пересоздайте контейнер:
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

После отката /health должен вернуть "device":"cpu" и "cuda_available":false.