muryshev commited on
Commit
03fe723
·
1 Parent(s): b24d496
Files changed (1) hide show
  1. README.md +10 -126
README.md CHANGED
@@ -1,126 +1,10 @@
1
- # API семантического поиска с возможностью многоступенчатого поиска
2
-
3
- ## Используемые модели
4
- В качестве модели векторизации используется предобученная модель E5, которую можно скачать из облачного хранилища по [ссылке](https://ai.ntrlab.ru/mlcloud/s/cnJHPjmXsAzba8H/download).
5
- Модель нужно скачать и разместить в папке `legal_info_search_models` НЕ в корне проекта.
6
-
7
- На одном из последних этапов поиска опционально выполняется переранжирование. Последняя версия весов данной модели может быть скачана по [ссылке](https://ai.ntrlab.ru/mlcloud/apps/files/files/1135975?dir=/data/models/reranking) (веса `ranker_new_weights.json`). Модель переранжирования разместить в папке `rank_models` в корне проекта.
8
-
9
- Также в сервисе ведется поиск по картам проводок. Выполняется он при помощи модели [intfloat/multilingual-e5-base](https://huggingface.co/intfloat/multilingual-e5-base). Её также необходимо загрузить к себе и положить в папку `multilingual-e5-base` НЕ в корне проекта.
10
-
11
-
12
- ## Используемые для работы поиска данные
13
-
14
- Для корректной работы поиска необходимы данные в формате `huggingface datasets`, которые можно также скачать по [ссылке](https://drive.google.com/file/d/1ru40xKWr6aZys5sp5cMb_ngwCe7-Y_LU/view?usp=sharing). Их нужно скачать и разместить в папке `legal_info_search_data` в корне проекта.
15
-
16
- Каждый пример в любом наборе данных представляет из себя словарь со следующими атрибутами:
17
- * `doc_name` - название документа (например, ст. 159 НКРФ)
18
- * `doc_text` - текст документа
19
- * `doc_embedding` - эмбеддинг текста документа
20
- * `chunks_embeddings` - представляет список вида `[{'summary_text': *текст тизера*, 'embedding': *эмбеддинг тизера*}]`. Таким образом, под ключом `chunks_embeddings` находится список словарей с тизерами для конкретного текста документа. Тизеры и их эмбеддинги используются при подборе наиболее подходящего отрывка текста к вопросу пользователя.
21
-
22
- Пайплайн получения датасета такого формата описан в [соответствующем репозитории](https://gitlab.ntrlab.ru/hf-chat/nn_data_processing/teasers_extraction).
23
-
24
- Для поиска по картам проводок нужно загрузить набор данных из [папки](https://ai.ntrlab.ru/mlcloud/apps/files/files/1136443?dir=/data/processed_datasets/transaction_maps_search_data) в облаке. Размещаем скачанные данные в папке `transaction_map_data` в корне проекта.
25
-
26
-
27
- ## Локальный запуск
28
-
29
- Устанавливаем все зависимости
30
- ```
31
- pip install -r requirements.txt
32
- ```
33
-
34
- Создаем в корне проекта `.env` файл, в котором прописываем следующие переменные:
35
-
36
- ```
37
- GLOBAL_DATA_PATH=*GLOBAL_DATA_PATH*
38
- GLOBAL_MODEL_PATH=*GLOBAL_MODEL_PATH*
39
- RERANKER_MODEL_PATH=*RERANKER_MODEL_PATH*
40
- DATA_PATH_CONSULT=*DATA_PATH_CONSULT*
41
- ACCOUNTING_DATA_PATH=*ACCOUNTING_DATA_PATH*
42
- INTERNAL_DOCS_DATA_PATH=*INTERNAL_DOCS_DATA_PATH*
43
- GLOBAL_TRANSACTION_MAPS_DB_FILES_PATH=*GLOBAL_TRANSACTION_MAPS_DB_FILES_PATH*
44
- GLOBAL_TRANSACTION_MAPS_MODEL_PATH=*GLOBAL_TRANSACTION_MAPS_MODEL_PATH*
45
- LLM_API_ENDPOINT=*LLM_API_ENDPOINT*
46
- LOGS_BASE_PATH=*LOGS_BASE_PATH*
47
- ENABLE_LOGS=*ENABLE_LOGS*
48
- ES_URL=*ES_URL*
49
- ES_INDEX_NAME=*ES_INDEX_NAME*
50
- ```
51
-
52
- Передав все необходимые значения переменных окружения, запускаем в терминале команду
53
- ```
54
- python3 -m uvicorn fastapi_app:app --host=0.0.0.0 --port=7860 --env-file .env
55
- ```
56
-
57
- ## Сборка docker-образа и пуш в registry
58
-
59
- Собрать образ можно через комманду
60
-
61
- ```
62
- docker build -t ntr-semantic-search-api-multistep:latest .
63
- ```
64
- Если ранее не пушили в registry.ntrlab.ru, то сначала необходимо авторизоваться по команде
65
-
66
- ```
67
- docker login registry.ntrlab.ru --username <имя пользователя> --password <пароль>
68
- ```
69
-
70
- После авторизации присваиваем образу тэг и пушим в регистри
71
-
72
- ```
73
- docker tag ntr-semantic-search-api-multistep:latest registry.ntrlab.ru/nn/ntr-semantic-search-api-multistep:latest
74
- ```
75
- ```
76
- docker push registry.ntrlab.ru/nn/ntr-semantic-search-api-multistep:latest
77
- ```
78
-
79
- Тэг образу можно присвоить любой, но лучше обдумать версионирование. В данный момент последняя версия поиска в production среде имеет тэг `latest`.
80
-
81
-
82
- ## Деплой в среде Норникель
83
-
84
- Для развертывания собранной версии сервиса выполняем следующие шаги:
85
-
86
- 1. Ссылку на отгруженный образ в виде `registry.ntrlab.ru/nn/ntr-semantic-search-api-multistep:latest` передаем человеку со стороны заказчика, который может перенести этот образ в регистри Норникеля. Ждем сигнала, что все было загружено.
87
-
88
- 2. Заходим через Horizon к себе в неймспейс и создаем три волюма:
89
- * `j-volume` на 10 Гб типа `ReadWriteOnce`;
90
- * `ntr-semantic-search-data` на 10 Гб типа `ReadWriteOnce`;
91
- * `ntr-transaction-maps-search-data` на 10 Гб также типа `ReadWriteOnce`.
92
-
93
- 3. Создаем тетрадку, в которой в качестве системного волюма выбираем `j-volume`, также прикрепляем к тетрадке ранее созданные `ntr-semantic-search-data` (меняем название на диске на `ntr-semantic-search-data`) и `ntr-transaction-maps-search-data` (меняем название на диске на `ntr-transaction-maps-search-data`)
94
-
95
- В тетрадке выбираем 0.5 CPU и 16 GB RAM
96
-
97
- 4. После создания и подъема тетрадки в волюмах `ntr-semantic-search-data` и `ntr-transaction-maps-search-data` создать папки `models`, внутрь которой перенести соответствующие модели для каждого типа поиска. Перенос моделей можно осуществить при помощи file transfer`а, заранее заархивировав модели у себя на рабочем компьютере. Затем эти архивы переносим в поднятую тетрадку и разархивируем в нужные папки.
98
-
99
- После выполнения этого шага у нас должны получиться два волюма с такими структурами файлов внутри:
100
- * `ntr-semantic-search-data/models/model_1_folder`
101
- * `ntr-transaction-maps-search-data/models/model_2_folder`
102
-
103
- 5. Удаляем созданную тетрадку и пересоздаем новую, в которой в качестве системного волюма указываем только `j-volume` (и ничего больше). В тетрадке выбираем 0.5 CPU и 16 GB RAM.
104
-
105
- 6. После того как тетрадка поднялась, можно приступать к деплою.
106
- * Создадим сикрет для скачивания образа из регистри Норникеля.
107
-
108
- ```
109
- kubectl create secret docker-registry nornik-regcred --docker-server=nexus.npr.nornick.ru --docker-username=<service_username> --docker-password=<service_password>
110
-
111
- ```
112
- * Переносим через файл трансфер к себе в тетрадку следующий [файл](https://ai.ntrlab.ru/mlcloud/apps/files/files/1137406?dir=/data/nn_search_deployment). Если все было сделано в точности по инструкции, то не нужно менять ничего в разделах `volumeMounts` и `volumes`.
113
-
114
- * Задаем набор переменных окружения в разделе `env`. Также не потребуется изменять переменные `GLOBAL_MODEL_PATH` и `GLOBAL_TRANSACTION_MAPS_MODEL_PATH`, если все было выполнено в соответствии с инструкцией.
115
-
116
- * Прописываем команду `kubectl -f apply semantic-search-api.yaml`
117
-
118
- * Смотрим за прогрессом поднятия пода через команду `kubectl get pods --watch`. Как только у поднятого пода появится статус `Running`, заходим в его логи по команде `kubectl logs -f <pod_name>`.
119
-
120
- * Если всё развернулось без ошибок, то открываем новый терминал, узнаем имя нашего деплоймента: `kubectl get deployments`. После этого прописываем команду `kubectl expose deployment/<deployment_name> --type="ClusterIP" --port=7868 --target-port=7860`.
121
-
122
- * Смотрим выделенные адрес и порт сервиса по команде `kubectl get svc`.
123
-
124
- * Проверяем работоспособность сервиса: `curl http://<ip:порт деплоя>/health`
125
-
126
-
 
1
+ ---
2
+ title: Nn Search Transmap
3
+ emoji: 🚀
4
+ colorFrom: red
5
+ colorTo: pink
6
+ sdk: docker
7
+ pinned: false
8
+ ---
9
+
10
+ Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference