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