Образ должен содержать только основную программу, включая интерфейс взаимодействия с фреймворком, и зависимости, необходимые для её запуска. Образ должен быть основан на `-slim` версии базового образа Python, если не требуется иное.
Необходимые для работы данные нужно подключать через файловое хранилище S3:
- Для [MLComponent](./mlcmp.md) - через пункты манифеста `modelPath` и `modelBox`.
- Для [ExperimentPipeline](./pipeline.md) - через входную переменную, к которой прописан явный путь в `mountFrom`.
## DataBox
Компонент [DataBox](./databox.md) позволяет модулю использовать файловое хранилище S3. В одном модуле может быть несколько таких компонентов, которые отвечают за разные виды данных. Например, данные конечных пользователей модуля (загруженные для расчётов файлы) и данные разработчика модуля (веса моделей ИИ).
[MLComponent](./mlcmp.md) - это компонент, который позволяет создать сервис синхронной обработки вычислительных запросов.
Основной элемент кода разработчика, к которому подключается MLComponent - *функция* Python с заранее определённым интерфейсом ("функция inference"). В неё передаются данные, присланные пользователем, а так же модель машинного обучения, определённая в манифесте MLComponent.
Разработчик указывает, среди прочего:
- Docker-образ, который содержит реализацию функции inference
- Путь к функции inference в 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, то есть входные и выходные переменные, их типы данных и описания.
Все компоненты в репозитории являются частью одного и того же приложения, поэтому значение поля `metadata.namespace`у всех компонентов в одном репозитории должно совпадать.