Δημιουργήστε μια ροή εργασίας MLOps μεταξύ λογαριασμών χρησιμοποιώντας το μητρώο μοντέλου Amazon SageMaker PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

Δημιουργήστε μια ροή εργασίας MLOps μεταξύ λογαριασμών χρησιμοποιώντας το μητρώο μοντέλων του Amazon SageMaker

Ένας καλά σχεδιασμένος αγωγός CI/CD είναι απαραίτητος για την αποτελεσματική κλιμάκωση οποιασδήποτε ροής εργασιών ανάπτυξης λογισμικού. Κατά το σχεδιασμό αγωγών παραγωγής CI/CD, η AWS συνιστά τη μόχλευση πολλαπλών λογαριασμών για την απομόνωση πόρων, τον περιορισμό απειλών ασφαλείας και την απλούστευση των γραμμών χρέωσης και επιστήμης δεδομένων δεν διαφέρουν. Στην AWS, συνεχίζουμε να καινοτομούμε για να απλοποιήσουμε τη ροή εργασίας MLOps.

Σε αυτήν την ανάρτηση, συζητάμε μερικές από τις νεότερες δυνατότητες μεταξύ λογαριασμών Amazon Sage Maker που σας επιτρέπουν να μοιράζεστε και να διαχειρίζεστε καλύτερα ομάδες μοντέλων καθώς και να διαχειρίζεστε εκδόσεις μοντέλων. Για να ακολουθήσετε ένα παράδειγμα δομής λογαριασμού βέλτιστες πρακτικές της οργανωτικής μονάδας για να φιλοξενήσετε μοντέλα που χρησιμοποιούν τελικά σημεία SageMaker σε όλους τους λογαριασμούς, ανατρέξτε στο Ενορχηστρωτής φόρτου εργασίας MLOps.

Επισκόπηση λύσεων

Το παρακάτω διάγραμμα απεικονίζει την κοινόχρηστη αρχιτεκτονική μητρώου μοντέλων μας.

Μερικά πράγματα που πρέπει να σημειώσετε στην προηγούμενη αρχιτεκτονική:

Τα παρακάτω βήματα αντιστοιχούν στο διάγραμμα:

  1. Ένας επιστήμονας δεδομένων καταχωρεί ένα μοντέλο από τον λογαριασμό επιστήμης δεδομένων στο μητρώο μοντέλων κοινόχρηστων υπηρεσιών SageMaker σε ένα PendingManualApproval κατάσταση. Το τεχνούργημα μοντέλου δημιουργείται στον λογαριασμό κοινόχρηστων υπηρεσιών Απλή υπηρεσία αποθήκευσης Amazon (Amazon S3) κάδος.
  2. Κατά την εγγραφή μιας νέας έκδοσης μοντέλου, κάποιος που έχει την εξουσία να εγκρίνει το μοντέλο με βάση τις μετρήσεις θα πρέπει να εγκρίνει ή να απορρίψει το μοντέλο.
  3. Αφού εγκριθεί το μοντέλο, ο αγωγός CI/CD στον λογαριασμό ανάπτυξης βρίσκεται πυροδοτήθηκε να αναπτυχθεί τις λεπτομέρειες του ενημερωμένου μοντέλου στον λογαριασμό QA και ενημερώστε το στάδιο ως QA.
  4. Αφού περάσετε τη διαδικασία δοκιμής, μπορείτε είτε να επιλέξετε να έχετε ένα βήμα μη αυτόματης έγκρισης στη διαδικασία CI/CD σας είτε να αναθέσετε τη διοχέτευση CI/CD να αναπτύξει απευθείας το μοντέλο στην παραγωγή και να ενημερώσετε το στάδιο ως Παραγωγή.
  5. Το περιβάλλον παραγωγής αναφέρεται στο εγκεκριμένο μοντέλο και κωδικό, ίσως κάνοντας ένα Δοκιμή A/B στην παραγωγή. Σε περίπτωση ελέγχου ή οποιουδήποτε προβλήματος με το μοντέλο, μπορείτε να χρησιμοποιήσετε Amazon SageMaker ML Lineage Tracking. Δημιουργεί και αποθηκεύει πληροφορίες σχετικά με τα βήματα μιας ροής εργασιών μηχανικής μάθησης (ML) από την προετοιμασία δεδομένων έως την ανάπτυξη του μοντέλου. Με τις πληροφορίες παρακολούθησης, μπορείτε να αναπαράγετε τα βήματα της ροής εργασιών, να παρακολουθείτε το μοντέλο και τη σειρά δεδομένων και να καθιερώνετε πρότυπα διακυβέρνησης και ελέγχου του μοντέλου.

Σε όλη τη διαδικασία, το κοινό μητρώο μοντέλων διατηρεί τις παλαιότερες εκδόσεις μοντέλων. Αυτό επιτρέπει στην ομάδα να επαναφέρει τις αλλαγές ή ακόμα και να φιλοξενήσει παραλλαγές παραγωγής.

Προϋποθέσεις

Βεβαιωθείτε ότι έχετε τις ακόλουθες προϋποθέσεις:

  • Προβλεπόμενη δομή πολλών λογαριασμών – Για οδηγίες, βλ Βέλτιστες πρακτικές για οργανωτικές μονάδες με οργανισμούς AWS. Για τους σκοπούς αυτού του ιστολογίου αξιοποιούμε τους ακόλουθους λογαριασμούς:
    • Λογαριασμός επιστήμης δεδομένων – Ένας λογαριασμός όπου οι επιστήμονες δεδομένων έχουν πρόσβαση στα δεδομένα εκπαίδευσης και δημιουργούν τα μοντέλα.
    • Λογαριασμός κοινόχρηστων υπηρεσιών – Ένας κεντρικός λογαριασμός για την αποθήκευση των τεχνουργημάτων του μοντέλου (όπως φαίνεται στο διάγραμμα αρχιτεκτονικής) για πρόσβαση στους διαφορετικούς λογαριασμούς φόρτου εργασίας.
    • Λογαριασμός ανάπτυξης – Ένας λογαριασμός υπεύθυνος για την ανάπτυξη αλλαγών στους διάφορους λογαριασμούς.
    • Λογαριασμοί φόρτου εργασίας – Αυτά είναι συνήθως περιβάλλοντα QA και prod όπου οι μηχανικοί λογισμικού είναι σε θέση να δημιουργήσουν εφαρμογές για την κατανάλωση του μοντέλου ML.
  • Ένας λογαριασμός ανάπτυξης με τα κατάλληλα δικαιώματα – Για περισσότερες πληροφορίες σχετικά με τις βέλτιστες πρακτικές με δομή OU πολλαπλών λογαριασμών, ανατρέξτε στο Αναπτύξεις OU. Αυτός ο λογαριασμός είναι υπεύθυνος για την κατεύθυνση των λογαριασμών φόρτου εργασίας στο επιθυμητό μοντέλο στο μητρώο μοντέλων του λογαριασμού κοινόχρηστων υπηρεσιών.

Καθορίστε πολιτικές μεταξύ λογαριασμών

Ακολουθώντας την αρχή του ελάχιστου προνομίου, πρώτα πρέπει να προσθέσουμε πολιτικές πόρων μεταξύ λογαριασμών στους πόρους κοινόχρηστων υπηρεσιών για να παραχωρήσουμε πρόσβαση από τους άλλους λογαριασμούς.

Επειδή τα τεχνουργήματα μοντέλων αποθηκεύονται στον κάδο S3 του λογαριασμού κοινόχρηστων υπηρεσιών, ο λογαριασμός επιστήμης δεδομένων χρειάζεται πρόσβαση ανάγνωσης/εγγραφής του Amazon S3 για να προωθήσει εκπαιδευμένα μοντέλα στο Amazon S3. Ο παρακάτω κώδικας απεικονίζει αυτήν την πολιτική, αλλά μην τον προσθέσετε ακόμα στον λογαριασμό κοινόχρηστων υπηρεσιών:

#Data Science account's policy to access Shared Services' S3 bucket
 {
    'Version': '2012-10-17',
    'Statement': [{
        'Sid': 'AddPerm',
        'Effect': 'Allow',
        'Principal': {
            'AWS': 'arn:aws:iam:::root'
        }, 
        "Action": [ 
            's3:PutObject', 
            's3:PutObjectAcl',
            's3:GetObject', 
            's3:GetObjectVersion'
        ], #read/write
        'Resource': 'arn:aws:s3:::/*'
    }]
}

Ο λογαριασμός ανάπτυξης χρειάζεται μόνο να έχει πρόσβαση ανάγνωσης στον κάδο S3, ώστε να μπορεί να χρησιμοποιήσει τα τεχνουργήματα του μοντέλου για την ανάπτυξη στα τελικά σημεία του SageMaker. Πρέπει επίσης να επισυνάψουμε την ακόλουθη πολιτική στον κάδο κοινόχρηστων υπηρεσιών S3:

#Deployment account's policy to access Shared Services' S3 bucket
 {
    'Version': '2012-10-17',
    'Statement': [{
        'Sid': 'AddPerm',
        'Effect': 'Allow',
        'Principal': {
            'AWS': 'arn:aws:iam:::root'
        },
        'Action': [ 
            's3:GetObject', 
            's3:GetObjectVersion'
        ], #read
        'Resource': 'arn:aws:s3:::/*'
    }]
}

Συνδυάζουμε και τις δύο πολιτικές για να έχουμε την ακόλουθη τελική πολιτική. Δημιουργήστε αυτήν την πολιτική στον λογαριασμό κοινόχρηστων υπηρεσιών αφού αντικαταστήσετε τα κατάλληλα αναγνωριστικά λογαριασμού:

{
  "Version": "2012-10-17",
  "Statement": [{
    "Sid": "AddPerm",
    "Effect": "Allow",
    "Principal": {
      "AWS": "arn:aws:iam:::root"    
    },
    "Action": [
      "s3:PutObject",
      "s3:PutObjectAcl",
      "s3:GetObject",
      "s3:GetObjectVersion"    ],
    "Resource": "arn:aws:s3:::/*"  
    },
    {
      "Sid": "AddPermDeployment",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam:::root"      
      },
      "Action": [
        "s3:GetObject",
        "s3:GetObjectVersion"      ], 
      "Resource": "arn:aws:s3:::/*"    
    }
  ]
}

Για να μπορέσει να αναπτύξει ένα μοντέλο που δημιουργήθηκε σε διαφορετικό λογαριασμό, ο χρήστης πρέπει να έχει έναν ρόλο που να έχει πρόσβαση στις ενέργειες του SageMaker, όπως έναν ρόλο με το AmazonSageMakerFullAccess διαχειριζόμενη πολιτική. Αναφέρομαι σε Αναπτύξτε μια έκδοση μοντέλου από διαφορετικό λογαριασμό για περισσότερες λεπτομέρειες.

Πρέπει να ορίσουμε την ομάδα μοντέλων που περιέχει τις εκδόσεις μοντέλων που θέλουμε να αναπτύξουμε. Επίσης, θέλουμε να παραχωρήσουμε δικαιώματα στον λογαριασμό επιστήμης δεδομένων. Αυτό μπορεί να επιτευχθεί στα ακόλουθα βήματα. Αναφερόμαστε στους λογαριασμούς ως εξής:

  • shared_services_account_id – Ο λογαριασμός όπου βρίσκεται το μητρώο μοντέλων και όπου θέλουμε να βρίσκεται το μοντέλο
  • data_science_account_id – Ο λογαριασμός στον οποίο θα εκπαιδευόμαστε και συνεπώς θα δημιουργούμε το πραγματικό τεχνούργημα του μοντέλου
  • deployment_account_id – Ο λογαριασμός στον οποίο θέλουμε να φιλοξενήσουμε το τελικό σημείο για αυτό το μοντέλο

Πρώτα πρέπει να διασφαλίσουμε ότι υπάρχουν οι ομάδες πακέτων μοντέλων. Μπορείτε να χρησιμοποιήσετε Boto3 API όπως φαίνεται στο παρακάτω παράδειγμα ή μπορείτε να χρησιμοποιήσετε το Κονσόλα διαχείρισης AWS για να δημιουργήσετε το πακέτο μοντέλου. Αναφέρομαι σε Δημιουργία ομάδας πακέτων μοντέλου Για περισσότερες πληροφορίες. Αυτό προϋποθέτει ότι έχετε εγκαταστήσει το Boto3.

model_package_group_name = "cross-account-example-model"
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",
    Tags=[
          {
              'Key': 'Name',
              'Value': 'cross_account_test'
          },
      ]

)

print('ModelPackageGroup Arn : {}'.format(create_model_package_group_response['ModelPackageGroupArn']))

Για τα δικαιώματα για αυτήν την ομάδα πακέτων μοντέλου, μπορείτε να δημιουργήσετε ένα έγγραφο JSON που μοιάζει με τον ακόλουθο κώδικα. Αντικαταστήστε τα πραγματικά αναγνωριστικά λογαριασμού και το όνομα της ομάδας πακέτων μοντέλων με τις δικές σας τιμές.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AddPermModelPackageGroupCrossAccount",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam:::root"      
      },
      "Action": [
        "sagemaker:DescribeModelPackageGroup"      
        ],
      "Resource": "arn:aws:sagemaker:::model-package-group/"    
    },
    {
      "Sid": "AddPermModelPackageVersionCrossAccount",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam:::root"      
      },
      "Action": [
        "sagemaker:DescribeModelPackage",
        "sagemaker:ListModelPackages",
        "sagemaker:UpdateModelPackage",
        "sagemaker:CreateModelPackage",
        "sagemaker:CreateModel"      
      ],
      "Resource": "arn:aws:sagemaker:::model-package//*"    
    }
  ]
}

Τέλος, εφαρμόστε την πολιτική στην ομάδα πακέτων μοντέλων. Δεν μπορείτε να συσχετίσετε αυτήν την πολιτική με την ομάδα πακέτων μέσω της κονσόλας. Χρειάζεστε το SDK ή Διεπαφή γραμμής εντολών AWS (AWS CLI) πρόσβαση. Για παράδειγμα, ο ακόλουθος κώδικας χρησιμοποιεί Boto3:

# Convert the policy from JSON dict to string
model_package_group_policy = dict( )
model_package_group_policy = json.dumps(model_package_group_policy)

# Set the new policy
sm_client = boto3.Session().client("sagemaker")
response = sm_client.put_model_package_group_policy(
    ModelPackageGroupName = model_package_group_name,
    ResourcePolicy = model_package_group_policy)

Χρειαζόμαστε και ένα έθιμο Υπηρεσία διαχείρισης κλειδιών AWS (AWS KMS) κλειδί για την κρυπτογράφηση του μοντέλου κατά την αποθήκευση του στο Amazon S3. Αυτό πρέπει να γίνει χρησιμοποιώντας τον λογαριασμό επιστήμης δεδομένων. Στην κονσόλα AWS KMS, μεταβείτε στο Καθορίστε δικαιώματα χρήσης κλειδιών σελίδα. Στο Άλλοι λογαριασμοί AWS τμήμα, επιλέξτε Προσθέστε έναν άλλο λογαριασμό AWS. Εισαγάγετε τον αριθμό λογαριασμού AWS για τον λογαριασμό ανάπτυξης. Χρησιμοποιείτε αυτό το κλειδί KMS για την εργασία εκπαίδευσης του SageMaker. Εάν δεν καθορίσετε ένα κλειδί KMS για την εργασία εκπαίδευσης, το SageMaker ορίζει από προεπιλογή ένα κλειδί κρυπτογράφησης διακομιστή Amazon S3. Ένα προεπιλεγμένο κλειδί κρυπτογράφησης διακομιστή Amazon S3 δεν μπορεί να κοινοποιηθεί ή να χρησιμοποιηθεί από άλλον λογαριασμό AWS.

Η πολιτική και τα δικαιώματα ακολουθούν αυτό το μοτίβο:

  • Η πολιτική του Amazon S3 που καθορίζεται στο shared_services_account δίνει δικαιώματα στον λογαριασμό επιστήμης δεδομένων και στον λογαριασμό ανάπτυξης
  • Η πολιτική κλειδιού KMS που καθορίζεται στο shared_services_account δίνει δικαιώματα στον λογαριασμό επιστήμης δεδομένων και στον λογαριασμό ανάπτυξης

Πρέπει να διασφαλίσουμε ότι ο λογαριασμός κοινόχρηστων υπηρεσιών και ο λογαριασμός ανάπτυξης έχουν πρόσβαση στις εικόνες Docker που χρησιμοποιήθηκαν για την εκπαίδευση του μοντέλου. Αυτές οι εικόνες φιλοξενούνται γενικά σε λογαριασμούς AWS και ο διαχειριστής του λογαριασμού σας μπορεί να σας βοηθήσει να αποκτήσετε πρόσβαση, εάν δεν έχετε ήδη πρόσβαση. Για αυτήν την ανάρτηση, δεν δημιουργούμε προσαρμοσμένες εικόνες Docker μετά την εκπαίδευση του μοντέλου και επομένως δεν χρειαζόμαστε συγκεκριμένες πολιτικές Amazon ECR για τις εικόνες.

Στους λογαριασμούς φόρτου εργασίας (QA ή prod), πρέπει να δημιουργήσουμε δύο Διαχείριση ταυτότητας και πρόσβασης AWS (IAM) πολιτικές παρόμοιες με τις ακόλουθες. Αυτά είναι ενσωματωμένες πολιτικές, που σημαίνει ότι είναι ενσωματωμένα σε μια ταυτότητα IAM. Αυτό δίνει σε αυτούς τους λογαριασμούς πρόσβαση στο μητρώο μοντέλων.

Η πρώτη ενσωματωμένη πολιτική επιτρέπει σε έναν ρόλο να έχει πρόσβαση στον πόρο Amazon S3 στον λογαριασμό κοινόχρηστων υπηρεσιών που περιέχει το τεχνούργημα του μοντέλου. Δώστε το όνομα του κάδου S3 και το μοντέλο σας:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::/sagemaker//output/model.tar.gz"
        }
    ]
}

Η δεύτερη ενσωματωμένη πολιτική επιτρέπει σε έναν ρόλο, τον οποίο δημιουργούμε αργότερα, να χρησιμοποιεί το κλειδί KMS στον λογαριασμό κοινόχρηστων υπηρεσιών. Καθορίστε το αναγνωριστικό λογαριασμού για τον λογαριασμό κοινόχρηστων υπηρεσιών και το αναγνωριστικό κλειδιού KMS:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowUseOfTheKey",
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt"
            ],
            "Resource": [
                "arn:aws:kms:us-east-1::key/{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}"
            ]
        }
    ]
}

Τέλος, πρέπει δημιουργήστε έναν ρόλο IAM για το SageMaker. Αυτός ο ρόλος έχει το AmazonSageMakerFullAccess συνημμένη πολιτική. Στη συνέχεια, επισυνάπτουμε αυτές τις δύο ενσωματωμένες πολιτικές στον ρόλο που δημιουργήσαμε. Εάν χρησιμοποιείτε έναν υπάρχοντα ρόλο εκτέλεσης του SageMaker, επισυνάψτε αυτές τις δύο πολιτικές σε αυτόν τον ρόλο. Για οδηγίες, ανατρέξτε στο Δημιουργία ρόλων και επισύναψη πολιτικών (κονσόλα).

Τώρα που ορίσαμε τις πολιτικές κάθε λογαριασμού, ας χρησιμοποιήσουμε ένα παράδειγμα για να τον δούμε σε δράση.

Κατασκευάστε και εκπαιδεύστε ένα μοντέλο χρησιμοποιώντας έναν αγωγό SageMaker

Πρώτα δημιουργούμε μια διοχέτευση SageMaker στον λογαριασμό της επιστήμης δεδομένων για την εκτέλεση επεξεργασίας δεδομένων, εκπαίδευσης μοντέλων και αξιολόγησης. Χρησιμοποιούμε το σύνολο δεδομένων κατοικιών της Καλιφόρνια που λαμβάνεται από τη βιβλιοθήκη StatLib. Στο παρακάτω απόσπασμα κώδικα, χρησιμοποιούμε ένα προσαρμοσμένο σενάριο προεπεξεργασίας preprocess.py για να εκτελέσετε κάποιο απλό μετασχηματισμό χαρακτηριστικών, όπως η κλιμάκωση χαρακτηριστικών, η οποία μπορεί να δημιουργηθεί χρησιμοποιώντας τα ακόλουθα σημειωματάριο. Αυτό το σενάριο διαχωρίζει επίσης το σύνολο δεδομένων σε σύνολα δεδομένων εκπαίδευσης και δοκιμής.

Δημιουργούμε ένα SKLearnProcessor αντικείμενο να εκτελέσει αυτό το σενάριο προεπεξεργασίας. Στη διοχέτευση του SageMaker, δημιουργούμε ένα βήμα επεξεργασίας (ProcessingStep) για να εκτελέσετε τον κώδικα επεξεργασίας χρησιμοποιώντας SKLearnProcessor. Αυτός ο κώδικας επεξεργασίας καλείται όταν αρχικοποιείται η διοχέτευση SageMaker. Ο κώδικας που δημιουργεί το SKLearnProcessor και ProcessingStep φαίνονται στον παρακάτω κώδικα. Σημειώστε ότι όλος ο κώδικας σε αυτήν την ενότητα εκτελείται στον λογαριασμό επιστήμης δεδομένων.

# Useful SageMaker variables - Create a Pipeline session which will lazy init resources
session = PipelineSession()

framework_version = "0.23-1"

# Create SKlearn processor object,
# The object contains information about what instance type to use, the IAM role to use etc.
# A managed processor comes with a preconfigured container, so only specifying version is required.
sklearn_processor = SKLearnProcessor(
    framework_version=framework_version,
    role=role,
    instance_type=processing_instance_type,
    instance_count=1,
    base_job_name="tf2-california-housing-processing-job",
    sagemaker_session=session
)

# Use the sklearn_processor in a SageMaker pipelines ProcessingStep
step_preprocess_data = ProcessingStep(
    name="Preprocess-California-Housing-Data",
    processor=sklearn_processor,
    inputs=[
        ProcessingInput(source=input_data, destination="/opt/ml/processing/input"),
    ],
    outputs=[
        ProcessingOutput(output_name="train", source="/opt/ml/processing/train"),
        ProcessingOutput(output_name="test", source="/opt/ml/processing/test"),
    ],
    code="preprocess.py",
)

Χρειαζόμαστε ένα προσαρμοσμένο κλειδί KMS για την κρυπτογράφηση του μοντέλου κατά την αποθήκευση του στο Amazon S3. Δείτε τον παρακάτω κώδικα:

kms_client = boto3.client('kms')
response = kms_client.describe_key(
    KeyId='alias/sagemaker/outkey',
)
key_id = response['KeyMetadata']['KeyId']

Για να εκπαιδεύσουμε το μοντέλο, δημιουργούμε ένα αντικείμενο εκτιμητή TensorFlow. Του μεταβιβάζουμε το αναγνωριστικό κλειδιού KMS μαζί με το σενάριο εκπαίδευσης train.py, τύπος παρουσίας εκπαίδευσης και μέτρηση. Δημιουργούμε επίσης ένα TrainingStep που θα προστεθεί στον αγωγό μας και προσθέστε τον εκτιμητή TensorFlow σε αυτό. Δείτε τον παρακάτω κώδικα:

model_path = f"s3://{bucket}/{prefix}/model/"

hyperparameters = {"epochs": training_epochs}
tensorflow_version = "2.4.1"
python_version = "py37"

tf2_estimator = TensorFlow(
    source_dir="code",
    entry_point="train.py",
    instance_type=training_instance_type,
    instance_count=1,
    framework_version=tensorflow_version,
    role=role,
    base_job_name="tf2-california-housing-train",
    output_path=model_path,
    output_kms_key=key_id,
    hyperparameters=hyperparameters,
    py_version=python_version,
    sagemaker_session=session
)

# Use the tf2_estimator in a SageMaker pipelines ProcessingStep.
# NOTE how the input to the training job directly references the output of the previous step.
step_train_model = TrainingStep(
    name="Train-California-Housing-Model",
    estimator=tf2_estimator,
    inputs={
        "train": TrainingInput(
            s3_data=step_preprocess_data.properties.ProcessingOutputConfig.Outputs[
                "train"
            ].S3Output.S3Uri,
            content_type="text/csv",
        ),
        "test": TrainingInput(
            s3_data=step_preprocess_data.properties.ProcessingOutputConfig.Outputs[
                "test"
            ].S3Output.S3Uri,
            content_type="text/csv",
        ),
    },
)

Εκτός από την εκπαίδευση, πρέπει να πραγματοποιήσουμε αξιολόγηση μοντέλου, για την οποία χρησιμοποιούμε το μέσο τετραγωνικό σφάλμα (MSE) ως μέτρηση σε αυτό το παράδειγμα. ο παλαιότερο σημειωματάριο επίσης δημιουργεί evaluate.py, το οποίο χρησιμοποιούμε για να αξιολογήσουμε ένα μοντέλο μας χρησιμοποιώντας MSE. Δημιουργούμε επίσης ένα ProcessingStep για να αρχικοποιήσετε το σενάριο αξιολόγησης μοντέλου χρησιμοποιώντας α SKLearnProcessor αντικείμενο. Ο παρακάτω κώδικας δημιουργεί αυτό το βήμα:

from sagemaker.workflow.properties import PropertyFile

# Create SKLearnProcessor object.
# The object contains information about what container to use, what instance type etc.
evaluate_model_processor = SKLearnProcessor(
    framework_version=framework_version,
    instance_type=processing_instance_type,
    instance_count=1,
    base_job_name="tf2-california-housing-evaluate",
    role=role,
    sagemaker_session=session
)

# Create a PropertyFile
# A PropertyFile is used to be able to reference outputs from a processing step, for instance to use in a condition step.
# For more information, visit https://docs.aws.amazon.com/sagemaker/latest/dg/build-and-manage-propertyfile.html
evaluation_report = PropertyFile(
    name="EvaluationReport", output_name="evaluation", path="evaluation.json"
)

# Use the evaluate_model_processor in a SageMaker pipelines ProcessingStep.
step_evaluate_model = ProcessingStep(
    name="Evaluate-California-Housing-Model",
    processor=evaluate_model_processor,
    inputs=[
        ProcessingInput(
            source=step_train_model.properties.ModelArtifacts.S3ModelArtifacts,
            destination="/opt/ml/processing/model",
        ),
        ProcessingInput(
            source=step_preprocess_data.properties.ProcessingOutputConfig.Outputs[
                "test"
            ].S3Output.S3Uri,
            destination="/opt/ml/processing/test",
        ),
    ],
    outputs=[
        ProcessingOutput(output_name="evaluation", source="/opt/ml/processing/evaluation"),
    ],
    code="evaluate.py",
    property_files=[evaluation_report],
)

Μετά την αξιολόγηση του μοντέλου, χρειαζόμαστε επίσης ένα βήμα για να καταχωρήσουμε το μοντέλο μας στο μητρώο μοντέλου, εάν η απόδοση του μοντέλου πληροί τις απαιτήσεις. Αυτό φαίνεται στον παρακάτω κώδικα χρησιμοποιώντας το RegisterModel βήμα. Εδώ πρέπει να καθορίσουμε το μοντέλο πακέτου που είχαμε δηλώσει στον λογαριασμό κοινόχρηστων υπηρεσιών. Αντικαταστήστε το πακέτο Περιοχής, λογαριασμού και μοντέλου με τις τιμές σας. Το όνομα μοντέλου που χρησιμοποιείται εδώ είναι modeltest, αλλά μπορείτε να χρησιμοποιήσετε οποιοδήποτε όνομα της επιλογής σας.

# Create ModelMetrics object using the evaluation report from the evaluation step
# A ModelMetrics object contains metrics captured from a model.
model_metrics = ModelMetrics(
    model_statistics=MetricsSource(
        s3_uri=evaluation_s3_uri,
        content_type="application/json",
    )
)

# Create a RegisterModel step, which registers the model with SageMaker Model Registry.
model = Model(
    image_uri=tf2_estimator.training_image_uri(),
    model_data=training_step.properties.ModelArtifacts.S3ModelArtifacts,
    source_dir=tf2_estimator.source_dir,
    entry_point=tf2_estimator.entry_point,
    role=role_arn,
    sagemaker_session=session
)

model_registry_args = model.register(
    content_types=['text/csv'],
    response_types=['application/json'],
    inference_instances=['ml.t2.medium', 'ml.m5.xlarge'],
    transform_instances=['ml.m5.xlarge'],
    model_package_group_name=model_package_group_name,
    approval_status='PendingManualApproval',
    model_metrics=model_metrics
)

 step_register_model= ModelStep(
    name='RegisterModel',
    step_args=model_registry_args
)

Πρέπει επίσης να δημιουργήσουμε τα τεχνουργήματα του μοντέλου ώστε να μπορούν να αναπτυχθούν (χρησιμοποιώντας τον άλλο λογαριασμό). Για τη δημιουργία του μοντέλου, δημιουργούμε ένα CreateModelStep, όπως φαίνεται στον ακόλουθο κώδικα:

from sagemaker.inputs import CreateModelInput 
from sagemaker.workflow.model_step import ModelStep 
step_create_model = ModelStep( 
    name="Create-California-Housing-Model", 
    step_args=model.create(instance_type="ml.m5.large",accelerator_type="ml.eia1.medium"),
 )

Η προσθήκη συνθηκών στον αγωγό γίνεται με α ConditionStep. Σε αυτήν την περίπτωση, θέλουμε να καταχωρήσουμε τη νέα έκδοση μοντέλου στο μητρώο μοντέλου μόνο εάν το νέο μοντέλο πληροί μια προϋπόθεση ακρίβειας. Δείτε τον παρακάτω κώδικα:

from sagemaker.workflow.conditions import ConditionLessThanOrEqualTo
from sagemaker.workflow.condition_step import (
    ConditionStep,
    JsonGet,
)

# Create accuracy condition to ensure the model meets performance requirements.
# Models with a test accuracy lower than the condition will not be registered with the model registry.
cond_lte = ConditionLessThanOrEqualTo(
    left=JsonGet(
        step=step_evaluate_model,
        property_file=evaluation_report,
        json_path="regression_metrics.mse.value",
    ),
    right=accuracy_mse_threshold,
)

# Create a SageMaker Pipelines ConditionStep, using the preceding condition.
# Enter the steps to perform if the condition returns True / False.
step_cond = ConditionStep(
    name="MSE-Lower-Than-Threshold-Condition",
    conditions=[cond_lte],
    if_steps=[step_register_model, step_create_model],
    else_steps=[step_higher_mse_send_email_lambda],
)

Τέλος, θέλουμε να ενορχηστρώσουμε όλα τα βήματα του αγωγού έτσι ώστε να μπορεί να αρχικοποιηθεί ο αγωγός:

from sagemaker.workflow.pipeline import Pipeline

# Create a SageMaker Pipeline.
# Each parameter for the pipeline must be set as a parameter explicitly when the pipeline is created.
# Also pass in each of the preceding steps.
# Note that the order of execution is determined from each step's dependencies on other steps,
# not on the order they are passed in.
pipeline = Pipeline(
    name=pipeline_name,
    parameters=[
        processing_instance_type,
        training_instance_type,
        input_data,
        training_epochs,
        accuracy_mse_threshold,
        endpoint_instance_type,
    ],
    steps=[step_preprocess_data, step_train_model, step_evaluate_model, step_cond],
)

Αναπτύξτε μια έκδοση μοντέλου από διαφορετικό λογαριασμό

Τώρα που το μοντέλο έχει καταχωριστεί στον λογαριασμό κοινόχρηστων υπηρεσιών, πρέπει να το αναπτύξουμε στους λογαριασμούς φόρτου εργασίας μας χρησιμοποιώντας τη γραμμή CI/CD στον λογαριασμό ανάπτυξης. Έχουμε ήδη διαμορφώσει τον ρόλο και την πολιτική σε προηγούμενο βήμα. Χρησιμοποιούμε το πακέτο μοντέλου ARN για να αναπτύξουμε το μοντέλο από το μητρώο μοντέλων. Ο ακόλουθος κώδικας εκτελείται στον λογαριασμό ανάπτυξης και χρησιμοποιείται για την ανάπτυξη εγκεκριμένων μοντέλων σε QA και prod:

from sagemaker import ModelPackage
from time import gmtime, strftime

sagemaker_session = sagemaker.Session(boto_session=sess)

model_package_arn = 'arn:aws:sagemaker:::/modeltest/version_number'
model = ModelPackage(role=role, 
                     model_package_arn=model_package_arn, 
                     sagemaker_session=sagemaker_session)
model.deploy(initial_instance_count=1, instance_type='ml.m5.xlarge')

Συμπέρασμα

Σε αυτήν την ανάρτηση, δείξαμε πώς να ρυθμίσετε τις πολιτικές που απαιτούνται για μια ρύθμιση πολλών λογαριασμών για ML με βάση την αρχή του ελάχιστου προνομίου. Στη συνέχεια δείξαμε τη διαδικασία κατασκευής και εκπαίδευσης των μοντέλων στον λογαριασμό της επιστήμης δεδομένων. Τέλος, χρησιμοποιήσαμε τη διοχέτευση CI/CD στον λογαριασμό ανάπτυξης για να αναπτύξουμε την πιο πρόσφατη έκδοση εγκεκριμένων μοντέλων σε λογαριασμούς QA και παραγωγής. Επιπλέον, μπορείτε δείτε το ιστορικό ανάπτυξης μοντέλων και δόμηση σκανδάλων in AWS CodeBuild.

Μπορείτε να κλιμακώσετε τις έννοιες σε αυτήν την ανάρτηση για να φιλοξενήσετε μοντέλα Amazon Elastic Compute Cloud (Amazon EC2) ή Υπηρεσία Amazon Elastic Kubernetes (Amazon EKS), καθώς και την κατασκευή ενός αγωγού συμπερασμάτων παρτίδας.

Για να μάθετε περισσότερα σχετικά με την ύπαρξη ξεχωριστών λογαριασμών που δημιουργούν μοντέλα ML στο AWS, βλ Βέλτιστες πρακτικές για οργανωτικές μονάδες με οργανισμούς AWS και Ενημερώστε με ασφάλεια τα μοντέλα στην παραγωγή.


Σχετικά με τους Συγγραφείς

Δημιουργήστε μια ροή εργασίας MLOps μεταξύ λογαριασμών χρησιμοποιώντας το μητρώο μοντέλου Amazon SageMaker PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.Sandeep Verma είναι αρχιτέκτονας πρωτοτύπων Sr. με AWS. Του αρέσει να βουτάει βαθιά στις προκλήσεις των πελατών και να δημιουργεί πρωτότυπα για τους πελάτες για να επιταχύνουν την καινοτομία. Έχει ένα υπόβαθρο στο AI/ML, ιδρυτής της New Knowledge και γενικά παθιασμένος με την τεχνολογία. Στον ελεύθερο χρόνο του λατρεύει τα ταξίδια και το σκι με την οικογένειά του.

Μάνι Χανιούγια  Μάνι Χανιούγια είναι ειδικός τεχνητής νοημοσύνης και μηχανικής μάθησης SA στο Amazon Web Services (AWS). Βοηθά τους πελάτες που χρησιμοποιούν μηχανική μάθηση για να λύσουν τις επιχειρηματικές τους προκλήσεις χρησιμοποιώντας το AWS. Περνά το μεγαλύτερο μέρος του χρόνου της καταδύοντας βαθιά και διδάσκοντας πελάτες σε προγράμματα AI / ML που σχετίζονται με την όραση του υπολογιστή, την επεξεργασία φυσικής γλώσσας, τις προβλέψεις, το ML στην άκρη και πολλά άλλα. Είναι παθιασμένη με την ML στην άκρη, επομένως, δημιούργησε το δικό της εργαστήριο με αυτοκινούμενο κιτ και πρωτότυπη γραμμή παραγωγής, όπου ξοδεύει πολύ ελεύθερο χρόνο.

Δημιουργήστε μια ροή εργασίας MLOps μεταξύ λογαριασμών χρησιμοποιώντας το μητρώο μοντέλου Amazon SageMaker PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.Saumitra Vikram είναι προγραμματιστής λογισμικού στην ομάδα του Amazon SageMaker και εδρεύει στο Chennai της Ινδίας. Εκτός δουλειάς, του αρέσει να περνά χρόνο για τρέξιμο, πεζοπορία και μοτοσικλέτα στα Ιμαλάια.

Δημιουργήστε μια ροή εργασίας MLOps μεταξύ λογαριασμών χρησιμοποιώντας το μητρώο μοντέλου Amazon SageMaker PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.Sreedevi Srinivasan είναι ηγέτης μηχανικής στο AWS SageMaker. Είναι παθιασμένη και ενθουσιασμένη με το να ενεργοποιήσει το ML ως μια πλατφόρμα που πρόκειται να μεταμορφώσει τις καθημερινές ζωές. Αυτήν τη στιγμή εστιάζει στο SageMaker Feature Store. Στον ελεύθερο χρόνο της, της αρέσει να περνά χρόνο με την οικογένειά της.

Δημιουργήστε μια ροή εργασίας MLOps μεταξύ λογαριασμών χρησιμοποιώντας το μητρώο μοντέλου Amazon SageMaker PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται. Ρούπιντερ Γκρέουαλ είναι Sr Ai/ML Specialist Solutions Architect με AWS. Επί του παρόντος εστιάζει στην εξυπηρέτηση μοντέλων και MLOps στο SageMaker. Πριν από αυτόν τον ρόλο έχει εργαστεί ως μηχανικός μηχανικής εκμάθησης μοντέλων κατασκευής και φιλοξενίας. Εκτός δουλειάς του αρέσει να παίζει τένις και να κάνει ποδήλατο σε ορεινά μονοπάτια.

Δημιουργήστε μια ροή εργασίας MLOps μεταξύ λογαριασμών χρησιμοποιώντας το μητρώο μοντέλου Amazon SageMaker PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.Φαρούκ Σαμπίρ είναι Ανώτερος Αρχιτέκτονας Λύσεων Ειδικός Τεχνητής Νοημοσύνης και Μηχανικής Μάθησης στο AWS. Είναι κάτοχος διδακτορικού και μεταπτυχιακού τίτλου στον Ηλεκτρολόγο Μηχανικό από το Πανεπιστήμιο του Τέξας στο Ώστιν και μεταπτυχιακό στην Επιστήμη Υπολογιστών από το Ινστιτούτο Τεχνολογίας της Τζόρτζια. Στην AWS, βοηθά τους πελάτες να διαμορφώσουν και να λύσουν τα επιχειρηματικά τους προβλήματα στην επιστήμη δεδομένων, τη μηχανική μάθηση, την όραση υπολογιστών, την τεχνητή νοημοσύνη, την αριθμητική βελτιστοποίηση και συναφείς τομείς. Έχει πάνω από 16 χρόνια εργασιακής εμπειρίας και είναι επίσης επικουρικό μέλος ΔΕΠ στο Πανεπιστήμιο του Τέξας στο Ντάλας, όπου διδάσκει ένα μεταπτυχιακό πρόγραμμα για την Εφαρμοσμένη Μηχανική Μάθηση. Με έδρα το Ντάλας του Τέξας, αυτός και η οικογένειά του λατρεύουν να ταξιδεύουν και να κάνουν μακρινά οδικά ταξίδια.

Σφραγίδα ώρας:

Περισσότερα από Μηχανική εκμάθηση AWS