QAS. Руководство администратора: различия между версиями
Материал из Флора AI
E.Elagina (обсуждение | вклад) |
|||
| Строка 7: | Строка 7: | ||
====='''Системные требования'''===== | ====='''Системные требования'''===== | ||
Для нормальной работы сервиса | Для нормальной работы сервиса без 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 при | Работа на 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> | ** <code>/opt/qas/inupdate -b</code> – обновить до последней beta версии; | ||
** <code>/opt/qas/inupdate -r</code> | ** <code>/opt/qas/inupdate -r</code> – обновить до последней release версии; | ||
** <code>/opt/qas/inupdate -n</code> | ** <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> | * Полное описание всех команд 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. Сервис не требует остановки и возвращается в актуальное состояние после обновления. | ||
Не забудьте запустить сервис и включить в автозапуск в системе: | Не забудьте запустить сервис и включить в автозапуск в системе: | ||
| Строка 58: | Строка 59: | ||
====='''Работа в составе кластера'''===== | ====='''Работа в составе кластера'''===== | ||
Для высоконагруженных систем сервис можно расположить на нескольких нодах(виртуальных машинах). В этом случае чтобы не потерять документы и изменения полученные на одной из нод, выделяется один основной сервис и вспомогательные сервисы: | Для высоконагруженных систем сервис можно расположить на нескольких нодах (виртуальных машинах). В этом случае, чтобы не потерять документы и изменения, полученные на одной из нод, выделяется один основной сервис и вспомогательные сервисы: | ||
* База файловая, в папке data. | * База файловая, в папке data. | ||
* lsync настроен через конфиг QAS для репликации базы на все указанные серверы в списке cluster.nodes: [], указываем все слейв сервера. | * lsync настроен через конфиг QAS для репликации базы на все указанные серверы в списке cluster.nodes: [], указываем все слейв-сервера. | ||
* На всех слейвах прописан в конфиге master, чтобы все операции добавления и изменения данных при автокешировании они производили через мастер. Параметр в конфиге questions.master, на мастере значение | * На всех слейвах прописан в конфиге master, чтобы все операции добавления и изменения данных при автокешировании они производили через мастер. Параметр в конфиге questions.master, на мастере значение «<nowiki>http://127.0.0.1:6187»</nowiki>. | ||
* Векторная база на каждом сервере своя, она следит за своей папкой data и обновляет в оперативке по этой папке данные у себя. | * Векторная база на каждом сервере своя, она следит за своей папкой data и обновляет в оперативке по этой папке данные у себя. | ||
* UPS при изменении данных работает только с мастером QAS, а при запросе данных | * 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, необходим для обновления и загрузки моделей, при отсутствующем прямом подключении к интернету)
- echo -n
При обновлении следующий список файлов и папок сохраняется: .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. Команда деинсталлирует сервис и удалит рабочий каталог, включая все установленные модели.