АСК Легарус

Поиск

Релиз

Содержание

Нужна помощь?

Не нашли ответ на свой вопрос? Свяжитесь с нашей службой поддержки.

Обратиться в поддержку

2.4 ML — STT, Ollama, модели

Обновлено: 09 Октябрь 2026 Версия: 2.4.0

Документ описывает компоненты распознавания записей совещаний и локального LLM после установки по 2.2 Установка. Технические детали пайплайна — в репозитории ASK: ml_services/STT_PIPELINE.md, ml_services/models/README.md.

Зачем это нужно

Компонент Назначение
ffmpeg / ffprobe Видео/аудио (.webm, .mp4, …) → WAV 16 кГц mono перед STT
GigaAM-v3 RNNT Primary ASR (русский)
faster-whisper large-v3 Fallback ASR на «подозрительных» интервалах
pyannote Диаризация (разделение спикеров)
Ollama + Qwen3-4B Саммари протокола и генерация черновиков статей KB
Celery очередь stt Тяжёлые задачи transcribe_stt_result, compute_voice_embedding
HF_TOKEN Доступ к gated-моделям Hugging Face (см. ниже)

Включение функции в UI: Настройки → Задачи → «Распознавание записей совещаний» (MEETING_RECORDING_SUMMARY_ENABLED, по умолчанию выключено).

Требования к серверу

Для STT на CPU рекомендуется не менее 16 ГБ RAM. На 4 ГБ VPS загрузка GigaAM/Whisper приводит к OOM (нужен swap и concurrency=1, но работа будет медленной). Диск: модели Whisper + pyannote + GigaAM ckpt + GGUF Qwen — порядка десятки ГБ свободного места в /var/www/ml_models/ и /var/lib/ask-ollama.

Системные пакеты

sudo apt-get install -y ffmpeg
ffmpeg -version
ffprobe -version

Без ffmpeg Celery логирует No such file or directory: 'ffmpeg' и падает на load_waveform_tensor: ожидается WAV, получен .webm.

Python / PyTorch

Устанавливайте одинаковые CPU-колёса:

pip install torch==2.10.0 torchaudio==2.10.0 --index-url https://download.pytorch.org/whl/cpu
pip install -r requirements.txt --extra-index-url https://download.pytorch.org/whl/cpu

Смешение CUDA-torchaudio и CPU-torch ломает импорт. Пакет GigaAM в requirements.txt не pin'ится:

git clone --depth 1 https://github.com/salute-developers/GigaAM.git /var/www/GigaAM
pip install -e "/var/www/GigaAM[torch]"

Каталог моделей должен принадлежать пользователю Celery (например askprodadmin):

sudo mkdir -p /var/www/ml_models/gigaam
sudo chown -R askprodadmin:www-data /var/www/ml_models

Hugging Face токен — зачем он?

Это не «токен РФ» и не ключ лицензии АСК. Это персональный access token Hugging Face.

Нужен, потому что:

  1. Диаризация использует gated-модель pyannote/speaker-diarization-community-1 (нужно принять лицензию на странице модели и скачать веса в ml_models/pyannote-speaker-diarization-community-1/).
  2. GigaAM transcribe_longform вызывает VAD на базе pyannote/segmentation-3.0. Без токена (и без локального кэша) longform падает с ошибкой Model … was not found locally, and no HF_TOKEN was provided — пайплайн откатывается на chunked GigaAM.

Если модели уже лежат локально и longform не критичен, токен можно не задавать. Рекомендуется прописать в /var/www/ask/.env:

HF_TOKEN=hf_...
HUGGINGFACE_TOKEN=hf_...

Django/ml_services нормализуют оба имени: GigaAM читает именно HF_TOKEN. После изменения .env перезапустите Celery.

Ollama и модель саммари

sudo bash /var/www/ask/ml_services/scripts/setup_ollama.sh

Скрипт ставит только qwen3_4b_instruct_2507_q4_k_m (устаревшая qwen2_5_7b_instruct_q8 больше не используется в деплое ASK).

Путь Назначение
/var/lib/ask-ollama Runtime blobs Ollama (user ollama; не кладите в /home/... с правами 750)
/var/www/ml_models/qwen3_4b_instruct_2507_q4_k_m/ GGUF + Modelfile

Проверка:

systemctl status ollama --no-pager
curl -s http://127.0.0.1:11434/api/tags
ollama list

Переменные (опционально): OLLAMA_BASE_URL, OLLAMA_SUMMARY_MODEL, OLLAMA_KB_MODEL, OLLAMA_EXTRACT_MODEL — по умолчанию имя модели выше.

Celery

Два воркера (создаёт deploy.sh, см. также ручной шаг в 2.2 Установка):

Программа Очередь concurrency Потоки BLAS/OpenMP Примечание
celery celery 2 (на слабом VPS — 1) 1 Короткие/I-O задачи
celery-stt stt 1 6 на 8 vCPU (OMP_*, MKL_*, OPENBLAS_*, DIARIZATION_OMP_THREADS) nice -n 5, --prefetch-multiplier=1
celerybeat — — 1 Планировщик

Зачем так: один тяжёлый STT-процесс может занять до ~6 ядер (диаризация/PyTorch), два ядра остаются Django/PostgreSQL/Redis и обычному Celery. Обычный воркер не слушает stt, STT-воркер не слушает celery — иначе короткие задачи и распознавание дерутся за CPU/память.

Маршруты в config/settings.py (CELERY_TASK_ROUTES):

  • ml_services.tasks.transcribe_stt_result → stt
  • ml_services.tasks.compute_voice_embedding → stt

Без программы celery-stt задачи распознавания остаются в pending.

stopwaitsecs=600 у celery-stt — длинная транскрибация не должна обрываться при restart. На VPS с менее чем 12 ГБ RAM или менее чем 4 vCPU в deploy.sh для STT выставляется OMP=1.

Логи: /var/log/celery/worker.log, worker-stt.err, beat.log.

Каталог моделей (кратко)

/var/www/
  ask/
  ask_env/
  ml_models/
    faster-whisper-large-v3/
    pyannote-speaker-diarization-community-1/
    gigaam/                    # ckpt v3_rnnt (скачивается при первом запуске)
    qwen3_4b_instruct_2507_q4_k_m/
  GigaAM/                      # исходники editable install

Скачивание Whisper/pyannote — см. ml_services/models/README.md в репозитории.

Включение в продукте

  1. Убедиться, что ffmpeg, модели, GigaAM, Ollama и воркеры celery + celery-stt на месте (supervisorctl status).
  2. Настройки → Задачи → «Распознавание записей совещаний» = включено.
  3. На карточке совещания загрузить запись и запустить обработку.