Практические уроки

Как я развернул свою первую модель машинного обучения

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

1. Введение

Одним из слов, которые мы чаще всего слышим в машинном обучении, является термин развертывание. Развертывание модели машинного обучения — это не что иное, как процесс, в котором мы делаем модель машинного обучения доступной для других людей, и именно на этом этапе мы видим, как модель становится продуктом.

При предоставлении модели пользователям возникает несколько вопросов, таких как:

  • Как производится и тестируется модель?
  • Как контролируется модель?
  • Как обновить модель?
  • Какие фреймворки и инструменты я использую?

В этой статье я немного расскажу о производственном процессе развертывания моей первой модели машинного обучения, от создания конвейера, мониторинга модели, доставки конечному пользователю и интеграции непрерывной доставки (CI/CD). Цель состоит в том, чтобы быть прямым и сосредоточиться на производственном процессе, объясняя, какие решения были приняты и почему, а также объясняя, какие инструменты использовались для помощи в процессе построения модели. В этой статье у нас нет никакого кода, только объяснения того, как проходил производственный процесс.

2. TFX (расширенный TensorFlow)

Модель была построена с помощью TFX, и большая часть прикладного контента была изучена в рамках Интегрированной программы курсов машинного обучения для производства (MLOPs), которую преподавали замечательные профессионалы, такие как Эндрю Нг, Роберт Кроу и Лоуренс Морони.

«TFX — это платформа машинного обучения (ML) в масштабах производства Google, основанная на TensorFlow. Он предоставляет структуру конфигурации и общие библиотеки для интеграции общих компонентов, необходимых для определения, запуска и мониторинга вашей системы машинного обучения». согласно руководству пользователя TFX⁴.

Но почему вы решили использовать не очень простую структуру для своей первой модели?

Есть 3 концепции, являющиеся частью MLOps, которые очень важны при работе с моделями в продакшене.

  • Происхождение данных

Откуда берутся ваши данные, как они появились и какие методологии и процессы были отправлены.

  • Происхождение данных

Это относится к последовательности шагов до достижения конца конвейера.

  • Метаданные

Это данные, которые описывают данные. Они служат для объяснения характеристик предмета, на который мы смотрим. Например, если мы смотрим на фотографию, метаданными могут быть время, когда была сделана фотография, какие настройки камеры, кто сделал фотографию и так далее.

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

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

Вот почему важно работать с фреймворками, которые в той или иной степени поддерживают эти процессы. TFX был разработан для создания и управления рабочими процессами в производственной среде. Таким образом, тремя основными компонентами TFX являются:

  • Трубопроводы
  • Компоненты
  • Библиотеки

2.1 Конвейеры

Чтобы гарантировать, что данные будут следовать логической последовательности шагов, существуют конвейеры. Конвейер TFX содержит последовательность компонентов, он был разработан для масштабируемых и высокопроизводительных задач машинного обучения. Внутри конвейера вы можете преобразовывать данные, обучать модель, развертывать, отображать выводы и многое другое. TFX поддерживает несколько оркестраторов, таких как Apache Airflow, Apache Beam и Kubeflow Pipelines.

2.2 Компоненты

Мне нравится представлять компоненты в виде деталей лего. Вы можете использовать его по отдельности или вместе, и каждый компонент предназначен для определенной задачи. Есть компоненты, которые зависят от вывода другого, поэтому вы должны использовать их в логической последовательности.

Чтобы понять, как был собран наш конвейер, нам сначала нужно понять его компоненты. В TFX есть несколько руководств, объясняющих, как использовать компоненты. Обычно конвейер TFX включает в себя следующие компоненты:

  • ExampleGen присутствует в начале и разделяет данные на наборы данных для обучения и оценки, преобразуя их в формат tf.Example. Он принимает различные форматы, такие как CSV, TFRecord, Avro, Parquet и BigQuery.
  • StatisticsGen отвечает за расчет статистики для набора данных, такой как распределение, максимум, минимум, пропущенные значения и так далее.
  • SchemaGen создает схему данных. Он показывает ожидаемый тип данных для каждой функции.
  • ExampleValidator ищет аномалии (значения, отличные от ожидаемых) и отсутствующие значения в наборах данных для обучения и оценки, например, для обнаружения перекоса обслуживания обучения.
  • Преобразование отвечает за выполнение всех преобразований/созданий переменных в нашей модели. Важным моментом этого компонента является то, что он генерирует граф, в котором хранятся глобальные свойства данных, которые будут использоваться как при обучении, так и при выводе, обеспечивая надежность.
  • Тренер тренирует модель. В этом компоненте мы указываем, где и как будет обучаться модель, а также определяем всю ее архитектуру.
  • Тюнер настраивает гиперпараметры модели. Тюнер можно выполнять во всех исполнениях конвейера, а можно и импортировать, если вы хотите выполнять корректировку гиперпараметров только время от времени.
  • Оценщик глубоко оценивает производительность модели. Он также проверяет ваши модели, позволяя вам нарезать метрики на определенных подмножествах данных, гарантируя, что модель достаточно хороша для запуска в производство.
  • Толкатель подталкивает проверенную модель к цели развертывания. Здесь мы указываем, где будет обслуживаться модель.

2.3 Библиотеки

Библиотеки — это база, обеспечивающая функциональность компонентов.

По сути, конвейер TFX состоит из компонентов, которые состоят из библиотек.

3. Экспериментальное отслеживание и управление

Шаг, который я считаю очень важным в построении модели, — экспериментальное отслеживание и управление. При построении модели вы проведете несколько экспериментов, которые могут включать:

  • разные модели с разными гиперпараметрами
  • различные данные обучения и тестирования
  • различные функции
  • небольшие изменения в коде

И эти разные эксперименты дадут разные показатели. Ведение записей всей этой информации — непростая задача, но очень важная, в основном для отслеживания хода работы модели, сравнения различных экспериментов, чтобы быть уверенным в конечном результате.

И вот здесь вступает в действие отслеживание экспериментов и управление ими. Это процесс, в котором мы сохраняем всю информацию, важную для каждого проводимого нами эксперимента. Каждый проект имеет свой собственный набор информации, которую важно сохранить, которая может включать:

  • код, используемый для каждого файла
  • настройки среды
  • версии набора данных
  • настройки гиперпараметров
  • показатели эффективности
  • тип используемой модели

Есть несколько способов сохранить эту информацию, но для больших проектов очень важно иметь контроль над тем, что делается. Для этого доступно несколько инструментов, таких как CometML, Weights and Biases (WandB), MLFlow.

В нашем проекте мы выбрали Нептун.

«Neptune — это хранилище метаданных для любого рабочего процесса MLOps. Он был создан как для исследовательских, так и для производственных групп, которые проводят множество экспериментов. Он позволяет отслеживать, визуализировать и сравнивать тысячи моделей машинного обучения в одном месте». согласно Ю. Патриции⁸

Neptune поддерживает отслеживание экспериментов, регистрацию моделей и мониторинг моделей и разработан таким образом, чтобы упростить совместную работу. Он также имеет интеграцию с TensorFlow, что упрощает мониторинг всех экспериментов в одном месте.

4. Конвейеры Vertex AI + TFX

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

Чтобы построить наш конвейер, мы решили работать с Google Cloud. Как оркестратор, мы используем Kubeflow Pipelines, так как большинство учебных пособий выполняется через него. Существует несколько учебных пособий, в которых рассказывается, как интегрировать конвейер TFX в облако, как в [1], [2] и [3].

Мы решили построить нашу воронку с помощью Vertex AI, новой платформы платформы искусственного интеллекта Google. Мы выбрали Vertex AI по двум причинам:

  • Это дешевле (в нашем случае) по сравнению с AI Platform Pipelines. Вершинные конвейеры не нуждаются в постоянно активных кластерах, затраты начисляются за прогон и связаны с использованием вычислительных ресурсов для обучения/прогнозирования модели.
  • В отличие от GKE (Google Kubernetes Engine), нам не нужно управлять инфраструктурой/серверами/состоянием наших компонентов, так как это самоуправляемая платформа.

Согласно документации, Vertex AI Pipelines может запускать пайплайны, созданные с помощью Kubeflow Pipelines SDK v1.8.9 или новее или TensorFlow Extended v0.30.0 или новее.

Несмотря на то, что наш конвейер работает на Vertex AI, мы решили обучать и обслуживать нашу модель на Платформе AI. Vertex AI — это новая платформа с ограничениями, которые со временем будут улучшаться, поэтому на момент написания этой статьи существуют важные функции, которых еще не существует для обслуживаемых моделей, например указание подписи SavedModel TensorFlow при сделать прогнозный запрос.

Каждый компонент отвечает за задачу в конвейере TFX, и часто один компонент зависит от выходных данных другого. В нашем случае мы решили не использовать компоненты InfraValidator и BulkInferrer. Однако мы решили добавить в наш пайплайн еще один узел — Resolver. Resolver — это специальный узел TFX, который обрабатывает специальные артефакты, в нашем случае он использовался для указания последней базовой модели в компоненте Evaluator.

Итак, наш Vertex Pipeline составлен следующим образом:

5. Мониторинг

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

Итак, нам нужно следить за моделью. Мы решили регистрировать запросы на обслуживание из нашей модели, этот процесс регистрирует выборку запросов онлайн-прогнозирования и ответов на таблицу BigQuery в необработанном (JSON) формате.

С помощью этих записей мы можем анализировать данные, вычислять статистику и визуализировать отклонение данных. Этот процесс необходим для правильной эволюции модели, обслуживание данных может изменить их распределение, и это приведет к падению производительности нашей модели, что указывает на необходимость переобучения/перенастройки модели. Поскольку данные будут зарегистрированы в таблице BigQuery, очень легко создавать визуализации и отчеты о распределении данных и прогнозах моделей, примером используемого инструмента является Студия данных.

6. CI/CD

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

«В разработке программного обеспечения непрерывная интеграция (CI) и непрерывная доставка (CD) — две очень важные концепции. CI — это когда вы надежно и непрерывно интегрируете изменения (новые функции, утвержденный код и т. д.) в свою систему. CD — это надежное и постоянное развертывание этих изменений. CI и CD могут выполняться как по отдельности, так и в сочетании». по П. Чансуну; П. Саяк⁶

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

В этом проекте мы создали следующий конвейер CI/CD:

  1. Мы создали репозиторий на Github, содержащий весь код нашего конвейера TFX, который будет работать на Vertex AI.
  2. Мы настроили рабочий процесс в GitHub Actions, который будет запускаться при каждой отправке в основную ветку и будет проверять наличие изменений в определенных каталогах в нашем репозитории.
  3. Если в каталоге есть изменения, содержащие файлы, связанные с конфигурациями конвейера, поток запустит Процесс сборки облака, который клонирует весь репозиторий, создает новый образ Docker на основе изменений кода, загружает новый образ в a Google Container Registry и отправьте TFX Pipeline в Vertex AI.

4. Если в каталоге есть изменения, которые содержат изменения кода модели, данных предварительной обработки или обучения, поток запустит процесс сборки облака, который будет клонировать весь репозиторий, копировать только измененные модули в каталоги модулей в GCS Bucket и отправить конвейер TFX в Vertex AI без необходимости создавать новый образ Docker.

После настройки конвейера любая отправка в репозиторий активирует действия GitHub, которые проверяют наличие изменений и автоматически запускают конвейер, автоматически развертывая нашу модель. Важно подчеркнуть, что конвейер TFX будет следовать потоку в обычном режиме, то есть, если модель-кандидат не одобрена, например, оценщиком, модель не будет развернута.

Есть несколько других возможных улучшений конвейера CI/CD, таких как:

  • Проверка данных обучения
  • Модульное тестирование различных модулей, таких как допустимые типы данных, ожидаемый объем данных и т. д.
  • Проверьте, не выдают ли выходные данные модели нулевые значения
  • Протестируйте службу прогнозирования, вызвав API службы с тестовыми данными, чтобы убедиться, что модель работает правильно.
  • Автоматическое развертывание предпроизводственной среды, например развертывание, инициированное слиянием кода, в основной ветке после того, как рецензенты одобрят изменения.

7. Заключение

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

8. Ссылки

[1] TFX on Cloud AI Platform Pipelines (5 ноября 2021 г.), TensorFlow.

[2] О. Райзинг, Глубокое погружение в модели машинного обучения в производстве с использованием TensorFlow Extended (TFX) и Kubeflow (12 ноября 2021 г.), блог Neptune.

[3] Простой конвейер TFX для конвейеров вершин (8 декабря 2021 г.), TensorFlow.

[4] Руководство пользователя TFX (14 декабря 2021 г.), TensorFlow.

[5] MLOPs: конвейеры непрерывной доставки и автоматизации в машинном обучении (7 января 2020 г.), Google.

[6] П. Чансон; П. Саяк, Обучение модели как системы CI/CD: Часть I (6 октября 2021 г.), Google.

[7] Мониторинг модели машинного обучения: регистрация запросов на обслуживание с помощью прогнозирования платформы AI (12 марта 2021 г.), Google.

[8] Дж. Патриция, 15 лучших инструментов для отслеживания экспериментов и управления ими (25 октября 2021 г.), блог Neptune.