documentation/pages/components-simple.md

122 lines
9 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.

# Работа с фреймворком, обзор основных компонентов
- [Работа с фреймворком, основные компоненты](#работа-с-фреймворком-основные-компоненты)
- [Модули](#модули)
- [Структура базового модуля](#структура-базового-модуля)
- [Репозиторий](#репозиторий)
## Модули
Фреймворк разделяет три типа модулей:
1. Базовый модуль - приложение, которое решает прикладную задачу.
2. MLOps-модуль - библиотека или набор подпрограмм, которые модифицируют работу базового модуля.
3. Модуль данных - набор данных, оформленный в соответствии с интерфейсом, который поддерживается фреймворком.
Основной тип модулей, которые развёртываются на фреймворке - базовые.
## Структура базового модуля
Базовый модуль состоит из нескольких частей, которые вместе складываются в приложение.
- Git-репозиторий
- Программный код, решающий прикладную задачу
- Интерфейс взаимодействия с фреймворком
- Компоненты модуля
- MLComponent
- ExperimentPipeline
- APIComponent
- DataBox
- Системные компоненты, подключающие модуль к фреймворку
- Secret
- Repository
- PlatformApp
- Образы Docker
## Репозиторий
Репозиторий модуля, который развёрнут на фреймворке, содержит:
- Исходный код проекта
- Зависимости проекта, по которым можно воссоздать виртуальную среду для работы с ним
- Dockerfile
- Папку с манифестами (файлами YAML) компонентов модуля
## Образ Docker
Образ Docker должен быть собран на основе файла Dockerfile из репозитория модуля.
Образ должен содержать только основную программу, включая интерфейс взаимодействия с фреймворком, и зависимости, необходимые для её запуска. Образ должен быть основан на `-slim` версии базового образа Python.
В образе не должно быть лишних данных, таких как:
- папка `.git`
- данные для тестов
- веса ИИ-моделей
- артефакты сборки
Необходимые для работы данные нужно подключать через файловое хранилище S3:
- Для [MLComponent](./mlcmp.md) - через пункты манифеста `modelPath` и `modelBox`.
- Для [ExperimentPipeline](./pipeline.md) - через входную переменную, к которой прописан явный путь в `mountFrom`.
## DataBox
Компонент [DataBox](./databox.md) позволяет модулю использовать файловое хранилище S3. В одном модуле может быть несколько таких компонентов, которые отвечают за разные виды данных. Например, данные конечных пользователей модуля (загруженные для расчётов файлы) и данные разработчика модуля (веса моделей ИИ).
## MLComponent
[MLComponent](./mlcmp.md) - это компонент, который позволяет создать сервис синхронной обработки вычислительных запросов.
Основной элемент кода разработчика, к которому подключается MLComponent - *функция* Python с заранее определённым интерфейсом ("функция inference"). В неё передаются данные, присланные пользователем, а так же модель машинного обучения, определённая в манифесте MLComponent.
Разработчик указывает, среди прочего:
- Docker-образ, который содержит реализацию функции inference
- Путь к функции inference в Docker-контейнере
- Путь в Docker-контейнере по которому можно загрузить модель ИИ
- Настройки запуска Docker-контейнера - лимиты ресурсов, переменные окружения
- Детали подключения файлового хранилища S3 к файловой системе контейнера
- Какие компоненты DataBox используются
- Соответствие путей в файловом хранилище S3 путям в файловой системе контейнера
## ExperimentPipeline
Компонент [ExperimentPipeline](./pipeline.md) ("пайплайн") позволяет создать сервис для асинхронной обработки запросов пользователей.
В пайплайнах основной элемент кода разработчика - это *контейнер Docker*. Взаимодействие контейнера с фреймворком организуется через файловую систему и переменные окружения. Входные и выходные данные монтируются в файловую систему контейнера, и локальные пути к ним передаются в контейнер как переменные окружения. Таким образом, порядок работы контейнера:
- Считать переменные окружения, получить пути к входным данным и к папкам для размещения выходных данных.
- Считать данные из полученных путей к входным данным
- Произвести вычисления
- Сохранить результаты в полученные пути для размещения выходных данных
Компонент ExperimentPipeline позволяет организовывать вычисления в несколько этапов, каждый из которых запускается со своим набором входных и выходных данных. Каждый контейнер соответствует одному этапу.
В самом манифесте ExperimentPipeline разработчик, помимо прочего, указывает:
- Docker-образ, который будет запускаться
- В том числе настройки запуска - переменные окружения, лимиты ресурсов
- Входные и выходные переменные этапов
- Могут указываться детали их подключения - путь к файловом хранилище S3, путь в файловой системе контейнера
- Детали подключения файлового хранилища S3 к файловой системе контейнера
- Какие компоненты DataBox используются
- Соответствие путей в файловом хранилище S3 путям в файловой системе контейнера по умолчанию
## APIComponent
Компонент APIComponent предоставляет доступ к элементам модуля через API. Есть четыре основных вида компонентов APIComponent:
1. Файловый API
2. API пайплайнов в целом
3. API отдельного MLComponent
4. API отдельного ExperimentPipeline
Первые три вида APIComponent определяются похожим образом, и с точки зрения разработчика отличаются добавлением соответствующего поля в манифест.
APIComponent отдельного ExperimentPipeline определяет всю структуру взаимодействия с соответствующим пайплайном через API, то есть входные и выходные переменные, их типы данных и описания.