Zephyrnet Logosu

Amazon SageMaker Model Registry, HashiCorp Terraform, GitHub ve Jenkins CI/CD'yi kullanarak çoklu ortam kurulumunda işlem hatlarını tanıtın | Amazon Web Hizmetleri

Tarih:

Kuruluşlar için hızla gelişen yapay zeka (AI) ve makine öğrenimi (ML) ortamında bir makine öğrenimi işlemleri (MLOps) platformu oluşturmak, model performansına ilişkin gereksinimleri karşılarken veri bilimi deneyleri ile dağıtım arasındaki boşluğu sorunsuz bir şekilde kapatmak için çok önemlidir. güvenlik ve uyumluluk.

Mevzuat ve uyumluluk gerekliliklerini yerine getirmek için böyle bir platformu tasarlarken temel gereksinimler şunlardır:

  • Adres veri kayması
  • Model performansını izleyin
  • Otomatik model yeniden eğitimini kolaylaştırın
  • Model onayı için bir süreç sağlayın
  • Modelleri güvenli bir ortamda saklayın

Bu yazıda, AWS hizmetleri ve üçüncü taraf araç setlerinin bir kombinasyonunu kullanırken bu ihtiyaçları karşılamak için bir MLOps çerçevesinin nasıl oluşturulacağını gösteriyoruz. Çözüm, otomatikleştirilmiş model yeniden eğitimi, toplu çıkarım ve izleme ile çoklu ortam kurulumunu gerektirir. Amazon SageMaker Model Monitörü, model versiyonlama SageMaker Model Kaydıve ML kodunun ve işlem hatlarının ortamlar arasında tanıtımını kolaylaştırmak için bir CI/CD işlem hattı Amazon Adaçayı Yapıcı, Amazon EventBridge, Amazon Basit Bildirim Servisi (Amazon S3), HashiCorp Terraformu, GitHub, ve Jenkins CI/CD. Mamografik kitle lezyonunun ciddiyetini (iyi huylu veya kötü huylu) tahmin etmek için eğitilmiş bir model oluşturuyoruz. XGBoost algoritması halka açık olanı kullanarak UCI Mamografi Kitlesi veri kümesini oluşturun ve MLOps çerçevesini kullanarak dağıtın. Kodlu talimatların tamamı şurada mevcuttur: GitHub deposu.

Çözüme genel bakış

Aşağıdaki mimari diyagramı, aşağıdaki temel bileşenlerle birlikte MLOps çerçevesine genel bir bakış göstermektedir:

  • Çoklu hesap stratejisi – AWS Well-Architected en iyi uygulamaları izlenerek iki farklı AWS hesabında iki farklı ortam (dev ve prod) kurulur ve merkezi model kayıt defterinde üçüncü bir hesap kurulur:
    • Geliştirme ortamı – Nerede bir Amazon SageMaker Studio alanı Bir model daha yüksek ortamlara tanıtılmaya hazır olmadan önce model geliştirmeye, model eğitimine ve makine öğrenimi ardışık düzenlerinin test edilmesine (eğitim ve çıkarım) olanak sağlayacak şekilde kurulmuştur.
    • Ürün ortamı – Geliştiricilerin makine öğrenimi ardışık düzenlerinin ilk adım olarak tanıtıldığı ve zaman içinde planlandığı ve izlendiği yer.
    • Merkezi model kaydı - Amazon SageMaker Model Kaydı geliştirme ve üretim ortamlarında oluşturulan model sürümlerini izlemek için ayrı bir AWS hesabında kurulur.
  • CI/CD ve kaynak kontrolü – ML ardışık düzenlerinin ortamlar arasında dağıtımı, GitHub aracılığıyla yürütülen sürüm kontrolüyle birlikte Jenkins ile kurulan CI/CD aracılığıyla gerçekleştirilir. İlgili ortam git şubesiyle birleştirilen kod değişiklikleri, verilen hedef ortamda uygun değişiklikleri yapmak için bir CI/CD iş akışını tetikler.
  • Toplu tahminler model izleme ile – Çıkarım hattı ile inşa edildi Amazon SageMaker Ardışık Düzenleri veri kaymasını tespit etmek için SageMaker Model Monitor'ü kullanarak model izlemenin yanı sıra tahminler oluşturmak için planlı bir şekilde çalışır.
  • Otomatik yeniden eğitim mekanizması – SageMaker Pipelines ile oluşturulan eğitim hattı, çıkarım hattında bir veri kayması tespit edildiğinde tetiklenir. Model, eğitildikten sonra, model onaylayıcısı tarafından onaylanmak üzere merkezi model kaydına kaydedilir. Onaylandığında güncellenen model sürümü, çıkarım hattı aracılığıyla tahminler oluşturmak için kullanılır.
  • Kod olarak altyapı – Kod olarak altyapı (IaC), kullanılarak oluşturuldu HashiCorp Terraformu, EventBridge ile çıkarım hattının planlanmasını destekler ve tren hattının tetiklenmesini temel alır. EventBridge kuralı ve kullanarak bildirim gönderme Amazon Basit Bildirim Servisi (Amazon SNS'si) konular.

mlops mimarisi

MLOps iş akışı aşağıdaki adımları içerir:

  1. Geliştirme hesabındaki SageMaker Studio etki alanına erişin, GitHub deposunu kopyalayın, sağlanan örnek modeli kullanarak model geliştirme sürecinden geçin ve eğitim ve çıkarım işlem hatlarını oluşturun.
  2. Eğitilen model sürümü için model yapıtlarını oluşturan ve modeli, merkezi model kayıt defteri hesabındaki SageMaker Model Kayıt Defterine kaydeden geliştirme hesabındaki tren hattını çalıştırın.
  3. Merkezi model kayıt defteri hesabındaki SageMaker Model Kayıt Defterindeki modeli onaylayın.
  4. Kodu (EventBridge zamanlamasını, EventBridge kuralını ve SNS konusunu oluşturmak için eğitme ve çıkarım işlem hatlarını ve Terraform IaC kodunu) GitHub deposunun bir özellik dalına aktarın. Kodu GitHub deposunun ana dalıyla birleştirmek için bir çekme isteği oluşturun.
  5. GitHub deposuyla kurulan Jenkins CI/CD ardışık düzenini tetikleyin. CI/CD işlem hattı, EventBridge zamanlamasını, EventBridge kuralını ve SNS konusunu sağlamak üzere Terraform koduyla birlikte eğitim ve çıkarım işlem hatlarını oluşturmak için kodu üretim hesabına dağıtır.
  6. Çıkarım hattı günlük olarak çalışacak şekilde planlanırken tren hattı, çıkarım hattından veri sapması tespit edildiğinde çalışacak şekilde ayarlanmıştır.
  7. Eğitim veya çıkarım hattında bir arıza olduğunda bildirimler SNS konusu aracılığıyla gönderilir.

Önkoşullar

Bu çözüm için aşağıdaki ön koşullara sahip olmanız gerekir:

  • Üç AWS hesabı (geliştirme, üretim ve merkezi model kayıt defteri hesapları)
  • Üç AWS hesabının her birinde bir SageMaker Studio etki alanı kuruludur (bkz. Amazon SageMaker Studio'da Yerleşik veya videoyu izleyin Amazon SageMaker Studio'ya Hızla Başlayın kurulum talimatları için)
  • AWS'de yönetici ayrıcalıkları yüklü olan Jenkins (Jenkins 2.401.1 kullanıyoruz)
  • Jenkins sunucusunda yüklü Terraform sürüm 1.5.5 veya üzeri

Bu yazı için şu şekilde çalışıyoruz: us-east-1 Çözümün dağıtılacağı bölge.

Geliştirme ve üretim hesaplarında KMS anahtarlarını sağlayın

İlk adımımız yaratmak AWS Anahtar Yönetim Hizmeti (AWS KMS) geliştirme ve üretim hesaplarındaki anahtarlar.

Geliştirici hesabında bir KMS anahtarı oluşturun ve ürün hesabına erişim izni verin

Geliştirici hesabında bir KMS anahtarı oluşturmak için aşağıdaki adımları tamamlayın:

  • AWS KMS konsolunda şunu seçin: Müşteri tarafından yönetilen anahtarlar Gezinti bölmesinde.
  • Klinik Anahtar oluştur.
  • İçin Anahtar türüseçin Simetrik.
  • İçin Anahtar kullanımseçin Şifrele ve şifresini çöz.
  • Klinik Sonraki.
    kms anahtarını yapılandır
  • Üretim hesabının, geliştirici hesabında sağlanan KMS anahtarına erişmesine izin vermek için üretim hesap numarasını girin. Bu gerekli bir adımdır çünkü model, geliştirici hesabında ilk kez eğitildiğinde model yapıları, merkezi model kayıt defteri hesabındaki S3 klasörüne yazılmadan önce KMS anahtarıyla şifrelenir. Model yapıtlarının şifresini çözmek ve çıkarım hattını çalıştırmak için üretim hesabının KMS anahtarına erişmesi gerekiyor.
  • Klinik Sonraki ve anahtarınızı oluşturmayı tamamlayın.
    anahtar oluşturmayı bitir

Anahtar sağlandıktan sonra AWS KMS konsolunda görünür olmalıdır.

konsoldaki kms tuşu

Ürün hesabında bir KMS anahtarı oluşturun

Ürün hesabında müşteri tarafından yönetilen bir KMS anahtarı oluşturmak için önceki bölümdeki aynı adımları izleyin. KMS anahtarını başka bir hesapla paylaşma adımını atlayabilirsiniz.

Merkezi model kayıt defteri hesabında bir model yapıtları S3 paketi ayarlama

Dizeyle seçtiğiniz bir S3 paketini oluşturun sagemaker merkezi model kayıt defteri hesabındaki paket adının bir parçası olarak adlandırma kuralında ve S3 klasöründeki paket politikasını güncelleyerek hem geliştirme hem de üretim hesaplarından model yapıtlarını S3 klasörüne okuma ve yazma izinleri verin.

Aşağıdaki kod, S3 paketinde güncellenecek paket politikasıdır:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AddPerm", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<dev-account-id>:root" }, "Action": [ "s3:PutObject", "s3:PutObjectAcl", "s3:GetObject", "s3:GetObjectVersion" ], "Resource": "arn:aws:s3:::<s3-bucket-in-central-model-registry-account>/*" }, { "Sid": "AddPerm1", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<dev-account-id>:root" }, "Action": "s3:ListBucket", "Resource": [ "arn:aws:s3:::<s3-bucket-in-central-model-registry-account>", "arn:aws:s3:::<s3-bucket-in-central-model-registry-account>/*" ] }, { "Sid": "AddPerm2", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<prod-account-id>:root" }, "Action": [ "s3:PutObject", "s3:PutObjectAcl", "s3:GetObject", "s3:GetObjectVersion" ], "Resource": "arn:aws:s3:::<s3-bucket-in-central-model-registry-account>/*" }, { "Sid": "AddPerm3", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<prod-account-id>:root" }, "Action": "s3:ListBucket", "Resource": [ "arn:aws:s3:::<s3-bucket-in-central-model-registry-account>", "arn:aws:s3:::<s3-bucket-in-central-model-registry-account>/*" ] } ]
}

AWS hesaplarınızda IAM rollerini ayarlayın

Bir sonraki adım kurulumdur AWS Kimlik ve Erişim Yönetimi AWS hesaplarınızda izinlere sahip (IAM) rolleri AWS Lambda, SageMaker ve Jenkins.

Lambda yürütme rolü

Kurmak Lambda yürütme rolleri bir parçası olarak çalıştırılan Lambda işlevi tarafından kullanılacak olan geliştirme ve üretim hesaplarında SageMaker Boru Hatları Lambda adımı. Bu adım, çıkarımların oluşturulduğu en son onaylanmış modeli getirmek için çıkarım hattından çalıştırılacaktır. Adlandırma kuralıyla geliştirme ve üretim hesaplarında IAM rolleri oluşturun arn:aws:iam::<account-id>:role/lambda-sagemaker-role ve aşağıdaki IAM politikalarını ekleyin:

  • Politika 1 – Adlandırılmış bir satır içi politika oluşturun cross-account-model-registry-accessMerkezi hesaptaki model kaydında ayarlanan model paketine erişim sağlayan:
    { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "sagemaker:ListModelPackages", "Resource": "arn:aws:sagemaker:us-east-1:<central-model-registry-account-id>:model-package/mammo-severity-model-package/*" }, { "Sid": "VisualEditor1", "Effect": "Allow", "Action": "sagemaker:DescribeModelPackageGroup", "Resource": "arn:aws:sagemaker:us-east-1:<central-model-registry-account-id>:model-package-group/mammo-severity-model-package" } ]
    }

  • Politika 2 - Eklemek AmazonSageMakerTam Erişimbir AWS tarafından yönetilen politika Bu, SageMaker'a tam erişim sağlar. Ayrıca aşağıdakiler gibi ilgili hizmetlere seçmeli erişim sağlar: AWS Uygulama Otomatik ÖlçeklendirmeAmazon S3, Amazon Elastik Konteyner Kayıt Defteri (Amazon ECR) ve Amazon CloudWatch Günlükleri.
  • Politika 3 - Eklemek AWSLambda_FullAccessLambda, Lambda konsolu özellikleri ve diğer ilgili AWS hizmetlerine tam erişim sağlayan, AWS tarafından yönetilen bir politikadır.
  • Politika 4 – IAM rolü için aşağıdaki IAM güven politikasını kullanın:
    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "lambda.amazonaws.com", "sagemaker.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ]
    } 

SageMaker yürütme rolü

Geliştirici ve üretim hesaplarında kurulan SageMaker Studio etki alanlarının her birinin, şu adreste bulunabilecek ilişkili bir yürütme rolü olmalıdır: Etki alanı ayarları Aşağıdaki ekran görüntüsünde gösterildiği gibi alan adı ayrıntıları sayfasındaki sekmeyi tıklayın. Bu rol, SageMaker Studio etki alanında eğitim işlerini yürütmek, işleri işlemek ve daha fazlasını gerçekleştirmek için kullanılır.

sagemaker studio alan adı

Her iki hesapta da SageMaker yürütme rolüne aşağıdaki politikaları ekleyin:

  • Politika 1 – Adlandırılmış bir satır içi politika oluşturun cross-account-model-artifacts-s3-bucket-accessmodel yapıtlarını saklayan merkezi model kayıt defteri hesabındaki S3 klasörüne erişim sağlar:
    { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:GetObjectVersion" ], "Resource": "arn:aws:s3:::<s3-bucket-in-central-model-registry-account>/*" }, { "Sid": "VisualEditor1", "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::<s3-bucket-in-central-model-registry-account>", "arn:aws:s3:::<s3-bucket-in-central-model-registry-account>/*" ] } ]
    }
    

  • Politika 2 – Adlandırılmış bir satır içi politika oluşturun cross-account-model-registry-accessMerkezi model kayıt defteri hesabındaki model kayıt defterindeki model paketine erişim sağlayan:
    { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "sagemaker:CreateModelPackageGroup", "Resource": "arn:aws:sagemaker:us-east-1:<central-model-registry-account-id>:model-package-group/mammo-severity-model-package" } ]
    }
    

  • Politika 3 – Adlandırılmış bir satır içi politika oluşturun kms-key-access-policyönceki adımda oluşturulan KMS anahtarına erişim sağlar. Politikanın oluşturulduğu hesap kimliğini ve bu hesapta oluşturulan KMS anahtar kimliğini sağlayın.
    { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowUseOfKeyInThisAccount", "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "arn:aws:kms:us-east-1:<account-id>:key/<kms-key-id>" } ]
    }
    

  • Politika 4 - Eklemek AmazonSageMakerTam Erişimbir AWS tarafından yönetilen politika Bu, SageMaker'a tam erişim sağlar ve ilgili hizmetlere erişimi seçer.
  • Politika 5 - Eklemek AWSLambda_FullAccessLambda, Lambda konsolu özellikleri ve diğer ilgili AWS hizmetlerine tam erişim sağlayan, AWS tarafından yönetilen bir politikadır.
  • Politika 6 - Eklemek CloudWatchEventsFullAccessCloudWatch Events'e tam erişim sağlayan, AWS tarafından yönetilen bir politikadır.
  • Politika 7 – SageMaker yürütme IAM rolü için aşağıdaki IAM güven politikasını ekleyin:
    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "events.amazonaws.com", "sagemaker.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ]
    }
    

  • Politika 8 (ürün hesabındaki SageMaker yürütme rolüne özel) – Adlandırılmış bir satır içi politika oluşturun cross-account-kms-key-access-policygeliştirici hesabında oluşturulan KMS anahtarına erişim sağlar. Bu, çıkarım hattının merkezi model kayıt defteri hesabında depolanan model yapıtlarını okuması için gereklidir; burada model yapıtları, geliştirici hesabından modelin ilk sürümü oluşturulduğunda dev hesabındaki KMS anahtarı kullanılarak şifrelenir.
    { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowUseOfKeyInDevAccount", "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "arn:aws:kms:us-east-1:<dev-account-id>:key/<dev-kms-key-id>" } ]
    }
    

Hesaplar arası Jenkins rolü

Adı verilen bir IAM rolü oluşturun cross-account-jenkins-role Jenkins'in makine öğrenimi hatlarını ve ilgili altyapıyı üretim hesabına dağıtacağını varsayacak üretim hesabında.

Aşağıdaki yönetilen IAM politikalarını role ekleyin:

  • CloudWatchFullAccess
  • AmazonS3FullAccess
  • AmazonSNSFullAccess
  • AmazonSageMakerFullAccess
  • AmazonEventBridgeFullAccess
  • AWSLambda_FullAccess

Jenkins sunucusunu barındıran AWS hesabına izin vermek için roldeki güven ilişkisini güncelleyin:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com", "AWS": "arn:aws:iam::<jenkins-account-id>:root" }, "Action": "sts:AssumeRole", "Condition": {} } ]
}

Jenkins sunucusuyla ilişkili IAM rolündeki izinleri güncelleyin

Jenkins'in AWS'de kurulduğunu varsayarak Jenkins ile ilişkili IAM rolünü güncelleyerek aşağıdaki politikaları ekleyin; bu, Jenkins'in kaynakları üretim hesabına dağıtması için erişim sağlayacaktır:

  • Politika 1 – Aşağıdaki satır içi politikayı oluşturun: assume-production-role-policy:
    { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::<prod-account-id>:role/cross-account-jenkins-role" } ]
    }
    

  • Politika 2 – Takın CloudWatchFullAccess yönetilen IAM politikası.

Model paket grubunu merkezi model kayıt defteri hesabında ayarlayın

Merkezi model kayıt defteri hesabındaki SageMaker Studio etki alanından, adı verilen bir model paket grubu oluşturun. mammo-severity-model-package aşağıdaki kod parçacığını kullanarak (bir Jupyter not defteri kullanarak çalıştırabilirsiniz):

import boto3 model_package_group_name = "mammo-severity-model-package"
sm_client = boto3.Session().client("sagemaker") create_model_package_group_response = sm_client.create_model_package_group( ModelPackageGroupName=model_package_group_name, ModelPackageGroupDescription="Cross account model package group for mammo severity model", ) print('ModelPackageGroup Arn : {}'.format(create_model_package_group_response['ModelPackageGroupArn']))

Geliştirici ve üretim hesaplarındaki IAM rolleri için model paketine erişimi ayarlayın

Model paketi içindeki model sürümlerini kaydedebilmeniz için geliştirme ve üretim hesaplarında oluşturulan SageMaker yürütme rollerine erişim sağlayın mammo-severity-model-package her iki hesaptan da merkezi model kaydında. Merkezi model kayıt defteri hesabındaki SageMaker Studio etki alanından bir Jupyter not defterinde aşağıdaki kodu çalıştırın:

import json import boto3 model_package_group_name = "mammo-severity-model-package"
# Convert the policy from JSON dict to string
model_package_group_policy = dict(
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AddPermModelPackageGroupCrossAccount", "Effect": "Allow", "Principal": { "AWS": ["arn:aws:iam::<dev-account-id>:root", "arn:aws:iam::<prod-account-id>:root"] }, "Action": [ "sagemaker:DescribeModelPackageGroup" ], "Resource": "arn:aws:sagemaker:us-east-1:<central-model-registry-account>:model-package-group/mammo-severity-model-package" }, { "Sid": "AddPermModelPackageVersionCrossAccount", "Effect": "Allow", "Principal": { "AWS": ["arn:aws:iam::<dev-account-id>:root", "arn:aws:iam::<prod-account-id>:root"] }, "Action": [ "sagemaker:DescribeModelPackage", "sagemaker:ListModelPackages", "sagemaker:UpdateModelPackage", "sagemaker:CreateModelPackage", "sagemaker:CreateModel" ], "Resource": "arn:aws:sagemaker:us-east-1:<central-model-registry-account>:model-package/mammo-severity-model-package/*" } ]
})
model_package_group_policy = json.dumps(model_package_group_policy)
# Add Policy to the model package group
sm_client = boto3.Session().client("sagemaker")
response = sm_client.put_model_package_group_policy( ModelPackageGroupName = model_package_group_name, ResourcePolicy = model_package_group_policy)

Jenkins'i kurun

Bu bölümde Jenkins'i, Jenkins CI/CD işlem hattı aracılığıyla prod hesabında ML işlem hatlarını ve karşılık gelen Terraform altyapısını oluşturacak şekilde yapılandırıyoruz.

  • CloudWatch konsolunda adlı bir günlük grubu oluşturun. jenkins-log Jenkins'in CI/CD hattından günlükleri aktaracağı üretim hesabında. Günlük grubu, Jenkins sunucusunun kurulduğu Bölgeyle aynı bölgede oluşturulmalıdır.
  • Aşağıdaki eklentileri yükleyin Jenkins sunucunuzda:
    1. İş DSL'i
    2. Git
    3. Boru Hattı
    4. İşlem Hattı: AWS Adımları
    5. Boru Hattı Yardımcı Programı Adımları
  • Hesaplar arası IAM rolünü kullanarak Jenkins'te AWS kimlik bilgilerini ayarlayın (cross-account-jenkins-role) prod hesabında sağlanmıştır.
  • İçin sistem Yapılandırması, seçmek AWS.
  • Daha önce oluşturduğunuz kimlik bilgilerini ve CloudWatch günlük grubunu sağlayın.
  • Jenkins'te GitHub kimlik bilgilerini ayarlayın.
  • Jenkins'te yeni bir proje oluşturun.
  • Bir proje adı girin ve seçin Boru Hattı.
  • Üzerinde genel sekmesini seçin GitHub projesi ve çatala girin GitHub deposu URL.
  • seç Bu proje parametreleştirilmiş.
  • Üzerinde Parametre Ekle menü seç Dize Parametresi.
  • İçin Name, girmek prodAccount.
  • İçin Varsayılan değer, ürün hesabı kimliğini girin.
  • Altında Gelişmiş Proje Seçenekleri, Için Tanımseçin SCM'den boru hattı betiği.
  • İçin SCM, seçmek Git.
  • İçin Depo URL'si, çatalı girin GitHub deposu URL.
  • İçin Tanıtım, Jenkins'te kayıtlı GitHub kimlik bilgilerini girin.
  • Keşfet main içinde İnşa edilecek şubeler CI/CD hattının tetikleneceği temel alan bölüm.
  • İçin Komut Dosyası Yolu, girmek Jenkinsfile.
  • Klinik İndirim.

Jenkins işlem hattı oluşturulmalı ve kontrol panelinizde görünür olmalıdır.

S3 paketlerini sağlayın, verileri toplayın ve hazırlayın

S3 klasörlerinizi ve verilerinizi ayarlamak için aşağıdaki adımları tamamlayın:

  • Dizeyle seçtiğiniz bir S3 paketini oluşturun sagemaker veri kümelerini ve model yapıtlarını depolamak için hem geliştirme hem de üretim hesaplarında paket adının bir parçası olarak adlandırma kuralında.
  • Ürün hesabında Terraform durumunu korumak için bir S3 klasörü oluşturun.
  • Herkese açık olanı indirin ve kaydedin UCI Mamografi Kitlesi veri kümesini geliştirici hesabında daha önce oluşturduğunuz S3 klasörüne aktarın.
  • Çatallayın ve klonlayın GitHub deposu geliştirici hesabındaki SageMaker Studio etki alanı içinde. Depo aşağıdaki klasör yapısına sahiptir:
    • /environments – Ürün ortamı için yapılandırma komut dosyası
    • /mlops-infra – Terraform kodunu kullanarak AWS hizmetlerini dağıtmaya yönelik kod
    • /boru hatları – SageMaker ardışık düzen bileşenleri için kod
    • Jenkins dosyası – Jenkins CI/CD hattı aracılığıyla dağıtılacak komut dosyası
    • kurulum.py – Gerekli Python modüllerini kurmak ve run-pipeline komutunu oluşturmak için gereklidir
    • mamografi-şiddet-modelleme.ipynb – Makine öğrenimi iş akışını oluşturmanıza ve çalıştırmanıza olanak tanır
  • Klonlanmış GitHub veri havuzu klasöründe veri adlı bir klasör oluşturun ve herkese açık olanın bir kopyasını kaydedin. UCI Mamografi Kitlesi Veri kümesi.
  • Jupyter not defterini takip edin mammography-severity-modeling.ipynb.
  • Veri kümesini önceden işlemek ve geliştirici hesabındaki S3 klasörüne yüklemek için not defterinde aşağıdaki kodu çalıştırın:
    import boto3
    import sagemaker
    import numpy as np
    import pandas as pd
    from sklearn.compose import ColumnTransformer
    from sklearn.impute import SimpleImputer
    from sklearn.pipeline import Pipeline
    from sklearn.preprocessing import StandardScaler, OneHotEncoder #Replace the values based on the resoures created
    default_bucket = "<s3-bucket-in-dev-account>"
    model_artifacts_bucket = "<s3-bucket-in-central-model-registry-account>"
    region = "us-east-1"
    model_name = "mammography-severity-model"
    role = sagemaker.get_execution_role()
    lambda_role = "arn:aws:iam::<dev-account-id>:role/lambda-sagemaker-role"
    kms_key = "arn:aws:kms:us-east-1:<dev-account-id>:key/<kms-key-id-in-dev-account>"
    model_package_group_name="arn:aws:sagemaker:us-east-1:<central-model-registry-account-id>:model-package-group/mammo-severity-model-package" feature_columns_names = [ 'BIRADS', 'Age', 'Shape', 'Margin', 'Density',
    ]
    feature_columns_dtype = { 'BIRADS': np.float64, 'Age': np.float64, 'Shape': np.float64, 'Margin': np.float64, 'Density': np.float64,
    } # read raw dataset
    mammographic_data = pd.read_csv("data/mammographic_masses.data",header=None) # split data into batch and raw datasets
    batch_df =mammographic_data.sample(frac=0.05,random_state=200)
    raw_df =mammographic_data.drop(batch_df.index) # Split the raw datasets to two parts, one of which will be used to train
    #the model initially and then other dataset will be leveraged when #retraining the model
    train_dataset_part2 =raw_df.sample(frac=0.1,random_state=200)
    train_dataset_part1 =raw_df.drop(train_dataset_part2.index) # save the train datasets train_dataset_part1.to_csv("data/mammo-train-dataset-part1.csv",index=False)
    train_dataset_part2.to_csv("data/mammo-train-dataset-part2.csv",index=False) # remove label column from the batch dataset which will be used to generate inferences
    batch_df.drop(5,axis=1,inplace=True) # create a copy of the batch dataset batch_modified_df = batch_df def preprocess_batch_data(feature_columns_names,feature_columns_dtype,batch_df): batch_df.replace("?", "NaN", inplace = True) batch_df.columns = feature_columns_names batch_df = batch_df.astype(feature_columns_dtype) numeric_transformer = Pipeline( steps=[("imputer", SimpleImputer(strategy="median"))] ) numeric_features = list(feature_columns_names) preprocess = ColumnTransformer( transformers=[ ("num", numeric_transformer, numeric_features) ] ) batch_df = preprocess.fit_transform(batch_df) return batch_df # save the batch dataset file
    batch_df = preprocess_batch_data(feature_columns_names,feature_columns_dtype,batch_df)
    pd.DataFrame(batch_df).to_csv("data/mammo-batch-dataset.csv", header=False, index=False) # modify batch dataset to introduce missing values
    batch_modified_df.replace("?", "NaN", inplace = True)
    batch_modified_df.columns = feature_columns_names
    batch_modified_df = batch_modified_df.astype(feature_columns_dtype) # save the batch dataset with outliers file
    batch_modified_df.to_csv("data/mammo-batch-dataset-outliers.csv",index=False)
    

Kod aşağıdaki veri kümelerini oluşturacaktır:

    • veri/ mammo-train-dataset-part1.csv – Modelin ilk versiyonunu eğitmek için kullanılacaktır.
    • veri/ mammo-train-dataset-part2.csv  – Mammo-train-dataset-part1.csv veri kümesiyle birlikte modelin ikinci sürümünü eğitmek için kullanılacaktır.
    • data/mammo-batch-dataset.csv – Çıkarımlar oluşturmak için kullanılacaktır.
    • data/mammo-batch-dataset-outliers.csv – Çıkarım hattını başarısızlığa uğratmak için veri kümesine aykırı değerler ekleyecektir. Bu, modelin otomatik olarak yeniden eğitilmesini tetiklemek için modeli test etmemizi sağlayacaktır.
  • Veri kümesini yükleyin mammo-train-dataset-part1.csv önek altında mammography-severity-model/train-datasetve veri kümelerini yükleyin mammo-batch-dataset.csv ve mammo-batch-dataset-outliers.csv önek için mammography-severity-model/batch-dataset geliştirici hesabında oluşturulan S3 klasöründen:
    import boto3
    s3_client = boto3.resource('s3')
    s3_client.Bucket(default_bucket).upload_file("data/mammo-train-dataset-part1.csv","mammography-severity-model/data/train-dataset/mammo-train-dataset-part1.csv")
    s3_client.Bucket(default_bucket).upload_file("data/mammo-batch-dataset.csv","mammography-severity-model/data/batch-dataset/mammo-batch-dataset.csv")
    s3_client.Bucket(default_bucket).upload_file("data/mammo-batch-dataset-outliers.csv","mammography-severity-model/data/batch-dataset/mammo-batch-dataset-outliers.csv") 

  • Veri kümelerini yükleyin mammo-train-dataset-part1.csv ve mammo-train-dataset-part2.csv önek altında mammography-severity-model/train-dataset Amazon S3 konsolu aracılığıyla prod hesabında oluşturulan S3 klasörüne.
  • Veri kümelerini yükleyin mammo-batch-dataset.csv ve mammo-batch-dataset-outliers.csv önek için mammography-severity-model/batch-dataset ürün hesabındaki S3 paketinin.

Tren boru hattını çalıştırın

Altında <project-name>/pipelines/train, aşağıdaki Python betiklerini görebilirsiniz:

  • scriptler/raw_preprocess.py – Özellik mühendisliği için SageMaker Processing ile entegre olur
  • scripts/evaluate_model.py – Bu durumda model metriklerinin hesaplanmasına izin verir auc_score
  • train_pipeline.py – Model eğitim hattının kodunu içerir

Aşağıdaki adımları tamamlayın:

  • Komut dosyalarını Amazon S3'e yükleyin:
    import boto3
    s3_client = boto3.resource('s3')
    s3_client.Bucket(default_bucket).upload_file("pipelines/train/scripts/raw_preprocess.py","mammography-severity-model/scripts/raw_preprocess.py")
    s3_client.Bucket(default_bucket).upload_file("pipelines/train/scripts/evaluate_model.py","mammography-severity-model/scripts/evaluate_model.py")

  • Tren boru hattı örneğini alın:
    from pipelines.train.train_pipeline import get_pipeline train_pipeline = get_pipeline( region=region, role=role, default_bucket=default_bucket, model_artifacts_bucket=model_artifacts_bucket, model_name = model_name, kms_key = kms_key, model_package_group_name= model_package_group_name, pipeline_name="mammo-severity-train-pipeline", base_job_prefix="mammo-severity", ) train_pipeline.definition()
    

  • Tren boru hattını gönderin ve çalıştırın:
    train_pipeline.upsert(role_arn=role)
    train_execution = train_pipeline.start()
    

Aşağıdaki şekil eğitim hattının başarılı bir şekilde çalıştırıldığını göstermektedir. İşlem hattındaki son adım, modeli merkezi model kayıt defteri hesabına kaydeder.

Merkezi model kaydındaki modeli onaylayın

Merkezi model kayıt defteri hesabında oturum açın ve SageMaker Studio etki alanı içindeki SageMaker model kayıt defterine erişin. Model sürümü durumunu Onaylandı olarak değiştirin.

Onaylandıktan sonra model versiyonunda durum değiştirilmelidir.

Çıkarım hattını çalıştırın (İsteğe bağlı)

Bu adım gerekli değildir ancak yine de geliştirici hesabında tahminler oluşturmak için çıkarım hattını çalıştırabilirsiniz.

Altında <project-name>/pipelines/inference, aşağıdaki Python betiklerini görebilirsiniz:

  • scripts/lambda_helper.py – SageMaker Pipelines Lambda adımını kullanarak merkezi model kayıt hesabından en son onaylanmış model sürümünü çeker
  • çıkarım_pipeline.py – Model çıkarım hattının kodunu içerir

Aşağıdaki adımları tamamlayın:

  • Komut dosyasını S3 klasörüne yükleyin:
    import boto3
    s3_client = boto3.resource('s3')
    s3_client.Bucket(default_bucket).upload_file("pipelines/inference/scripts/lambda_helper.py","mammography-severity-model/scripts/lambda_helper.py")
    

  • Normal toplu veri kümesini kullanarak çıkarım hattı örneğini alın:
    from pipelines.inference.inference_pipeline import get_pipeline inference_pipeline = get_pipeline( region=region, role=role, lambda_role = lambda_role, default_bucket=default_bucket, kms_key=kms_key, model_name = model_name, model_package_group_name= model_package_group_name, pipeline_name="mammo-severity-inference-pipeline", batch_dataset_filename = "mammo-batch-dataset" )
    

  • Çıkarım hattını gönderin ve çalıştırın:
    inference_pipeline.upsert(role_arn=role)
    inference_execution = inference_pipeline.start()
    

Aşağıdaki şekil çıkarım hattının başarılı bir şekilde çalıştırılmasını göstermektedir. İşlem hattındaki son adım tahminleri oluşturur ve bunları S3 klasöründe saklar. Kullanırız MonitorBatchTransformStep toplu dönüştürme işine girişleri izlemek için. Herhangi bir aykırı değer varsa, çıkarım hattı başarısız bir duruma girer.

Jenkins boru hattını çalıştırın

The environment/ GitHub deposundaki klasör, prod hesabının yapılandırma komut dosyasını içerir. Jenkins ardışık düzenini tetiklemek için aşağıdaki adımları tamamlayın:

  • Yapılandırma komut dosyasını güncelleyin prod.tfvars.json önceki adımlarda oluşturulan kaynaklara göre:
    { "env_group": "prod", "aws_region": "us-east-1", "event_bus_name": "default", "pipelines_alert_topic_name": "mammography-model-notification", "email":"admin@org.com", "lambda_role":"arn:aws:iam::<prod-account-id>:role/lambda-sagemaker-role", "default_bucket":"<s3-bucket-in-prod-account>", "model_artifacts_bucket": "<s3-bucket-in-central-model-registry-account>", "kms_key": "arn:aws:kms:us-east-1:<prod-account-id>:key/<kms-key-id-in-prod-account>", "model_name": "mammography-severity-model", "model_package_group_name":"arn:aws:sagemaker:us-east-1:<central-model-registry-account-id>:model-package-group/mammo-severity-model-package", "train_pipeline_name":"mammo-severity-train-pipeline", "inference_pipeline_name":"mammo-severity-inference-pipeline", "batch_dataset_filename":"mammo-batch-dataset", "terraform_state_bucket":"<s3-bucket-terraform-state-in-prod-account>", "train_pipeline": { "name": "mammo-severity-train-pipeline", "arn": "arn:aws:sagemaker:us-east-1:<prod-account-id>:pipeline/mammo-severity-train-pipeline", "role_arn": "arn:aws:iam::<prod-account-id>:role/service-role/<sagemaker-execution-role-in-prod-account>" }, "inference_pipeline": { "name": "mammo-severity-inference-pipeline", "arn": "arn:aws:sagemaker:us-east-1:<prod-account-id>:pipeline/mammo-severity-inference-pipeline", "cron_schedule": "cron(0 23 * * ? *)", "role_arn": "arn:aws:iam::<prod-account-id>:role/service-role/<sagemaker-execution-role-in-prod-account>" } }
    

  • Güncellendikten sonra kodu çatallı GitHub deposuna gönderin ve kodu ana dalla birleştirin.
  • Jenkins kullanıcı arayüzüne gidin, seçin Parametrelerle Oluşturmave önceki adımlarda oluşturulan CI/CD ardışık düzenini tetikleyin.

Derleme tamamlandığında ve başarılı olduğunda, prod hesabında oturum açabilir ve SageMaker Studio etki alanı içindeki eğitim ve çıkarım hatlarını görebilirsiniz.

Ek olarak, Prod hesabındaki EventBridge konsolunda üç EventBridge kuralı göreceksiniz:

  • Çıkarım hattını zamanlayın
  • Tren boru hattında arıza bildirimi gönderin
  • Çıkarım hattı tren hattını tetikleyemediğinde bir bildirim gönderin

Son olarak Amazon SNS konsolunda e-posta yoluyla bildirim gönderen bir SNS bildirim konusu göreceksiniz. Bu bildirim e-postalarının kabulünü onaylamanızı isteyen bir e-posta alacaksınız.

Aykırı değerler içermeyen bir toplu veri kümesi kullanarak çıkarım hattını test edin

Çıkarım hattının üretim hesabında beklendiği gibi çalışıp çalışmadığını test etmek için üretim hesabında oturum açabilir ve toplu veri kümesini aykırı değerler olmadan kullanarak çıkarım hattını tetikleyebiliriz.

İşlem hattını, üretim hesabının SageMaker Studio etki alanındaki SageMaker Pipelines konsolu aracılığıyla çalıştırın; transform_input aykırı değerler olmadan veri kümesinin S3 URI'si olacaktır (s3://<s3-bucket-in-prod-account>/mammography-severity-model/data/mammo-batch-dataset.csv).

Çıkarım hattı başarılı olur ve tahminleri S3 klasörüne geri yazar.

Aykırı değerlere sahip bir toplu veri kümesi kullanarak çıkarım hattını test edin

Otomatik yeniden eğitim mekanizmasının beklendiği gibi çalışıp çalışmadığını kontrol etmek için toplu veri kümesini aykırı değerlerle kullanarak çıkarım hattını çalıştırabilirsiniz.

İşlem hattını, üretim hesabının SageMaker Studio etki alanındaki SageMaker Pipelines konsolu aracılığıyla çalıştırın; transform_input aykırı değerlere sahip veri kümesinin S3 URI'si olacaktır (s3://<s3-bucket-in-prod-account>/mammography-severity-model/data/mammo-batch-dataset-outliers.csv).

Çıkarım hattı beklendiği gibi başarısız olur, bu da EventBridge kuralını tetikler, bu da tren hattını tetikler.

Birkaç dakika sonra, SageMaker Pipelines konsolunda iki farklı tren veri kümesini (mammo-train-dataset-part1.csv ve mammo-train-dataset-part2.csv) modeli yeniden eğitmek için S3 klasörüne yüklendi.

Ayrıca SNS konusuna abone olunan e-postaya gönderilen bir bildirim göreceksiniz.

Güncellenen model sürümünü kullanmak için merkezi model kayıt defteri hesabında oturum açın ve programlanan EventBridge kuralı aracılığıyla tetiklenen çıkarım hattının bir sonraki çalıştırması sırasında alınacak model sürümünü onaylayın.

Eğitim ve çıkarım ardışık düzenleri statik bir veri kümesi URL'si kullansa da, modeli yeniden eğitmek ve gerçek dünya senaryosunda tahminler oluşturmak için güncellenmiş veri kümelerini kullanmak amacıyla veri kümesi URL'sinin eğitim ve çıkarım ardışık düzenlerine dinamik değişkenler olarak geçirilmesini sağlayabilirsiniz.

Temizlemek

Gelecekte ücret alınmasını önlemek için aşağıdaki adımları tamamlayın:

  • SageMaker Studio etki alanını tüm AWS hesaplarından kaldırın.
  • S3 paketleri, IAM rolleri, EventBridge kuralları ve prod hesabında Terraform aracılığıyla ayarlanan SNS konusu da dahil olmak üzere SageMaker dışında oluşturulan tüm kaynakları silin.
  • Hesaplar arasında oluşturulan SageMaker işlem hatlarını şunu kullanarak silin: AWS Komut Satırı Arayüzü (AWS CLI'si).

Sonuç

Kuruluşların, farklı işlevsel alanlar ve ekipler arasında işbirliğini mümkün kılmak için genellikle kuruluş çapındaki araç setleriyle uyum sağlaması gerekir. Bu işbirliği, MLOps platformunuzun gelişen iş ihtiyaçlarına uyum sağlayabilmesini sağlar ve ML'nin ekipler arasında benimsenmesini hızlandırır. Bu gönderide, Amazon SageMaker Model Monitor ile otomatik model yeniden eğitimini, toplu çıkarımı ve izlemeyi, SageMaker Model Registry ile model sürüm oluşturmayı ve ML kodunun ve ardışık düzenlerin ortamlar genelinde tanıtılmasını sağlamak için çoklu ortam kurulumunda bir MLOps çerçevesinin nasıl oluşturulacağı açıklanmaktadır. CI/CD boru hattı. Bu çözümü AWS hizmetleri ve üçüncü taraf araç setlerinin bir kombinasyonunu kullanarak sergiledik. Bu çözümün uygulanmasına ilişkin talimatlar için bkz. GitHub deposu. Bu çözümü kendi veri kaynaklarınızı ve modelleme çerçevelerinizi de getirerek genişletebilirsiniz.


Yazarlar Hakkında

Gayatri Ganakota AWS Professional Services ile Kıdemli Makine Öğrenimi Mühendisidir. Çeşitli alanlarda AI/ML çözümlerini geliştirme, dağıtma ve açıklama konusunda tutkulu. Bu görevden önce, finans ve perakende alanındaki en iyi küresel firmalarda veri bilimcisi ve makine öğrenimi mühendisi olarak birden fazla girişimi yönetti. Colorado Üniversitesi, Boulder'dan Veri Bilimi alanında Bilgisayar Bilimi alanında yüksek lisans derecesine sahiptir.

Sunita Koppar AWS Profesyonel Hizmetlerinde Kıdemli Veri Gölü Mimarıdır. Büyük verileri işleyen ve uzun vadeli ölçeklenebilir çözümler sunan müşterilerin sıkıntılı noktalarını çözme konusunda tutkuludur. Bu görevinden önce internet, telekom ve otomotiv alanlarında ürünler geliştirmiş ve bir AWS müşterisi olmuştur. Riverside'daki Kaliforniya Üniversitesi'nden Veri Bilimi alanında yüksek lisans derecesine sahiptir.

Saswata Koşusu AWS Profesyonel Hizmetlerinde DevOps Danışmanıdır. Sağlık ve yaşam bilimleri, havacılık ve üretim alanlarındaki müşterilerle çalıştı. Otomasyonla ilgili her konuda tutkuludur ve AWS'de kurumsal ölçekte müşteri çözümleri tasarlama ve oluşturma konusunda kapsamlı deneyime sahiptir. İş dışında fotoğrafçılık ve gün doğumunu yakalama tutkusunu sürdürüyor.

spot_img

En Son İstihbarat

spot_img