Amazon SageMaker Pipelines — это полностью управляемый сервис AWS для создания и управления рабочими процессами машинного обучения (ML). SageMaker Pipelines предлагает разработчикам приложений машинного обучения возможность управлять различными этапами рабочего процесса машинного обучения, включая загрузку данных, преобразование данных, обучение, настройку и развертывание. Вы можете использовать SageMaker Pipelines для организации заданий машинного обучения в SageMaker, а его интеграция с более крупной экосистемой AWS также позволяет вам использовать такие ресурсы, как функции AWS Lambda, задания Amazon EMR и многое другое. Это позволяет вам создать настраиваемый и воспроизводимый конвейер для конкретных требований ваших рабочих процессов машинного обучения.
В этом посте мы предлагаем некоторые лучшие практики, позволяющие максимизировать ценность SageMaker Pipelines и сделать процесс разработки более простым. Мы также обсуждаем некоторые распространенные сценарии и шаблоны проектирования при построении конвейеров SageMaker и приводим примеры их решения.
Лучшие практики для конвейеров SageMaker
В этом разделе мы обсудим некоторые лучшие практики, которым можно следовать при разработке рабочих процессов с использованием SageMaker Pipelines. Их внедрение может улучшить процесс разработки и упростить оперативное управление SageMaker Pipelines.
Используйте Pipeline Session для отложенной загрузки конвейера
Конвейерная сессия включает отложенную инициализацию ресурсов конвейера (задания не запускаются до выполнения конвейера). PipelineSession
контекст наследует Сессия SageMaker и реализует удобные методы взаимодействия с другими объектами и ресурсами SageMaker, такими как учебные задания, конечные точки, входные наборы данных в Amazon Simple Storage Service (Amazon S3) и т. д. При определении конвейеров SageMaker вам следует использовать PipelineSession
в рамках обычного сеанса SageMaker:
Запускайте конвейеры в локальном режиме для экономичных и быстрых итераций во время разработки.
Вы можете запустить конвейер в локальном режиме, используя команду LocalPipelineSession
контекст. В этом режиме конвейер и задания выполняются локально с использованием ресурсов на локальном компьютере, а не ресурсов, управляемых SageMaker. Локальный режим обеспечивает экономичный способ итерации кода конвейера с меньшим подмножеством данных. После локального тестирования конвейера его можно масштабировать для работы с помощью PipelineSession контекст.
Управление конвейером SageMaker посредством управления версиями
Управление версиями артефактов и определений конвейеров является общим требованием жизненного цикла разработки. Вы можете создать несколько версий конвейера, назвав объекты конвейера уникальным префиксом или суффиксом, наиболее распространенным из которых является отметка времени, как показано в следующем коде:
Организация и отслеживание выполнения конвейера SageMaker посредством интеграции с SageMaker Experiments.
SageMaker Pipelines можно легко интегрировать с SageMaker Experiments для организации и отслеживания работы конвейера. Это достигается за счет указания Конфигурация КонвейераЭксперимента во время создания объект трубопровода. С помощью этого объекта конфигурации вы можете указать имя эксперимента и имя испытания. Детали запуска конвейера SageMaker организуются в соответствии с указанным экспериментом и пробной версией. Если вы не укажете имя эксперимента явно, в качестве имени эксперимента будет использоваться имя конвейера. Аналогично, если вы явно не укажете имя пробной версии, в качестве имени пробной версии или группы запуска будет использоваться идентификатор запуска конвейера. См. следующий код:
Безопасно запускайте конвейеры SageMaker в частном VPC.
Чтобы защитить рабочие нагрузки машинного обучения, рекомендуется развертывать задания, организованные SageMaker Pipelines, в конфигурации безопасной сети в частном VPC, частных подсетях и группах безопасности. Чтобы обеспечить и обеспечить использование этой безопасной среды, вы можете реализовать следующую политику AWS Identity and Access Management (IAM) для роли исполнения SageMaker (эту роль принимает на себя конвейер во время его работы). Вы также можете добавить политику для запуска заданий, организованных SageMaker Pipelines, в режиме сетевой изоляции.
Пример реализации конвейера с этими элементами управления безопасностью см. Управление заданиями, регистрация моделей и непрерывное развертывание с помощью Amazon SageMaker в безопасной среде.
Отслеживайте стоимость прогонов конвейера с помощью тегов
Использование конвейеров SageMaker само по себе бесплатно; вы платите за вычислительные ресурсы и ресурсы хранения, которые вы запускаете в рамках отдельных этапов конвейера, таких как обработка, обучение и пакетный вывод. Чтобы агрегировать затраты на запуск конвейера, вы можете включать теги на каждый шаг конвейера, на котором создается ресурс. Затем на эти теги можно ссылаться в обозревателе затрат для фильтрации и агрегирования общей стоимости работы конвейера, как показано в следующем примере:
В обозревателе затрат теперь можно получить стоимость, отфильтрованную по тегу:
Шаблоны проектирования для некоторых распространенных сценариев
В этом разделе мы обсуждаем шаблоны проектирования для некоторых распространенных случаев использования конвейеров SageMaker.
Запустите облегченную функцию Python, используя шаг Lambda.
Функции Python повсеместно присутствуют в рабочих процессах машинного обучения; они используются при предварительной и постобработке, оценке и т. д. Lambda — это бессерверная вычислительная служба, которая позволяет запускать код без подготовки серверов и управления ими. С помощью Lambda вы можете запускать код на предпочитаемом вами языке, включая Python. Вы можете использовать это для запуска собственного кода Python как части вашего конвейера. Шаг Lambda позволяет запускать функции Lambda как часть конвейера SageMaker. Начните со следующего кода:
Создайте функцию Lambda, используя Помощник Lambda для SageMaker Python SDK:
Вызовите шаг Lambda:
Передача данных между шагами
Входные данные для шага конвейера — это либо доступное расположение данных, либо данные, созданные одним из предыдущих шагов конвейера. Вы можете предоставить эту информацию в виде ProcessingInput
параметр. Давайте рассмотрим несколько сценариев использования ProcessingInput.
Сценарий 1. Передайте выходные данные (примитивные типы данных) шага Lambda на шаг обработки.
Примитивные типы данных относятся к скалярным типам данных, таким как строка, целое число, логическое значение и число с плавающей запятой.
Следующий фрагмент кода определяет лямбда-функцию, которая возвращает словарь переменных с примитивными типами данных. Код вашей функции Lambda вернет JSON пар ключ-значение при вызове на этапе Lambda в конвейере SageMaker.
Затем в определении конвейера вы можете определить параметры конвейера SageMaker, относящиеся к определенному типу данных, и установить переменную для вывода функции Lambda:
Сценарий 2. Передайте выходные данные (непримитивные типы данных) шага Lambda на шаг обработки.
Непримитивные типы данных относятся к нескалярным типам данных (например, NamedTuple
). У вас может возникнуть сценарий, когда вам нужно вернуть непримитивный тип данных из лямбда-функции. Для этого вам необходимо преобразовать непримитивный тип данных в строку:
Затем вы можете использовать эту строку в качестве входных данных для следующего шага конвейера. Чтобы использовать именованный кортеж в коде, используйте eval()
для анализа выражения Python в строке:
Сценарий 3. Передайте выходные данные шага через файл свойств.
Вы также можете сохранить выходные данные шага обработки в файле JSON свойств для дальнейшего использования в ConditionStep
или другие ProcessingStep
. Вы можете использовать Функция JSONGet запросить файл свойств. См. следующий код:
Предположим, что содержимое файла свойств было следующим:
В этом случае можно запросить определенное значение и использовать его на последующих шагах с помощью функции JsonGet:
Параметризация переменной в определении конвейера
Часто желательно параметризовать переменные, чтобы их можно было использовать во время выполнения, например, для создания URI S3. Вы можете параметризовать строку так, чтобы она оценивалась во время выполнения, используя Join
функция. В следующем фрагменте кода показано, как определить переменную с помощью Join
и используйте ее для установки местоположения вывода на этапе обработки:
Запуск параллельного кода над итерируемым объектом
Некоторые рабочие процессы машинного обучения выполняют код параллельно в циклах for над статическим набором элементов ( повторяемый). Это может быть либо один и тот же код, который запускается с разными данными, либо другой фрагмент кода, который необходимо запускать для каждого элемента. Например, если у вас очень большое количество строк в файле и вы хотите ускорить время обработки, вы можете положиться на первый шаблон. Если вы хотите выполнить различные преобразования для определенных подгрупп данных, вам, возможно, придется запустить отдельный фрагмент кода для каждой подгруппы данных. Следующие два сценария иллюстрируют, как можно спроектировать конвейеры SageMaker для этой цели.
Сценарий 1. Реализация логики обработки различных частей данных.
Вы можете запустить задание обработки с несколькими экземплярами (установив instance_count
до значения больше 1). При этом входные данные из Amazon S3 распределяются по всем экземплярам обработки. Затем вы можете использовать сценарий (process.py) для работы с определенной частью данных на основе номера экземпляра и соответствующего элемента в списке элементов. Логика программирования в файлеprocess.py может быть написана таким образом, что в зависимости от списка элементов, которые он обрабатывает, запускается другой модуль или фрагмент кода. В следующем примере определяется процессор, который можно использовать на этапе обработки:
Сценарий 2. Выполнение последовательности шагов.
Если у вас есть последовательность шагов, которые необходимо выполнять параллельно, вы можете определить каждую последовательность как независимый конвейер SageMaker. Запуск этих конвейеров SageMaker затем можно запустить с помощью функции Lambda, которая является частью LambdaStep
в родительском конвейере. Следующий фрагмент кода иллюстрирует сценарий, в котором запускаются два разных запуска конвейера SageMaker:
Заключение
В этом посте мы обсудили некоторые лучшие практики эффективного использования и обслуживания конвейеров SageMaker. Мы также предоставили определенные шаблоны, которые вы можете использовать при разработке рабочих процессов с помощью SageMaker Pipelines независимо от того, создаете ли вы новые конвейеры или переносите рабочие процессы машинного обучения из других инструментов оркестрации. Чтобы начать работу с SageMaker Pipelines для оркестрации рабочих процессов ML, см. примеры кода на GitHub и конвейеры построения моделей Amazon SageMaker.
Об авторах
Пинак Паниграхи работает с клиентами над созданием решений на основе машинного обучения для решения стратегических бизнес-задач на AWS. Когда он не занят машинным обучением, его можно найти в походе, читающим книгу или смотрящим спортивные состязания.
Минакшисундарам Тандавараян работает в AWS специалистом по AI/ML. У него есть страсть к проектированию, созданию и продвижению ориентированных на человека данных и аналитики. Мина специализируется на разработке устойчивых систем, которые обеспечивают измеримые конкурентные преимущества стратегическим клиентам AWS. Мина является связующим звеном, дизайнерским мыслителем и стремится вывести бизнес на новые способы работы посредством инноваций, инкубации и демократизации.