Привет, я Наоки Комото (河本 直起), работаю инженером по машинному обучению в AnyMind.
В AnyMind мы разрабатываем среду MLOps с нуля.
В предыдущих статьях мы представили наши усилия по созданию среды MLOps, такой как конвейер данных и конвейер обучения модели.
На этот раз мы хотели бы представить нашу инфраструктуру онлайн-прогнозирования с использованием Vertex Pipelines (Kubeflow) и Vertex AI Models/Endpoints, которые мы использовали на ранней стадии внедрения машинного обучения.
Фон
Как упоминалось в статье о конвейере обучения модели, у AnyMind было множество методов обслуживания моделей от проекта к проекту, что привело к специфическому для разработчика коду и архитектуре. Следовательно, необходимо было решить проблему увеличения затрат на усовершенствование и эксплуатацию, связанную с этим, путем создания общей среды.
Хотя эта проблема существует, мне, как инженеру по машинному обучению, необходимо было разработать среду MLOps при разработке для выпуска нескольких функций машинного обучения, и на разработку среды MLOps можно посвятить мало человеко-часов. Поэтому необходимо было создать упрощенную общую среду, исходя из предположения, что она будет улучшаться и расширяться шаг за шагом.
Архитектура
Чтобы сократить количество человеко-часов, необходимых для разработки, я установил следующие ограничения:
- Использование базы данных, предоставляемой продуктом
- Возврат всех результатов с онлайн-прогнозированием
И я разработал следующую простую архитектуру
Модель обучается с помощью Вершинных конвейеров, как описано в этой статье. Функции извлекаются из RDB приложения продукта. После обучения модели изображение, содержащее обученную модель и логику прогнозирования, загружается в модели Vertex AI, которые затем развертываются на конечных точках Vertex AI. Приложение продукта извлекает функции из RDB и запрашивает их в конечных точках Vertex AI для получения результатов прогнозирования. Извлечение и предварительная обработка функций, загрузка изображений в модели Vertex AI и развертывание в конечных точках Vertex AI выполняются из Vertex Pipelines.
Почему Vertex AI Models/Endpoints?
API для предсказания можно было разработать с помощью Cloud Run, но в итоге я решил реализовать его с помощью Vertex AI Models/Endpoints.
Первой причиной была простота сопряжения с конвейером обучения модели на Vertex Pipelines (Kubeflow). API, выполняющий прогнозирование с использованием модели, выпускается только после обучения модели. Однако для того, чтобы добиться этого потока выпуска с помощью таких сервисов, как Cloud Run, необходимо разработать для этого функциональные возможности в API прогнозирования. С другой стороны, Vertex AI Models/Endpoints может включать выпуск прогнозирующего API как часть своего конвейера с использованием SDK google-cloud-aiplatform для Python.
Модели машинного обучения, используемые для прогнозирования, необходимо периодически обучать и переключать. Поскольку Vertex AI Models/Endpoints отделяет интерфейс от моделей, используемых внутри, переключение моделей после выпуска также может быть легко выполнено в рамках конвейера с использованием google-cloud-aiplatform.
Вторая причина заключалась в том, что в будущем планируется включить пакетное предсказание. Пакетное прогнозирование и онлайн-прогнозирование требуют разных машинных ресурсов. С другой стороны, различия в обработке между ними приведут к различиям в результатах прогнозирования, поэтому необходимо запретить разработчикам использовать общую обработку между ними. Вершинные модели могут быть развернуты на конечных точках вершин для онлайн-прогнозирования, а также могут использоваться для пакетного прогнозирования в качестве пакетного прогнозирования вершин.
Вот почему я решил использовать Vertex AI Models/Endpoints.
Подробности реализации
Я представлю подробности ниже.
Развертывание Prediction API
В FastAPI реализован простой API, который загружает обученные модели и выводит результаты логического вывода, используя функции в качестве входных данных. Для разработки API необходимо удовлетворить интерфейс, определенный в Vertex AI Models.
Затем я подготовил функции для загрузки моделей Vertex AI и развертывания загруженных моделей Vertex AI на конечных точках Vertex AI, как показано ниже. Подготовленные функции выполняются как компоненты. Для обслуживания обученных моделей компоненты выполняются после завершения процесса обучения модели в Vertex Pipelines (Kubeflow).
Общий поток
Общий процесс развертывания API прогнозирования выглядит следующим образом.
Образ API прогнозирования предварительно загружается через Cloud Build в Container Registry. После обучения моделей компоненты, описанные выше, удаляются, изображение API прогнозирования загружается как модели Vertex AI и развертывается на конечных точках Vertex AI. Обученные модели загружаются из контейнера API прогнозирования.
Проблемы
Этот механизм был разработан для поэтапного расширения и улучшения и имеет следующие проблемы:
- Невозможность пакетного прогнозирования
- Клиентские приложения должны реализовать выборку функций
- Интерфейс не исправлен
Что касается второй проблемы, то хотя несоответствие между объемом ответственности и объемом разработки приводит к ненужным затратам на коммуникацию и разработку, это также приводит к различию между функциями для обучения модели и онлайн-прогнозирования из-за отсутствия общего создания. Что касается третьей проблемы, поскольку используемые функции включены в интерфейс, интерфейс меняется каждый раз, когда изменяются используемые функции, каждый раз требуя разработки на стороне клиента. Это будет узким местом для улучшения модели.
Эти проблемы теперь решены, и я надеюсь, что смогу рассказать об этом в следующей статье.
Сводка
В этой статье я представил механизм онлайн-прогнозирования с использованием моделей машинного обучения, которые я использовал на ранней стадии. Я надеюсь, что это поможет.