OpenAI Whisper на GPU: транскрипция и диаризация в облаке

Задача страницы. Показать, как запустить транскрипцию аудио через Whisper и Faster-Whisper на GPU-сервере: от одиночного файла до batch-обработки и диаризации (определения говорящих).

Что такое OpenAI Whisper

Whisper — модель автоматического распознавания речи (ASR) от OpenAI с открытым кодом. Обучена на 680 000 часах размеченного аудио с 99 языков, включая русский.

Ключевые характеристики:

  • Многоязычность: 99 языков, автоматическое определение языка.
  • Несколько размеров модели — от tiny (39M параметров) до large-v3 (1.5B); баланс между скоростью и точностью.
  • Форматы вывода: txt, srt, vtt, json, tsv — субтитры и транскрипты из коробки.
  • Устойчивость к шуму: хорошо работает с неидеальным аудио, телефонными записями, акцентами.

Зачем GPU: large-v3 на CPU обрабатывает ~1 минуту аудио за 10 минут реального времени; на A100 — за 5 секунд. Для batch-транскрипции тысяч файлов GPU — единственный практичный вариант.

Модели Whisper

Модель Параметры VRAM Скорость (RTX 4090) Точность
tiny 39M ~1 GB ~100× realtime низкая
base 74M ~1 GB ~70× realtime низкая
small 244M ~2 GB ~40× realtime средняя
medium 769M ~5 GB ~15× realtime хорошая
large-v2 1.5B ~10 GB ~6× realtime отличная
large-v3 1.5B ~10 GB ~6× realtime лучшая

Для русского языка и задач, где важна точность, — large-v3. Для быстрой предобработки и случаев с ограниченным VRAM — small или medium.

Запуск через Docker (оригинальный Whisper)

docker run --gpus all \
  -v /path/to/audio:/audio \
  openai/whisper \
  whisper /audio/input.mp3 \
  --model large-v3 \
  --language Russian \
  --output_format srt \
  --output_dir /audio

Результат сохраняется в /audio/input.srt. Поддерживаются форматы MP3, WAV, MP4, M4A, FLAC и другие.

Пакетная обработка нескольких файлов:

docker run --gpus all \
  -v /path/to/audio:/audio \
  openai/whisper \
  whisper /audio/*.mp3 \
  --model large-v3 \
  --language Russian \
  --output_format json

Faster-Whisper — приоритетный вариант для продакшена

Faster-Whisper — реализация Whisper на CTranslate2 с поддержкой int8-квантизации. По сравнению с оригинальным Whisper:

  • В 4× быстрее при том же качестве.
  • Значительно меньше VRAM: large-v3 в int8 — ~4 GB вместо 10 GB.
  • Поддержка batching — параллельная обработка нескольких файлов.
  • Word-level timestamps — временны́е метки для каждого слова.

Установка и Python API

pip install faster-whisper
from faster_whisper import WhisperModel

model = WhisperModel("large-v3", device="cuda", compute_type="float16")
segments, info = model.transcribe("audio.mp3", language="ru")

print(f"Язык: {info.language}, вероятность: {info.language_probability:.2f}")

for segment in segments:
    print(f"[{segment.start:.2f} -> {segment.end:.2f}] {segment.text}")

Параметры compute_type:

  • float16 — быстро, хорошее качество, ~6 GB VRAM для large-v3.
  • int8_float16 — быстрее, ~4 GB VRAM, минимальная потеря качества.
  • int8 — минимальный след памяти, подходит для CPU.

Через Docker (faster-whisper-server)

docker run --gpus all \
  -p 8000:8000 \
  -v /path/to/audio:/audio \
  fedirz/faster-whisper-server:latest-cuda \
  --model large-v3

Поднимает HTTP API, совместимый с OpenAI /v1/audio/transcriptions.

Транскрипция через API:

curl http://localhost:8000/v1/audio/transcriptions \
  -F "file=@/path/to/audio.mp3" \
  -F "model=large-v3" \
  -F "language=ru"

docker-compose.yml для production

services:
  faster-whisper:
    image: fedirz/faster-whisper-server:latest-cuda
    runtime: nvidia
    environment:
      - NVIDIA_VISIBLE_DEVICES=all
    volumes:
      - whisper_models:/root/.cache/huggingface
    ports:
      - "8000:8000"
    command: ["--model", "large-v3", "--language", "ru"]
    restart: unless-stopped

volumes:
  whisper_models:

Диаризация — кто говорит (pyannote.audio)

Диаризация определяет, кто говорит в каждый момент времени. Совмещение Faster-Whisper и pyannote.audio даёт транскрипт с разбивкой по спикерам.

from pyannote.audio import Pipeline
from faster_whisper import WhisperModel

# Диаризация — требует HuggingFace токен и принятие лицензии модели
# https://huggingface.co/pyannote/speaker-diarization-3.1
diarization_pipeline = Pipeline.from_pretrained(
    "pyannote/speaker-diarization-3.1",
    use_auth_token="HF_TOKEN"
)
diarization = diarization_pipeline("audio.mp3")

# Транскрипция
whisper_model = WhisperModel("large-v3", device="cuda", compute_type="float16")
segments, _ = whisper_model.transcribe("audio.mp3", word_timestamps=True)

# Совмещение: для каждого сегмента Whisper найти говорящего по диаризации
for segment in segments:
    speaker = "UNKNOWN"
    for turn, _, spk in diarization.itertracks(yield_label=True):
        # Найти спикера, чей сегмент перекрывается с сегментом Whisper
        if turn.start <= segment.start and turn.end >= segment.end:
            speaker = spk
            break
    print(f"[{speaker}] [{segment.start:.1f}s -> {segment.end:.1f}s] {segment.text}")

Требования к pyannote: необходимо принять лицензию модели на huggingface.co/pyannote/speaker-diarization-3.1 и создать токен HuggingFace с правом чтения. VRAM: ~2 GB для диаризации + ~6 GB для large-v3 = рекомендуется GPU с 16+ GB.

REST API для транскрипции (whisper.cpp + server)

whisper.cpp — C++ реализация Whisper со встроенным HTTP-сервером. Минимальные зависимости, работает на CPU и GPU.

# Сборка с CUDA
cmake -B build -DGGML_CUDA=ON
cmake --build build --config Release

# Загрузка модели (GGML-формат)
bash models/download-ggml-model.sh large-v3

# Запуск сервера
./build/bin/whisper-server \
  -m models/ggml-large-v3.bin \
  --host 0.0.0.0 \
  --port 9000

Транскрипция:

curl http://localhost:9000/inference \
  -F "file=@audio.mp3" \
  -F "response-format=json"

Форматы вывода

Формат Описание Когда использовать
txt Чистый текст Индексация, NLP-обработка
srt Субтитры с временными метками Видео, стриминг
vtt WebVTT субтитры Web-плееры
json JSON с сегментами и метаданными API-интеграция, постобработка
tsv Таблица: начало, конец, текст Аналитика, Excel

Производительность: выбор GPU

GPU VRAM large-v3 скорость Подходит для
RTX 3090 / 4090 24 GB ~30× realtime Разовые задачи, small batches
A100 40GB 40 GB ~100× realtime Batch-обработка, production
A100 80GB 80 GB ~100× realtime Параллельная диаризация + транскрипция

Faster-Whisper с int8_float16 работает даже на GPU с 6 GB VRAM (модели small/medium). Для large-v3 в production — рекомендуется минимум RTX 4090 или A100.

Если нужны одновременно Whisper и LLM — выбирайте A100 80GB: стоимость инференса.

Запустить Whisper на cloudcompute.ru

Разверните GPU-инстанс, поднимите faster-whisper-server — REST API для транскрипции готов за несколько минут.

Выбрать тариф и запустить

Навигация

Смежные разделы: Диаризация, Embeddings, Стоимость GPU

Готовы запустить?

Запустить GPU-сервер