Tạo quy trình xây dựng mô hình Amazon SageMaker và triển khai các mô hình R bằng RStudio trên Amazon SageMaker PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.

Tạo đường ống xây dựng mô hình Amazon SageMaker và triển khai mô hình R bằng RStudio trên Amazon SageMaker

Vào tháng 2021 năm XNUMX, với sự phối hợp của RStudio PBC, Chúng tôi công bố sự sẵn có chung của RStudio trên Amazon SageMaker, RStudio Workbench IDE được quản lý hoàn toàn đầu tiên trong ngành trên đám mây. Giờ đây, bạn có thể mang theo giấy phép RStudio hiện tại của mình để dễ dàng di chuyển môi trường RStudio tự quản lý của mình sang Amazon SageMaker chỉ trong một vài bước đơn giản.

RStudio là một trong những IDE phổ biến nhất trong số các nhà phát triển R cho các dự án máy học (ML) và khoa học dữ liệu. RStudio cung cấp các công cụ mã nguồn mở cho R và phần mềm chuyên nghiệp sẵn sàng cho doanh nghiệp để các nhóm khoa học dữ liệu phát triển và chia sẻ công việc của họ trong tổ chức. Mang RStudio trên SageMaker không chỉ cho phép bạn truy cập vào cơ sở hạ tầng AWS theo cách được quản lý hoàn toàn mà còn cung cấp cho bạn quyền truy cập gốc vào SageMaker.

Trong bài đăng này, chúng tôi khám phá cách bạn có thể sử dụng các tính năng của SageMaker thông qua RStudio trên SageMaker để xây dựng đường ống SageMaker xây dựng, xử lý, đào tạo và đăng ký các mô hình R của bạn. Chúng tôi cũng khám phá việc sử dụng SageMaker để triển khai mô hình của chúng tôi, tất cả đều sử dụng R.

Tổng quan về giải pháp

Sơ đồ sau đây cho thấy kiến ​​trúc được sử dụng trong giải pháp của chúng tôi. Tất cả mã được sử dụng trong ví dụ này có thể được tìm thấy trong Kho GitHub.

Điều kiện tiên quyết

Để theo dõi bài đăng này, cần có quyền truy cập RStudio trên SageMaker. Nếu bạn mới sử dụng RStudio trên SageMaker, hãy xem lại Bắt đầu với RStudio trên Amazon SageMaker.

Chúng tôi cũng cần xây dựng các vùng chứa Docker tùy chỉnh. Chúng tôi sử dụng Xây dựng mã AWS để xây dựng các vùng chứa này, vì vậy bạn cần thêm một số Quản lý truy cập và nhận dạng AWS (IAM) các quyền mà bạn có thể không có theo mặc định. Trước khi tiếp tục, hãy đảm bảo rằng vai trò IAM mà bạn đang sử dụng có chính sách tin cậy với CodeBuild:

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

Các quyền sau đây cũng được yêu cầu trong vai trò IAM để chạy một bản dựng trong CodeBuild và đẩy hình ảnh lên Đăng ký container đàn hồi Amazon (ECR của Amazon):

{
    "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"
                }
            }
        }
    ]
}

Tạo vùng chứa R đường cơ sở

Để sử dụng tập lệnh R của chúng tôi để xử lý và đào tạo về các công việc xử lý và đào tạo của SageMaker, chúng tôi cần tạo Container đậu chứa các gói và thời gian chạy cần thiết. Khả năng sử dụng vùng chứa của riêng bạn, là một phần của dịch vụ SageMaker, mang lại sự linh hoạt tuyệt vời cho các nhà phát triển và nhà khoa học dữ liệu để sử dụng các công cụ và khuôn khổ mà họ lựa chọn, hầu như không có giới hạn.

Chúng tôi tạo hai vùng chứa Docker hỗ trợ R: một để xử lý công việc và một để đào tạo và triển khai các mô hình của chúng tôi. Việc xử lý dữ liệu thường yêu cầu các gói và thư viện khác với mô hình hóa, vì vậy, ở đây có ý nghĩa khi tách hai giai đoạn và sử dụng các vùng chứa khác nhau.

Để biết thêm chi tiết về cách sử dụng vùng chứa với SageMaker, hãy tham khảo Sử dụng vùng chứa Docker với SageMaker.

Vùng chứa được sử dụng để xử lý được định nghĩa như sau:

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"]

Đối với bài đăng này, chúng tôi sử dụng một vùng chứa đơn giản và tương đối nhẹ. Tùy thuộc vào nhu cầu của bạn hoặc tổ chức của bạn, bạn có thể muốn cài đặt trước một số gói R khác.

Vùng chứa được sử dụng để đào tạo và triển khai được định nghĩa như sau:

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"]

Nhân RStudio chạy trên vùng chứa Docker, vì vậy bạn sẽ không thể xây dựng và triển khai các vùng chứa bằng cách sử dụng lệnh Docker trực tiếp trên phiên Studio của mình. Thay vào đó, bạn có thể sử dụng thư viện rất hữu ích sagemaker-studio-hình ảnh-xây dựng, về cơ bản, giao nhiệm vụ xây dựng các vùng chứa cho CodeBuild.

Với các lệnh sau, chúng tôi tạo hai sổ đăng ký Amazon ECR: sagemaker-r-processingsagemaker-r-train-n-deployvà xây dựng các vùng chứa tương ứng mà chúng tôi sử dụng sau này:

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")

Tạo đường dẫn

Bây giờ các thùng chứa đã được xây dựng và sẵn sàng, chúng ta có thể tạo đường dẫn SageMaker để điều phối quy trình xây dựng mô hình. Mã đầy đủ của điều này nằm trong tệp pipeline.R trong kho lưu trữ. Cách dễ nhất để tạo một đường dẫn SageMaker là sử dụng SageMaker SDK, là một thư viện Python mà chúng ta có thể truy cập bằng cách sử dụng thư viện thử lại. Điều này cho phép chúng tôi truy cập vào tất cả các chức năng của SageMaker mà không cần rời khỏi môi trường ngôn ngữ R.

Đường ống mà chúng tôi xây dựng có các thành phần sau:

  • Bước tiền xử lý - Đây là một công việc xử lý của SageMaker (sử dụng sagemaker-r-processing container) chịu trách nhiệm xử lý trước dữ liệu và tách dữ liệu thành các tập dữ liệu huấn luyện và kiểm tra.
  • Bước đào tạo - Đây là một công việc đào tạo SageMaker (sử dụng sagemaker-r-train-n-deploy container) chịu trách nhiệm đào tạo mô hình. Trong ví dụ này, chúng tôi đào tạo một mô hình tuyến tính đơn giản.
  • Bước đánh giá - Đây là một công việc xử lý của SageMaker (sử dụng sagemaker-r-processing container) chịu trách nhiệm thực hiện đánh giá mô hình. Cụ thể trong ví dụ này, chúng tôi quan tâm đến RMSE (lỗi bình phương căn bậc hai) trên tập dữ liệu thử nghiệm, mà chúng tôi muốn sử dụng trong bước tiếp theo cũng như liên kết với chính mô hình.
  • Bước có điều kiện - Đây là bước có điều kiện, có nguồn gốc từ các đường ống SageMaker, cho phép chúng ta phân nhánh logic của đường ống dựa trên một số tham số. Trong trường hợp này, các nhánh đường ống dựa trên giá trị của RMSE đã được tính toán ở bước trước.
  • Đăng ký bước mô hình - Nếu bước điều kiện trước là Truevà hiệu suất của mô hình có thể chấp nhận được, thì mô hình đó được đăng ký trong sổ đăng ký mô hình. Để biết thêm thông tin, hãy tham khảo Đăng ký và triển khai mô hình với Sổ đăng ký mô hình.

Đầu tiên hãy gọi hàm upert để tạo (hoặc cập nhật) đường ống và sau đó gọi hàm bắt đầu để thực sự bắt đầu chạy đường ống:

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()

Kiểm tra đường dẫn và đăng ký mô hình

Một trong những điều tuyệt vời khi sử dụng RStudio trên SageMaker là bằng cách sử dụng nền tảng SageMaker, bạn có thể sử dụng công cụ phù hợp cho đúng công việc và nhanh chóng chuyển đổi giữa chúng dựa trên những gì bạn cần làm.

Ngay sau khi chúng tôi bắt đầu chạy đường ống, chúng tôi có thể chuyển sang Xưởng sản xuất Amazon SageMaker, cho phép chúng tôi trực quan hóa đường ống và theo dõi các lần chạy hiện tại và trước đó của nó.

Để xem chi tiết về đường ống mà chúng tôi vừa tạo và chạy, hãy điều hướng đến giao diện Studio IDE, chọn Tài nguyên của SageMaker, chọn Đường ống trên menu thả xuống và chọn đường dẫn (trong trường hợp này, AbalonePipelineUsingR).

Tạo quy trình xây dựng mô hình Amazon SageMaker và triển khai các mô hình R bằng RStudio trên Amazon SageMaker PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.

Điều này tiết lộ chi tiết của đường ống, bao gồm tất cả các lần chạy hiện tại và trước đó. Chọn cái mới nhất để hiển thị trực quan đường ống, theo ảnh chụp màn hình sau.

DAG của đường ống được tạo tự động bởi dịch vụ dựa trên các phụ thuộc dữ liệu giữa các bước, cũng như dựa trên các phụ thuộc được thêm tùy chỉnh (không được thêm bất kỳ trong ví dụ này).

Khi quá trình chạy hoàn tất, nếu thành công, bạn sẽ thấy tất cả các bước chuyển sang màu xanh lục.

Tạo quy trình xây dựng mô hình Amazon SageMaker và triển khai các mô hình R bằng RStudio trên Amazon SageMaker PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.

Chọn bất kỳ bước nào trong số các bước riêng lẻ sẽ hiển thị chi tiết về bước cụ thể, bao gồm đầu vào, đầu ra, nhật ký và cài đặt cấu hình ban đầu. Điều này cho phép bạn đi sâu vào đường dẫn và điều tra bất kỳ bước nào không thành công.

Tương tự, khi đường ống chạy xong, một mô hình được lưu trong sổ đăng ký mô hình. Để truy cập nó, trong Tài nguyên của SageMaker ngăn, chọn Đăng ký mô hình trên menu thả xuống và chọn mô hình của bạn. Điều này cho thấy danh sách các mô hình đã đăng ký, như được hiển thị trong ảnh chụp màn hình sau. Chọn một để mở trang chi tiết cho phiên bản mô hình cụ thể đó.

Tạo quy trình xây dựng mô hình Amazon SageMaker và triển khai các mô hình R bằng RStudio trên Amazon SageMaker PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.

Sau khi bạn mở một phiên bản của mô hình, hãy chọn Cập nhật trạngPhê duyệt để phê duyệt mô hình.

Tại thời điểm này, dựa trên trường hợp sử dụng của bạn, bạn có thể thiết lập phê duyệt này để kích hoạt các hành động tiếp theo, bao gồm cả việc triển khai mô hình theo nhu cầu của bạn.

Triển khai mô hình không máy chủ

Sau khi bạn đã đào tạo và đăng ký một mô hình trên SageMaker, việc triển khai mô hình trên SageMaker rất đơn giản.

Có một số tùy chọn về cách bạn có thể triển khai mô hình, chẳng hạn như suy luận hàng loạt, điểm cuối thời gian thực hoặc điểm cuối không đồng bộ. Mỗi phương pháp đi kèm với một số cấu hình bắt buộc, bao gồm cả việc chọn kiểu phiên bản bạn muốn cũng như cơ chế chia tỷ lệ.

Đối với ví dụ này, chúng tôi sử dụng tính năng được công bố gần đây của SageMaker, Suy luận không máy chủ (ở chế độ xem trước tại thời điểm viết bài), để triển khai mô hình R của chúng tôi trên một điểm cuối không có máy chủ. Đối với loại điểm cuối này, chúng tôi chỉ xác định dung lượng RAM mà chúng tôi muốn cấp cho mô hình để suy luận, cũng như số lượng lệnh gọi đồng thời tối đa được phép của mô hình. SageMaker đảm nhận việc lưu trữ mô hình và tự động mở rộng quy mô khi cần thiết. Bạn chỉ bị tính phí cho số giây và dữ liệu chính xác mà mô hình sử dụng, không tính phí cho thời gian nhàn rỗi.

Bạn có thể triển khai mô hình tới một điểm cuối không có máy chủ bằng mã sau:

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")

Nếu bạn thấy lỗi ClientError: An error occurred (ValidationException) when calling the CreateModel operation: Invalid approval status "PendingManualApproval" mô hình bạn muốn triển khai chưa được phê duyệt. Làm theo các bước từ phần trước để phê duyệt mô hình của bạn.

Gọi điểm cuối bằng cách gửi yêu cầu đến điểm cuối HTTP mà chúng tôi đã triển khai hoặc thay vào đó sử dụng SageMaker SDK. Trong đoạn mã sau, chúng tôi gọi điểm cuối trên một số dữ liệu thử nghiệm:

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)

Điểm cuối mà chúng tôi gọi là điểm cuối không có máy chủ và như vậy, chúng tôi sẽ bị tính phí cho thời lượng và dữ liệu chính xác được sử dụng. Bạn có thể nhận thấy rằng lần đầu tiên bạn gọi điểm cuối, sẽ mất khoảng một giây để phản hồi. Điều này là do thời gian khởi động lạnh của điểm cuối không có máy chủ. Nếu bạn thực hiện một lệnh gọi khác ngay sau đó, mô hình sẽ trả về dự đoán trong thời gian thực vì nó đã ấm.

Khi bạn hoàn thành thử nghiệm với điểm cuối, bạn có thể xóa nó bằng lệnh sau:

predictor$delete_endpoint(delete_endpoint_config=TRUE)

Kết luận

Trong bài đăng này, chúng tôi đã giới thiệu cho các bạn quá trình tạo một đường ống SageMaker sử dụng R trong môi trường RStudio của chúng tôi và giới thiệu cách triển khai mô hình R của chúng tôi trên một điểm cuối không có máy chủ trên SageMaker bằng cách sử dụng sổ đăng ký mô hình SageMaker.

Với sự kết hợp của RStudio và SageMaker, giờ đây bạn có thể tạo và sắp xếp các quy trình làm việc ML từ đầu đến cuối hoàn chỉnh trên AWS bằng cách sử dụng ngôn ngữ ưa thích của chúng tôi, R.

Để đi sâu hơn vào giải pháp này, tôi khuyến khích bạn xem lại mã nguồn của giải pháp này, cũng như các ví dụ khác, trên GitHub.


Lưu ý

Tạo quy trình xây dựng mô hình Amazon SageMaker và triển khai các mô hình R bằng RStudio trên Amazon SageMaker PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.Georgios Schinas là Kiến trúc sư Giải pháp Chuyên gia về AI / ML trong khu vực EMEA. Anh ấy có trụ sở tại London và làm việc chặt chẽ với các khách hàng ở Vương quốc Anh và Ireland. Georgios giúp khách hàng thiết kế và triển khai các ứng dụng học máy trong sản xuất trên AWS đặc biệt quan tâm đến các hoạt động MLOps và cho phép khách hàng thực hiện học máy trên quy mô lớn. Khi rảnh rỗi, anh ấy thích đi du lịch, nấu nướng và dành thời gian cho bạn bè và gia đình.

Dấu thời gian:

Thêm từ Học máy AWS