Решение состоит из следующих модулей:
- Фронтенд
- Сервис инфера (папка
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