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-сервер