Действия

SPR. Руководство администратора: различия между версиями

Материал из Флора AI

Строка 238: Строка 238:
|-
|-
|speakers.wordMinLimit
|speakers.wordMinLimit
|3
|5
|Минимальный размер фразы при определении говорящих.
|Минимальный размер фразы при определении говорящих.
|-
|-
|speakers.timeMinLimit
|speakers.timeMinLimit
|2000
|3000
|Минимальная длина фразы, чтобы она могла быть использована для добавления нового говорящего.
|Минимальная длина фразы, чтобы она могла быть использована для добавления нового говорящего.
|-
|-
Строка 262: Строка 262:
|-
|-
|corrections
|corrections
|[]
|{ "big": "call"  }
|Добавление модели коррекции для стенографирования. Пример настройки:<blockquote>"corrections": {  
|Добавление модели коррекции для стенографирования.
       "big": "call"  
 
   }</blockquote>
|-
|-
|garbage
|garbage
|[]
|[ "—", "[*]" ]
|Массив фраз, которые считаются мусорными и откидываются из распознанного текста.
|Массив фраз, которые считаются мусорными и откидываются из распознанного текста.
|}
|}

Версия от 08:43, 20 ноября 2024

Общее описание сервиса распознавания речи (SPR)

Сервис предназначен для преобразования естественной речи в текст. Входными данными для сервиса являются аудиофайлы в формате *.wav, результатом работы выступают данные в текстовом формате.


Термины и определения

Short Phrase Recognizer (SPR) – сервис распознавания речи.


Модель - модель нейронной сети, описывает её архитектуру и конфигурацию, а также используемые алгоритмы обучения.


Расчет нагрузки SPR

Для нормальной работы сервиса требуются CPU с поддержкой инструкций AVX2 или новее:

  • Intel Haswell
  • Intel Broadwell
  • Intel Skylake
  • Intel Kaby Lake
  • Intel Coffee Lake
  • Intel Comet Lake
  • Intel Rocket Lake
  • Intel Alder Lake
  • AMD Excavator
  • AMD Zen (AMD Ryzen)
  • AMD Zen 2 (AMD Ryzen)
  • AMD Zen 3 (AMD Ryzen)

Сервис распознаёт поступающие аудио файлы последовательно на каждом воркере gunicorn.

По умолчанию воркер один, и соответственно канал распознавания один.

Сервис требует разных ресурсов в зависимости от сценария использования.

Распознавание для голосовых помощников - рекомендуется модель call и работа на GPU nvidia. Возможна работа на CPU. В этом случае приемлемую задержку распознавания для одиночных фраз можно получить на ВМ с 8 потоками 6Гб оперативной памяти с резервом по частоте 9600Мгц (соответствует 4 ядрам по 2.4Ггц). В этом случае 8 секундная речь будет распознана ориентировочно за 0.8с. 4 таких ВМ обеспечат распознавание голоса абонента в диалогах длительностью 60 - 80с с количеством одновременных диалогов до 60.

В случае использования GPU A16(одной из 4 голов на ВМ 8 потоков 6Гб) 8 секундная речь будет распознана примерно за 0.2с. На такой ВМ можно распознавать до 100 одновременных диалогов. При расчетах и моделировании предполагалось что за весь диалог длительностью 60 - 80с будет распознано до 6 фраз длительностью до 8с. GPU A16 содержит 1300 ядер cuda в одной голове. На более мощных GPU возможности возрастают кратно количеству cuda ядер.

При распознавании для голосовых помощников рекомендуется использовать от 2-х воркеров gunicorn (-w 2 в строке запуска в файле службы) в зависимости от наличия памяти.

Распознавание для диаризации (транскрибации) длительных переговоров - одновременное используются модели call и big. Распознавание на CPU в этом режиме не поддерживается. Для распознавания рекомендуется минимум ВМ 8 ядер 16Гб GPU A16. На такой ВМ время распознавания в 2.5 раза меньше длительности аудио. На GPU V100 время распознавания меньше длительности аудио ориентировочно в 5 раз. Пример распознавания одного и того же файла на разных GPU:

Карта Видеопамять Количество ядер CUDA Время распознавания

(минут)

Примечание
A100 80 6912 12
V100 16 5120 16
RTX 3060 12 3584 24
A16 16 1280 33 1/4 карты


Переключение между режимами распознавания - в зависимости от длительности аудио. Аудио короче 30c распознаются для голосовых помощников. Остальные аудио разбиваются на фразы и выделяются фрагменты речи принадлежащие разным лицам, то есть формат вывода тоже изменяется.

Требования к загружаемому аудио

Для преобразования фрагментов речи в текст используйте аудио в форматах, поддерживаемых ffmpeg.


Установка/обновление SPR

Дистрибутив распространяется в виде установочных пакетов для окружения и сервиса. Загрузите установочные пакеты на сервер и выполните команды для Вашей системы в каталоге с пакетом.

Перед установкой непосредственно сервиса необходимо установить сервисный пакет окружения.

  • Установка/обновление SPR осуществляется скриптом chmod +x ./spr-<версия>-<релиз>.sh && ./spr-<версия>-<релиз>.sh -i с правами администратора. Список всех ключей инсталлятора можно посмотреть, запустив инсталлятор ./spr-<версия>-<релиз>.sh без ключей.
  • Загрузить последнюю версию продукта curl -s "https://repo.connect2ai.net/api/spr/new" --user '[user]:[pass]' 2>&1 | bash или в интерактивном режиме bash -c "$(curl -s https://repo.connect2ai.net/api/spr --user '[user]:[pass]' 2>&1)".
  • Обновить SPR /opt/spr/inupdate в интерактивном режиме. Или запустить с ключём:
    • /opt/spr/inupdate -b - обновить до последней beta версии;
    • /opt/spr/inupdate -r - обновить до последней release версии;
    • /opt/spr/inupdate -n - обновить до последней версии (не важно beta или release).
  • Установить модели /opt/spr/inmodel в интерактивном режиме.
  • Проверить актуальную версию продукта curl -s "https://repo.connect2ai.net/api/spr/version.
  • Посмотреть лог изменений curl -s "https://repo.connect2ai.net/api/spr/changelog" --user '[user]:[pass]'.
  • Полное описание всех команд API репозитория можно найти по ссылке https://repo.connect2ai.net/api. [user]:[pass] - это тот же логин и пароль, что и от Nextcloud.
  • В папке с продуктом можно добавить 2 файла конфигурации (допускается один общий файл на все продукты в папке с окружением /opt/pve/):
    • echo -n "[user]:[pass]" > /opt/spr/.userapi (это файл авторизации в API, нужен для обновления и загрузки моделей)
    • echo -n "http://example.com:3128 [user] [password]" > /opt/spr/.proxy (это файл конфигурации proxy необходим для обновления и загрузки моделей, при отсутсвующем прямом подключение к интернету)

При обновление следующий список файлов и папок сохранияется: .userapi, .proxy, logs, nnets, config.json, cache, pretrained, pve, data. Сервис не требует остановки и возвращается в актуальное состояние после обновления.

Не забудьте запустить сервис и включить в автозапуск в системе:

sudo systemctl enable spr.service && sudo systemctl start spr.service

Удостоверьтесь, что сервис стартовал:

systemctl status spr.service

Разрешите доступ к порту 6183 на нужном интерфейсе по протоколу tcp.


Установка моделей SPR

Установка моделей возможна как прямым копированием файла модели, так и загрузкой по API. Подробнее о загрузке моделей по API смотрите в руководстве пользователя.

Модели располагаются в каталоге /opt/spr/nnets/. Для установки модели необходимо создать каталог /opt/spr/nnets/<название модели>/ и скопировать в него файл model, после чего перезагрузить сервис командой systemctl restart spr

Чтобы убедиться, что модели доступны, выполните запрос

curl -H "accept: application/json" -X GET "http://АДРЕС_СЕРВЕРА:6183/spr/"

В ответе должно содержаться название новой модели или перечень названий моделей в формате json.

Проверить корректность работы модели можно запросом к API с отправкой файла на распознавание:

curl -X POST "http://АДРЕС_СЕРВЕРА:6183/spr/stt/common" -H "accept: application/json" -H "Content-Type: multipart/form-data" -F "wav=@ФАЙЛ.wav;type=audio/wav"


Некоторые модели работают только на GPU. На данный момент такая модель только одна - "big".


Внешние модули распознавания

Сервис SPR поддерживает установку произвольных модулей распознавания. Для этого папка external должна содержать директорию с нужным модулем, в которой обязательным является наличие файла handler.py с функцией recognize(data,sr). Сервис передаст в данную функцию аудиоданные в переменную data, в формате pydub.AudioSegment, а также значение sample rate в переменной sr. Готовые внешние модули распознавания доступны по ссылке.

Проверить корректность работы модели можно запросом к API с отправкой файла на распознавание:

curl -X POST "http://АДРЕС_СЕРВЕРА:6183/spr/stt/Имя_Модуля" -H "accept: application/json" -H "Content-Type: multipart/form-data" -F "wav=@ФАЙЛ.wav;type=audio/wav"
Со списком методов можно ознакомиться в руководстве пользователя. Метод на загрузку модели curl -X GET "http://АДРЕС_СЕРВЕРА:6183/spr/data/Имя_Модуля" -H  "accept: application/json" не работает с модулями в целях безопасности. Так же модули не отображаются в списке моделей по запросу curl -X GET "http://АДРЕС_СЕРВЕРА:6183/spr/" -H  "accept: application/json". В некоторых модулях конфигурация может быть вынесена в отдельный файл. Например, для модуля yandex это - /opt/spr/external/config.json.


Конфигурирование параметров сервиса SPR

Настройка параметров сервиса spr производится в файле /opt/spr/params.json

Описание параметров приведено в таблице

Параметр По умолчанию Назначение
namespace spr Префикс пути вызова методов методам API. http://СЕРВЕР:6183/ПРЕФИКС/ПУТЬ_К _МЕТОДУ.
max_gpu_memory 0.6 Лимит использования ОЗУ видеокарты.
punctuation false Расстановка знаков препинания через сервис SMC.
normalization false Обратная нормализация текста через сервис SMC.
toxicity false Анализ текста на токсичность через сервис SMC.
emotions false Анализ текста на эмоции через сервис SMC.
voice_analyzer false Анализ голоса спикера на эмоции, возраст, пол через сервис SBS.
logs.path logs/ Путь к папке логов
logs.backups 10 Количество старых сохраняемых логов
logs.maxSize 5242880 Максимальный размер текущего лог-файла, в байтах
cache.lifetime 604800 Время жизни кэша результатов отложенного распознавания
sbs.url http://127.0.0.1:6185 Путь к сервису биометрии для получения метаданных голосового фрагмента.
sbs.conn_timeout 2 Таймаут на подключение к API SBS
sbs.read_timeout 30 Таймаут на получения ответа от API SBS
smc.url http://127.0.0.1:6181 Путь к сервису классификации для дополнительной работы с распознанным текстом.
smc.conn_timeout 2 Таймаут на подключение к API SMC
smc.read_timeout 30 Таймаут на получения ответа от API SMC
vad.default webrtc Тип VAD по умолчанию для разбивки аудиофайлов. Возможные значения - пока только webrtc.
vad.maxSilence 1200 Длительность паузы в речи в миллисекундах для разбивки длинных аудиофайлов на фрагменты.
speakers.similarityThreshold 0.7 Порог различия для разделения говорящих.
speakers.maxSpeechLength 10000 Максимальная длительность фрагмента для сравнения говорящих в миллисекундах.
speakers.wordMinLimit 5 Минимальный размер фразы при определении говорящих.
speakers.timeMinLimit 3000 Минимальная длина фразы, чтобы она могла быть использована для добавления нового говорящего.
speakers.batch 4 Количество одновременного анализируемых аудиофрагментов при разделении говорящих.
speakers.concatEqual true Склеивать последовательные фразы одного и того же говорящего.
speakers.defaultModel call Модель определения говорящего.
blacklist [] Список моделей распознавания в папках nnets и external, которые не должны быть загружены при старте сервиса SPR.
corrections { "big": "call"  } Добавление модели коррекции для стенографирования.
garbage [ "—", "[*]" ] Массив фраз, которые считаются мусорными и откидываются из распознанного текста.


Сбор данных об ошибках

Логи сервиса по умолчанию находятся в файле /opt/spr/logs/log.txt


Удаление

Для удаления выполните команду: /opt/spr/uninstall. Команда деинсталлирует сервис и удалит рабочий каталог, включая все установленные модели.


Практические рекомендации

Сервис spr на системах с видеокартой на большой нагрузке может не полностью использовать ресурсы GPU, при этом могут быть задержки в распознавании. Для более полного использования ресурсов рекомендуется в строке запуска gunicorn в файле сервиса добавить параметр "-w 2". Это приведет к загрузке в видеопамять 2-х экземпляров приложения и моделей. Таким образом приложение сможет более эффективно использовать ресурсы GPU, но при этом возрастет потребность в памяти GPU.

В случае если в системе обработки речи используется несколько несимметричных по ресурсам серверов spr, регулировать нагрузку на них можно указывая адрес сервера в котором больше ресурсов, большее количество раз - в разделе "spr.cluster" конфигурационного файла ups.


Часто задаваемые вопросы
Вопрос Ответ