UPS. Руководство администратора
Материал из Флора AI
Общее описание
Сервис предназначен для управления базовыми сервисами ядра, а также в качестве прокси-сервера доступа к сервисам с функцией балансировки нагрузки.
Термины и определения
Universal Proxy Server (UPS) – Сервис управления ядром с проксированием запросов.
Системные требования
Для нормальной работы сервиса требуется 4Гб оперативной памяти, 1 CPU >= 2.20GHz и 40Гб дискового пространства.
Установка/обновление сервиса
Дистрибутив распространяется в виде установочных пакетов для окружения и сервиса. Загрузите установочные пакеты на сервер и выполните команды для Вашей системы в каталоге с пакетом.
Для UPS необходимо устанавливать выделенное окружение.
Установка/обновление UPS осуществляется скриптом chmod +x ./ups-<версия>-<релиз>.sh && ./ups-<версия>-<релиз>.sh -i с правами администратора. Список всех ключей инсталятора можно посмотреть, запустив инсталятор ./ups-<версия>-<релиз>.sh без ключей.
Загрузить последнюю версию пакета curl -s 'https://cloud.connect2ai.net/ups/' --user 'user_nexcloud:pass_nexcloud' | bash
Устновить/обновить пакет одной командой curl -s 'https://cloud.connect2ai.net/ups/?name=s' --user 'user_nexcloud:pass_nexcloud' | bash && chmod +x ./ups.sh && ./ups.sh -i
Проверить актуальную версию пакета можно curl -s 'https://cloud.connect2ai.net/ups/?type=v'
Не забудьте запустить сервис и включить в автозапуск в системе:
sudo systemctl enable ups.service && sudo systemctl start ups.service
Удостоверьтесь, что сервис стартовал:
systemctl status ups.service
Разрешите доступ к порту 6182 на нужном интерфейсе по протоколу tcp.
Установка/создание модулей
Есть возможность создать любой модуль, который будет эмулировать любой API интерфейс любого стороннего сервиса через UPS. Для примера создан интерфейс Яндекс. Установка модулей возможна прямым копирование файлов модуля в деррикторию /opt/ups/modules/<название модуля>.
Чтобы убедиться, что модуль доступен и работает, выполните запрос
curl -X GET "http://АДРЕС_СЕРВЕРА:6182/tts/synthesize/yandex_tts_emulator?rate=100&pitch=100&volume=0" --H "accept: application/json" --data-urlencode "text=текст для синтеза" --output out.wav
out.wav должен содержать синтезированный голос озвучивший текст из запроса.
Данные пример запроса говорит о том, что написан интерфейс яндекса по синтезу. Соотвественно обращание к нему идет, как к Яндексу и ответ, как от Яндекса.
Пример структуры файла модуля (файл должен иметь имя handler.py и лажать по пути /op/ups/modules/[имя модуля]/handler.py):
import uuid, io, json
from app.modules import modulesns
from flask import send_file
from flask_restplus import Resource, reqparse
from app.ups import tools
config = json.load(open('/opt/ups/modules/yandex_tts_emulator/config.json'))
parser = reqparse.RequestParser()
parser.add_argument('voice',required=True)
parser.add_argument('text',required=True)
@modulesns.route("/speech/v1/tts:synthesize"
class YandexEmulator(Resource): # имя класса можно указать свое
def post(self): # обязательный метод post класса
args = parser.parse_args()
voice = args['voice']
voice = config['voices'].get(voice,None)
if not voice:
modulesns.abort(405, message = "Wrong voice", error = 1)
reply = tools.getData(servicetype="tts",method="GET",data={'text':args['text']},url="/tts/synthesize/"+voice)
if type(reply) is dict:
return reply
# возвращаемым значение метода post должен быть правильный результат, в данном примере синтезированный аудиофайл
return send_file(
io.BytesIO(reply),
attachment_filename=str(uuid.uuid4())+'.wav',
as_attachment=True,
mimetype='audio/wav'
)
Пример структуры файла конфигурации (файл должен иметь имя config.json и лажать по пути /op/ups/modules/[имя модуля]/config.json):{
"voices": {
"alena": "Alya_8kHz"
}
}
Конфигурирование параметров сервиса
Настройка параметров сервиса ыьс производится в файле /opt/ups/params.json
Описание параметров приведено в таблице
| Параметр | По умолчанию | Назначение |
|---|---|---|
| logs.path | logs/ | Директория для хранения логов. Примеры абсолютного пути: "/var/log/ups/" |
| logs.backups | 10 | Количество файлов ротации |
| logs.maxSize | 5242880 | Максимальный размер файла в байтах, триггер для ротации |
| auth.accessLifeTime | 1800 | Время жизни access token |
| auth.refreshLifeTime | 86400 | Время жизни refresh token |
| servers.{service}.trainer | http://127.0.0.1:PORT | Ссылка на сервер для обучения моделей сервисов. Возможные варианты значения service (с портами по умолчанию) следующие: smc (6181), see (6184), spr (6183) |
| servers.{service}.cluster | [http://127.0.0.1:PORT] | Список ссылок на рабочие серверы сервисов. Возможные варианты значения service (с портами по умолчанию) следующие: smc (6181), see (6184), spr (6183), tts (6186), sbs (6185). |
| servers.{service}.timers.connect | 0.5 | Лимит времени на подключение к сервису, сек. |
| servers.{service}.timers.read | 300 | Лимит времени на получение данных от сервиса, сек. |
| servers.{service}.timers.failed | 600 | Длительность паузы обращений к сервису при сбое, сек. |
| servers.{service}.timers.install | 60 | Лимит времени на установку модели на сервис |
| servers.{service}.timers.info | 3 | Лимит времени на получение информации о модели |
| nopassword | [
"GET:/auth/refresh", "GET:/auth/rights", "POST:/auth/access", "GET:/lang/", "GET:/tts/synthesize", "POST:/sbs/embedding", "GET:/smc/classify", "GET:/auth/version", "GET:/smc/compress", "GET:/smc/emotion", "GET:/see/entities", "POST:/sbs/analyze", "POST:/sbs/verify", "POST:/sbs/search", "POST:/spr/stt", "GET:/spr/result", "GET:/auth/user/info", "GET:/model/info", "POST:/auth/user/password" ] |
Список методов, которые не требуют авторизации |
Сбор данных об ошибках
Логи сервиса по умолчанию находятся в файле /opt/ups/logs/log.txt
Удаление
Для удаления выполните команду: /opt/ups/uninstall. Команда деинсталлирует сервис и удалит рабочий каталог, включая все установленные модели.