documentation/pages/split-pipeline.md

171 lines
6.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Последовательный запуск пайплайнов
Несколько компонентов `ExperimentPipeline` возможно соединить друг с другом в последовательную серию запусков, где запуск первого пайплайна предполагает последовательный запуск второго.
Если два пайплайна связаны таким образом, у пользователя появляется два варианта запуска:
- Запустить цепочку из первого и второго пайплайна вместе
- Запустить только второй пайплайн
Для соединения двух пайплайнов необходимо:
1. Добавить в манифест `ExperimentPipeline` первого пайплайна пункт `continueWith`.
2. Создать совмещённый `APIComponent` запуска цепочки, который будет соответствовать запуску первого пайплайна.
При этом второй пайплайн создаётся обычным способом, и может запускаться отдельно от цепочки.
## Пример ExperimentPipeline
Например, в модуле есть два пайплайна. Пайплайн `part-1` содержит этап обучения модели машинного обучения. Пайплайн `part-2` содержит этап построения отчёта по обученной модели.
Первый пайплайн:
```yaml
apiVersion: "unified-platform.cs.hse.ru/v1"
kind: ExperimentPipeline
metadata:
name: part-1
namespace: pu-username-pa-appname
spec:
vars:
- name: data
- name: model
stages:
- name: train
image:
existingImageName: platform-reg.stratpro.hse.ru/my_org/myproject-train:718e2b0
inputs:
- name: data
outputs:
- name: model
entryPoint:
cmd:
- python
- main.py
resourceLimits:
cpu: "500m"
memory: "512M"
connectedBoxes:
- name: user-box
path: /userdata/
default: true
mountS3Box:
s3BoxName: users
continueWith:
name: part-2
```
Второй пайплайн:
```yaml
apiVersion: "unified-platform.cs.hse.ru/v1"
kind: ExperimentPipeline
metadata:
name: part-2
namespace: pu-username-pa-appname
spec:
vars:
- name: report_document
- name: trained_model
stages:
- name: report
image:
existingImageName: platform-reg.stratpro.hse.ru/my_org/myproject-report:718e2b0
inputs:
- name: trained_model
outputs:
- name: report_document
resourceLimits:
cpu: "1"
memory: "2G"
connectedBoxes:
- name: user-box
path: /userdata/
default: true
mountS3Box:
s3BoxName: users
```
Пункт `continueWith` в первом пайплайне указывает, что после завершения работы первого пайплайна автоматически вызывается второй.
## Пример APIComponent
Для запуска пайплайна нужно передать все входные данные в запросе. Но если второй пайплайн вызывается сам автоматически, то нет запроса на его вызов. Поэтому все входные данные для всех пайплайнов цепочки должны быть переданы в изначальном запросе запуска первого пайплайна.
Сначала, пример `APIComponent` второго пайплайна:
```yaml
apiVersion: "unified-platform.cs.hse.ru/v1"
kind: APIComponent
metadata:
name: api-part-2
namespace: pu-username-pa-appname
spec:
published: true
experimentPipeline:
name: part-2
restfulApi:
auth:
basic:
credentials: appname-apis-cred
identityPassThrough: true
apiSpec:
inputs:
- name: trained_model
type:
datatypes: [ "FILE" ]
contentTypes: [ "pth" ]
outputs:
- name: report_document
type:
datatypes: [ "FILE" ]
contentTypes: [ "text/html" ]
```
Для второго пайплайна `APIComponent` создаётся как для обычного независимого пайплайна и содержит данные, которые пользователь передаёт на вход и получает на выход.
`APIComponent` первого пайплайна содержит данные как для себя, так и для второго пайплайна:
```yaml
apiVersion: "unified-platform.cs.hse.ru/v1"
kind: APIComponent
metadata:
name: api-part-1
namespace: pu-username-pa-appname
spec:
published: true
experimentPipeline:
name: part-1
restfulApi:
auth:
basic:
credentials: appname-apis-cred
identityPassThrough: true
apiSpec:
inputs:
- name: data
description: "Набор данных для обучения."
type:
datatypes: [ "FILE" ]
contentTypes: [ "text/csv" ]
- name: trained_model
description: "Готовая модель и её конфигурация."
type:
datatypes: [ "FILE" ]
contentTypes: [ "pth" ]
outputs:
- name: model
description: "Готовая модель и её конфигурация."
type:
datatypes: [ "FILE" ]
contentTypes: [ "pth" ]
- name: report_document
type:
datatypes: [ "FILE" ]
contentTypes: [ "text/html" ]
```
Здесь `trained_model` и `report_document` - это переменные второго пайплайна, которые не входят в первый. При получении запроса на запуск, фреймворк анализирует, какую последовательность пайплайнов нужно запустить, и отделяет переменные из `APIComponent` второго пайплайна от общего списка переменных.
На практике, если нужно передать данные из первого пайплайна во второй, для этого нужно создать две переменные с разными именами, и в запросе на запуск передать в них один и тот же путь. Тогда первый пайплайн запишет по этому пути выходные данные, а второй сможет их прочитать. В примере выше такими переменными являются `model` и `trained_model`.