# Введение в работу с фреймворком Фреймворк решает проблему размещения проектов в сфере искусственного интеллекта в виде веб-сервисов. Основная модель работы предполагает, что существует проект, Что существует: - Исследовательский проект - Подзадачи проекта, которые можно выделить в вычислительные конвейеры: "получить данные A, B и C, произвести вычисления, вывести данные X, Y и Z" Какие задачи может решить фреймворк: - "Живая" демонстрация работы проекта на любых совместимых данных - Запуск вычислительных экспериментов и их организация - Запуск вычислительных задач через веб-сервис - Управление пользователями, ограничение доступа Внедрение проекта во фреймворк можно разделить на три этапа: 1. Подготовка существующего проекта 2. Реализация интерфейса взаимодействия с фреймворком 3. Настройка системных компонентов фреймворка ## Подготовка проекта к внедрению во фреймворк Чтобы существующий проект мог быть подключен к фреймворку, в нём должна быть выделена задача с явно заданными входными и выходными данными. - Хороший пример - оптическое распознавание символов. На входе изображение, на выходе текст с этого изображения. - Плохой пример - приложение с базой данных, где основные взаимодействия с приложением регулярно обновляют эту базу данных. - Хороший пример - вычислительная подзадача, которая выполняется на выборке из базы данных. На входе выборка, на выходе результат вычислений. - Плохой пример - набор Jupyter-тетрадей, в которых задачи решаются последовательным вызовом ячеек с кодом. - Хороший пример - тот же код, оформленный в виде скрипта `.py`. Фреймворк предоставляет два варианта организации вычислительных задач: 1. Веб-сервис для быстрых синхронных вычислений - MLComponent 2. Асинхронный запуск вычислительных экспериментов - ExperimentPipeline Как правило, если вычислительная задача требует доли секунды для выполнения - её уместно организовывать как ML-компонент, иначе - пайплайн. ## Структура базового модуля Базовый модуль - состоит из нескольких частей, которые вместе складываются в приложение, которое решает прикладную задачу. - Git-репозиторий - Программный код, решающий прикладную задачу - Включая интерфейс взаимодействия с фреймворком - Компоненты модуля - MLComponent - ExperimentPipeline - APIComponent - DataBox - Системные компоненты, подключающие модуль к фреймворку - Образы Docker Общий принцип работы следующий: 1. Существует программа, решающая прикладные задачи. Для простоты - проект на Python. Разработчик хочет развернуть эту программу на фреймворке, чтобы через веб-запросы можно было с ней взаимодействовать. Разработчик определяет, какие из элементов программы подходят для такого взаимодействия, и какой из вариантов организации лучше подходит для каждого элемента - ML-компонент или пайплайн. Например, программа распознавания объектов может содержать ML-компонент для работы с отдельными изображениями и пайплайн для работы с видео. 2. Разработчик реализует интерфейс взаимодействия с фреймворком, соответствующий выбранному компоненту. - Для ML-компонента это функция inference. - Для пайплайна это организация входных и выходных данных через файлы и переменные окружения. - В обоих случаях готовится образ Docker с основной программой и интерфейсом взаимодействия с фреймворком. - Работу интерфейса можно протестировать без подключения модуля к фреймворку, запуская модуль из образа Docker. 3. Разработчик готовит манифесты компонентов модуля и размещает их в репозитории. 4. Приложение подключается к фреймворку с помощью системных компонентов. 5. Разработчик загружает необходимые для работы данные в DataBox приложения, если нужно. 6. Приложение готово к использованию. При создании приложения через личный кабинет с использованием шаблонов, приложение сразу подключается к фреймворку с базовым набором компонентов. После этого шаблонные компоненты и код необходимо заменить настоящими, соответствующими решению прикладной задачи.