Действия

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

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

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


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




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


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


====='''Расчет нагрузки'''=====
Для нормальной работы сервиса на каждый канал распознавания требуется 1 CPU  >= 2.20GHz с поддержкой иструкций AVX2 или новее:


* Intel Haswell
====='''Расчет нагрузки SPR'''=====
* Intel Broadwell
Для нормальной работы сервиса требуются CPU с поддержкой инструкций AVX2 или новее.
* 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)


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


Распознавание для голосовых помощников — рекомендуется модель 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:
{| class="wikitable" style="text-align: center"
|+
!Карта
!Видеопамять
!Количество ядер CUDA
!Время распознавания
(минут)
!Примечание
|-
|'''<big>A100</big>'''
|80
|6912
|12
|
|-
|'''<big>V100</big>'''
|16
|5120
|16
|
|-
|'''<big>RTX 3060</big>'''
|12
|3584
|24
|
|-
|'''<big>A16</big>'''
|'''16'''
|1280
|33
|1/4 карты
|}
Переключение между режимами распознавания — в зависимости от длительности аудио. Аудио короче 30 с распознаются для голосовых помощников. Остальные аудио разбиваются на фразы и выделяются фрагменты речи, принадлежащие разным лицам, то есть формат вывода тоже изменяется.
Требования к загружаемому аудио
Для преобразования фрагментов речи в текст используйте аудио в форматах, поддерживаемых ffmpeg.


====='''Требования к загружаемому аудио'''=====
Для преобразования фрагментов речи в текст используйте аудио в формате *.wav RIFF (little-endian) data, WAVE audio, Microsoft PCM, 16 bit, 8000 Hz или 16000 Hz.




====='''Установка/обновление сервиса'''=====
====='''Установка/обновление 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. Установка сервисного пакета окружения|установить сервисный пакет окружения]].


Установка/обновление непосредственно SPR осуществляется скриптом <code>chmod +x ./spr-<версия>-<релиз>.sh && ./spr-<версия>-<релиз>.sh</code> с правами администратора.  
* Установка/обновление SPR осуществляется скриптом <code>chmod +x ./spr-<версия>-<релиз>.sh && ./spr-<версия>-<релиз>.sh -i</code> с правами администратора. Список всех ключей инсталлятора можно посмотреть, запустив инсталлятор <code>./spr-<версия>-<релиз>.sh</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> в интерактивном режиме. Или запустить с ключом:
** <code>/opt/spr/inupdate -b</code>  — обновить до последней beta версии;
** <code>/opt/spr/inupdate -r</code>  — обновить до последней release версии;
** <code>/opt/spr/inupdate -n</code>  — обновить до последней версии (неважно beta или release).
* Установить модели  <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/changelog</nowiki>" --user '[user]:[pass]'</code>.
* Полное описание всех команд API репозитория можно найти по ссылке '''https://repo.connect2ai.net/api'''. <code>[user]:[pass]</code> — это тот же логин и пароль, что и от [https://cloud.connect2ai.net '''Nextcloud'''.]
* В папке с продуктом можно добавить 2 файла конфигурации (допускается один общий файл на все продукты в папке с окружением /opt/pve/):
** 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, необходим для обновления и загрузки моделей, при отсутствующем прямом подключении к интернету),
 
При обновлении следующий список файлов и папок сохраняется: .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>
Строка 52: Строка 99:




===== '''Установка моделей'''=====
===== '''Лицензия''' =====
Установка моделей возможна как прямым копирование файла модели, так и загрузкой по API. Подробнее о загрузке моделей по API смотрите в [[SPR. Руководство пользователя|руководстве пользователя]].
Сервис не функционирует без действующей лицензии. Информация о лицензии хранится в файле:
 
<code>/opt/spr/license.json</code>


Модели располагаются в каталоге /opt/spr/nnets/. Для установки модели необходимо создать каталог /opt/spr/nnets/<название модели>/ и скопировать в него файл model, после чего перезагрузить сервис командой systemctl restart spr
Файл лицензии должен соответствовать следующему формату:
 
<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'''=====
Установка моделей возможна прямым копированием файла модели или загрузкой через API сервиса (метод POST /spr/data/{id}).
 
Модели располагаются в каталоге /opt/spr/nnets/. Для установки модели необходимо создать каталог /opt/spr/nnets/<название модели>/ и скопировать в него содержимое архива модели, после чего перезагрузить сервис командой systemctl restart spr.


Чтобы убедиться, что модели доступны, выполните запрос  
Чтобы убедиться, что модели доступны, выполните запрос  
Строка 63: Строка 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>
 
Некоторые модели работают только на GPU. На данный момент такая модель только одна — «big».<br>


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


===== '''Внешние модули распознавания''' =====
===== '''Внешние модули распознавания''' =====
Сервис SPR поддерживает установку произвольных модулей распознавания. Для этого папка external должна содержать директорию с нужным модулем, в которой обязательным является наличие файла handler.py с функцией recognize(data,sr). Сервис передаст в данную функцию аудиоданные в переменную data, в формате массива numpy.float32, а также значение 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 с отправкой файла на распознавание:
 
<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 производится в файле /opt/spr/params.json


Описание параметров приведено в таблице
 
===== '''Конфигурирование параметров сервиса SPR'''=====
Настройка параметров сервиса spr производится в файле /opt/spr/params.json.
 
Описание параметров приведено в таблице.
{| class="wikitable"
{| class="wikitable"
|+
|+
Строка 90: Строка 163:
|punctuation
|punctuation
|false
|false
|Расстановка знаков препинания через сервис [[SMC. Руководство пользователя|сервис классификации]].
|Расстановка знаков препинания через [[SMC. Руководство пользователя|сервис SMC]].
|-
|normalization
|false
|Обратная нормализация текста через [[SMC. Руководство пользователя|сервис SMC]].
|-
|toxicity
|false
|Анализ текста на токсичность через [[SMC. Руководство пользователя|сервис SMC]].
|-
|emotions
|false
|Анализ текста на эмоции через [[SMC. Руководство пользователя|сервис SMC]].
|-
|voice_analyzer
|false
|Анализ голоса спикера на эмоции, возраст, пол через [[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
|<nowiki>http://127.0.0.1:6185</nowiki>
|<nowiki>http://127.0.0.1:6185</nowiki>
|Путь к [[SBS. Руководство пользователя|сервису биометрии]] для получения метаданных голосового фрагмента.
|Путь к [[SBS. Руководство пользователя|сервису биометрии]] для получения метаданных голосового фрагмента.
|-
|sbs.model
|calls
|Модель по умолчанию при работе с API SBS
|-
|-
|sbs.conn_timeout
|sbs.conn_timeout
|2
|2
|Таймаут на подключение к API SBS
|Таймаут на подключение к API SBS.
|-
|-
|sbs.conn_timeout
|sbs.read_timeout
|30
|30
|Таймаут на получения ответа от API SBS
|Таймаут на получение ответа от API SBS.
|-
|-
|smc.url
|smc.url
Строка 130: Строка 219:
|smc.conn_timeout
|smc.conn_timeout
|2
|2
|Таймаут на подключение к API SMC
|Таймаут на подключение к API SMC.
|-
|-
|smc.conn_timeout
|smc.read_timeout
|30
|30
|Таймаут на получения ответа от API SMC
|Таймаут на получение ответа от API SMC.
|-
|-
|timers.maxSilence
|see.url
|500
|<nowiki>http://127.0.0.1:6184</nowiki>
|Длительность паузы в речи в миллисекундах для разбивки длинных аудиофайлов на фрагменты.
|Путь к [[SEE. Руководство пользователя|сервису поиска сущностей]] для дополнительной работы с распознанным текстом.
|-
|-
|timers.minSpeech
|see.conn_timeout
|200
|2
|Минимальный по продолжительности в миллисекундах фрагмент речи, который следует считать возможным отдельным фрагментом.
|Таймаут на подключение к API SEE.
|-
|-
|timers.garbage
|see.read_timeout
|50
|30
|Максимальный по продолжительности в миллисекундах отдельный фрагмент речи, который следует считать мусором.
|Таймаут на получение ответа от API SEE.
|-
|-
|vad.window
|vad.default
|0.15
|webrtc
|Продолжительность фрагмента аудиофайла в секундах, отправляемого на анализ наличия речи.
|Тип VAD по умолчанию для разбивки аудиофайлов. Возможные значения — пока только webrtc.
|-
|-
|vad.shift
|vad.maxSilence
|0.005
|1200
|Ширина сдвига в секундах для вычленения фрагментов аудиофайла для последующего анализа наличия речи.
|Длительность паузы в речи в миллисекундах для разбивки длинных аудиофайлов на фрагменты.
|-
|vad.confidence
|0.5
|Пороговый коэффициент отсечения речь/шум.
|-
|vad.batch
|1024
|Количество одновременного анализируемых на наличие речи аудиофрагментов.
|-
|vad.defaultModel
|neuro
|Тип VAD по умолчанию для разбивки аудиофайлов. Возможные значения neuro и webrtc.
|-
|vad.defaultPreset
|call
|Используемая модель neuro VAD по умолчанию. Доступные варианты call и microphone.
|-
|-
|speakers.similarityThreshold
|speakers.similarityThreshold
|0.5
|0.7
|Порог различия для разделения говорящих.
|Порог различия для разделения говорящих.
|-
|-
|speakers.maxSpeechLength
|speakers.maxSpeechLength
|1000
|10000
|Максимальная длительность фрагмента для сравнения говорящих в миллисекундах.
|Максимальная длительность фрагмента для сравнения говорящих в миллисекундах.
|-
|speakers.wordMinLimit
|5
|Минимальный размер фразы при определении говорящих.
|-
|speakers.timeMinLimit
|3000
|Минимальная длительность аудио, чтобы оно могло быть использовано для добавления нового говорящего.
|-
|-
|speakers.batch
|speakers.batch
|8
|4
|Количество одновременного анализируемых аудиофрагментов при разделении говорящих.
|Количество одновременного анализируемых аудиофрагментов при разделении говорящих.
|-
|-
|speakers.minCompareSpeechLength
|speakers.concatEqual
|500
|true
|Минимальная длительность аудиофрагмента для использования в алгоритме определения говорящих.
|Позволяет склеивать последовательные фразы одного и того же говорящего.
|-
|-
|recognition.batch
|speakers.defaultModel
|8
|call
|Количество одновременного распознаваемых аудиофрагментов.
|Модель определения говорящего.
|-
|-
|balcklist
|blacklist
|[]
|[]
|Список моделей распознавания в папках nnets и external, которые не должны быть загружены при старте сервиса SPR.
|Список моделей распознавания в папках nnets и external, которые не должны быть загружены при старте сервиса SPR.
|-
|corrections
|{ "big": "common"  }
|Добавление модели коррекции для стенографирования.
|-
|garbage
|[ "—", "[*]" ]
|Массив фраз, которые считаются мусорными и откидываются из распознанного текста.
|}
|}




====='''Сбор данных об ошибках'''=====
====='''Сбор данных об ошибках'''=====
Для увеличения информативности журналов можно выполнить от суперпользователя команду:
Логи сервиса по умолчанию находятся в файле /opt/spr/logs/log.txt<br>


<code>sed -i 's/log-level error/log-level debug/g' /etc/systemd/system/spr.service && systemctl daemon-reload && systemctl restart spr.service</code>


При возникновении проблем в работе сервиса и недостаточной информативности журналов, можно запустить сервис вручную с привилегиями суперпользователя и выводом информации в stdout:


<code>systemctl stop spr.service && source /opt/pve/bin/activate && cd /opt/spr/ && python3 api.py && deactivate</code>
====='''Удаление'''=====
Для удаления выполните команду: <code>/opt/spr/uninstall</code>. Команда удалит сервис и  рабочий каталог, включая все установленные модели.


       или


<code>systemctl stop spr.service</code>


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


<code>cd /opt/spr/ && python3 api.py</code>
В случае если в системе обработки речи используется несколько несимметричных по ресурсам серверов spr, регулировать нагрузку на них можно указывая адрес сервера, в котором больше ресурсов, большее количество раз в разделе «spr.cluster» конфигурационного файла ups.
 
<code>deactivate</code><br>       
 
 
====='''Удаление'''=====
Для удаления выполните команду: <code>/opt/spr/uninstall</code>. Команда деинсталлирует сервис и удалит рабочий каталог, включая все установленные модели.

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