Действия

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

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

Строка 7: Строка 7:


====='''Системные требования'''=====
====='''Системные требования'''=====
Для нормальной работы сервиса, без GPU, необходимо не менее 8 CPU (минимальные требования для использование метода <u>ask</u>) >= 2.20GHz с поддержкой инструкций AVX2 или новее:
Для нормальной работы сервиса без GPU необходимо не менее 8 CPU (минимальные требования для использования метода ask) >= 2.20 GHz с поддержкой инструкций AVX2 или новее:
*Intel Haswell
*Intel Haswell
*Intel Broadwell
*Intel Broadwell
Строка 20: Строка 20:
*AMD Zen 2 (AMD Ryzen)
*AMD Zen 2 (AMD Ryzen)
*AMD Zen 3 (AMD Ryzen)
*AMD Zen 3 (AMD Ryzen)
Работа на CPU при использование метода <u>ask</u> крайне не рекомендуется. Оперативной памяти необходимо не менее 16Gb, для работы без GPU.
Работа на CPU при использовании метода ask крайне не рекомендуется. Оперативной памяти необходимо не менее 16Gb для работы без GPU.
 




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


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


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


Не забудьте запустить сервис и включить в автозапуск в системе:
Не забудьте запустить сервис и включить в автозапуск в системе:
Строка 58: Строка 59:
====='''Работа в составе кластера'''=====
====='''Работа в составе кластера'''=====


Для высоконагруженных систем сервис можно расположить на нескольких нодах(виртуальных машинах). В этом случае чтобы не потерять документы и изменения полученные на одной из нод, выделяется один основной сервис и вспомогательные сервисы:
Для высоконагруженных систем сервис можно расположить на нескольких нодах (виртуальных машинах). В этом случае, чтобы не потерять документы и изменения, полученные на одной из нод, выделяется один основной сервис и вспомогательные сервисы:


* База файловая, в папке data.
* База файловая, в папке data.
* lsync настроен через конфиг QAS для репликации базы на все указанные серверы в списке cluster.nodes: [], указываем все слейв сервера.
* lsync настроен через конфиг QAS для репликации базы на все указанные серверы в списке cluster.nodes: [], указываем все слейв-сервера.
* На всех слейвах прописан в конфиге master, чтобы все операции добавления и изменения данных при автокешировании они производили через мастер. Параметр в конфиге questions.master, на мастере значение "<nowiki>http://127.0.0.1:6187</nowiki>".
* На всех слейвах прописан в конфиге master, чтобы все операции добавления и изменения данных при автокешировании они производили через мастер. Параметр в конфиге questions.master, на мастере значение «<nowiki>http://127.0.0.1:6187»</nowiki>.
* Векторная база на каждом сервере своя, она следит за своей папкой data и обновляет в оперативке по этой папке данные у себя.
* Векторная база на каждом сервере своя, она следит за своей папкой data и обновляет в оперативке по этой папке данные у себя.
* UPS при изменении данных работает только с мастером QAS, а при запросе данных - со всем серверами cluster, распределяя нагрузку.
* UPS при изменении данных работает только с мастером QAS, а при запросе данных со всеми серверами cluster, распределяя нагрузку.
* В конфигурации UPS: в servers.qas.cluster.trainer указываем матер сервер, в servers.qas.cluster перечисляем все сервера кластера QAS в том числе и мастер.
* В конфигурации UPS: в servers.qas.cluster.trainer указываем матер-сервер, в servers.qas.cluster перечисляем все сервера кластера QAS, в том числе и мастер.


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


Описание параметров приведено в таблице
Описание параметров приведено в таблице.
{| class="wikitable"
{| class="wikitable"
|+
|+
Строка 83: Строка 84:
|gpt.gpu_layers
|gpt.gpu_layers
|12
|12
|Количество слоёв встроенной нейросети
|Количество слоёв встроенной нейросети.
|-
|-
|gpt.context
|gpt.context
|32768
|32768
|Размер контекста встроенной нейросети
|Размер контекста встроенной нейросети.
|-
|-
|gpt.'''{section}'''.max_tokens
|gpt.'''{section}'''.max_tokens
|4096
|4096
|'''{section}''' - summarization, chat, ask, creative
|'''{section}''' - summarization, chat, ask, creative
Определяет максимальное количество токенов (слов или частей слов), которые модель может сгенерировать в ответ
Определяет максимальное количество токенов (слов или частей слов), которые модель может сгенерировать в ответ.
|-
|-
|gpt.'''{section}'''.top_k
|gpt.'''{section}'''.top_k
|summarization 30, chat 40, ask 5, creative 40
|summarization 30, chat 40, ask 5, creative 40
|Ограничивает количество наиболее вероятных следующих токенов, из которых модель выбирает при генерации текста
|Ограничивает количество наиболее вероятных следующих токенов, из которых модель выбирает при генерации текста.
|-
|-
|gpt.'''{section}'''.top_p
|gpt.'''{section}'''.top_p
Строка 104: Строка 105:
|gpt.'''{section}'''.temperature
|gpt.'''{section}'''.temperature
|summarization 0.4, chat 0.8, ask 0.1, creative 0.8
|summarization 0.4, chat 0.8, ask 0.1, creative 0.8
|Контролирует "температуру" распределения вероятностей выходных токенов. Высокая температура делает распределение более равномерным, а низкая — более "остроконечным".
|Контролирует «температуру» распределения вероятностей выходных токенов. Высокая температура делает распределение более равномерным, а низкая — более «остроконечным».
|-
|-
|gpt.'''{section}'''.repeat_penalty
|gpt.'''{section}'''.repeat_penalty
Строка 112: Строка 113:
|logs.path
|logs.path
|logs/
|logs/
|Папка для хранения логов. Примеры абсолютного пути: "/var/log/qas/"
|Папка для хранения логов. Примеры абсолютного пути: "/var/log/qas/".
|-
|-
|logs.backups
|logs.backups
|10
|10
|Количество файлов ротации
|Количество файлов ротации.
|-
|-
|logs.maxSize
|logs.maxSize
|5242880
|5242880
|Максимальный размер файла в байтах, триггер для ротации
|Максимальный размер файла в байтах, триггер для ротации.
|-
|-
|fragments.context
|fragments.context
|2048
|2048
|Максимальная длина текста, которая будет подана в генератор для поиска ответа на вопрос
|Максимальная длина текста, которая будет подана в генератор для поиска ответа на вопрос.
|-
|-
|fragments.threshold
|fragments.threshold
|0.6
|0.6
|Уровень достоверности при векторном поиске фрагментов в загруженных документах
|Уровень достоверности при векторном поиске фрагментов в загруженных документах.
|-
|-
|fragments.limit
|fragments.limit
|2
|2
|Максимальное количество фрагментов, которые должны быть найдены в документах в порядке убывания доверия
|Максимальное количество фрагментов, которые должны быть найдены в документах в порядке убывания доверия.
|-
|-
|questions.master
|questions.master
|"<nowiki>http://127.0.0.1:6187</nowiki>"
|"<nowiki>http://127.0.0.1:6187</nowiki>"
|Адрес мастер-сервера для работы в кластере. Необходим чтобы добавленные вопросы распространились на серверы кластера
|Адрес мастер-сервера для работы в кластере. Необходим, чтобы добавленные вопросы распространились на серверы кластера.
|-
|-
|questions.threshold
|questions.threshold
|0.7
|0.7
|Минимальный уровень достоверности ответа для попадания в кеш
|Минимальный уровень достоверности ответа для попадания в кеш.
|-
|-
|cluster.logfile
|cluster.logfile
|logs/sync.log
|logs/sync.log
|Расположение лог файла синхронизации (актуально для мастер-сервера)
|Расположение лог-файла синхронизации (актуально для мастер-сервера).
|-
|-
|cluster.logfile
|cluster.logfile
Строка 152: Строка 153:
|cluster.nodes
|cluster.nodes
|[ ]
|[ ]
|Ноды кластера на которые с мастер-сервера будут распространяться изменения
|Ноды кластера, на которые с мастер-сервера будут распространяться изменения.
|}
|}



Версия от 12:45, 20 февраля 2025

Общее описание

Сервис предназначен для поиска ответа на заданный вопрос. Входным значением для сервиса являются данные в текстовом формате. В ответ на входящий запрос сервис возвращает данные в формате JSON.

Термины и определения

Question Answering System (QAS) – сервис ответов на вопросы.


Системные требования

Для нормальной работы сервиса без GPU необходимо не менее 8 CPU (минимальные требования для использования метода ask) >= 2.20 GHz с поддержкой инструкций 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)

Работа на CPU при использовании метода ask крайне не рекомендуется. Оперативной памяти необходимо не менее 16Gb для работы без GPU.


Установка/обновление сервиса

Дистрибутив распространяется в виде установочных пакетов для окружения и сервиса. Загрузите установочные пакеты на сервер и выполните команды для вашей системы в каталоге с пакетом.

Перед установкой непосредственно сервиса необходимо установить сервисный пакет окружения.

  • Установка/обновление QAS осуществляется скриптом chmod +x ./qas-<версия>-<релиз>.sh && ./qas-<версия>-<релиз>.sh -i с правами администратора. Список всех ключей инсталлятора можно посмотреть, запустив инсталлятор ./qas-<версия>-<релиз>.sh без ключей.
  • Загрузить последнюю версию продукта curl -s "https://repo.connect2ai.net/api/qas/new" --user '[user]:[pass]' 2>&1 | bash или в интерактивном режиме bash -c "$(curl -s https://repo.connect2ai.net/api/qas --user '[user]:[pass]' 2>&1)".
  • Обновить QAS /opt/qas/inupdate в интерактивном режиме. Или запустить с ключом:
    • /opt/qas/inupdate -b – обновить до последней beta версии;
    • /opt/qas/inupdate -r – обновить до последней release версии;
    • /opt/qas/inupdate -n – обновить до последней версии (неважно beta или release).
  • Установить модели /opt/qas/inmodel в интерактивном режиме.
  • Проверить актуальную версию продукта curl -s "https://repo.connect2ai.net/api/qas/version.
  • Посмотреть лог изменений curl -s "https://repo.connect2ai.net/api/qas/changelog" --user '[user]:[pass]'.
  • Полное описание всех команд API репозитория можно найти по ссылке https://repo.connect2ai.net/api. [user]:[pass] – это тот же логин и пароль, что и от Nextcloud.
  • В папке с продуктом можно добавить 2 файла конфигурации (допускается один общий файл на все продукты в папке с окружением /opt/pve/):
    • echo -n "[user]:[pass]" > /opt/qas/.userapi (это файл авторизации в API, нужен для обновления и загрузки моделей)
    • echo -n "http://example.com:3128 [user] [password]" > /opt/qas/.proxy (это файл конфигурации proxy, необходим для обновления и загрузки моделей, при отсутствующем прямом подключении к интернету)

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

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

sudo systemctl enable qas.service && sudo systemctl start qas.service

Удостоверьтесь, что сервис стартовал:

systemctl status qas.service

Разрешите доступ к порту 6187 на нужном интерфейсе по протоколу tcp.


Работа в составе кластера

Для высоконагруженных систем сервис можно расположить на нескольких нодах (виртуальных машинах). В этом случае, чтобы не потерять документы и изменения, полученные на одной из нод, выделяется один основной сервис и вспомогательные сервисы:

  • База файловая, в папке data.
  • lsync настроен через конфиг QAS для репликации базы на все указанные серверы в списке cluster.nodes: [], указываем все слейв-сервера.
  • На всех слейвах прописан в конфиге master, чтобы все операции добавления и изменения данных при автокешировании они производили через мастер. Параметр в конфиге questions.master, на мастере значение «http://127.0.0.1:6187».
  • Векторная база на каждом сервере своя, она следит за своей папкой data и обновляет в оперативке по этой папке данные у себя.
  • UPS при изменении данных работает только с мастером QAS, а при запросе данных — со всеми серверами cluster, распределяя нагрузку.
  • В конфигурации UPS: в servers.qas.cluster.trainer указываем матер-сервер, в servers.qas.cluster перечисляем все сервера кластера QAS, в том числе и мастер.
Конфигурирование параметров сервиса

Настройка параметров сервиса qas производится в файле /opt/qas/config.json.

Описание параметров приведено в таблице.

Параметр По умолчанию Назначение
reloader.period 900 Период обновления векторов базы вопросов и документов.
gpt.gpu_layers 12 Количество слоёв встроенной нейросети.
gpt.context 32768 Размер контекста встроенной нейросети.
gpt.{section}.max_tokens 4096 {section} - summarization, chat, ask, creative

Определяет максимальное количество токенов (слов или частей слов), которые модель может сгенерировать в ответ.

gpt.{section}.top_k summarization 30, chat 40, ask 5, creative 40 Ограничивает количество наиболее вероятных следующих токенов, из которых модель выбирает при генерации текста.
gpt.{section}.top_p summarization 0.9, chat 0.4, ask 0.8, creative 0.4 Определяет кумулятивную вероятность, с которой модель выбирает следующий токен. Например, top_p = 0.9 означает, что модель выбирает из наименьшего набора токенов, сумма вероятностей которых составляет 0.9.
gpt.{section}.temperature summarization 0.4, chat 0.8, ask 0.1, creative 0.8 Контролирует «температуру» распределения вероятностей выходных токенов. Высокая температура делает распределение более равномерным, а низкая — более «остроконечным».
gpt.{section}.repeat_penalty 1.3 Накладывает штраф на повторяющиеся токены, уменьшая вероятность их повторного выбора.
logs.path logs/ Папка для хранения логов. Примеры абсолютного пути: "/var/log/qas/".
logs.backups 10 Количество файлов ротации.
logs.maxSize 5242880 Максимальный размер файла в байтах, триггер для ротации.
fragments.context 2048 Максимальная длина текста, которая будет подана в генератор для поиска ответа на вопрос.
fragments.threshold 0.6 Уровень достоверности при векторном поиске фрагментов в загруженных документах.
fragments.limit 2 Максимальное количество фрагментов, которые должны быть найдены в документах в порядке убывания доверия.
questions.master "http://127.0.0.1:6187" Адрес мастер-сервера для работы в кластере. Необходим, чтобы добавленные вопросы распространились на серверы кластера.
questions.threshold 0.7 Минимальный уровень достоверности ответа для попадания в кеш.
cluster.logfile logs/sync.log Расположение лог-файла синхронизации (актуально для мастер-сервера).
cluster.logfile logs/sync.status Расположение файла статуса lsyncd (актуально для мастер-сервера)
cluster.nodes [ ] Ноды кластера, на которые с мастер-сервера будут распространяться изменения.
Сбор данных об ошибках

Логи сервиса по умолчанию находятся в файле /opt/qas/logs/log.txt


Удаление

Для удаления выполните команду: /opt/qas/uninstall. Команда деинсталлирует сервис и удалит рабочий каталог, включая все установленные модели.