Рубрики
Uncategorized

Строительство конечного трубопровода в Sagemaker

В этой части мы увидим, как мы можем сделать сквозной трубопровод целой машины обучения … Помечено с AWS, MachineLearing, трубопроводом, дежопами.

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

Обзор функций шагов

Функции AWS STAP — это услуга, предоставленная Amazon, которую вы можете использовать для создания рабочих процессов и автоматизировать их. Эти рабочие процессы состоят из ресурсов AWS, алгоритмов и обработки AWS. Они также могут включать ресурсы, которые находятся за пределами AWS. Мы можем использовать пошаговые функции для создания структуры в конечном итоге автоматизации, которая помогает нам в создании эффективной непрерывной интеграции и постоянного развития (CI/CD) DEVOPS.

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

  • Государственный автомат для обучения модели
  • Станок для сохранения модели

  • Государственная машина для настройки конечных точек

  • Государственный автомат для развертывания модели

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

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

Обновление шаговых функций

Мы просто будем просто использовать PIP из Python, чтобы обновить пакет на этапах и все зависимые пакеты.

python -m pip install --upgrade stepfunctions

Вы можете запустить его из терминала, либо из ноутбука Jupyter, а также добавив префикс восклицательного знака (!).

Определение необходимых параметров

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

import boto3
import sagemaker
import time
import random
import uuid

import logging
import stepfunctions
import io
import random

from sagemaker.amazon.amazon_estimator import get_image_uri
from stepfunctions import steps
from stepfunctions.steps import TrainingStep, ModelStep, TransformStep

from stepfunctions.inputs import ExecutionInput
from stepfunctions.workflow import Workflow

from stepfunctions.template import TrainingPipeline
from stepfunctions.template.utils import replace_parameters_with_jsonpath


sagemaker_execution_role = sagemaker.get_execution_role()

workflow_execution_role = "arn:aws:iam::809912564797:role/<>-step-functions"

session = sagemaker.Session()
stepfunctions.set_stream_logger(level=logging.INFO)
region = boto3.Session().region_name

prefix = 'sagemaker/big-mart-pipeline'
bucket_path = 'https://s3-{}.amazonaws.com/{}'.format(region, "slytherins-test")


Как вы можете видеть в коде, нам требуются две роли. Одним из них является роль выполнения логикера, а вторая — роль выполнения рабочего процесса. В следующем разделе мы увидим, как определить роль для выполнения рабочего процесса. Кроме того, мы создали сеанс SageMaker и определили местоположение региона и S3 Bucket. Мы также установили шагные функции регистратора так, чтобы все были важные сообщения, мы не будем пропустить их.

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

Настройка необходимых ролей

Нам нужно настроить две вещи, чтобы иметь возможность выполнить рабочий процесс:

  1. Нам нужно добавить политику на уже существующую роль Sagemaker.
  2. Нам нужно создать новые шагные функции, роль IAM.

Добавление политики существующей роли Sagemaker

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

На этой странице будет раздел «Разрешения и шифрование». «Там вы найдете свою роль ARN, упомянутые для экземпляра.

Как только вы нажмете эту роль, вы перейдете к роли IAM для этого ARN. На этой странице вам нужно нажать прикреплять политики и поиск AWSSTEPFUnctionsfullAccess. Присоедините эту политику, и теперь ваш экземпляр SAgemaker готов к использованию функций по шагам.

Создание нового роли IAM для шаговых функций

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

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

Теперь продолжайте процесс и продолжайте нажав рядом, пока не приеду на раздел, где вам нужно предоставить имя роли. Дайте любое имя роли, которое вы хотите, а затем нажмите «Создать роль». Далее, как только мы создали роль, нам нужно к ней политику. Здесь мы перечислим все службы, которые сервис функций шага разрешено делать. Мы предоставляем этот список в формате JSON.

Нажмите на роль, которую вы только что создали, а затем в разделе Разрешения нажмите «Добавить встроенную политику».

Здесь вам нужно добавить файл JSON на вкладке JSON. Содержимое файла отображается здесь:

{
  "Version": "2012-10-17",
  "Statement": [
      {
         "Effect": "Allow",
         "Action": [
           "sagemaker:CreateTransformJob",
           "sagemaker:DescribeTransformJob",

           "sagemaker:StopTransformJob",
           "sagemaker:CreateTrainingJob",
           "sagemaker:DescribeTrainingJob",

           "sagemaker:StopTrainingJob",
           "sagemaker:CreateHyperParameterTuningJob",

           "sagemaker:DescribeHyperParameterTuningJob",
           "sagemaker:StopHyperParameterTuningJob",

           "sagemaker:CreateModel",
           "sagemaker:CreateEndpointConfig",

           "sagemaker:CreateEndpoint",
           "sagemaker:DeleteEndpointConfig",

           "sagemaker:DeleteEndpoint",
           "sagemaker:UpdateEndpoint",
           "sagemaker:ListTags",

           "lambda:InvokeFunction",
           "sqs:SendMessage",
           "sns:Publish",

           "ecs:RunTask",
           "ecs:StopTask",

           "ecs:DescribeTasks",
           "dynamodb:GetItem",

           "dynamodb:PutItem",
           "dynamodb:UpdateItem",

           "dynamodb:DeleteItem",
           "batch:SubmitJob",
           "batch:DescribeJobs",

           "batch:TerminateJob",
           "glue:StartJobRun",

           "glue:GetJobRun",
           "glue:GetJobRuns",
           "glue:BatchStopJobRun"
            ],
         "Resource": "*"
     },
     {
         "Effect": "Allow",
         "Action": [
            "iam:PassRole"
       ],
         "Resource": "*",
          "Condition": {
            "StringEquals": {
               "iam:PassedToService": "sagemaker.amazonaws.com"
            }
         }
      }, 
      {
         "Effect": "Allow",
         "Action": [
            "events:PutTargets",
            "events:PutRule",
            "events:DescribeRule"
         ],
         "Resource": [

           "arn:aws:events:*:*:rule/StepFunctionsGetEventsForSageMakerTrainingJobsRule",
           "arn:aws:events:*:*:rule/StepFunctionsGetEventsForSageMakerTransformJobsRule",
           "arn:aws:events:*:*:rule/StepFunctionsGetEventsForSageMakerTuningJobsRule",

           "arn:aws:events:*:*:rule/StepFunctionsGetEventsForECSTaskRule",
           "arn:aws:events:*:*:rule/StepFunctionsGetEventsForBatchJobsRule"

          ]
      }
   ]
}


Как только это сделано, вы можете просмотреть политику, дать ей имя, а затем создать политику. Не забудьте скопировать arn ряд политики, которую вы только что создали. Это поможет вам при создании кода в Sagemaker.

Настройка шага тренировок

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

names = {

    'JobName': str,
    'ModelName': str,
    'EndpointName': str

}

execution_input = ExecutionInput(schema=names)

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

tree = sage.estimator.Estimator(image,
            sagemaker_execution_role, 1, 'ml.m4.xlarge',
            output_path="s3://{}/output".format("slytherins-test"),
            sagemaker_session=sess)

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

training_step = steps.TrainingStep(
    'Train Step',
    estimator=tree,
    data={
        'train': sagemaker.s3_input("s3://slytherins-test/Train.csv", content_type='text/csv'),
        'validation': sagemaker.s3_input("s3://slytherins-test/test_data.csv", content_type='text/csv')
    },
    job_name=execution_input['JobName']
)

Помните, это не будет выполнять модель. Здесь создается только шаг. Во-первых, мы создадим все шаги, а затем комбинируйте их и выполняем их последовательно. Давайте сейчас опремимся на шаг для сохранения модели. Оказавшись в трубопроводе, предыдущее обучение завершено, а модельные артефакты, которые генерируются, должны быть сохранены. Это сделано, используя следующий код:

model_step = steps.ModelStep(
    'Save model',
    model=training_step.get_expected_model(),
    model_name=execution_input['ModelName']
)

Настройка шага конфигурации конечной точки

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

endpoint_config_step = steps.EndpointConfigStep(
    "Create Endpoint Config",
    endpoint_config_name=execution_input['ModelName'],
    model_name=execution_input['ModelName'],
    initial_instance_count=1,
    instance_type='ml.m4.xlarge'
)

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

Настройка шага конечной точки

Следующий код создает шаг, который используется для развертывания конечной точки:

endpoint_step = steps.EndpointStep(
    "Create Endpoint",
    endpoint_name=execution_input['EndpointName'],
    endpoint_config_name=execution_input['ModelName']
)

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

Создание цепочки шагов

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

workflow_definition = steps.Chain([
    training_step,
    model_step,
    endpoint_config_step,
    endpoint_step
])

Определение рабочего процесса и начальной операции

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

workflow = Workflow(
    name='Big-Mart_Workflow-v1',
    definition=workflow_definition,
    role=workflow_execution_role,
    execution_input=execution_input
)

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

workflow.create()

execution = workflow.execute(
    inputs={
      'JobName': 'regression-{}'.format(uuid.uuid1().hex),
      'ModelName': 'regression-{}'.format(uuid.uuid1().hex),
      'EndpointName': 'regression-{}'.format(uuid.uuid1().hex)
    }
)

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

workflow.render_graph()

Вы также можете проверить текущий прогресс выполненного процесса, используя функцию Render_Progress ().

execution.render_progress()

Вывод

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

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

Это также помогает создать конвейект CI/CD, в котором мы можем протолкнуть код в Git, а затем использовать такие инструменты, как Jenkins или Bamboo, чтобы создать эти шаги, и начать выполнение.

Следовательно, когда вы нажимаете к коду к Git, сразу процесс тренировок начинается. Это сила создания трубопровода.

Использованная литература:

Книга: Практические ML с AWS

Часть 1: https://dev.to/aws-builders/intro-to-amazon-sagemaker-3gp5

Часть 2: https://dev.to/aws-builders/data-processing-in-aws-sagemaker-20gi

Часть 3: https://dev.to/aws-builders/building-deploying-a-machine-learning-model-us-linear-learner-3p7c

Часть 4: https://dev.to/aws-builders/building-deploying-blazing-text-model-in-aws-sagemaker-1LCA

Часть 5: https://dev.to/aws-builders/building-deploying-image-classification-in-aws-sagemaker-4l4e

Часть 6: https://dev.to/salah856/building-seqtoSeq-model-in-aws-sagemaker-4m22

Часть 7: https://dev.to/aws-builders/using-cloudwatch-in-sagemaker-pm7

Часть 8: https://dev.to/aws-builders/running-custom-algorithm-in-aws-sagemaker-4jdf

Часть 9: https://dev.to/aws-builders/building-end-to-end-pipeline-in-sagemaker—g03

Оригинал: «https://dev.to/aws-builders/building-end-to-end-pipeline-in-sagemaker-2g03»