Инструменты пользователя

Инструменты сайта


truenas:application:whisper_asr

Это старая версия документа!


Whisper ASR: сервер распознавания речи (GPU)

Введение

Инструкция описывает развёртывание сервера распознавания речи openai-whisper-asr-webservice (образ onerahmet/openai-whisper-asr-webservice) на GPU через Docker Compose и его подключение к AI Anki, где он используется для голосовых ответов на карточки, в AI-собеседованиях и на экзаменах.

Сервис принимает аудиофайл (webm, ogg, mp3, wav и др.) и возвращает распознанный текст через HTTP API /asr. Публичный адрес в нашей инфраструктуре — https://asr.webmastermsk.ru (за обратным прокси), внутри сети — порт 9890.

Важное замечание: изначально сервер работал на модели base. Она маленькая и плохо понимает русскую речь: технические термины превращались в обычные слова («SQL» → «Эсквель», «база данных» → «база донных»). Рекомендуемая конфигурация ниже — движок faster_whisper с моделью large-v3-turbo.

Требования

  • Видеокарта NVIDIA и Docker с поддержкой GPU (NVIDIA Container Toolkit).
  • Свободно ~2–3 ГБ видеопамяти для large-v3-turbo (около 1,5 ГБ в режиме int8).
  • Свободный порт 9890 (или любой другой).
  • Доступ в интернет при первом запуске — модель (~1,6 ГБ) скачивается автоматически.

Шаг 1: Docker Compose конфигурация

Итоговый вариант docker-compose.yml:

services:
  whisper-server:
    container_name: whisper-server
    deploy:
      resources:
        reservations:
          devices:
            - capabilities:
                - gpu
              count: 1
              driver: nvidia
    environment:
      - ASR_ENGINE=faster_whisper
      - ASR_MODEL=large-v3-turbo
      - ASR_DEVICE=cuda
      - ASR_QUANTIZATION=float16
      - ASR_MODEL_PATH=/data/whisper
      - MODEL_IDLE_TIMEOUT=300
    volumes:
      - whisper-models:/data/whisper
    image: onerahmet/openai-whisper-asr-webservice:latest-gpu
    ports:
      - '9890:9000'
    restart: unless-stopped

volumes:
  whisper-models:
Параметр Значение и зачем
ASR_ENGINE faster_whisper — тот же Whisper, но быстрее в несколько раз и экономнее по видеопамяти. Также есть openai_whisper и whisperx
ASR_MODEL large-v3-turbo — качество близко к large-v3 при гораздо большей скорости, хорошо понимает русский
ASR_DEVICE cuda — распознавание на GPU
ASR_QUANTIZATION float16 — стандарт для GPU. При нехватке видеопамяти — int8 (проверить int8_float16 в вашей версии образа)
ASR_MODEL_PATH + том модель скачивается один раз и не перекачивается при пересоздании контейнера
MODEL_IDLE_TIMEOUT выгрузка модели из видеопамяти после N секунд простоя — полезно, если GPU общий с Ollama (проверить: есть только в новых версиях образа, в старых игнорируется)

1.1. Выбор модели

Модель Видеопамять (float16, примерно) Русская речь Когда выбирать
base ~1 ГБ плохо, путает термины не рекомендуется
small ~1,5 ГБ средне очень слабая видеокарта
medium ~3 ГБ хорошо если turbo недоступна
large-v3-turbo ~2–3 ГБ очень хорошо рекомендуется
large-v3 ~4–5 ГБ лучше всего, но медленнее много свободной видеопамяти

Шаг 2: Развёртывание

2.1. Через веб-интерфейс TrueNAS

  1. Apps → Discover Apps → Custom App (или Install via YAML).
  2. Вставьте конфигурацию из Шага 1.
  3. Save → Deploy.

Для замены модели у существующего приложения: Apps → whisper-server → Edit → поменять environment → Save. Контейнер пересоздастся.

2.2. Через SSH

cd /путь/к/compose
docker compose up -d
docker logs -f whisper-server

При первом запросе модель скачивается в том whisper-models. Распознавание станет доступно через 1–2 минуты (зависит от скорости интернета).

Шаг 3: Проверка

Документация API (Swagger) открывается в браузере:

http://<IP-сервера>:9890/docs

Тестовое распознавание с консоли:

curl -s -X POST \
  -F "audio_file=@test.webm" \
  "http://<IP-сервера>:9890/asr?task=transcribe&language=ru&output=json&encode=true"

Ответ содержит поле text с распознанной фразой. Загрузку GPU и использование памяти можно посмотреть так:

nvidia-smi

3.1. Параметры запроса /asr

Параметр Пример Назначение
task transcribe распознать (translate — перевести на английский)
language ru язык речи; без него Whisper определяет язык сам и чаще ошибается
output json формат ответа (txt, vtt, srt, tsv, json)
encode true перекодировать вход через ffmpeg (нужно для webm/ogg из браузера)
initial_prompt Термины: SQL, JOIN, PHP подсказка: контекст и правильное написание терминов
vad_filter true вырезать тишину (faster_whisper)

Примечание: параметр initial_prompt сильно улучшает распознавание терминов. AI Anki автоматически передаёт в нём текст текущего вопроса и английские термины из него.

Шаг 4: Подключение к AI Anki

  1. Войдите в AI Anki под администратором.
  2. Настройки → раздел «Сервер»:
    • ASR URL (Whisper) — https://asr.webmastermsk.ru (или http:<IP>:9890 внутри сети); * ASR логин / пароль — если прокси требует Basic-авторизацию, иначе оставить пустыми. - Сохранить. - В разделе «Обучение» каждый пользователь может включить или выключить «Исправлять распознанную речь с помощью ИИ». Модель поправит неверно услышанные термины, не меняя смысл ответа. Кнопка «Голосом» появится в учебной сессии (текстовые карточки), в AI-собеседовании и на экзамене. ===== Проблемы и решения ===== ^ Проблема ^ Причина ^ Решение ^ | Термины распознаются как обычные слова («Эсквель», «база донных») | слабая модель base, нет контекста | large-v3-turbo + initial_prompt (AI Anki передаёт его сам) | | HTTP 500 на записи из браузера | формат webm/opus без перекодирования | передавать encode=true | | Первый запрос очень долгий | модель скачивается | дождаться загрузки, смотреть docker logs whisper-server | | Ollama стал медленным после смены модели | Whisper и Ollama делят видеопамять одной видеокарты, LLM уходит на CPU | ASR_QUANTIZATION=int8, MODEL_IDLE_TIMEOUT, проверить nvidia-smi | | 401 из AI Anki | прокси требует авторизацию | указать ASR логин и пароль в настройках AI Anki | | CUDA out of memory в логах | не хватает видеопамяти | модель меньше (medium, small) или int8'' | ===== Шпаргалка ===== <code bash> # логи сервиса docker logs -f whisper-server # перезапуск docker restart whisper-server # занятость видеопамяти nvidia-smi # тест распознавания curl -s -X POST -F «audio_file=@test.webm» \ «http:<IP>:9890/asr?task=transcribe&language=ru&output=json&encode=true» </code>
truenas/application/whisper_asr.1794664243.txt.gz · Последние изменения: 2026/11/14 13:50 — werwolf