Действия

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

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

Нет описания правки
 
(не показано 11 промежуточных версий 3 участников)
Строка 5: Строка 5:


====='''Термины и определения'''=====
====='''Термины и определения'''=====
Short Phrase Recognizer (SPR) сервис распознавания речи.
Short Phrase Recognizer (SPR) сервис распознавания речи.
 
 
Модель - модель нейронной сети, описывает её архитектуру и конфигурацию, а также используемые алгоритмы обучения.


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




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


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


'''Распознавание для голосовых помощников''' - рекомендуется модель common и работа на GPU nvidia. Возможна работа на '''CPU'''. В этом случае приемлемую задержку распознавания для одиночных фраз можно получить на ВМ с 8 потоками 6Гб оперативной памяти с резервом по частоте 9600Мгц (соответствует 4 ядрам по 2.4Ггц). В этом случае 8 секундная речь будет распознана ориентировочно за 0.8с. 4 таких ВМ обеспечат распознавание голоса абонента в диалогах длительностью 60 - 80с с количеством одновременных диалогов до 60.
Распознавание для голосовых помощников рекомендуется модель 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 фраз длительностью до . GPU A16 содержит 1300 ядер cuda в одной голове. На более мощных GPU возможности возрастают кратно количеству cuda ядер.
В случае использования GPU A16 (одной из 4 голов на ВМ 8 потоков, 6 Гб) 8-секундная речь будет распознана примерно за 0,2 с. На такой ВМ можно распознавать до 100 одновременных диалогов. При расчетах и моделировании предполагалось, что за весь диалог длительностью 60–80 с будет распознано до 6 фраз длительностью до 8 с. GPU A16 содержит 1300 ядер CUDA в одной голове. На более мощных GPU возможности возрастают кратно количеству CUDA ядер.


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


'''Распознавание для диаризации (транскрибации)''' длительных переговоров - одновременное используются модели common и big. Распознавание на CPU в этом режиме не поддерживается. Для распознавания рекомендуется минимум ВМ 8 ядер 16Гб GPU A16. На такой ВМ время распознавания в 2.5 раза меньше длительности аудио. На GPU V100 время распознавания меньше длительности аудио ориентировочно в 5 раз. Пример распознавания одного и того же файла на разных GPU:
Распознавание для диаризации (транскрибации) длительных переговоров одновременное, используются модели common и big. Распознавание на CPU в этом режиме не поддерживается. Для распознавания рекомендуется минимум ВМ 8 ядер 16 Гб GPU A16. На такой ВМ время распознавания в 2,5 раза меньше длительности аудио. На GPU V100 время распознавания меньше длительности аудио ориентировочно в 5 раз. Пример распознавания одного и того же файла на разных GPU:
{| class="wikitable" style="text-align: center"
{| class="wikitable" style="text-align: center"
|+
|+
Строка 60: Строка 58:




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


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




====='''Установка/обновление SPR'''=====
====='''Установка/обновление SPR'''=====
[https://cloud.connect2ai.net/index.php/apps/files/?dir=/spr&fileid=519 Дистрибутив] распространяется в виде установочных пакетов для окружения и сервиса. Загрузите установочные пакеты на сервер и выполните команды для Вашей системы в каталоге с пакетом.
[https://cloud.connect2ai.net/index.php/apps/files/?dir=/spr&fileid=519 Дистрибутив] распространяется в виде установочных пакетов для окружения и сервиса. Загрузите установочные пакеты на сервер и выполните команды для вашей системы в каталоге с пакетом.


Перед установкой непосредственно сервиса необходимо [[PVE. Установка сервисного пакета окружения|установить сервисный пакет окружения]].
Перед установкой непосредственно сервиса необходимо [[PVE. Установка сервисного пакета окружения|установить сервисный пакет окружения]].
Строка 74: Строка 74:
* Загрузить последнюю версию продукта  <code>curl -s "<nowiki>https://repo.connect2ai.net/api/spr/new</nowiki>" --user '[user]:[pass]' 2>&1 | bash</code> или в интерактивном режиме <code>bash -c "$(curl -s <nowiki>https://repo.connect2ai.net/api/spr</nowiki> --user '[user]:[pass]' 2>&1)"</code>.
* Загрузить последнюю версию продукта  <code>curl -s "<nowiki>https://repo.connect2ai.net/api/spr/new</nowiki>" --user '[user]:[pass]' 2>&1 | bash</code> или в интерактивном режиме <code>bash -c "$(curl -s <nowiki>https://repo.connect2ai.net/api/spr</nowiki> --user '[user]:[pass]' 2>&1)"</code>.
* Обновить SPR <code>/opt/spr/inupdate</code> в интерактивном режиме. Или запустить с ключом:
* Обновить SPR <code>/opt/spr/inupdate</code> в интерактивном режиме. Или запустить с ключом:
** <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>.
* Посмотреть лог изменений  <code>curl -s "<nowiki>https://repo.connect2ai.net/api/spr/changelog</nowiki>" --user '[user]:[pass]'</code>.
* Посмотреть лог изменений  <code>curl -s "<nowiki>https://repo.connect2ai.net/api/spr/changelog</nowiki>" --user '[user]:[pass]'</code>.
* Полное описание всех команд API репозитория можно найти по ссылке '''https://repo.connect2ai.net/api'''. <code>[user]:[pass]</code> - это тот же логин и пароль, что и от [https://cloud.connect2ai.net '''Nextcloud'''.]
* Полное описание всех команд API репозитория можно найти по ссылке '''https://repo.connect2ai.net/api'''. <code>[user]:[pass]</code> это тот же логин и пароль, что и от [https://cloud.connect2ai.net '''Nextcloud'''.]
* В папке с продуктом можно добавить 2 файла конфигурации (допускается один общий файл на все продукты в папке с окружением /opt/pve/):
* В папке с продуктом можно добавить 2 файла конфигурации (допускается один общий файл на все продукты в папке с окружением /opt/pve/):
** echo -n <code>"[user]:[pass]"</code>  > /opt/spr/.userapi (это файл авторизации в API, нужен для обновления и загрузки моделей)
** echo -n <code>"[user]:[pass]"</code>  > /opt/spr/.userapi (это файл авторизации в API, нужен для обновления и загрузки моделей),
** echo -n <code>"<nowiki>http://example.com:3128</nowiki> [user] [password]"</code>  > /opt/spr/.proxy (это файл конфигурации proxy необходим для обновления и загрузки моделей, при отсутствующем прямом подключение к интернету)
** echo -n <code>"<nowiki>http://example.com:3128</nowiki> [user] [password]"</code>  > /opt/spr/.proxy (это файл конфигурации proxy, необходим для обновления и загрузки моделей, при отсутствующем прямом подключении к интернету),


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


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


<code>sudo systemctl enable spr.service && sudo systemctl start spr.service</code>
<code>sudo systemctl enable spr.service && sudo systemctl start spr.service</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 руководителю проекта для оформления лицензии.






===== '''Установка моделей SPR'''=====
===== '''Установка моделей SPR'''=====
Установка моделей возможна прямым копированием файла модели, загрузкой по API, установкой через [https://wiki.connect2ai.net/index.php/SPR._UPS_%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B5_%D1%81_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81%D0%BE%D0%BC интерфейс UPS]. Подробнее о загрузке моделей по API смотрите в руководстве пользователя.
Установка моделей возможна прямым копированием файла модели или загрузкой через API сервиса (метод POST /spr/data/{id}).  


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


Чтобы убедиться, что модели доступны, выполните запрос  
Чтобы убедиться, что модели доступны, выполните запрос  
Строка 110: Строка 127:
В ответе должно содержаться название новой модели или перечень названий моделей в формате json.
В ответе должно содержаться название новой модели или перечень названий моделей в формате json.


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


<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>




===== '''Внешние модули распознавания''' =====
===== '''Внешние модули распознавания''' =====
Сервис SPR поддерживает установку произвольных модулей распознавания. Для этого папка external должна содержать директорию с нужным модулем, в которой обязательным является наличие файла handler.py с функцией recognize(data,sr). Сервис передаст в данную функцию аудиоданные в переменную data, в формате pydub.AudioSegment, а также значение sample rate в переменной sr. Готовые внешние модули распознавания доступны по [https://cloud.connect2ai.net/index.php/apps/files/?dir=/spr ссылке].
Сервис SPR поддерживает установку произвольных модулей распознавания. Для этого папка external должна содержать директорию с нужным модулем, в которой обязательным является наличие файла handler.py с функцией recognize(data, sr). Сервис передаст в данную функцию аудиоданные в переменную data, в формате pydub.AudioSegment, а также значение sample rate в переменной sr. Готовые внешние модули распознавания доступны по [https://cloud.connect2ai.net/index.php/apps/files/?dir=/spr ссылке].


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


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






===== '''Конфигурирование параметров сервиса SPR'''=====
===== '''Конфигурирование параметров сервиса SPR'''=====
Настройка параметров сервиса spr производится в файле /opt/spr/params.json
Настройка параметров сервиса spr производится в файле /opt/spr/params.json.


Описание параметров приведено в таблице
Описание параметров приведено в таблице.
{| class="wikitable"
{| class="wikitable"
|+
|+
Строка 164: Строка 180:
|false
|false
|Анализ голоса спикера на эмоции, возраст, пол через [[SBS. Руководство пользователя.|сервис SBS]].
|Анализ голоса спикера на эмоции, возраст, пол через [[SBS. Руководство пользователя.|сервис SBS]].
|-
|save_audio_requests
|false
|Записывать аудио получаемые для распознавания в синхронном режиме. Будут сохраняться в /tmp/spr/. Только для диагностики. Не применять в нагруженных серверах.
|-
|-
|logs.path
|logs.path
|logs/
|logs/
|Путь к папке логов
|Путь к папке логов.
|-
|-
|logs.backups
|logs.backups
|10
|10
|Количество старых сохраняемых логов
|Количество старых сохраняемых логов.
|-
|-
|logs.maxSize
|logs.maxSize
|5242880
|5242880
|Максимальный размер текущего лог-файла, в байтах
|Максимальный размер текущего лог-файла в байтах.
|-
|-
|cache.lifetime
|cache.lifetime
|604800
|604800
|Время жизни кэша результатов отложенного распознавания
|Время жизни кэша результатов отложенного распознавания.
|-
|-
| sbs.url
| sbs.url
Строка 187: Строка 207:
|sbs.conn_timeout
|sbs.conn_timeout
|2
|2
|Таймаут на подключение к API SBS
|Таймаут на подключение к API SBS.
|-
|-
|sbs.read_timeout
|sbs.read_timeout
|30
|30
|Таймаут на получения ответа от API SBS
|Таймаут на получение ответа от API SBS.
|-
|-
|smc.url
|smc.url
Строка 199: Строка 219:
|smc.conn_timeout
|smc.conn_timeout
|2
|2
|Таймаут на подключение к API SMC
|Таймаут на подключение к API SMC.
|-
|-
|smc.read_timeout
|smc.read_timeout
|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
|webrtc
|webrtc
|Тип VAD по умолчанию для разбивки аудиофайлов. Возможные значения - пока только webrtc.
|Тип VAD по умолчанию для разбивки аудиофайлов. Возможные значения пока только webrtc.
|-
|-
|vad.maxSilence
|vad.maxSilence
Строка 235: Строка 267:
|speakers.concatEqual
|speakers.concatEqual
|true
|true
|Склеивать последовательные фразы одного и того же говорящего.
|Позволяет склеивать последовательные фразы одного и того же говорящего.
|-
|-
|speakers.defaultModel
|speakers.defaultModel
Строка 266: Строка 298:


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


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

Текущая версия от 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.