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