أنشئ خطوط أنابيب لبناء نموذج Amazon SageMaker وانشر نماذج R باستخدام RStudio على Amazon SageMaker PlatoBlockchain Data Intelligence. البحث العمودي. عاي.

أنشئ خطوط أنابيب لبناء نموذج Amazon SageMaker وانشر نماذج R باستخدام RStudio على Amazon SageMaker

في نوفمبر 2021 ، بالتعاون مع ارستوديو بي بي سي، ونحن أعلن توافر العام لل RStudio على Amazon SageMaker، هو أول بيئة تطوير متكاملة RStudio Workbench IDE مُدارة بالكامل في الصناعة في السحابة. يمكنك الآن إحضار ترخيص RStudio الحالي لترحيل بيئات RStudio المدارة ذاتيًا بسهولة إلى الأمازون SageMaker في بضع خطوات بسيطة.

يعد RStudio أحد أكثر IDEs شيوعًا بين مطوري R للتعلم الآلي (ML) ومشاريع علوم البيانات. يوفر RStudio أدوات مفتوحة المصدر للبحث والبرامج الاحترافية الجاهزة للمؤسسات لفرق علوم البيانات لتطوير عملهم ومشاركته في المؤسسة. لا يمنحك جلب RStudio على SageMaker الوصول إلى البنية التحتية لـ AWS بطريقة مُدارة بالكامل فحسب ، بل يمنحك أيضًا وصولاً أصليًا إلى SageMaker.

في هذا المنشور ، نستكشف كيف يمكنك استخدام ميزات SageMaker عبر RStudio على SageMaker لبناء خط أنابيب SageMaker يبني ويعالج ويدرب ويسجل نماذج R الخاصة بك. نستكشف أيضًا استخدام SageMaker لنشر نموذجنا ، وكل ذلك باستخدام R.

حل نظرة عامة

يوضح الرسم البياني التالي البنية المستخدمة في حلنا. يمكن العثور على جميع الرموز المستخدمة في هذا المثال في ملف مستودع جيثب.

المتطلبات الأساسية المسبقة

لمتابعة هذا المنشور ، يلزم الوصول إلى 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 ودفع الصورة إليه سجل الأمازون المرنة للحاويات (أمازون 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-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، وأداء النموذج مقبول ، ثم يتم تسجيل النموذج في سجل النموذج. لمزيد من المعلومات ، يرجى الرجوع إلى تسجيل النماذج ونشرها باستخدام نموذج التسجيل.

قم أولاً باستدعاء وظيفة upert لإنشاء (أو تحديث) خط الأنابيب ثم استدعاء وظيفة 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 ، يمكنك استخدام الأداة المناسبة للوظيفة المناسبة والتبديل بينها بسرعة بناءً على ما تحتاج إلى القيام به.

بمجرد أن نبدأ تشغيل خط الأنابيب ، يمكننا التبديل إلى أمازون ساجميكر ستوديو، مما يسمح لنا بتصور خط الأنابيب ومراقبة عمليات التشغيل الحالية والسابقة له.

لعرض تفاصيل حول خط الأنابيب الذي قمنا بإنشائه وتشغيله للتو ، انتقل إلى واجهة Studio IDE ، اختر موارد SageMaker، اختر خطوط الأنابيب في القائمة المنسدلة ، واختر خط الأنابيب (في هذه الحالة ، AbalonePipelineUsingR).

أنشئ خطوط أنابيب لبناء نموذج Amazon SageMaker وانشر نماذج R باستخدام RStudio على Amazon SageMaker PlatoBlockchain Data Intelligence. البحث العمودي. عاي.

يكشف هذا عن تفاصيل خط الأنابيب ، بما في ذلك جميع عمليات التشغيل الحالية والسابقة. اختر الأحدث لإحضار تمثيل مرئي لخط الأنابيب ، حسب لقطة الشاشة التالية.

يتم إنشاء DAG لخط الأنابيب تلقائيًا بواسطة الخدمة بناءً على تبعيات البيانات بين الخطوات ، وكذلك بناءً على التبعيات المضافة المخصصة (لم تتم إضافة أي منها في هذا المثال).

عند اكتمال التشغيل ، إذا نجحت ، يجب أن ترى جميع الخطوات تتحول إلى اللون الأخضر.

أنشئ خطوط أنابيب لبناء نموذج 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 ، يمكنك الآن إنشاء وتنظيم تدفقات عمل ML من طرف إلى طرف على AWS باستخدام لغتنا المفضلة المفضلة ، R.

للتعمق في هذا الحل ، أشجعك على مراجعة الكود المصدري لهذا الحل ، بالإضافة إلى أمثلة أخرى ، على GitHub جيثب:.


عن المؤلف

أنشئ خطوط أنابيب لبناء نموذج Amazon SageMaker وانشر نماذج R باستخدام RStudio على Amazon SageMaker PlatoBlockchain Data Intelligence. البحث العمودي. عاي.جورجيوس شيناس مهندس حلول متخصص للذكاء الاصطناعي / تعلم الآلة في منطقة أوروبا والشرق الأوسط وإفريقيا. يقيم في لندن ويعمل بشكل وثيق مع العملاء في المملكة المتحدة وأيرلندا. يساعد Georgios العملاء على تصميم ونشر تطبيقات التعلم الآلي في الإنتاج على AWS مع اهتمام خاص بممارسات MLOps وتمكين العملاء من أداء التعلم الآلي على نطاق واسع. في أوقات فراغه ، يستمتع بالسفر والطهي وقضاء الوقت مع الأصدقاء والعائلة.

الطابع الزمني:

اكثر من التعلم الآلي من AWS