Действия

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

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

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


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


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




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


По умолчанию воркер один, и соответственно канал распознавания один.
Сервис требует разных ресурсов в зависимости от сценария использования.


Сервис требует разных ресурсов в зависимости от '''сценария''' '''использования'''.  
Распознавание для голосовых помощников — рекомендуется модель common и работа на GPU NVIDIA. Возможна работа на CPU. В этом случае приемлемую задержку распознавания для одиночных фраз можно получить на ВМ с 8 потоками, 6 Гб оперативной памяти с резервом по частоте 9600 МГц (соответствует 4 ядрам по 2,4 ГГц). В этом случае 8-секундная речь будет распознана ориентировочно за 0,8 с. 4 таких ВМ обеспечат распознавание голоса абонента в диалогах длительностью 60–80 с с количеством одновременных диалогов до 60.


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


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


'''Распознавание для диаризации (транскрибации)''' длительных переговоров - одновременное используются модели call и 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"
|+
|+
Строка 50: Строка 32:
|-
|-
|'''<big>A100</big>'''
|'''<big>A100</big>'''
|'''80'''
|80
|6912
|6912
|12
|12
Строка 56: Строка 38:
|-
|-
|'''<big>V100</big>'''
|'''<big>V100</big>'''
|'''16'''
|16
|5120
|5120
|16
|16
Строка 62: Строка 44:
|-
|-
|'''<big>RTX 3060</big>'''
|'''<big>RTX 3060</big>'''
|'''12'''
|12
|3584
|3584
|24
|24
Строка 73: Строка 55:
|1/4 карты
|1/4 карты
|}
|}
[[Файл:Photo 2024-09-24 14-03-29.jpg|600x600пкс]]




'''Переключение между режимами распознавания''' - в зависимости от длительности аудио. Аудио короче 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. Установка сервисного пакета окружения|установить сервисный пакет окружения]].
Строка 89: Строка 73:
* Установка/обновление SPR осуществляется скриптом <code>chmod +x ./spr-<версия>-<релиз>.sh && ./spr-<версия>-<релиз>.sh -i</code> с правами администратора. Список всех ключей инсталлятора можно посмотреть, запустив инсталлятор <code>./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>.
* Загрузить последнюю версию продукта  <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>
Строка 112: Строка 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. Подробнее о загрузке моделей по API смотрите в руководстве пользователя.
Установка моделей возможна прямым копированием файла модели или загрузкой через API сервиса (метод POST /spr/data/{id}).  


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


Чтобы убедиться, что модели доступны, выполните запрос  
Чтобы убедиться, что модели доступны, выполните запрос  
Строка 126: Строка 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"
|+
|+
Строка 180: Строка 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
Строка 203: Строка 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
Строка 215: Строка 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.
|-
|-
|timers.maxSilence
|see.url
|1500
|<nowiki>http://127.0.0.1:6184</nowiki>
|Длительность паузы в речи в миллисекундах для разбивки длинных аудиофайлов на фрагменты.
|Путь к [[SEE. Руководство пользователя|сервису поиска сущностей]] для дополнительной работы с распознанным текстом.
|-
|-
|<s>timers.minSpeech</s>
|see.conn_timeout
|<s>100</s>
|2
|<s>Минимальный по продолжительности в миллисекундах фрагмент речи, который следует считать возможным отдельным фрагментом.</s>
|Таймаут на подключение к API SEE.
|-
|-
|<s>timers.garbage</s>
|see.read_timeout
|<s>20</s>
|30
|<s>Максимальный по продолжительности в миллисекундах отдельный фрагмент речи, который следует считать мусором.</s>
|Таймаут на получение ответа от API SEE.
|-
|vad.window
|0.6
|Продолжительность фрагмента аудиофайла в секундах, отправляемого на анализ наличия речи.
|-
|vad.shift
|0.005
|Ширина сдвига в секундах для вычленения фрагментов аудиофайла для последующего анализа наличия речи.
|-
|vad.confidence
|0.3
|Пороговый коэффициент отсечения речь/шум.
|-
|vad.batch
|1024
|Количество одновременного анализируемых на наличие речи аудиофрагментов.
|-
|-
|vad.defaultModel
|vad.default
|webrtc
|webrtc
|Тип VAD по умолчанию для разбивки аудиофайлов. Возможные значения neuro и webrtc.
|Тип VAD по умолчанию для разбивки аудиофайлов. Возможные значения — пока только webrtc.
|-
|-
|vad.defaultPreset
|vad.maxSilence
|call
|1200
|Используемая модель neuro VAD по умолчанию. Доступные варианты call и microphone.
|Длительность паузы в речи в миллисекундах для разбивки длинных аудиофайлов на фрагменты.
|-
|-
|speakers.similarityThreshold
|speakers.similarityThreshold
Строка 271: Строка 259:
|speakers.timeMinLimit
|speakers.timeMinLimit
|3000
|3000
|Минимальная длина фразы, чтобы она могла быть использована для добавления нового говорящего.
|Минимальная длительность аудио, чтобы оно могло быть использовано для добавления нового говорящего.
|-
|-
|speakers.batch
|speakers.batch
Строка 279: Строка 267:
|speakers.concatEqual
|speakers.concatEqual
|true
|true
|Склеивать последовательные фразы одного и того же говорящего.
|Позволяет склеивать последовательные фразы одного и того же говорящего.
|-
|-
|speakers.defaultModel
|speakers.defaultModel
|call
|call
|Модель определения говорящего.
|Модель определения говорящего.
|-
|<s>recognition.batch</s>
|<s>4</s>
|<s>Количество одновременного распознаваемых аудиофрагментов.</s>
|-
|-
|blacklist
|blacklist
|[]
|[]
|Список моделей распознавания в папках nnets и external, которые не должны быть загружены при старте сервиса SPR.
|Список моделей распознавания в папках nnets и external, которые не должны быть загружены при старте сервиса SPR.
|-
|corrections
|{ "big": "common"  }
|Добавление модели коррекции для стенографирования.
|-
|-
|garbage
|garbage
|[]
|[ "—", "[*]" ]
|Массив фраз, которые считаются мусорными и откидываются из распознанного текста.
|Массив фраз, которые считаются мусорными и откидываются из распознанного текста.
|-
|corrections
|[]
|Добавление модели коррекции для стенографирования. Пример настройки:<blockquote>"corrections": {
       "big": "call"
   }</blockquote>
|}
|}


Строка 312: Строка 293:


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






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


В случае если в системе обработки речи используется несколько несимметричных по ресурсам серверов spr, регулировать нагрузку на них можно указывая адрес сервера в котором больше ресурсов, большее количество раз - в разделе "spr.cluster" конфигурационного файла ups.
В случае если в системе обработки речи используется несколько несимметричных по ресурсам серверов spr, регулировать нагрузку на них можно указывая адрес сервера, в котором больше ресурсов, большее количество раз в разделе «spr.cluster» конфигурационного файла ups.
 
 
===== '''Часто задаваемые вопросы''' =====
{| class="wikitable"
|+
!Вопрос
!Ответ
|-
|
|
|-
|
|
|-
|
|
|}

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