خطوط لوله ساختمان آمازون SageMaker را ایجاد کنید و مدل های R را با استفاده از RStudio در Amazon SageMaker PlatoBlockchain Data Intelligence به کار ببرید. جستجوی عمودی Ai.

خطوط لوله ساختمان آمازون SageMaker را ایجاد کنید و مدل های R را با استفاده از RStudio در Amazon SageMaker استقرار دهید.

در نوامبر 2021، با همکاری RStudio PBC، ما اعلام کرد در دسترس بودن عمومی RStudio در Amazon SageMaker، اولین RStudio Workbench IDE با مدیریت کامل در صنعت در فضای ابری است. اکنون می توانید مجوز RStudio فعلی خود را بیاورید تا به راحتی محیط های RStudio خود مدیریت شده خود را به آمازون SageMaker فقط در چند مرحله ساده

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 CodeBuild برای ساخت این ظروف، بنابراین به چند عدد اضافی نیاز دارید هویت AWS و مدیریت دسترسی مجوزهای (IAM) که ممکن است به طور پیش فرض نداشته باشید. قبل از ادامه، مطمئن شوید که نقش IAM که استفاده می‌کنید دارای خط‌مشی اعتماد با CodeBuild است:

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

مجوزهای زیر نیز در نقش IAM برای اجرای یک ساخت در CodeBuild و فشار دادن تصویر به آن مورد نیاز است رجیستری ظروف الاستیک آمازون (Amazon ECR):

{
    "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 مستقیماً در جلسه استودیو خود بسازید و مستقر کنید. در عوض، می توانید از کتابخانه بسیار مفید استفاده کنید Sagemaker-Studio-Imagebuild، که اساسا وظیفه ساخت کانتینرها را به CodeBuild برون سپاری می کند.

با دستورات زیر دو رجیستری آمازون 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، که به ما اجازه می دهد خط لوله را تجسم کنیم و جریان و اجرای قبلی آن را نظارت کنیم.

برای مشاهده جزئیات مربوط به خط لوله ای که به تازگی ایجاد و اجرا کردیم، به رابط Studio IDE بروید، انتخاب کنید منابع SageMaker، انتخاب کنید خطوط لوله در منوی کشویی، و خط لوله را انتخاب کنید (در این مورد، AbalonePipelineUsingR).

خطوط لوله ساختمان آمازون SageMaker را ایجاد کنید و مدل های R را با استفاده از RStudio در Amazon SageMaker PlatoBlockchain Data Intelligence به کار ببرید. جستجوی عمودی Ai.

این جزئیات خط لوله، از جمله تمام اجراهای فعلی و قبلی را نشان می دهد. مطابق تصویر زیر، آخرین مورد را برای نمایش تصویری خط لوله انتخاب کنید.

DAG خط لوله به طور خودکار توسط سرویس بر اساس وابستگی های داده بین مراحل، و همچنین بر اساس وابستگی های اضافه شده سفارشی (در این مثال اضافه نشده است) ایجاد می شود.

وقتی اجرا کامل شد، در صورت موفقیت آمیز بودن، باید سبز شدن همه مراحل را ببینید.

خطوط لوله ساختمان آمازون SageMaker را ایجاد کنید و مدل های R را با استفاده از RStudio در Amazon SageMaker PlatoBlockchain Data Intelligence به کار ببرید. جستجوی عمودی Ai.

با انتخاب هر یک از مراحل جداگانه، جزئیات مربوط به مرحله خاص، از جمله ورودی‌ها، خروجی‌ها، گزارش‌ها و تنظیمات پیکربندی اولیه نمایش داده می‌شود. این به شما امکان می دهد در خط لوله حفاری کنید و هر مرحله شکست خورده را بررسی کنید.

به طور مشابه، هنگامی که خط لوله به پایان رسید، یک مدل در رجیستری مدل ذخیره می شود. برای دسترسی به آن، در منابع SageMaker پنجره، انتخاب کنید رجیستری مدل در منوی کشویی و مدل خود را انتخاب کنید. این لیست مدل های ثبت شده را نشان می دهد، همانطور که در تصویر زیر نشان داده شده است. یکی را برای باز کردن صفحه جزئیات برای آن نسخه مدل خاص انتخاب کنید.

خطوط لوله ساختمان آمازون SageMaker را ایجاد کنید و مدل های R را با استفاده از RStudio در Amazon SageMaker PlatoBlockchain Data Intelligence به کار ببرید. جستجوی عمودی Ai.

پس از باز کردن نسخه ای از مدل، انتخاب کنید وضعیت به روز رسانی و تصویب برای تایید مدل

در این مرحله، بر اساس مورد استفاده خود، می‌توانید این تأییدیه را برای راه‌اندازی اقدامات بیشتر، از جمله استقرار مدل بر اساس نیاز خود تنظیم کنید.

استقرار مدل بدون سرور

پس از آموزش و ثبت یک مدل در 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، اکنون می‌توانید با استفاده از زبان انتخابی ما، R، گردش‌های کاری کامل ML را در AWS ایجاد و هماهنگ کنید.

برای غواصی عمیق تر در این راه حل، من شما را تشویق می کنم که کد منبع این راه حل و همچنین نمونه های دیگر را مرور کنید. GitHub.


درباره نویسنده

خطوط لوله ساختمان آمازون SageMaker را ایجاد کنید و مدل های R را با استفاده از RStudio در Amazon SageMaker PlatoBlockchain Data Intelligence به کار ببرید. جستجوی عمودی Ai.جورجیوس شیناس یک معمار راه حل های تخصصی برای AI/ML در منطقه EMEA است. او در لندن مستقر است و از نزدیک با مشتریان در بریتانیا و ایرلند کار می کند. جورجیوس به مشتریان کمک می‌کند تا برنامه‌های یادگیری ماشینی را در تولید در AWS با علاقه خاصی به شیوه‌های MLOps طراحی و استقرار دهند و مشتریان را قادر می‌سازد تا یادگیری ماشین را در مقیاس انجام دهند. او در اوقات فراغت از سفر، آشپزی و گذراندن وقت با دوستان و خانواده لذت می برد.

تمبر زمان:

بیشتر از آموزش ماشین AWS