Недавно, в связи с работой, я помогаю своему клиенту создавать решение для обработки данных и машинного обучения в Azure. Одна интересная и актуальная проблема, которую они хотят решить, заключается в том, как легко и быстро обслуживать модели Tensorflow.

Чтобы ускорить доставку моделей машинного обучения, это не ограничивается показом моделей. Требуется оптимизация и оптимизация сквозного потока процессов всего жизненного цикла разработки машинного обучения. Подобно разработке приложений, DevOps также может применяться в разработке машинного обучения, MLOps (Machine Learning DevOps).

В Azure вы можете использовать службу Azure Machine Learning и Azure DevOps для построения сквозного рабочего процесса MLOps. От обучения и управления моделями до упаковки моделей, развертывания и обслуживания — все это может быть оптимизировано и автоматизировано.

В этой статье я расскажу о том, как упаковать модель Tensorflow и обслуживать ее с помощью Tensorflow Serve (TF Serve) в качестве контейнера. И заставьте его быстро размещать и обслуживать из Экземпляра контейнера Azure. Я также подготовил простую модель CNN (сверточной нейронной сети) для глубокого обучения, чтобы продемонстрировать возможности экспериментов и управления моделями с помощью машинного обучения Azure.

Определенно, он еще не применялся сквозными MLOps. Это первая часть этой серии историй, которая будет опубликована в следующей истории, чтобы автоматизировать и упростить ее.

TF Serving, система обслуживания для модели Tensorflow, это уже не новинка. Это делает модель Tensorflow намного проще и гибче в обслуживании.

Хорошо, давайте начнем.

Во-первых, давайте подключим ваш ноутбук к рабочему пространству AML. Вы также можете обратиться к официальной документации AML’ Python SDK.

Я использую Tensorflow ImageDataGenerator для создания данных обучающих изображений по тегу имени папки. В этой простой демонстрации CNN я подготовил несколько прекрасных изображений Миньонов и Губки Боба (оба объекта желтого цвета 😊) для обучения модели бинарной классификации.

После того, как подготовка данных изображений завершена, давайте начнем разработку модели.

Все данные телеметрии об эффективности обучения (например, точность, потери и т. д.) будут передаваться в эксперимент AML для мониторинга, отслеживания и постоянного улучшения.

Вы можете перейти на свой портал Experiments in AML (https://ml.azure.com), чтобы увидеть визуальные результаты.

Из-за ограниченного количества подготовленных изображений этот пример обучения модели глубокого обучения выполняется очень быстро, вычислительной мощности моей единственной виртуальной машины Data Science (Azure VM) должно быть более чем достаточно. Для более сложной модели машинного обучения или глубокого обучения вы можете рассмотреть возможность использования учебного вычислительного кластера AML (с графическим процессором 😊) для ускорения обучения.

После завершения обучения режиму давайте быстро попробуем его.

Теперь модель готова, давайте экспортируем/сохраняем модель и скоро обслуживаем ее через контейнер TF Serve.

Я также упаковываю модель в виде zip-файла и отправляю ее в AML для управления версиями модели и облегчения последующей интеграции DevOps.

Экспорт и упаковка модели завершены, теперь давайте перейдем к упаковке модели с TF Serve в качестве контейнера.

Обязательно нужен Dockerfile, ниже мой образец Dockerfile. Очень просто, на основе изображения tensorflow/serving, скопируйте в него каталог моей модели, задайте имя переменной среды модели, определите открытый порт TCP (по умолчанию TF Serve 8501).

Затем можно создать образ контейнера TF Serve с помощью приведенной ниже команды. Имя моего примера изображения называется «easonlai/minions-spongebob-class-api», вы можете изменить его по своему усмотрению.

  • docker build -t easonlai/minions-spongebob-class-api .

После того, как сборка докера завершена, давайте попробуем запустить этот новый образ сборки локально.

  • docker run -p 8501:8501 easonlai/minions-spongebob-class-api

Контейнеризация TF Serve завершена, давайте выложим его в публичный Docker Hub.

  • docker push easonlai/minions-spongebob-class-api

Последний шаг: создайте экземпляр контейнера Azure (ACI) для размещения только что созданного контейнера TF Serve. ACI — это самое простое решение (безсерверный контейнер) для размещения контейнерных приложений в Azure. Всего одна командная строка, вы можете создать экземпляр ACI и сразу же обслуживать его. Ниже приведен пример командной строки для создания экземпляра. Вы можете обратиться к официальной документации ACI для более подробной информации.

  • az container create -n minions-spongebob-class-api — image easonlai/minions-spongebob-class-api -g MinionsAppAIML — публичный ip-адрес — порты 8501 — dns-name-label minions-spongebob-class-api

Просто подождите несколько минут, ваш ACI с контейнером будет готов к работе. Все готово, пробуем API 😊.

Немного изменен код предыдущего тестирования, вам все равно нужно преобразовать изображение в массив, прежде чем отправлять json-запрос в API.

Надеюсь, вам понравится этот обмен. Вы должны лучше понять, как быстро обслуживать модель Tensorflow (с TF Serve) в качестве контейнера в Azure (с ACI). AML также играет важную роль в управлении моей моделью (мониторинг, отслеживание и постоянное улучшение).

В следующей статье я расскажу о том, как интегрировать его со сквозным конвейером DevOps с помощью Azure DevOps.

Ссылка