diff --git a/pages/pipeline.md b/pages/pipeline.md index 7404a80..5240f4e 100644 --- a/pages/pipeline.md +++ b/pages/pipeline.md @@ -11,28 +11,83 @@ Компонент ExperimentPipeline позволяет создать сервис для асинхронной обработки запросов пользователей. -ExperimentPipeline подходит для вычислительных задач, которые: +ExperimentPipeline подходит для вычислительных задач, для которых выполняется хотя бы один из критериев: - Требуют много вычислительных ресурсов (от нескольких секунд времени и больше, большие объёмы данных) - Не могут быть оформлены как Python-функция - Используют MLOps-модули -Если хотя бы один их этих критериев выполнен, задачу скорее всего лучше оформить как ExperimentPipeline. - -При получении запроса от пользователя, на основе образов Docker, указанных в манифесте ExperimentPipeline, создаются контейнеры. Указанные входные и выходные переменные становятся переменными окружения при запуске контейнера, и соответствуют определённым путям в файловом хранилище. Запускается расчёт, в ходе которого предполагается работа с файлами и папками из переменных окружения. Результаты расчёта записываются в папки, пути к которым были переданы в контейнер. - Для добавления ExperimentPipeline к модулю разработчику нужно: - Добавить в модуль манифест компонента ExperimentPipeline - Добавить в модуль манифест компонента APIComponent для обращения к ExperimentPipeline - Добавить в модуль манифест компонента APIComponent для работы с пайплайнами в целом (один на все пайплайны) -Также в модуле уже должен присутствовать хотя бы один компонент DataBox и соответствующий ему APIComponent. +Также в модуле уже должен присутствовать APIComponent для работы с файлами и хотя бы один компонент DataBox. + +Общий принцип работы пайплайнов следующий. + +1. Пользователь отправляет запрос с путями ко входным и выходным данным в файловом хранилище. +2. Пользователь получает ответ на запрос с идентификатором запуска, по которому можно отслеживать статус выполнения пайплайна. +3. Создаётся и запускается контейнер Docker +4. Файловое хранилище монтируется к файловой системе контейнера согласно полям манифеста ExperimentPipeline +5. Указанные в запросе пути преобразуются в пути в локальной файловой системе и передаются в контейнер как переменные окружения. +6. Запускается расчёт, который считывает входные данные из локальных путей, переданных в переменных окружения. +7. Результат расчёта записывается в локальный путь, считанный из переменной окружения. +8. Пользователь периодически проверяет статус расчёта. Если расчёт завершён, его результаты можно получить через запросы к файловому хранилищу. ## Переменные + +```mermaid +graph TB + +request["Запрос"] +S3[("Хранилище S3")] + +var1[/"var1"/] +var2[/"var2"/] + +request --> var1 +request --> var2 +S3 --> var1 +S3 --> var2 + +subgraph stage1 + UNIP_PIPELINE_VAR1[/"UNIP_PIPELINE_VAR1"/] + UNIP_PIPELINE_VAR2[/"UNIP_PIPELINE_VAR2"/] + UNIP_PIPELINE_VAR3_first[/"UNIP_PIPELINE_VAR3"/] + docker1[/"docker container 1"/] +end + +var3[/"var3"/] +subgraph stage2 + UNIP_PIPELINE_VAR3[/"UNIP_PIPELINE_VAR3"/] + UNIP_PIPELINE_VAR4[/"UNIP_PIPELINE_VAR4"/] + docker2[/"docker container 2"/] +end + +docker1 --> UNIP_PIPELINE_VAR3_first +UNIP_PIPELINE_VAR1 --> docker1 +UNIP_PIPELINE_VAR2 --> docker1 +UNIP_PIPELINE_VAR3_first --> var3 + +var4[/"var4"/] + +UNIP_PIPELINE_VAR3 --> docker2 +docker2 --> UNIP_PIPELINE_VAR4 + +UNIP_PIPELINE_VAR4 --> var4 + +var1 --> UNIP_PIPELINE_VAR1 +var2 --> UNIP_PIPELINE_VAR2 + +var3 --> UNIP_PIPELINE_VAR3 + +``` + Данные передаются на вход и выход пайплайна, а также между его отдельными этапами через *переменные*. Эти переменные используются в нескольких частях работы пайплайна: - Внутри контейнера эти переменные доступны как переменные окружения.