Введение

В нашем предыдущем опыте службы развертывания машинного обучения мы записываем функции бизнес-логики и логики модели в одну службу. Мы обнаружили, что трудно поддерживать сервис. Если нам нужно развернуть новую службу, мы должны перезапустить все службы и вызвать простои. Таким образом, монолитные системы не соответствуют требованиям в нынешнюю эпоху контейнеризации и облачных вычислений.

Микросервисная архитектура может помочь нам решить проблему с одним сервисом. Это стиль разработки программного обеспечения, который разбивается на более мелкие независимые компоненты. Это также набор автономных сервисов, разработанных для одной бизнес-области. Эти отдельные блоки могут выполнять одну часть функций программного обеспечения.

Польза от этого:

  • В случае узкого места отдельные сервисы можно масштабировать в любое время.
  • Их легче поддерживать, чем монолитную кодовую базу.
  • Каждый разработчик модуля может использовать свой собственный стиль кодирования.

В этом примере мы попробуем использовать платформу с открытым исходным кодом «функция как услуга» (FAAS) OpenFAAS и наши развертывания PrimeHub для создания системы микросервисов. Если вы используете облачный сервис для создания своей системы машинного обучения, вы можете использовать безсервисную облачную функцию, такую ​​как облачная функция GCP или лямбда-выражение AWS, в качестве микросервиса вашего приложения. Они предоставляют тот же метод, что и OpenFAAS, и используют более доступные методы развертывания.

Архитектура

Когда мы закончим обучение модели машинного обучения, мы будем использовать образ докера для создания службы машинного обучения RestAPI. Входные данные службы машинного обучения RestAPI такие же, как у нашей модели, а выходные данные — это выходное значение нашей модели. После того, как мы закончим развертывание службы модели, мы можем попытаться написать службу приложения, чтобы позволить нашему пользователю использовать службу модели в веб-интерфейсе или других службах приложений.

Этот метод легче поддерживать:

  1. мы можем повторно использовать модельный сервис, и нам не нужно снова писать логику модели, потому что мы ранее определили входные и выходные данные модельного сервиса.
  2. Мы можем использовать метод последовательного обновления, чтобы запустить службу новой модели, если нам нужно обновить модель. Это не требует простоев и позволяет нашему сервису работать непрерывно.
  3. Если использование службы модели увеличивается, мы можем добавить количество реплик и сделать нашу службу высокой доступностью.

Витрина

Мы используем модель классификации изображений MNIST в качестве модельного сервиса для создания микросервисной системы машинного обучения. Структура витрины показана ниже, и мы используем две службы приложений, чтобы показать, как повторно использовать службу модели.

Часть 1: модельный сервис MNIST

Мы можем использовать развертывания PrimeHub для развертывания модели. Создайте новое развертывание PrimeHub и разверните образ докера нашей модели в качестве службы.

После запуска службы модели мы можем увидеть конечную точку службы. Мы можем использовать этот сервис RestAPI для создания нашего приложения.

Часть 2: OpenFaaS

В качестве примера мы используем OpenFaaS. OpenFaaS (функции как услуга) — это платформа для создания бессерверных сервисов функций с помощью Docker и Kubernetes. Любой процесс можно упаковать в виде функции, позволяющей использовать ряд веб-событий без повторяющегося стандартного кодирования.



Перед развертыванием OpenFaaS мы должны подготовить кластер Kubernetes. OpenFaaS должен работать на любом совместимом дистрибутиве Kubernetes.



Я использую диаграмму управления для развертывания платформы OpenFaaS. Они предоставляют метод установки в документе Github. Платформу OpenFaaS проще развернуть в системе Kubernetes.



OpenFaaS предоставляет метод командной строки для запуска проекта. Вы можете использовать следующий документ для установки faas-cli. Мы будем использовать faas-cli для инициализации, создания образов Docker, отправки образов Docker в Dockerhub и развертывания образов Docker на платформе OpenFaaS.



Часть 3. Несколько сервисов приложений

Войдите в OpenFAAS и инициализируйте проект OpenFAAS:

$ git clone <https://github.com/LiuYuWei/openfaas-model-microservice>
$ cd openfaas-model-microservice
$ faas-cli login <openfaas-platform-url> -u <account> -p <password>

Код доступен в следующем репозитории GitHub. Вы можете проверить содержимое по следующей ссылке. Не забудьте изменить значение переменной в файлах YAML, чтобы настроить параметр.



После того, как мы закончим настройку параметра, мы можем использовать инструмент faas-cli для создания, отправки и развертывания образа Docker приложения в качестве службы приложения.

  • Войдите в DockerHub:
docker login -u <docker-username> -p <docker-password>
  • Настройка службы приложения openfaas-service через faas-cli:
$ cd openfaas-service
$ faas-cli build -f application-service.yml
$ faas-cli push -f application-service.yml
$ faas-cli deploy -f application-service.yml
  • Настройка службы приложения openfaas-service-image через faas-cli:
$ cd openfaas-service-image
$ faas-cli build -f application-service-image.yml
$ faas-cli push -f application-service-image.yml
$ faas-cli deploy -f application-service-image.yml

После развертывания двух сервисов приложений в OpenFaaS мы можем использовать веб-интерфейс OpenFaaS для тестирования. Хотя тип входных данных другой, мы можем получить тот же результат на выходе и проверить правильность числа или нет.

Заключение

В этом случае вы получаете два разных вида бизнес-логики. Во-первых, входные данные службы OpenFAAS поступают из URL-ссылки, а вторые входные данные службы поступают из списка или массива numpy. Мы используем ту же модель, что и наша служба машинного обучения, и мы можем повторно использовать эту службу. Я думаю, что мы можем использовать эту микросервисную структуру для создания нашей системы машинного обучения.

я Саймон

Привет, я Саймон, инженер по работе с клиентами в InfuseAI. Если вы считаете, что статья полезна для вас, пожалуйста, дайте мне аплодисменты. Добро пожаловать, чтобы внести некоторые предложения и обсудить со мной в InfuseAI Discord.
Linkedin: https://www.linkedin.com/in/simonliuyuwei/

Мы InfuseAI

InfuseAI предоставляет инструменты MLOps:

  1. PrimeHub — наша сквозная платформа MLOps — это весь жизненный цикл машинного обучения на одной платформе.
  2. Piperider — инструментарий качества данных для специалистов по данным.

Присоединяйтесь к нашему сообществу машинного обучения, чтобы узнать больше: InfuseAI Discord