SPR. Руководство администратора: различия между версиями
Материал из Флора AI
| Строка 40: | Строка 40: | ||
'''Распознавание для диаризации (транскрибации)''' длительных переговоров - одновременное используются модели call и big. Распознавание на CPU в этом режиме не поддерживается. Для распознавания рекомендуется минимум ВМ 8 ядер 16Гб GPU A16. На такой ВМ время распознавания в 2.5 раза меньше длительности аудио. На GPU V100 время распознавания меньше длительности аудио ориентировочно в 5 раз. Пример распознавания одного и того же файла на разных GPU: | '''Распознавание для диаризации (транскрибации)''' длительных переговоров - одновременное используются модели call и big. Распознавание на CPU в этом режиме не поддерживается. Для распознавания рекомендуется минимум ВМ 8 ядер 16Гб GPU A16. На такой ВМ время распознавания в 2.5 раза меньше длительности аудио. На GPU V100 время распознавания меньше длительности аудио ориентировочно в 5 раз. Пример распознавания одного и того же файла на разных GPU: | ||
{| class="wikitable" | |||
|+ | |||
!Карта | |||
!Видеопамять | |||
!Количество ядер CUDA | |||
!Время распознавания | |||
(минут) | |||
!Примечание | |||
|- | |||
|A100 | |||
|80 | |||
|6912 | |||
|12 | |||
| | |||
|- | |||
|V100 | |||
|16 | |||
|5120 | |||
|16 | |||
| | |||
|- | |||
|RTX 3060 | |||
|12 | |||
|3584 | |||
|24 | |||
| | |||
|- | |||
|A16 | |||
|16 | |||
|1280 | |||
|33 | |||
|1/4 карты | |||
|} | |||
[[Файл:Photo 2024-09-24 14-03-29.jpg|600x600пкс]] | [[Файл:Photo 2024-09-24 14-03-29.jpg|600x600пкс]] | ||
Версия от 09:56, 21 октября 2024
Общее описание сервиса распознавания речи (SPR)
Сервис предназначен для преобразования естественной речи в текст. Входными данными для сервиса являются аудиофайлы в формате *.wav, результатом работы выступают данные в текстовом формате.
Термины и определения
Short Phrase Recognizer (SPR) – сервис распознавания речи.
Модель - модель нейронной сети, описывает её архитектуру и конфигурацию, а также используемые алгоритмы обучения.
Расчет нагрузки SPR
Для нормальной работы сервиса требуются CPU с поддержкой инструкций AVX2 или новее:
- Intel Haswell
- Intel Broadwell
- Intel Skylake
- Intel Kaby Lake
- Intel Coffee Lake
- Intel Comet Lake
- Intel Rocket Lake
- Intel Alder Lake
- AMD Excavator
- AMD Zen (AMD Ryzen)
- AMD Zen 2 (AMD Ryzen)
- AMD Zen 3 (AMD Ryzen)
Сервис распознаёт поступающие аудио файлы последовательно на каждом воркере gunicorn.
По умолчанию воркер один, и соответственно канал распознавания один.
Сервис требует разных ресурсов в зависимости от сценария использования.
Распознавание для голосовых помощников - рекомендуется модель call и работа на GPU nvidia. Возможна работа на CPU. В этом случае приемлемую задержку распознавания для одиночных фраз можно получить на ВМ с 8 потоками 6Гб оперативной памяти с резервом по частоте 9600Мгц (соответствует 4 ядрам по 2.4Ггц). В этом случае 8 секундная речь будет распознана ориентировочно за 0.8с. 4 таких ВМ обеспечат распознавание голоса абонента в диалогах длительностью 60 - 80с с количеством одновременных диалогов до 60.
В случае использования GPU A16(одной из 4 голов на ВМ 8 потоков 6Гб) 8 секундная речь будет распознана примерно за 0.2с. На такой ВМ можно распознавать до 100 одновременных диалогов. При расчетах и моделировании предполагалось что за весь диалог длительностью 60 - 80с будет распознано до 6 фраз длительностью до 8с. GPU A16 содержит 1300 ядер cuda в одной голове. На более мощных GPU возможности возрастают кратно количеству cuda ядер.
При распознавании для голосовых помощников рекомендуется использовать от 2-х воркеров gunicorn (-w 2 в строке запуска в файле службы) в зависимости от наличия памяти.
Распознавание для диаризации (транскрибации) длительных переговоров - одновременное используются модели call и big. Распознавание на CPU в этом режиме не поддерживается. Для распознавания рекомендуется минимум ВМ 8 ядер 16Гб GPU A16. На такой ВМ время распознавания в 2.5 раза меньше длительности аудио. На GPU V100 время распознавания меньше длительности аудио ориентировочно в 5 раз. Пример распознавания одного и того же файла на разных GPU:
| Карта | Видеопамять | Количество ядер CUDA | Время распознавания
(минут) |
Примечание |
|---|---|---|---|---|
| A100 | 80 | 6912 | 12 | |
| V100 | 16 | 5120 | 16 | |
| RTX 3060 | 12 | 3584 | 24 | |
| A16 | 16 | 1280 | 33 | 1/4 карты |
Переключение между режимами распознавания - в зависимости от длительности аудио. Аудио короче 30c распознаются для голосовых помощников. Остальные аудио разбиваются на фразы и выделяются фрагменты речи принадлежащие разным лицам, то есть формат вывода тоже изменяется.
Требования к загружаемому аудио
Для преобразования фрагментов речи в текст используйте аудио в форматах, поддерживаемых ffmpeg.
Установка/обновление SPR
Дистрибутив распространяется в виде установочных пакетов для окружения и сервиса. Загрузите установочные пакеты на сервер и выполните команды для Вашей системы в каталоге с пакетом.
Перед установкой непосредственно сервиса необходимо установить сервисный пакет окружения.
- Установка/обновление SPR осуществляется скриптом
chmod +x ./spr-<версия>-<релиз>.sh && ./spr-<версия>-<релиз>.sh -iс правами администратора. Список всех ключей инсталлятора можно посмотреть, запустив инсталлятор./spr-<версия>-<релиз>.shбез ключей. - Загрузить последнюю версию продукта
curl -s "https://repo.connect2ai.net/api/spr/new" --user '[user]:[pass]' 2>&1 | bashили в интерактивном режимеbash -c "$(curl -s https://repo.connect2ai.net/api/spr --user '[user]:[pass]' 2>&1)". - Обновить SPR
/opt/spr/inupdateв интерактивном режиме. Или запустить с ключём:/opt/spr/inupdate -b- обновить до последней beta версии;/opt/spr/inupdate -r- обновить до последней release версии;/opt/spr/inupdate -n- обновить до последней версии (не важно beta или release).
- Установить модели
/opt/spr/inmodelв интерактивном режиме. - Проверить актуальную версию продукта
curl -s "https://repo.connect2ai.net/api/spr/version. - Посмотреть лог изменений
curl -s "https://repo.connect2ai.net/api/spr/changelog" --user '[user]:[pass]'. - Полное описание всех команд API репозитория можно найти по ссылке https://repo.connect2ai.net/api.
[user]:[pass]- это тот же логин и пароль, что и от Nextcloud. - В папке с продуктом можно добавить 2 файла конфигурации (допускается один общий файл на все продукты в папке с окружением /opt/pve/):
- echo -n
"[user]:[pass]"> /opt/spr/.userapi (это файл авторизации в API, нужен для обновления и загрузки моделей) - echo -n
"http://example.com:3128 [user] [password]"> /opt/spr/.proxy (это файл конфигурации proxy необходим для обновления и загрузки моделей, при отсутсвующем прямом подключение к интернету)
- echo -n
При обновление следующий список файлов и папок сохранияется: .userapi, .proxy, logs, nnets, config.json, cache, pretrained, pve, data. Сервис не требует остановки и возвращается в актуальное состояние после обновления.
Не забудьте запустить сервис и включить в автозапуск в системе:
sudo systemctl enable spr.service && sudo systemctl start spr.service
Удостоверьтесь, что сервис стартовал:
systemctl status spr.service
Разрешите доступ к порту 6183 на нужном интерфейсе по протоколу tcp.
Установка моделей SPR
Установка моделей возможна как прямым копированием файла модели, так и загрузкой по API. Подробнее о загрузке моделей по API смотрите в руководстве пользователя.
Модели располагаются в каталоге /opt/spr/nnets/. Для установки модели необходимо создать каталог /opt/spr/nnets/<название модели>/ и скопировать в него файл model, после чего перезагрузить сервис командой systemctl restart spr
Чтобы убедиться, что модели доступны, выполните запрос
curl -H "accept: application/json" -X GET "http://АДРЕС_СЕРВЕРА:6183/spr/"
В ответе должно содержаться название новой модели или перечень названий моделей в формате json.
Проверить корректность работы модели можно запросом к API с отправкой файла на распознавание:
curl -X POST "http://АДРЕС_СЕРВЕРА:6183/spr/stt/common" -H "accept: application/json" -H "Content-Type: multipart/form-data" -F "wav=@ФАЙЛ.wav;type=audio/wav"
Некоторые модели работают только на GPU. На данный момент такая модель только одна - "big".
Внешние модули распознавания
Сервис SPR поддерживает установку произвольных модулей распознавания. Для этого папка external должна содержать директорию с нужным модулем, в которой обязательным является наличие файла handler.py с функцией recognize(data,sr). Сервис передаст в данную функцию аудиоданные в переменную data, в формате pydub.AudioSegment, а также значение sample rate в переменной sr. Готовые внешние модули распознавания доступны по ссылке.
Проверить корректность работы модели можно запросом к API с отправкой файла на распознавание:
curl -X POST "http://АДРЕС_СЕРВЕРА:6183/spr/stt/Имя_Модуля" -H "accept: application/json" -H "Content-Type: multipart/form-data" -F "wav=@ФАЙЛ.wav;type=audio/wav"
Со списком методов можно ознакомиться в руководстве пользователя. Метод на загрузку модели curl -X GET "http://АДРЕС_СЕРВЕРА:6183/spr/data/Имя_Модуля" -H "accept: application/json" не работает с модулями в целях безопасности. Так же модули не отображаются в списке моделей по запросу curl -X GET "http://АДРЕС_СЕРВЕРА:6183/spr/" -H "accept: application/json". В некоторых модулях конфигурация может быть вынесена в отдельный файл. Например, для модуля yandex это - /opt/spr/external/config.json.
Конфигурирование параметров сервиса SPR
Настройка параметров сервиса spr производится в файле /opt/spr/params.json
Описание параметров приведено в таблице
| Параметр | По умолчанию | Назначение |
|---|---|---|
| namespace | spr | Префикс пути вызова методов методам API. http://СЕРВЕР:6183/ПРЕФИКС/ПУТЬ_К _МЕТОДУ. |
| max_gpu_memory | 0.6 | Лимит использования ОЗУ видеокарты. |
| punctuation | false | Расстановка знаков препинания через сервис SMC. |
| normalization | false | Обратная нормализация текста через сервис SMC. |
| toxicity | false | Анализ текста на токсичность через сервис SMC. |
| emotions | false | Анализ текста на эмоции через сервис SMC. |
| voice_analyzer | false | Анализ голоса спикера на эмоции, возраст, пол через сервис SBS. |
| logs.path | logs/ | Путь к папке логов |
| logs.backups | 10 | Количество старых сохраняемых логов |
| logs.maxSize | 5242880 | Максимальный размер текущего лог-файла, в байтах |
| cache.lifetime | 604800 | Время жизни кэша результатов отложенного распознавания |
| sbs.url | http://127.0.0.1:6185 | Путь к сервису биометрии для получения метаданных голосового фрагмента. |
| sbs.conn_timeout | 2 | Таймаут на подключение к API SBS |
| sbs.read_timeout | 30 | Таймаут на получения ответа от API SBS |
| smc.url | http://127.0.0.1:6181 | Путь к сервису классификации для дополнительной работы с распознанным текстом. |
| smc.conn_timeout | 2 | Таймаут на подключение к API SMC |
| smc.read_timeout | 30 | Таймаут на получения ответа от API SMC |
| timers.maxSilence | 1500 | Длительность паузы в речи в миллисекундах для разбивки длинных аудиофайлов на фрагменты. |
| vad.window | 0.6 | Продолжительность фрагмента аудиофайла в секундах, отправляемого на анализ наличия речи. |
| vad.shift | 0.005 | Ширина сдвига в секундах для вычленения фрагментов аудиофайла для последующего анализа наличия речи. |
| vad.confidence | 0.3 | Пороговый коэффициент отсечения речь/шум. |
| vad.batch | 1024 | Количество одновременного анализируемых на наличие речи аудиофрагментов. |
| vad.defaultModel | webrtc | Тип VAD по умолчанию для разбивки аудиофайлов. Возможные значения neuro и webrtc. |
| vad.defaultPreset | call | Используемая модель neuro VAD по умолчанию. Доступные варианты call и microphone. |
| 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. |
| garbage | [] | Массив фраз, которые считаются мусорными и откидываются из распознанного текста. |
| corrections | [] | Добавление модели коррекции для стенографирования. Пример настройки:
|
Сбор данных об ошибках
Логи сервиса по умолчанию находятся в файле /opt/spr/logs/log.txt
Удаление
Для удаления выполните команду: /opt/spr/uninstall. Команда деинсталлирует сервис и удалит рабочий каталог, включая все установленные модели.
Практические рекомендации
Сервис spr на системах с видеокартой на большой нагрузке может не полностью использовать ресурсы GPU, при этом могут быть задержки в распознавании. Для более полного использования ресурсов рекомендуется в строке запуска gunicorn в файле сервиса добавить параметр "-w 2". Это приведет к загрузке в видеопамять 2-х экземпляров приложения и моделей. Таким образом приложение сможет более эффективно использовать ресурсы GPU, но при этом возрастет потребность в памяти GPU.
В случае если в системе обработки речи используется несколько несимметричных по ресурсам серверов spr, регулировать нагрузку на них можно указывая адрес сервера в котором больше ресурсов, большее количество раз - в разделе "spr.cluster" конфигурационного файла ups.
Часто задаваемые вопросы
| Вопрос | Ответ |
|---|---|