Пайплайны

Пайплайны позволяют автоматизировать ход обработки данных и ML-моделирования, путем использования модулей платформы (Data transfer service, Environments, Deployments). С помощью чего обеспечивается:

  • Последовательное обращение к модулям платформы ML Space (Data transfer service, Environments, Deployments).

  • Упрощение процесса развертывания, т.к. переход от прототипа к решению станет быстрее, а тестирование перехода проще.

Важно

  • Функциональные возможности пайплайнов позволяют обеспечить запуск модулей платформы ML Space в одном месте. Например, использование параметра node_type: data_transfer показывает, что будет запущен модуль Data transfer service.

  • В «node_type: environments_job» создается контейнер на основе заданного образа base_image, в котором запускается скрипт script.

  • Задачу обучения можно просмотреть в разделе Environments → Задачи и окружения. Она будет иметь имя вида: lm-mpi-job-cd190c2b-e240-42cd-a05e-bffd55072b21.

Создание и редактирование пайплайна

  1. Введите название (например, Мой первый пайплайн).

  2. Выберите Тип срабатывания:

    Ручной запрос

    По расписанию

    Пайплайн запускается вручную.

    Запуск осуществляются по расписанию в указанный период времени с указанными интервалами.

  3. Выберите Поделиться с командой, если требуется доступ к пайплайну всем участникам workspace.

  4. Отредактируйте yaml. Пример можно посмотреть в Примеры кода пайплайнов.

    Значения параметров, используемых для составления пайплайна, приведены ниже.

  5. Запустите пайплайн, нажав Запустить сейчас. Если не нажать Запустить сейчас, пайплайн не будет создан.

Для изменения параметров созданного пайплайна нажмите Настройки.

При работе с пайплайнами в меню Кнопка с тремя вертикальными точками доступны действия: Редактировать и Удалить.

Описание параметров пайплайна

В этом разделе поблочно описаны параметры и возможные значения, которые можно использовать для составления пайплайна.

Общие для всех этапов

Общее

Параметр

Значение

Описание

nodes

  • data_transfer

  • deployments_image

  • deployments_inference

  • environments_image

  • environments_job

Обязательный параметр шага, который определяет, какой модуль использовать.

Data transfer service

Data transfer service

Параметр

Значение

Описание

name

pipeline-name

Имя подключения, которое автоматически создаст пайплайн после запуска.

source_conn_id

Значение доступно по кнопке Узнать ID коннектора

Идентификатор (id) коннектора до источника данных.

destination_conn_id

Значение доступно по кнопке Узнать ID коннектора

Идентификатор (id) коннектора до места назначения данных.

strategy

write_all, append_new, sync_all

Правило переноса файлов:

  • Добавлять все данные (write_all) — обновляет все данные в месте назначения и добавляет новые.

  • Добавлять только новые записи (append_new) — добавляет только новые записи в место назначения.

  • Полная синхронизация (sync_all) — синхронизирует данные между двумя подключениями. Пример: на источнике находится файл А, на месте назначения — файл Б, после синхронизации в источнике и месте назначения будут находиться файл А и файл Б.

source

test-transition.txt

Путь до переносимого файла/папки в источнике.

destination

transferred/workflows

Целевой путь в месте назначения.

cluster_name

  • chistofari-1 = Christofari.V100

  • christofari-2 = Christofari.A100

  • cce = Cloud.Region.CPU (CPU)

  • pd11 = Cloud.Region.A100 (GPU Tesla A100)

Имя региона.

Environments

Environments create image

Параметр

Значение

Описание

from_image

cr.msk.sbercloud.ru/aicloud-base-images/image-name:tag

Название базового образа, на основе которого создаем новый. Подробнее про образы см. Библиотеки в образах.

requirements_file

/home/jovyan/requirements.txt

Путь к файлу requirements на NFS.

conda_env

base

Имя окружения conda, если в образе используется не стандартное окружение python, а окружение anaconda.

install_type

pip

Параметр используется только при условии install_type == «poetry». Он указывает путь до файла poetry.lock на NFS.

Environments run job

Параметр

Значение

Описание

base_image

cr.msk.sbercloud.ru/aicloud-base-images/image-name:tag

Базовый образ, в котором будет исполняться скрипт обучения модели. Образ должен быть из cr.msk.sbercloud.ru/aicloud-base-images или из проекта Docker registry для текущего воркспейса. Подробнее про базовые образы.

Подробнее про образы см. Библиотеки в образах.

script

/home/jovyan/quick-start/job_launch/tensorflow_mnist_estimator.py

Путь к скрипту обучения на NFS.

Опционально n_workers

1

Количество рабочих узлов региона, на которых будет выполняться скрипт. Может принимать значения больше 0.

Опционально n_gpus

1

Количество GPU на одном рабочем узле. Может принимать значения в диапазоне от 1 до 16.

Опционально cpu_limit

3

Лимит количества CPU.

Важно

Для запуска задачи на CPU, не используя GPU, укажите параметр n_gpus: 0. Примеры кода пайплайнов.

Опционально memory_limit

4

Лимит памяти (в ГБ).

warm_cache

false

Параметр отключен (deprecated) и передается в единственном значении — false.

Опционально type

horovod

Тип распределенных вычислений, варианты: pytorch, horovod.

Опционально flags

foo: 'bar', baz: 'qux'

Флаги, с которыми нужно запустить скрипт.

Опционально stop_timer

0

Максимальное время выполнения задачи в минутах до принудительного удаления, 0 - не удалять принудительно.

Опционально env_variables

quux: 'quuz', corge: 'grault'

Переменные окружения.

Опционально processes_per_worker

1

Количество процессов на один рабочий узел региона, по умолчанию равно количеству GPU.

Опционально conda_env

base

Имя окружения conda, если в образе используется не стандартное окружение python, а окружение anaconda.

Опционально job_desc

JOB

Пользовательское описание задачи.

Опционально cuda11

false

Использование cuda11.

Важно

Параметр устаревший. Передача этого параметра не будет влиять на поведение задачи обучения. Оставляйте в значении False.

Опционально region

  • V100 = Christofari.V100

  • А100 = Christofari.A100

  • CCE-MT = Cloud.Region.CPU (CPU)

  • SR002-MT = Cloud.Region.A100 (GPU Tesla A100)

Имя региона.

Deployments

Deploy create image

Параметр

Значение

Описание

from_image

cr.msk.sbercloud.ru/aicloud-base-images/horovod-cuda10.0-tf1.15.0-pt1.3.0:0.0.32.3

Имя базового образа должно начинаться с cr.msk.sbercloud.ru/aicloud-base-images. Подробнее про базовые образы.

run_script

foo.py

Путь к каталогу с артефактами модели.

requirements_path

requirements.txt

Путь к файлу requirements.txt.

AWS_ACCESS_KEY_ID

access key

S3 access key ID.

S3_ENDPOINT

s3 endpoint

S3 endpoint.

Inference deploy

Параметр

Значение

Описание

image

cr.msk.sbercloud.ru/.../IMAGE

Название образа, из которого нужно создать деплой.

region

DGX2-INF = Christofari.V100 CCE-INF = Cloud.Region.CPU (CPU)

Имя региона.

instance_type

v100.1gpu

Тип конфигурации, для региона «DGX2-INF» это строка вида v100.1gpu. Подробнее про типы конфигурации см. Конфигурации вычислительных ресурсов (instances_types)

replicas

min: 0, max: 100

Количество подов может принимать значения в диапазоне от 0 до 100.

alias

image-name

Название образа.

description

image-descr

Описание.

Важно

Наименования регионов в нодах пайплайнов:

  • chistofari-1 и V100 — обозначения Christofari.V100

  • christofari-2 и А100 — обозначения Christofari.A100

  • cce CCE-MT — обозначения Cloud.Region.CPU (CPU)

  • pd11 и SR002-MT — обозначения Cloud.Region.A100 (GPU Tesla A100)

Конфигурации вычислительных ресурсов (instances_types)

Для просмотра доступных конфигураций используйте:

  • Метод API возвращает образы и доступных конфигурации в задачах обучения, Jupyter Server и деплоях (инференсе).

    • Ключ MT — для обучения моделей и Jupyter Server.

    • Ключ INF — для деплоев (инференса).

  • Метод API возвращает доступные spark-конфигурации.

Пример запроса для получения списка образов с ключом MT
 curl --location --request GET 'https://api.aicloud.sbercloud.ru/public/v2/configs?cluster_type=MT' \
 --header 'x-api-key: eeeeccee-eeee-eeee-eeee-eeaeefeeb49c' \
 --header 'x-workspace-id: frrrrrra-ceee-eeec-eeef-4df7ca4bbbb1' \
 --header 'Authorization: eyJhbGciOiJSUzI1NiIsInR5cCIgOi...'
Пример запроса для получения списка образов с ключом INF
 curl --location --request GET 'https://api.aicloud.sbercloud.ru/public/v2/configs?cluster_type=INF' \
 --header 'x-api-key: eeeeccee-eeee-eeee-eeee-eeaeefeeb49c' \
 --header 'x-workspace-id: frrrrrra-ceee-eeec-eeef-4df7ca4bbbb1' \
 --header 'Authorization: eyJhbGciOiJSUzI1NiIsInR5cCIgOi...'
Пример запроса для доступных spark-конфигураций
 curl --location --request GET 'https://api.aicloud.sbercloud.ru/public/v2/configs/spark' \
 --header 'x-api-key: eeeeccee-eeee-eeee-eeee-eeaeefeeb49c' \
 --header 'x-workspace-id: frrrrrra-ceee-eeec-eeef-4df7ca4bbbb1' \
 --header 'Authorization: eyJhbGciOiJSUzI1NiIsInR5cCIgOi...'

Примеры кода пайплайнов

Важно

  • Для параллельного запуска этапов пайплайна добавьте version: "1" перед nodes. Измените структуру шаблона, согласно примеру для параллельного выполнения.

  • Для указания порядка запуска этапов используйте dependencies: [node]. В примере ниже зависимость deplinference от dts. Пока не выполнится dts этап deplinference не запустится.

  • Ранее написанный код пайпланов изменений не требует.

Код пайплайна для параллельного выполнения
 version: "1"
 nodes:
   dts:
     node_type: data_transfer
     parameters:
       name: "DTS main"
       source_conn_id: "2c8a98ee-0000-0000-0000-888831e46993"
       source: "b-ws-n999-0rf/requirements.txt"
       destination_conn_id: "5678c648-dfgh-ffff-ac50-995afced7bb5"
       destination: "PPL-MAIN/"
       cluster_name: "christofari-1"
       strategy: "write_all"

   deplinference:
     node_type: deployments_inference
     parameters:
       image: "cr.msk.sbercloud.ru/c7d4f6fe-erty-4d4a-ad74-22d6ccd07ca7/inference-image-1669123456:latest"
       region: 'DGX2-INF-001'
       #region: 'CCE-INF'
       instance_type: 'v100.1gpu'
       replicas:
         min: 1
         max: 1
       alias: "inf-alias"
       description: "inf-descr"
       name: "name"
     dependencies: [dts]

   deplimage:
     node_type: deployments_image
     parameters:
       base_image: 'cr.msk.sbercloud.ru/aicloud-base-images/horovod-cuda10.0-tf1.15.0'
       artifacts_directory: 'b-ws-n999-132/FakeModelFolder/ruBert-Base/'
       run_script: 'kfserving_ruBert_base.py'
       requirements_path: 'requirements.txt'
       AWS_ACCESS_KEY_ID: 'u-ws-12345-132'
       AWS_SECRET_ACCESS_KEY: 'ХХХ12361JSv12345s7v123er0XF5GfxPqUKk1234'
       S3_ENDPOINT: 'https://n-ws-1234.s3.sbercloud.ru:0000'
     dependencies: [dts]

   envimage:
     node_type: environments_image
     parameters:
       from_image: "cr.msk.sbercloud.ru/aicloud-base-images/horovod-cuda10.0-tf1.15.0-pt1.3.0:0.0.31"
       requirements_file: "/home/jovyan/quick-start/job_launch_tf2/requirements.txt"
     dependencies: [dts]

   envjob:
     node_type: environments_job
     parameters:
       base_image: "cr.msk.sbercloud.ru/aicloud-base-images/horovod-cuda10.1-tf2.2.0-pt1.5.0:0.0.27"
       script: "/home/jovyan/quick-start/job_launch_tf2/tensorflow_mnist_estimator.py"
       n_workers: 1
       n_gpus: 1
       warm_cache: false
       region: "DGX2-MT"
     dependencies: [dts, deplimage]
Код пайплайна для создания задачи обучения на CPU
 nodes:
 - node_type: environments_job
   parameters:
     #cr.msk.sbercloud.ru/aicloud-base-images/horovod-cuda10.0-tf1.15.0-pt1.3.0
     base_image: 'cr.msk.sbercloud.ru/aicloud-base-images/horovod-cuda10.0-tf1.15.0-pt1.3.0:0.0.28'
     # Путь до скрипта обучения на NFS
     script: '/home/jovyan/cpu_job_script.py' # Путь к файлу скрипта
     # Количество рабочих узлов региона, на которых будет выполняться скрипт
     n_workers: 1
     # Количество GPU на одном рабочем узле
     n_gpus: 0
     # Параметр warm_cache отключен и может передаваться только в значении false. Если передать true, то получим ошибку.
     warm_cache: false
     # Тип распределенных вычислений, варианты: pytorch, horovod
     type: 'cce'
     # A100 или V100, по умолчанию V100
     region: 'CCE-MT'
     memory_limit: 6
     cpu_limit: 2

Рассмотрим пример пайплайна, в котором используются модули:

  • Data transfer service

  • Environments

  • Deployments

В примере выполняется:

  1. Перенос файлов с S3 на NFS региона размещения вычислительных ресурсов Christofari.V100 с использованием data_transfer.

  2. Создание образа на основании базового с использованием зависимостей из файла requirements.txt.

  3. Запуск задачи обучения в регионе Christofari.V100 с установленными параметрами.

  4. Создание образа для деплоя.

  5. Запуск инференса модели в установленной конфигурации.

Код пайплайна для использования нескольких модулей платформы
 nodes:
 - node_type: data_transfer
   parameters:
     name: "PPL: S3 -> NFS"
     source_conn_id: "d5e32f66-89bb-11ec-a8a3-0242ac120002"
     source: "ruRoBERTa-large/ruRoberta-large/"
     destination_conn_id: "d5e32f66-89bb-11ec-a8a3-0242ac120003"
     destination: "FOLDER_NAME/"
     cluster_name: "christofari-1"
     strategy: "write_all"
 #------------------------
 #------------------------
 #-----ENV image build----
 - node_type: environments_image
   parameters:
     requirements_file: "/home/jovyan/quick-start/job_launch/requirements.txt"
     from_image: "cr.msk.sbercloud.ru/aicloud-base-images/horovod-cuda11.0-tf2.4.0-pt1.7.1"
 #------------------------
 #------------------------
 #-----ENV job-------
 - node_type: environments_job
   parameters:
     base_image: 'cr.msk.sbercloud.ru/d5e33f66-89bb-15ec-a8a3-0242ac510002/job-custom-image-d4a804:latest'
     script: '/home/jovyan/quick-start/job_launch/tensorflow_mnist_estimator.py'
     requirements_file: '/home/jovyan/quick-start/job_launch/requirements.txt'
     n_workers: 1
     n_gpus: 1
     job_desc: "Environments job"
     cpu_limit: 3
     memory_limit: 4
     region: 'V100'
 #------------------------
 #------------------------
 #-----DEPL build image---
 - node_type: deployments_image
   parameters:
     base_image: 'cr.msk.sbercloud.ru/aicloud-base-images/horovod-cuda10.0-tf1.15.0-pt1.3.0'
     run_script: 'server.py'
     artifacts_directory: 'b-ws-xa1o9-czq/folder100/'
     requirements_path: "requirements.txt"
     AWS_ACCESS_KEY_ID: 'u-ws-xa1o9-1jt'
     AWS_SECRET_ACCESS_KEY: 'YOUR ACCESS KEY'
     S3_ENDPOINT: 'https://n-ws-lo1c9.s3pd02.sbercloud.ru'
 #----------------------------
 #----------------------------
 #-----DEPL image inference---
 - node_type: deployments_inference
   parameters:
     image: "cr.msk.sbercloud.ru/d5e32f66-89bb-11ec-a1a9-0112ac120003/inference-image-1643879777"
     region: 'DGX2-INF'
     instance_type: 'v100.1gpu'
     replicas:
       min: 1
       max: 1
     alias: "DEPLOY INFERENCE"
     description: "You description here"