Действия

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

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

Нет описания правки
 
(не показаны 2 промежуточные версии 2 участников)
Строка 7: Строка 7:
Short Phrase Recognizer (SPR) — сервис распознавания речи.
Short Phrase Recognizer (SPR) — сервис распознавания речи.


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




Строка 76: Строка 76:
** <code>/opt/spr/inupdate -b</code>  — обновить до последней beta версии;
** <code>/opt/spr/inupdate -b</code>  — обновить до последней beta версии;
** <code>/opt/spr/inupdate -r</code>  — обновить до последней release версии;
** <code>/opt/spr/inupdate -r</code>  — обновить до последней release версии;
** <code>/opt/spr/inupdate -n</code>  — обновить до последней версии (не важно beta или release).
** <code>/opt/spr/inupdate -n</code>  — обновить до последней версии (неважно beta или release).
* Установить модели  <code>/opt/spr/inmodel</code> в интерактивном режиме.
* Установить модели  <code>/opt/spr/inmodel</code> в интерактивном режиме.
* Проверить актуальную версию продукта <code>curl -s "<nowiki>https://repo.connect2ai.net/api/spr/version</nowiki></code>.
* Проверить актуальную версию продукта <code>curl -s "<nowiki>https://repo.connect2ai.net/api/spr/version</nowiki></code>.
Строка 96: Строка 96:


Разрешите доступ к порту 6183 на нужном интерфейсе по протоколу tcp.     
Разрешите доступ к порту 6183 на нужном интерфейсе по протоколу tcp.     
===== '''Лицензия''' =====
Сервис не функционирует без действующей лицензии. Информация о лицензии хранится в файле:
<code>/opt/spr/license.json</code>
Файл лицензии должен соответствовать следующему формату:
<code>{"service": "spr", "expire": "2045-01-01", "licenses": , "key": ""}</code>
Для получения лицензии необходимо:
1. Запустить сервис <code>systemctl start spr</code> и извлечь UUID, указанный в файле <code>/opt/spr/logs/log.txt</code>
2. Передать полученный UUID руководителю проекта для оформления лицензии.




Строка 114: Строка 131:
<code>curl -X POST "<nowiki>http://АДРЕС_СЕРВЕРА:6183/spr/stt/common</nowiki>" -H "accept: application/json" -H "Content-Type: multipart/form-data" -F "wav=@ФАЙЛ.wav;type=audio/wav"</code>
<code>curl -X POST "<nowiki>http://АДРЕС_СЕРВЕРА:6183/spr/stt/common</nowiki>" -H "accept: application/json" -H "Content-Type: multipart/form-data" -F "wav=@ФАЙЛ.wav;type=audio/wav"</code>


Некоторые модели работают только на GPU. На данный момент такая модель только одна — «big».<br>
Некоторые модели работают только на GPU. На данный момент такая модель только одна — «big».<br>




Строка 207: Строка 224:
|30
|30
|Таймаут на получение ответа от API SMC.
|Таймаут на получение ответа от API SMC.
|-
|see.url
|<nowiki>http://127.0.0.1:6184</nowiki>
|Путь к [[SEE. Руководство пользователя|сервису поиска сущностей]] для дополнительной работы с распознанным текстом.
|-
|see.conn_timeout
|2
|Таймаут на подключение к API SEE.
|-
|see.read_timeout
|30
|Таймаут на получение ответа от API SEE.
|-
|-
|vad.default
|vad.default
Строка 260: Строка 289:
====='''Сбор данных об ошибках'''=====
====='''Сбор данных об ошибках'''=====
Логи сервиса по умолчанию находятся в файле /opt/spr/logs/log.txt<br>
Логи сервиса по умолчанию находятся в файле /opt/spr/logs/log.txt<br>


====='''Удаление'''=====
====='''Удаление'''=====

Текущая версия от 08:11, 3 июля 2025

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

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


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

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

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


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

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

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

Распознавание для голосовых помощников — рекомендуется модель common и работа на 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 в строке запуска в файле службы) в зависимости от наличия памяти.

Распознавание для диаризации (транскрибации) длительных переговоров — одновременное, используются модели common и 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 карты


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

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

Для преобразования фрагментов речи в текст используйте аудио в форматах, поддерживаемых 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.


Лицензия

Сервис не функционирует без действующей лицензии. Информация о лицензии хранится в файле:

/opt/spr/license.json

Файл лицензии должен соответствовать следующему формату:

{"service": "spr", "expire": "2045-01-01", "licenses": , "key": ""}

Для получения лицензии необходимо:

1. Запустить сервис systemctl start spr и извлечь UUID, указанный в файле /opt/spr/logs/log.txt

2. Передать полученный UUID руководителю проекта для оформления лицензии.


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

Установка моделей возможна прямым копированием файла модели или загрузкой через API сервиса (метод POST /spr/data/{id}).

Модели располагаются в каталоге /opt/spr/nnets/. Для установки модели необходимо создать каталог /opt/spr/nnets/<название модели>/ и скопировать в него содержимое архива модели, после чего перезагрузить сервис командой 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.
save_audio_requests false Записывать аудио получаемые для распознавания в синхронном режиме. Будут сохраняться в /tmp/spr/. Только для диагностики. Не применять в нагруженных серверах.
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.
see.url http://127.0.0.1:6184 Путь к сервису поиска сущностей для дополнительной работы с распознанным текстом.
see.conn_timeout 2 Таймаут на подключение к API SEE.
see.read_timeout 30 Таймаут на получение ответа от API SEE.
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": "common"  } Добавление модели коррекции для стенографирования.
garbage [ "—", "[*]" ] Массив фраз, которые считаются мусорными и откидываются из распознанного текста.


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

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


Удаление

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


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

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

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