documentation/pages/introduction.md

77 lines
6.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.

# Введение в работу с фреймворком
Фреймворк решает проблему размещения проектов в сфере искусственного интеллекта в виде веб-сервисов.
Основная модель работы предполагает, что существует проект,
Что существует:
- Исследовательский проект
- Подзадачи проекта, которые можно выделить в вычислительные конвейеры: "получить данные 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. Приложение готово к использованию.
При создании приложения через личный кабинет с использованием шаблонов, приложение сразу подключается к фреймворку с базовым набором компонентов. После этого шаблонные компоненты и код необходимо заменить настоящими, соответствующими решению прикладной задачи.