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