Учебное пособие по модели системы CI/CD

задняя часть
Учебное пособие по модели системы CI/CD
  • Что, если бы мы захотели поддерживать расписание (скажем, ежечасно — обычно в зависимости от использования) запуска конвейера на вершинном ИИ?

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

В последней половине этого сообщения в блоге мы рассмотрим эти ситуации и обсудим некоторые возможные обходные пути.

метод

Мы представляем схематический обзор рабочего процесса, который мы реализуем на рисунках 1 и 2. Во-первых, мы будем использоватьCloud BuildПриходить.

  • Клонируйте репозиторий с GitHub, содержащий весь код, необходимый для создания и компиляции конвейера TFX, готовый к выполнению.

  • Создайте и отправьте собственный образ Docker для выполнения конвейера.

  • Загрузите скомпилированный конвейер в корзину в Google Cloud Storage (GCS).

Это графически изображено на рисунке 1.

Figure 1

Рисунок 1: Рабочий процесс для создания скомпилированного конвейера TFX

Приведенный выше конвейер способен принимать параметры времени выполнения в качестве входных данных. Это особенно полезно, когда, например, вы хотите, чтобы компоненты вашего конвейера оставались одинаковыми, когда вы хотите запускать разные эксперименты с разными наборами гиперпараметров. Таким образом, вы будете повторно использовать конвейер, но просто создадите разные эксперименты с разными гиперпараметрами. Обратите внимание, что вы также можете использовать этот же конвейер для переобучения модели на основе доступности новых данных. В этом посте мы не будем усложнять и будем использовать гиперпараметры модели (количество эпох и скорость обучения оптимизатора) в качестве рабочих параметров конвейера.

На рис. 2 показана другая половина нашего рабочего процесса, который берет скомпилированный конвейер TFX и отправляет его в Vertex AI для выполнения.

Figure 2

Рисунок 2: Рабочий процесс для выполнения скомпилированного конвейера TFX

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

Мы представим два обходных пути.

  • Во-первых, мы будемPub/SubОпубликовать сообщение наоблачная функциябудет подписан. Затем эта облачная функция будет отвечать за инициирование выполнения конвейера. Для контекста сообщение темы будет содержать гиперпараметры модели и их значения.

  • В другом решении мы будем использоватьОблачный планировщикЗапланируйте задание, которое будет отвечать за запуск конвейерного выполнения облачной функции.

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

Детали реализации

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

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

Конвейер TFX и компиляция

В этой статье мы будем использоватьЭтот ТФХКонвейер TFX в руководстве. оно используетНабор данных Палмер Пингвинз, обучающая простую нейронную сеть в TensorFlow предсказывать виды пингвинов. Конвейер имеет следующие компоненты TFX.CsvExampleGen,Cloud AI TrainerPusher.

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

Код конвейера сначала размещается в репозитории GitHub. Вы также можете разместить свой код на BitBucket, GitLab и т. д. или дажеоблачное хранилищебиблиотека. Возвращаясь к рисунку 1, мы скомпилируем этот конвейер и загрузим его в корзину GCS.

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

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

Но на этом история не закончилась. Нам все еще нужно создать и отправить собственный образ Docker, который включает в себя всеслужебный скрипти любой другой пакет Python. Этот образ Docker в конечном итоге будет использоваться Vertex AI для запуска конвейера фиксации. Кроме того, нам также необходимо автоматизировать все шаги, которые мы обсуждали до сих пор в процессе сборки, для чего мы будем использовать Cloud Build.

Использование облачной сборкиYAML-спецификациядействовать,наша нормаПохоже на это.

Этот файл спецификации может быть легче читать, если вы обратитесь к файлу спецификации YAML, на который мы ссылались выше. Переменные с префиксом «$» — это то, что мы устанавливаем при вызове этого файла YAML для запуска процесса сборки Cloud Build. После настройки этого файла спецификации нам нужно запустить запуск в Cloud Build только один раз.

SUBSTITUTIONSСодержит все переменные, связанные со спецификацией трубы.

Весь процесс сборки будетэтот блокнотв демо. Если сборка успешно отправлена ​​в облачную сборку, онаПриборная доскаЭто произойдет выше.

Figure 3

Рис. 3. Демонстрационная сборка в облачной сборке

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

Pub/Sub и облачные функции

Теперь мы создаем тему Pub/Sub и развертываем облачную функцию, которая будет подписана на эту тему Pub/Sub.

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

Облачная функция будет отвечать за синтаксический анализ сообщения, опубликованного в теме Pub/Sub, а затем запускать конвейер на вершинном ИИ, который выглядит следующим образом.

Обратите внимание на функцию Python(trigger_pipeline()), что будет очень важно при развертывании нашей облачной функции. ты можешь начатьздесьНайдите все компоненты облачной функции.

Чтобы развернуть облачную функцию, мы сначала указываем переменные среды, а затем развертываем.

gcloud functions deployНекоторые важные параметры в команде.

trigger-topic, которое является названием нашей темы Pub/Sub,source, который является каталогом для хранения связанных файлов, характерных для облачной функции,entry-point, которое является именем функции Python, которую мы обсуждали выше. Узнать больше,sourceуказал насодержаниеСодержит следующие файлы: requirements.txt указывает пакеты Python, необходимые для облачной функции, а main.py содержитtrigger_pipeline()Определение.

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

Figure 4

Рис. 4. Панель управления облачными функциями

Теперь мы можем опубликовать сообщение в созданной ранее теме Pub/Sub. Как только мы это делаем, облачная функция, подписанная на тему, запускается и отправляет наш конвейер и проанализированные параметры в вершинный ИИ.

Наш пайплайн выглядит так графически.

Figure 5

Рисунок 5: Графическое представление конвейера TFX на Vertex AI

ты сможешьэтот блокнотНайдите полную интеграцию с Pub/Sub и облачными функциями.

Облачный планировщик

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

Это можно сделать, интегрировав Cloud Scheduler в существующие системы.Cloud Scheduler— это полностью управляемый сервис корпоративного уровня для обработки заданий cron, и мы можем легко подключить его к другим сервисам GCP, таким как Pub/Sub.

Есть два способа создать задание для Cloud Scheduler. Первый вариант — использовать инструмент командной строки gcloud. Вам необходимо получить учетные данные Cloud Scheduler для своей учетной записи службы. пожалуйста, следуйте этомуОфициальные документыУзнайте, как создать учетную запись службы и загрузить ключ учетной записи службы. После загрузки ключа учетной записи службы необходимо установить переменную среды, указывающую на файл JSON ключа учетной записи службы.

Команда gcloud автоматически распознает эту переменную среды. gcloudзадание планировщика создать pubsubСоздал периодическое задание для публикации темы Pub/Sub с заданным сообщением.--scheduleСтоимость опциона должна основываться наСтандартный формат задания cronустанавливать. Например "*/3 * * * *" означает запуск задачи каждые три минуты. Запуск конвейера MLOps каждые три минуты не отражает реальных условий, но он настроен только для демонстрации поведения облачного планировщика.

--topicЗначение параметра должно соответствовать названию темы, которое вы создали ранее для Pub/Sub.--message-bodyПараметры позволяют предоставить Pub/Sub дополнительные данные в формате JSON. В этом примере мы используем его для передачи гиперпараметров в облачные функции. При использовании Jupyter Notebook следует отметить, что строки в формате JSON должны быть представлены в видеjson.dumpsкод метода. Это гарантирует, что строки формата JSON не будут нарушены при вводе в CLI.

Figure 6

Рисунок 6: Периодический запуск конвейера TFX на Vertex AI

Второй вариант заключается в использованииPython API для Google Cloud Scheduler. На самом деле существует множество API, поддерживающих разные языки программирования, потому что API построены на основе буферов gRPC/Protocol, не зависящих от языка. Здесь мы только демонстрируем использование в Python.

Есть три основных отличия от команды gcloud. Во-первых, сообщение должно быть закодировано в utf-8. Это гарантирует, что сообщение закодировано в байтах, тогда как параметр данных в PubsubTarget требует, чтобы сообщение было в байтах. Во-вторых, название темы Pub/Sub должно следовать за "projects/<PROJECT-ID>/topics/<TOPIC-NAME>«Формат. В-третьих, имя задания планировщика должно следовать»projects/<PROJECT-ID>/locations/<REGION-ID>/jobs/<JOB-NAME>". Учитывая эти различия, приведенный выше код должен быть простым для понимания.

Дополнительные сведения об API Python см.Спецификация RPCиОфициальная документация Python API. Кроме того, вы можете найти этоноутбукПолная демонстрация, описанная в .

расчет стоимости

В этой статье расчет стоимости связан только с вершинным ИИ, потому что остальные компоненты, такие как Pub/Sub, облачные функции, используются очень мало. Стоимость конвейера, работающего на Vertex AI, составляет 0,03 доллара США. Для обучения модели мы выбралиn1-стандартный-4 тип машины, цена которого составляет 0,19 доллара в час, и мы не используем GPU. Таким образом, по нашим оценкам, понесенные расходы не должны ограничиваться 5 долларами.

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

Суммировать

В этом сообщении в блоге, состоящем из двух частей, мы рассмотрели, как смоделировать обучение как систему CI/CD. Мы опишем различные инструменты, необходимые для выполнения этой задачи, особенно в контексте GCP. Мы надеемся, что вы получили некоторое представление о том, почему этот подход может быть полезен при масштабной работе. Но это только верхушка айсберга. Возможности такого инструмента, как Apex AI, практически безграничны, и мы рекомендуем вам реализовать собственный рабочий процесс на Apex AI.