123 lines
9 KiB
Markdown
123 lines
9 KiB
Markdown
|
|
|||
|
# Работа с фреймворком, обзор основных компонентов
|
|||
|
|
|||
|
- [Работа с фреймворком, основные компоненты](#работа-с-фреймворком-основные-компоненты)
|
|||
|
- [Модули](#модули)
|
|||
|
- [Структура базового модуля](#структура-базового-модуля)
|
|||
|
- [Репозиторий](#репозиторий)
|
|||
|
|
|||
|
|
|||
|
## Модули
|
|||
|
|
|||
|
Фреймворк разделяет три типа модулей:
|
|||
|
|
|||
|
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, то есть входные и выходные переменные, их типы данных и описания.
|