צור צינורות לבניית מודלים של Amazon SageMaker ופרוס מודלים של R באמצעות RStudio ב-Amazon SageMaker PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

צור צינורות לבניית מודלים של Amazon SageMaker ופרוס דגמי R באמצעות RStudio ב-Amazon SageMaker

בנובמבר 2021, בשיתוף עם RStudio PBC, אנחנו הודיע הזמינות הכללית של RStudio ב- Amazon SageMaker, RStudio Workbench IDE המנוהל במלואו הראשון בענן בענן. כעת תוכל להביא את רישיון RStudio הנוכחי שלך כדי להעביר בקלות את סביבות RStudio בניהול עצמי שלך אמזון SageMaker בכמה שלבים פשוטים.

RStudio הוא אחד ה-IDEs הפופולריים ביותר בקרב מפתחי R עבור לימוד מכונה (ML) ופרויקטים של מדעי נתונים. RStudio מספקת כלים בקוד פתוח עבור R ותוכנה מקצועית מוכנה לארגונים עבור צוותי מדעי הנתונים כדי לפתח ולשתף את עבודתם בארגון. הבאת RStudio ל- SageMaker לא רק מעניקה לך גישה לתשתית AWS בצורה מנוהלת במלואה, אלא היא גם מעניקה לך גישה מקורית ל- SageMaker.

בפוסט זה, אנו חוקרים כיצד ניתן להשתמש בתכונות SageMaker דרך RStudio ב- SageMaker כדי לבנות צינור של SageMaker שבונה, מעבד, מאמן ורושם את דגמי ה-R שלך. אנו גם חוקרים את השימוש ב- SageMaker לפריסת המודל שלנו, הכל באמצעות R.

סקירת פתרונות

התרשים הבא מציג את הארכיטקטורה המשמשת בפתרון שלנו. כל הקוד המשמש בדוגמה זו ניתן למצוא ב- מאגר GitHub.

תנאים מוקדמים

כדי לעקוב אחר הפוסט הזה, נדרשת גישה ל- RStudio ב- SageMaker. אם אתה חדש בשימוש ב- RStudio ב- SageMaker, בדוק התחל עם RStudio באמזון 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 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.

עם הפקודות הבאות, אנו יוצרים שני רישום 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 container) האחראי על עיבוד מוקדם של הנתונים ופיצול הנתונים למערך נתונים של רכבת ובדיקה.
  • שלב אימון - זוהי עבודת הכשרה של SageMaker (המשתמשת ב- sagemaker-r-train-n-deploy מיכל) אחראי להכשרת המודל. בדוגמה זו, אנו מאמנים מודל ליניארי פשוט.
  • שלב הערכה - זוהי עבודת עיבוד של SageMaker (המשתמשת ב- sagemaker-r-processing container) אחראי על ביצוע הערכה של המודל. ספציפית בדוגמה זו, אנו מעוניינים ב-RMSE (שגיאת בסיס מרובעת) במערך הנתונים של הבדיקה, שבו אנו רוצים להשתמש בשלב הבא וכן לשייך למודל עצמו.
  • צעד מותנה – זהו שלב מותנה, מקורי בצנרת של SageMaker, המאפשר לנו להסיע את הלוגיקה של הצינור על סמך פרמטר כלשהו. במקרה זה, הצינור מסתעף על סמך הערך של RMSE שחושב בשלב הקודם.
  • רישום שלב הדגם – אם השלב המותנה הקודם הוא True, והביצועים של המודל מקובלים, אז המודל נרשם ברישום המודלים. למידע נוסף, עיין ב רישום ופריסה של מודלים עם רישום מודלים.

תחילה קרא לפונקציה upsert כדי ליצור (או לעדכן) את הצינור ולאחר מכן קרא לפונקציית ההתחלה כדי להתחיל בפועל להפעיל את הצינור:

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, אתה יכול להשתמש בכלי הנכון לעבודה הנכונה ולעבור במהירות ביניהם בהתבסס על מה שאתה צריך לעשות.

ברגע שנתחיל את הפעלת הצינור, נוכל לעבור ל סטודיו 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 שלנו בנקודת קצה ללא שרת. עבור סוג זה של נקודת קצה, אנו מגדירים רק את כמות ה-RAM שברצוננו שיוקצה למודל לצורך הסקת מסקנות, כמו גם את המספר המרבי של הפעלות בו-זמניות של המודל. 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. חיפוש אנכי. איי.גאורגיוס שינאס הוא אדריכל פתרונות מומחה עבור AI/ML באזור EMEA. הוא מבוסס בלונדון ועובד בשיתוף פעולה הדוק עם לקוחות בבריטניה ובאירלנד. Georgios עוזר ללקוחות לתכנן ולפרוס יישומי למידת מכונה בייצור ב-AWS עם עניין מיוחד בפרקטיקות של MLOps ומאפשר ללקוחות לבצע למידת מכונה בקנה מידה. בזמנו הפנוי הוא נהנה לטייל, לבשל ולבלות עם חברים ובני משפחה.

בול זמן:

עוד מ למידת מכונות AWS