Создавайте конвейеры построения моделей Amazon SageMaker и развертывайте модели R с помощью RStudio в Amazon SageMaker PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Создавайте конвейеры построения моделей Amazon SageMaker и развертывайте модели R с помощью RStudio в Amazon SageMaker.

В ноябре 2021 года совместно с RStudio PBC, Мы объявило общая доступность RStudio на Amazon SageMaker, первая в отрасли полностью управляемая облачная среда разработки RStudio Workbench. Теперь вы можете использовать свою текущую лицензию RStudio, чтобы легко перенести свои самоуправляемые среды RStudio на Создатель мудреца Амазонки всего за несколько простых шагов.

RStudio — одна из самых популярных IDE среди разработчиков R для проектов машинного обучения (ML) и обработки данных. RStudio предоставляет инструменты с открытым исходным кодом для R и профессиональное программное обеспечение корпоративного уровня для групп специалистов по обработке данных, которые позволяют им разрабатывать и делиться своей работой в организации. Использование RStudio в SageMaker не только дает вам полностью управляемый доступ к инфраструктуре AWS, но также дает вам собственный доступ к SageMaker.

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

Обзор решения

На следующей диаграмме показана архитектура, используемая в нашем решении. Весь код, использованный в этом примере, можно найти в файле Репозиторий GitHub.

Предпосылки

Чтобы следить за этим постом, необходим доступ к RStudio в SageMaker. Если вы новичок в использовании RStudio в SageMaker, просмотрите Начните работу с RStudio на Amazon SageMaker.

Нам также необходимо создать собственные контейнеры Docker. Мы используем Сборка кода AWS чтобы построить эти контейнеры, поэтому вам понадобится несколько дополнительных Управление идентификацией и доступом AWS (IAM), которых у вас может не быть по умолчанию. Прежде чем продолжить, убедитесь, что используемая вами роль IAM имеет политику доверия с CodeBuild:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": [
          "codebuild.amazonaws.com"
        ]
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

Следующие разрешения также необходимы в роли IAM для запуска сборки в CodeBuild и отправки образа в Реестр Amazon Elastic Container (Амазон ЭКР):

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "codebuild:DeleteProject",
                "codebuild:CreateProject",
                "codebuild:BatchGetBuilds",
                "codebuild:StartBuild"
            ],
            "Resource": "arn:aws:codebuild:*:*:project/sagemaker-studio*"
        },
        {
            "Effect": "Allow",
            "Action": "logs:CreateLogStream",
            "Resource": "arn:aws:logs:*:*:log-group:/aws/codebuild/sagemaker-studio*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "logs:GetLogEvents",
                "logs:PutLogEvents"
            ],
            "Resource": "arn:aws:logs:*:*:log-group:/aws/codebuild/sagemaker-studio*:log-stream:*"
        },
        {
            "Effect": "Allow",
            "Action": "logs:CreateLogGroup",
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ecr:CreateRepository",
                "ecr:BatchGetImage",
                "ecr:CompleteLayerUpload",
                "ecr:DescribeImages",
                "ecr:DescribeRepositories",
                "ecr:UploadLayerPart",
                "ecr:ListImages",
                "ecr:InitiateLayerUpload", 
                "ecr:BatchCheckLayerAvailability",
                "ecr:PutImage"
            ],
            "Resource": "arn:aws:ecr:*:*:repository/sagemaker-studio*"
        },
        {
            "Sid": "ReadAccessToPrebuiltAwsImages",
            "Effect": "Allow",
            "Action": [
                "ecr:BatchGetImage",
                "ecr:GetDownloadUrlForLayer"
            ],
            "Resource": [
                "arn:aws:ecr:*:763104351884:repository/*",
                "arn:aws:ecr:*:217643126080:repository/*",
                "arn:aws:ecr:*:727897471807:repository/*",
                "arn:aws:ecr:*:626614931356:repository/*",
                "arn:aws:ecr:*:683313688378:repository/*",
                "arn:aws:ecr:*:520713654638:repository/*",
                "arn:aws:ecr:*:462105765813:repository/*"
            ]
        },
        {
            "Sid": "EcrAuthorizationTokenRetrieval",
            "Effect": "Allow",
            "Action": [
                "ecr:GetAuthorizationToken"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
              "s3:GetObject",
              "s3:DeleteObject",
              "s3:PutObject"
              ],
            "Resource": "arn:aws:s3:::sagemaker-*/*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:CreateBucket"
            ],
            "Resource": "arn:aws:s3:::sagemaker*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:GetRole",
                "iam:ListRoles"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": "arn:aws:iam::*:role/*",
            "Condition": {
                "StringLikeIfExists": {
                    "iam:PassedToService": "codebuild.amazonaws.com"
                }
            }
        }
    ]
}

Создание базовых контейнеров R

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

Мы создаем два Docker-контейнера с поддержкой R: один для обработки заданий, а другой — для обучения и развертывания наших моделей. Для обработки данных обычно требуются другие пакеты и библиотеки, чем для моделирования, поэтому здесь имеет смысл разделить эти два этапа и использовать разные контейнеры.

Более подробную информацию об использовании контейнеров с SageMaker см. Использование контейнеров Docker с SageMaker.

Контейнер, используемый для обработки, определяется следующим образом:

FROM public.ecr.aws/docker/library/r-base:4.1.2

# Install tidyverse
RUN apt update && apt-get install -y --no-install-recommends 
    r-cran-tidyverse
    
RUN R -e "install.packages(c('rjson'))"

ENTRYPOINT ["Rscript"]

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

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

FROM public.ecr.aws/docker/library/r-base:4.1.2

RUN apt-get -y update && apt-get install -y --no-install-recommends 
    wget 
    apt-transport-https 
    ca-certificates 
    libcurl4-openssl-dev 
    libsodium-dev
    
RUN apt-get update && apt-get install -y python3-dev python3-pip 
RUN pip3 install boto3
RUN R -e "install.packages(c('readr','plumber', 'reticulate'),dependencies=TRUE, repos='http://cran.rstudio.com/')"

ENV PATH="/opt/ml/code:${PATH}"

WORKDIR /opt/ml/code

COPY ./docker/run.sh /opt/ml/code/run.sh
COPY ./docker/entrypoint.R /opt/ml/entrypoint.R

RUN /bin/bash -c 'chmod +x /opt/ml/code/run.sh'

ENTRYPOINT ["/bin/bash", "run.sh"]

Ядро RStudio работает в контейнере Docker, поэтому вы не сможете создавать и развертывать контейнеры с помощью команд Docker непосредственно в сеансе Studio. Вместо этого вы можете использовать очень полезную библиотеку sagemaker-studio-image-build, что по сути передает задачу создания контейнеров CodeBuild.

С помощью следующих команд мы создаем два реестра Amazon ECR: sagemaker-r-processing и sagemaker-r-train-n-deployи создадим соответствующие контейнеры, которые мы будем использовать позже:

if (!py_module_available("sagemaker-studio-image-build")){py_install("sagemaker-studio-image-build", pip=TRUE)}
system("cd pipeline-example ; sm-docker build . —file ./docker/Dockerfile-train-n-deploy —repository sagemaker-r-train-and-deploy:1.0")
system("cd pipeline-example ; sm-docker build . —file ./docker/Dockerfile-processing —repository sagemaker-r-processing:1.0")

Создайте конвейер

Теперь, когда контейнеры собраны и готовы, мы можем создать конвейер SageMaker, который будет управлять рабочим процессом построения модели. Полный код этого находится под файлом pipeline.R в репозитории. Самый простой способ создать конвейер SageMaker — использовать SageMaker SDK, который представляет собой библиотеку Python, к которой мы можем получить доступ с помощью библиотеки сетчатый. Это дает нам доступ ко всем функциям SageMaker, не выходя из языковой среды R.

Трубопровод, который мы строим, состоит из следующих компонентов:

  • Шаг предварительной обработки – Это задание обработки SageMaker (с использованием sagemaker-r-processing контейнер), отвечающий за предварительную обработку данных и разделение данных на обучающие и тестовые наборы данных.
  • Шаг обучения – Это обучающее задание SageMaker (с использованием sagemaker-r-train-n-deploy контейнер), отвечающий за обучение модели. В этом примере мы обучаем простую линейную модель.
  • Этап оценки – Это задание обработки SageMaker (с использованием sagemaker-r-processing контейнер), отвечающий за выполнение оценки модели. В частности, в этом примере нас интересует RMSE (среднеквадратическая ошибка) тестового набора данных, который мы хотим использовать на следующем шаге, а также связать с самой моделью.
  • Условный шаг – Это условный шаг, свойственный конвейерам SageMaker, который позволяет нам разветвлять логику конвейера на основе некоторого параметра. В этом случае конвейер разветвляется на основе значения RMSE, рассчитанного на предыдущем шаге.
  • Зарегистрировать шаг модели – Если предыдущий условный шаг True, и производительность модели приемлема, то модель регистрируется в реестре моделей. Для получения дополнительной информации см. Регистрация и развертывание моделей с помощью реестра моделей.

Сначала вызовите функцию upsert, чтобы создать (или обновить) конвейер, а затем вызовите функцию start, чтобы фактически запустить конвейер:

source("pipeline-example/pipeline.R")
my_pipeline <- get_pipeline(input_data_uri=s3_raw_data)

upserted <- my_pipeline$upsert(role_arn=role_arn)
started <- my_pipeline$start()

Проверьте конвейер и реестр моделей.

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

Как только мы начнем работу конвейера, мы сможем переключиться на Студия Amazon SageMaker, что позволяет нам визуализировать конвейер и отслеживать текущие и предыдущие его запуски.

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

Создавайте конвейеры построения моделей Amazon SageMaker и развертывайте модели R с помощью RStudio в Amazon SageMaker PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

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

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

Когда запуск завершится и в случае успеха вы увидите, что все шаги станут зелеными.

Создавайте конвейеры построения моделей Amazon SageMaker и развертывайте модели R с помощью RStudio в Amazon SageMaker PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

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

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

Создавайте конвейеры построения моделей Amazon SageMaker и развертывайте модели R с помощью RStudio в Amazon SageMaker PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

После открытия версии модели выберите Состояние обновления и Утвердить утвердить модель.

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

Бессерверное развертывание модели

После того как вы обучили и зарегистрировали модель в SageMaker, развернуть ее в SageMaker не составит труда.

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

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

Вы можете развернуть модель на бессерверной конечной точке с помощью следующего кода:

model_package_arn <- 'ENTER_MODEL_PACKAGE_ARN_HERE'
model <- sagemaker$ModelPackage(
                        role=role_arn, 
                        model_package_arn=model_package_arn, 
                        sagemaker_session=session)
serverless_config <- sagemaker$serverless$ServerlessInferenceConfig(
                        memory_size_in_mb=1024L, 
                        max_concurrency=5L)
model$deploy(serverless_inference_config=serverless_config, 
             endpoint_name="serverless-r-abalone-endpoint")

Если вы видите ошибку ClientError: An error occurred (ValidationException) when calling the CreateModel operation: Invalid approval status "PendingManualApproval" модель, которую вы хотите развернуть, не одобрена. Выполните действия из предыдущего раздела, чтобы утвердить свою модель.

Вызовите конечную точку, отправив запрос на развернутую нами конечную точку HTTP, или вместо этого используйте SageMaker SDK. В следующем коде мы вызываем конечную точку для некоторых тестовых данных:

library(jsonlite)
x = list(features=format_csv(abalone_t[1:3,1:11]))
x = toJSON(x)

# test the endpoint
predictor <- sagemaker$predictor$Predictor(endpoint_name="serverless-r-abalone-endpoint", sagemaker_session=session)
predictor$predict(x)

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

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

predictor$delete_endpoint(delete_endpoint_config=TRUE)

Заключение

В этом посте мы рассмотрели процесс создания конвейера SageMaker с использованием R в нашей среде RStudio и продемонстрировали, как развернуть нашу модель R на бессерверной конечной точке в SageMaker с использованием реестра моделей SageMaker.

Благодаря сочетанию RStudio и SageMaker вы теперь можете создавать и координировать полные комплексные рабочие процессы машинного обучения на AWS, используя наш любимый язык — R.

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


Об авторе

Создавайте конвейеры построения моделей Amazon SageMaker и развертывайте модели R с помощью RStudio в Amazon SageMaker PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.Георгиос Шинас является специалистом по разработке решений для AI/ML в регионе EMEA. Он базируется в Лондоне и тесно сотрудничает с клиентами в Великобритании и Ирландии. Georgios помогает клиентам разрабатывать и развертывать приложения машинного обучения в рабочей среде на AWS, уделяя особое внимание методам MLOps и позволяя клиентам выполнять машинное обучение в масштабе. В свободное время он любит путешествовать, готовить и проводить время с друзьями и семьей.

Отметка времени:

Больше от Машинное обучение AWS