Решение состоит из следующих модулей:
- Фронтенд
- Сервис инфера (папка
service) - Сервис подсказок (папка
suggest-proxy) - Сервис для работы с LLM моделями Petals (папка
petals) - Векторная база данных Milvus
- Поисковая система OpenSearch
Из-за нехватки вычислительных мощностей, модель StableBeluga 2 запускается на распределенном краудсорсинговом кластере Petals, который требует доступ к внешней сети. При корректном деплое инференс модели должен запускаться локально на графическом ускорителе.
Решение упаковано в докер-контейнеры для простоты запуска. (см. docker-compose.yaml)
- Убедиться, что все файлы
.env.exampleв подпапках переименованы в.envи параметры в них корректны. Для стандартного деплоя ничего менять не надо. - Разархивировать папку
volumesв корень (папка должна быть рядом с файлом docker-compose.yaml) - Запустить контейнеры на хосте с установленным Docker через
docker compose up --build - При первом запуске будут загружены предобученные модели, нужно немного подождать.
- Импортируем данные с помощью Milvus Backup (конфиг находится в файле
backup.yaml, поэтому достаточно запустить из рабочей директории):./milvus-backup restore -n data - Индексируем базу данных
docker compose exec -it service python3 reindex.py
Опционально (если требуются подсказки):
- Далее, необходимо настроить OpenSearch. Заходим в Dashboard на порту
5601. Авторизуемся подadminс паролемabobaQW#E123! - Открываем сайд-меню, заходим в
Index Management->Indexes->Create Index. - Указываем название
question, открываемJSON Editor, вставляем текст из файлаindex-mapping.json, нажимаемCreate. - Загружаем данные из файла
data.json:
curl -H "Content-Type: application/x-ndjson" -POST https://localhost:9200/question/_bulk -u 'admin:abobaQW#E123!' --insecure --data-binary "@data.json"Возможно, нужно будет заменить localhost на адрес машины.
Исходники для предобработки датасета, расчета эмбеддингов, сборки векторной бд находятся в папке train:
extraction.py- файл для выделения текстовых фрагментов из PDF-файлов датасетаquestions.ipynb- файл с разбором датасета с историей запросов, вычислением эмбеддингов и инференса LLM.guides.ipynb- файл с разбором датасета из инструкций, подсчет эмбеддингов
Решение не тестировалось на сервере с GPU, но теоретически должно работать без модификаций. На CPU все работает стабильно. LFS крайне плохо загружает файлы, поэтому volumes.zip можно скачать тут https://drive.google.com/file/d/1tZwXX6SSyEWIRXzA8Tv37823JSWYDezY/view?usp=sharing