Zephyrnet Logosu

Amazon SageMaker üzerinde RStudio kullanarak Amazon SageMaker model oluşturma işlem hatları oluşturun ve R modellerini dağıtın

Tarih:

Kasım 2021'de, işbirliğiyle RStudio PBC, Biz açıkladı genel kullanılabilirliği Amazon SageMaker'da RStudio, endüstrinin buluttaki ilk tam olarak yönetilen RStudio Workbench IDE'si. Artık kendi kendini yöneten RStudio ortamlarınızı kolayca başka bir ortama taşımak için mevcut RStudio lisansınızı getirebilirsiniz. Amazon Adaçayı Yapıcı sadece birkaç basit adımda.

RStudio, makine öğrenimi (ML) ve veri bilimi projeleri için R geliştiricileri arasında en popüler IDE'lerden biridir. RStudio, R için açık kaynaklı araçlar ve veri bilimi ekiplerinin çalışmalarını kuruluşta geliştirmeleri ve paylaşmaları için kurumsal kullanıma hazır profesyonel yazılımlar sağlar. RStudio'yu SageMaker'a getirmek, yalnızca AWS altyapısına tam olarak yönetilen bir şekilde erişmenizi sağlamakla kalmaz, aynı zamanda SageMaker'a yerel erişim sağlar.

Bu yazıda, R modellerinizi oluşturan, işleyen, eğiten ve kaydeden bir SageMaker ardışık düzeni oluşturmak için SageMaker üzerinde RStudio aracılığıyla SageMaker özelliklerini nasıl kullanabileceğinizi keşfediyoruz. Model dağıtımımız için tümü R kullanarak SageMaker kullanmayı da keşfediyoruz.

Çözüme genel bakış

Aşağıdaki şema, çözümümüzde kullanılan mimariyi göstermektedir. Bu örnekte kullanılan tüm kodlar şurada bulunabilir: GitHub deposu.

Önkoşullar

Bu gönderiyi takip etmek için SageMaker'da RStudio'ya erişim gereklidir. SageMaker'da RStudio'yu kullanmaya yeni başladıysanız, inceleyin Amazon SageMaker'da RStudio'yu kullanmaya başlayın.

Ayrıca özel Docker kapsayıcıları oluşturmamız gerekiyor. Kullanırız AWS Kod Oluşturma bu kapları oluşturmak için birkaç ekstraya ihtiyacınız var AWS Kimlik ve Erişim Yönetimi (IAM) varsayılan olarak sahip olmadığınız izinler. Devam etmeden önce, kullandığınız IAM rolünün CodeBuild ile bir güven ilkesine sahip olduğundan emin olun:

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

IAM rolünde CodeBuild'te bir derleme çalıştırmak ve görüntüyü Amazon Elastik Konteyner Kayıt Defteri (Amazon ECR'si):

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

Temel R kapsayıcıları oluşturun

SageMaker işleme ve eğitim işlerinde işleme ve eğitim için R komut dosyalarımızı kullanmak için kendi komut dosyalarımızı oluşturmamız gerekir. Docker kapları gerekli çalışma zamanını ve paketleri içeren. SageMaker teklifinin bir parçası olan kendi kapsayıcınızı kullanma yeteneği, geliştiricilere ve veri bilimcilerine, seçtikleri araçları ve çerçeveleri neredeyse hiçbir sınırlama olmaksızın kullanma konusunda büyük esneklik sağlar.

İki adet R-etkin Docker kapsayıcısı oluşturuyoruz: biri işleri işlemek için, diğeri ise modellerimizin eğitimi ve dağıtımı için. Verileri işlemek genellikle modellemeden farklı paketler ve kitaplıklar gerektirir, bu nedenle burada iki aşamayı ayırmak ve farklı kaplar kullanmak mantıklıdır.

SageMaker ile kapları kullanma hakkında daha fazla ayrıntı için bkz. SageMaker ile Docker kapsayıcılarını kullanma.

İşleme için kullanılan kap aşağıdaki gibi tanımlanır:

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

Bu gönderi için basit ve nispeten hafif bir kap kullanıyoruz. Sizin veya kuruluşunuzun ihtiyaçlarına bağlı olarak, birkaç tane daha R paketini önceden kurmak isteyebilirsiniz.

Eğitim ve dağıtım için kullanılan kapsayıcı şu şekilde tanımlanı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 çekirdeği bir Docker kapsayıcısında çalışır, bu nedenle doğrudan Studio oturumunuzda Docker komutlarını kullanarak kapsayıcıları oluşturamaz ve dağıtamazsınız. Bunun yerine, çok kullanışlı kütüphaneyi kullanabilirsiniz. adaçayı-stüdyo-görüntü-yapı, esasen kapsayıcı oluşturma görevini CodeBuild'e dış kaynak sağlar.

Aşağıdaki komutlarla iki Amazon ECR kaydı oluşturuyoruz: sagemaker-r-processing ve sagemaker-r-train-n-deployve daha sonra kullanacağımız ilgili kapsayıcıları oluşturun:

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

İşlem hattını oluşturun

Konteynerler oluşturuldu ve hazır olduğuna göre, model oluşturma iş akışını düzenleyen SageMaker işlem hattını oluşturabiliriz. Bunun tam kodu dosyanın altında pipeline.R depoda. SageMaker işlem hattı oluşturmanın en kolay yolu, kütüphaneyi kullanarak erişebileceğimiz bir Python kütüphanesi olan SageMaker SDK'yı kullanmaktır. ağsı. Bu bize R dili ortamından ayrılmadan SageMaker'ın tüm işlevlerine erişmemizi sağlar.

Oluşturduğumuz boru hattı aşağıdaki bileşenlere sahiptir:

  • ön işleme adımı – Bu bir SageMaker işleme işidir ( sagemaker-r-processing konteyner) verilerin ön işlenmesinden ve verilerin tren ve test veri kümelerine bölünmesinden sorumludur.
  • Eğitim adımı – Bu bir SageMaker eğitim işidir ( sagemaker-r-train-n-deploy konteyner) modelin eğitiminden sorumludur. Bu örnekte, basit bir doğrusal model eğitiyoruz.
  • Değerlendirme adımı – Bu bir SageMaker işleme işidir ( sagemaker-r-processing konteyner) modelin değerlendirilmesinden sorumludur. Spesifik olarak bu örnekte, bir sonraki adımda kullanmak istediğimiz ve modelin kendisiyle ilişkilendirmek istediğimiz test veri kümesindeki RMSE (kök ortalama kare hatası) ile ilgileniyoruz.
  • koşullu adım – Bu, işlem hattı mantığını bazı parametrelere göre dallandırmamıza izin veren SageMaker işlem hatlarına özgü koşullu bir adımdır. Bu durumda, işlem hattı önceki adımda hesaplanan RMSE değerine göre dallanır.
  • Model adımını kaydet – Önceki koşullu adım ise Trueve modelin performansı kabul edilebilir ise model, model siciline kaydedilir. Daha fazla bilgi için bkz. Model Registry ile Modelleri Kaydedin ve Dağıtın.

Önce ardışık düzeni oluşturmak (veya güncellemek) için upsert işlevini çağırın ve ardından ardışık düzeni gerçekten çalıştırmaya başlamak için başlatma işlevini çağırın:

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

İşlem hattını ve model kayıt defterini inceleyin

SageMaker'da RStudio kullanmanın en güzel yanlarından biri, SageMaker platformunda olarak, doğru iş için doğru aracı kullanabilmeniz ve yapmanız gerekene göre bunlar arasında hızla geçiş yapabilmenizdir.

Boru hattı çalıştırmasını başlattığımız anda, geçiş yapabiliriz Amazon SageMaker Stüdyosubu, boru hattını görselleştirmemize ve mevcut ve önceki çalıştırmalarını izlememize olanak tanır.

Yeni oluşturup çalıştırdığımız işlem hattıyla ilgili ayrıntıları görüntülemek için Studio IDE arayüzüne gidin, SageMaker kaynakları, seçmek Boru Hatları açılır menüden işlem hattını seçin (bu durumda, AbalonePipelineUsingR).

Bu, tüm mevcut ve önceki çalıştırmalar dahil olmak üzere boru hattının ayrıntılarını ortaya çıkarır. Aşağıdaki ekran görüntüsüne göre, boru hattının görsel bir temsilini getirmek için en son olanı seçin.

İşlem hattının DAG'si, adımlar arasındaki veri bağımlılıklarına ve ayrıca özel eklenen bağımlılıklara (bu örnekte herhangi bir eklenmemiştir) dayalı olarak hizmet tarafından otomatik olarak oluşturulur.

Çalıştırma tamamlandığında, başarılı olursa tüm adımların yeşile döndüğünü görmelisiniz.

Bireysel adımlardan herhangi birinin seçilmesi, girdiler, çıktılar, günlükler ve ilk yapılandırma ayarları dahil olmak üzere belirli adımla ilgili ayrıntıları getirir. Bu, işlem hattında detaya inmenize ve başarısız adımları araştırmanıza olanak tanır.

Benzer şekilde, işlem hattının çalışması bittiğinde, model kayıt defterine bir model kaydedilir. Erişmek için, içinde SageMaker kaynakları bölme, seç Model kaydı açılır menüde ve modelinizi seçin. Bu, aşağıdaki ekran görüntüsünde gösterildiği gibi kayıtlı modellerin listesini gösterir. Belirli bir model sürümü için ayrıntılar sayfasını açmak için birini seçin.

Modelin bir sürümünü açtıktan sonra Durum Güncelleme ve Onaylamak Modeli onaylamak için

Bu noktada, kullanım durumunuza bağlı olarak, modelin ihtiyaçlarınıza göre dağıtılması da dahil olmak üzere diğer eylemleri tetiklemek için bu onayı ayarlayabilirsiniz.

Modelin sunucusuz dağıtımı

SageMaker'da bir modeli eğitip kaydettikten sonra, modeli SageMaker'da dağıtmak kolaydır.

Toplu çıkarım, gerçek zamanlı uç noktalar veya zaman uyumsuz uç noktalar gibi bir modeli nasıl dağıtabileceğinize ilişkin çeşitli seçenekler vardır. Her yöntem, istediğiniz örnek türünü ve ölçekleme mekanizmasını seçmek de dahil olmak üzere birkaç gerekli yapılandırmayla birlikte gelir.

Bu örnek için, SageMaker'ın yakın zamanda duyurulan özelliğini kullanıyoruz, Sunucusuz Çıkarım (yazma sırasındaki önizleme modunda), R modelimizi sunucusuz bir uç noktaya dağıtmak için. Bu tür uç nokta için, modele yalnızca çıkarım için tahsis edilmesini istediğimiz RAM miktarını ve ayrıca modelin izin verilen maksimum eşzamanlı çağrı sayısını tanımlarız. SageMaker, modeli barındırma ve gerektiğinde otomatik ölçeklendirme ile ilgilenir. Yalnızca model tarafından kullanılan tam saniye sayısı ve veriler için ücretlendirilirsiniz ve boşta kalma süresi için herhangi bir ücret ödemezsiniz.

Modeli, aşağıdaki kodla sunucusuz bir uç noktaya dağıtabilirsiniz:

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

hatayı görürseniz ClientError: An error occurred (ValidationException) when calling the CreateModel operation: Invalid approval status "PendingManualApproval" dağıtmak istediğiniz model onaylanmadı. Modelinizi onaylamak için önceki bölümdeki adımları izleyin.

Dağıttığımız HTTP uç noktasına bir istek göndererek uç noktayı çağırın veya bunun yerine SageMaker SDK'yı kullanın. Aşağıdaki kodda, bazı test verilerinde uç noktayı çağırıyoruz:

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)

Çağırdığımız uç nokta sunucusuz bir uç noktaydı ve bu nedenle kullanılan tam süre ve veriler için ücretlendiriliriz. Uç noktayı ilk kez çağırdığınızda yanıt vermenin yaklaşık bir saniye sürdüğünü fark edebilirsiniz. Bunun nedeni sunucusuz uç noktanın soğuk başlangıç ​​zamanıdır. Kısa süre sonra başka bir çağrı yaparsanız, model zaten sıcak olduğu için tahmini gerçek zamanlı olarak döndürür.

Uç noktayla denemeyi bitirdiğinizde, aşağıdaki komutla silebilirsiniz:

predictor$delete_endpoint(delete_endpoint_config=TRUE)

Sonuç

Bu gönderide, RStudio ortamımızda R kullanarak bir SageMaker ardışık düzeni oluşturma sürecini ele aldık ve SageMaker model kayıt defterini kullanarak R modelimizin SageMaker'da sunucusuz bir uç noktaya nasıl dağıtılacağını gösterdik.

RStudio ve SageMaker kombinasyonu ile artık tercih ettiğimiz dil olan R'yi kullanarak AWS'de eksiksiz uçtan uca ML iş akışları oluşturabilir ve düzenleyebilirsiniz.

Bu çözümü daha derine dalmak için, bu çözümün kaynak kodunu ve diğer örnekleri incelemenizi tavsiye ederim. GitHub.


Yazar Hakkında

Georgios Şinas EMEA bölgesinde AI/ML için Uzman Çözüm Mimarıdır. Londra merkezlidir ve İngiltere ve İrlanda'daki müşterilerle yakın bir şekilde çalışmaktadır. Georgios, müşterilerin MLOps uygulamalarına özel bir ilgi duyarak AWS'de üretimde makine öğrenimi uygulamaları tasarlamasına ve dağıtmasına yardımcı olur ve müşterilerin büyük ölçekte makine öğrenimi gerçekleştirmesini sağlar. Boş zamanlarında seyahat etmekten, yemek yapmaktan ve arkadaşları ve ailesiyle vakit geçirmekten hoşlanır.

spot_img

En Son İstihbarat

spot_img