Εκτελέστε μοντέλα ML συνόλου στο Amazon SageMaker PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

Εκτελέστε μοντέλα ML συνόλου στο Amazon SageMaker

Η ανάπτυξη μοντέλων στη μηχανική μάθηση (ML) γίνεται όλο και πιο περίπλοκη. Θέλετε να αναπτύξετε όχι μόνο ένα μοντέλο ML αλλά μεγάλες ομάδες μοντέλων ML που αντιπροσωπεύονται ως ροές εργασίας συνόλου. Αυτές οι ροές εργασίας αποτελούνται από πολλαπλά μοντέλα ML. Η παραγωγή αυτών των μοντέλων ML είναι δύσκολη γιατί πρέπει να τηρείτε διάφορες απαιτήσεις απόδοσης και καθυστέρησης.

Amazon Sage Maker υποστηρίζει σύνολα μίας παρουσίας με Διακομιστής Triton Inference. Αυτή η δυνατότητα σάς επιτρέπει να εκτελείτε σύνολα μοντέλων που ταιριάζουν σε μία μόνο παρουσία. Στα παρασκήνια, το SageMaker αξιοποιεί τον Triton Inference Server για να διαχειρίζεται το σύνολο σε κάθε παρουσία πίσω από το τελικό σημείο για να μεγιστοποιήσει την απόδοση και τη χρήση υλικού με εξαιρετικά χαμηλή (μονοψήφια χιλιοστά του δευτερολέπτου) λανθάνουσα κατάσταση συμπερασμάτων. Με το Triton, μπορείτε επίσης να επιλέξετε από ένα ευρύ φάσμα υποστηριζόμενων πλαισίων ML (συμπεριλαμβανομένων των TensorFlow, PyTorch, ONNX, XGBoost και NVIDIA TensorRT) και υποδομών υποστήριξης, συμπεριλαμβανομένων των GPU, των CPU και Αίσθηση AWS.

Με αυτήν τη δυνατότητα στο SageMaker, μπορείτε να βελτιστοποιήσετε τους φόρτους εργασίας σας αποφεύγοντας δαπανηρή καθυστέρηση δικτύου και αποκομίζοντας τα οφέλη της τοποθεσίας υπολογιστών και δεδομένων για αγωγούς συμπερασμάτων συνόλου. Σε αυτήν την ανάρτηση, συζητάμε τα οφέλη από τη χρήση του Triton Inference Server μαζί με σκέψεις σχετικά με το εάν αυτή είναι η σωστή επιλογή για τον φόρτο εργασίας σας.

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

Ο διακομιστής Triton Inference έχει σχεδιαστεί για να επιτρέπει στις ομάδες να αναπτύσσουν, να εκτελούν και να κλιμακώνουν εκπαιδευμένα μοντέλα AI από οποιοδήποτε πλαίσιο σε οποιαδήποτε υποδομή που βασίζεται σε GPU ή CPU. Επιπλέον, έχει βελτιστοποιηθεί για να προσφέρει συμπεράσματα υψηλής απόδοσης σε κλίμακα με χαρακτηριστικά όπως δυναμική παρτίδα, ταυτόχρονες εκτελέσεις, βέλτιστη διαμόρφωση μοντέλου, δυνατότητες συνόλου μοντέλων και υποστήριξη εισόδων ροής.

Οι φόρτοι εργασίας θα πρέπει να λαμβάνουν υπόψη τις δυνατότητες που παρέχει η Triton για να διασφαλίσει ότι τα μοντέλα τους μπορούν να εξυπηρετηθούν. Το Triton υποστηρίζει μια σειρά από δημοφιλή πλαίσια εκτός συσκευασίας, συμπεριλαμβανομένων των TensorFlow, PyTorch, ONNX, XGBoost και NVIDIA TensorRT. Το Triton υποστηρίζει επίσης διάφορα backend που απαιτούνται για τη σωστή εκτέλεση των αλγορίθμων. Θα πρέπει να βεβαιωθείτε ότι τα μοντέλα σας υποστηρίζονται από αυτά τα backend και σε περίπτωση που ένα backend δεν υποστηρίζεται, το Triton σας επιτρέπει να εφαρμόσετε το δικό σας και να το ενσωματώσετε. Θα πρέπει επίσης να επαληθεύσετε ότι η έκδοση του αλγορίθμου σας υποστηρίζεται καθώς και να βεβαιωθείτε ότι τα τεχνουργήματα του μοντέλου είναι αποδεκτά από το αντίστοιχο backend. Για να ελέγξετε εάν ο συγκεκριμένος αλγόριθμός σας υποστηρίζεται, ανατρέξτε στο Backend διακομιστή Triton Inference για μια λίστα εγγενώς υποστηριζόμενων backend που διατηρεί η NVIDIA.

Μπορεί να υπάρχουν ορισμένα σενάρια όπου τα μοντέλα ή τα σύνολα μοντέλων σας δεν θα λειτουργούν στο Triton χωρίς να απαιτείται περισσότερη προσπάθεια, όπως εάν δεν υπάρχει εγγενώς υποστηριζόμενο backend για τον αλγόριθμό σας. Υπάρχουν ορισμένες άλλες σκέψεις που πρέπει να λάβετε υπόψη, όπως η μορφή ωφέλιμου φορτίου μπορεί να μην είναι ιδανική, ειδικά όταν το μέγεθος ωφέλιμου φορτίου σας μπορεί να είναι μεγάλο για το αίτημά σας. Όπως πάντα, θα πρέπει να επικυρώσετε την απόδοσή σας μετά την ανάπτυξη αυτών των φόρτων εργασίας για να διασφαλίσετε ότι οι προσδοκίες σας ικανοποιούνται.

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

Δημιουργήστε σύνολα μοντέλων Triton

Ο Triton Inference Server απλοποιεί την ανάπτυξη μοντέλων AI σε κλίμακα. Ο Triton Inference Server συνοδεύεται από μια βολική λύση που απλοποιεί την κατασκευή αγωγών προεπεξεργασίας και μεταεπεξεργασίας. Η πλατφόρμα Triton Inference Server παρέχει τον προγραμματιστή συνόλου, τον οποίο μπορείτε να χρησιμοποιήσετε για τη δημιουργία μοντέλων συνόλων διοχέτευσης που συμμετέχουν στη διαδικασία εξαγωγής συμπερασμάτων διασφαλίζοντας παράλληλα αποτελεσματικότητα και βελτιστοποίηση της απόδοσης.

Ο Triton Inference Server εξυπηρετεί μοντέλα από αποθετήρια μοντέλων. Ας δούμε τη διάταξη αποθήκης μοντέλων για το μοντέλο συνόλου που περιέχει το μοντέλο προεπεξεργασίας DALI, το μοντέλο έναρξης V3 του TensorFlow και τη διαμόρφωση του συνόλου μοντέλων. Κάθε υποκατάλογος περιέχει τις πληροφορίες αποθήκης για τα αντίστοιχα μοντέλα. ο config.pbtxt Το αρχείο περιγράφει τη διαμόρφωση του μοντέλου για τα μοντέλα. Κάθε κατάλογος πρέπει να έχει έναν αριθμητικό υποφάκελο για κάθε έκδοση του μοντέλου και εκτελείται από ένα συγκεκριμένο backend που υποστηρίζει το Triton.

NVIDIA Triton Model Repository

ΝΒΙΔΙΑ ΝΤΑΛΙ

Για αυτήν την ανάρτηση, χρησιμοποιούμε τη NVIDIA Data Loading Library (DALI) ως μοντέλο προεπεξεργασίας στο σύνολο μοντέλων μας. Η NVIDIA DALI είναι μια βιβλιοθήκη για φόρτωση και προεπεξεργασία δεδομένων για την επιτάχυνση εφαρμογών βαθιάς εκμάθησης. Παρέχει μια συλλογή βελτιστοποιημένων δομικών στοιχείων για τη φόρτωση και την επεξεργασία δεδομένων εικόνας, βίντεο και ήχου. Μπορείτε να το χρησιμοποιήσετε ως φορητό drop-in αντικατάσταση για ενσωματωμένους φορτωτές δεδομένων και επαναλήπτες δεδομένων σε δημοφιλή πλαίσια βαθιάς εκμάθησης.

NVIDIA Dali

Ο ακόλουθος κώδικας δείχνει τη διαμόρφωση του μοντέλου για ένα backend DALI:

name: "dali"
backend: "dali"
max_batch_size: 256
input [
  {
    name: "DALI_INPUT_0"
    data_type: TYPE_UINT8
    dims: [ -1 ]
  }
]
output [
  {
    name: "DALI_OUTPUT_0"
    data_type: TYPE_FP32
    dims: [ 299, 299, 3 ]
  }
]
parameters: [
  {
    key: "num_threads"
    value: { string_value: "12" }
  }
]

Μοντέλο Inception V3

Για αυτήν την ανάρτηση, δείχνουμε πώς χρησιμοποιείται το DALI σε ένα σύνολο μοντέλων με το Inception V3. Το προεκπαιδευμένο μοντέλο Inception V3 TensorFlow αποθηκεύεται σε μορφή GraphDef ως ένα μεμονωμένο αρχείο με το όνομα model.graphdef. ο config.pbtxt το αρχείο έχει πληροφορίες σχετικά με το όνομα του μοντέλου, την πλατφόρμα, max_batch_size, και συμβάσεις εισροών και εκροών. Συνιστούμε να ρυθμίσετε το max_batch_size ρύθμιση παραμέτρων σε μέγεθος παρτίδας μικρότερο από το αρχικό μοντέλο V3. Το αρχείο ετικετών έχει ετικέτες κλάσεων για 1,000 διαφορετικές κλάσεις. Αντιγράφουμε τις ετικέτες του μοντέλου ταξινόμησης έναρξης στο inception_graphdef κατάλογο στο αποθετήριο μοντέλων. Το αρχείο ετικετών περιέχει 1,000 ετικέτες κλάσης του IMAGEnet σύνολο δεδομένων ταξινόμησης.

name: "inception_graphdef"
platform: "tensorflow_graphdef"
max_batch_size: 256
input [
  {
    name: "input"
    data_type: TYPE_FP32
    format: FORMAT_NHWC
    dims: [ 299, 299, 3 ]
  }
]
output [
  {
    name: "InceptionV3/Predictions/Softmax"
    data_type: TYPE_FP32
    dims: [ 1001 ]
    label_filename: "inception_labels.txt"
  }
]

Σύνολο Triton

Ο ακόλουθος κώδικας δείχνει μια διαμόρφωση μοντέλου ενός μοντέλου συνόλου για προεπεξεργασία DALI και ταξινόμηση εικόνας:

name: "ensemble_dali_inception"
platform: "ensemble"
max_batch_size: 256
input [
  {
    name: "INPUT"
    data_type: TYPE_UINT8
    dims: [ -1 ]
  }
]
output [
  {
    name: "OUTPUT"
    data_type: TYPE_FP32
    dims: [ 1001 ]
  }
]
ensemble_scheduling {
  step [
    {
      model_name: "dali"
      model_version: -1
      input_map {
        key: "DALI_INPUT_0"
        value: "INPUT"
      }
      output_map {
        key: "DALI_OUTPUT_0"
        value: "preprocessed_image"
      }
    },
    {
      model_name: "inception_graphdef"
      model_version: -1
      input_map {
        key: "input"
        value: "preprocessed_image"
      }
      output_map {
        key: "InceptionV3/Predictions/Softmax"
        value: "OUTPUT"
      }
    }
  ]
}

Δημιουργήστε ένα τελικό σημείο του SageMaker

Καταληκτικά σημεία του SageMaker επιτρέπουν τη φιλοξενία σε πραγματικό χρόνο όπου απαιτείται χρόνος απόκρισης χιλιοστών του δευτερολέπτου. Το SageMaker αναλαμβάνει την αδιαφοροποίητη βαρύτητα της διαχείρισης φιλοξενίας μοντέλων και έχει τη δυνατότητα αυτόματης κλίμακας. Επιπλέον, παρέχεται επίσης μια σειρά από δυνατότητες, όπως φιλοξενία πολλαπλών παραλλαγών του μοντέλου σας, δοκιμή A/B των μοντέλων σας, ενσωμάτωση με amazoncloudwatch για να αποκτήσετε παρατηρησιμότητα της απόδοσης του μοντέλου και παρακολούθηση για μετατόπιση μοντέλου.

Ας δημιουργήσουμε ένα μοντέλο SageMaker από τα τεχνουργήματα μοντέλων που ανεβάσαμε Απλή υπηρεσία αποθήκευσης Amazon (Amazon S3).

Στη συνέχεια, παρέχουμε επίσης μια πρόσθετη μεταβλητή περιβάλλοντος: SAGEMAKER_TRITON_DEFAULT_MODEL_NAME, το οποίο καθορίζει το όνομα του μοντέλου που θα φορτώσει ο Triton. Η τιμή αυτού του κλειδιού πρέπει να ταιριάζει με το όνομα του φακέλου στο πακέτο μοντέλου που μεταφορτώθηκε στο Amazon S3. Αυτή η μεταβλητή είναι προαιρετική σε περιπτώσεις που χρησιμοποιείτε ένα μόνο μοντέλο. Στην περίπτωση μοντέλων συνόλων, αυτό το κλειδί πρέπει να καθοριστεί για την εκκίνηση του Triton στο SageMaker.

Επιπλέον, μπορείτε να ρυθμίσετε SAGEMAKER_TRITON_BUFFER_MANAGER_THREAD_COUNT και SAGEMAKER_TRITON_THREAD_COUNT για τη βελτιστοποίηση του αριθμού των νημάτων.

container = {
    "Image": triton_image_uri,
    "ModelDataUrl": model_uri,
    "Environment": {"SAGEMAKER_TRITON_DEFAULT_MODEL_NAME": "ensemble_dali_inception"},
}
create_model_response = sm_client.create_model(
    ModelName=sm_model_name, ExecutionRoleArn=role, PrimaryContainer=container
)

Με το προηγούμενο μοντέλο, δημιουργούμε μια διαμόρφωση τερματικού σημείου όπου μπορούμε να καθορίσουμε τον τύπο και τον αριθμό των παρουσιών που θέλουμε στο τελικό σημείο:

create_endpoint_config_response = sm_client.create_endpoint_config(
    EndpointConfigName=endpoint_config_name,
    ProductionVariants=[
        {
            "InstanceType": instance_type,
            "InitialVariantWeight": 1,
            "InitialInstanceCount": 1,
            "ModelName": sm_model_name,
            "VariantName": "AllTraffic",
        }
    ],
)
endpoint_config_arn = create_endpoint_config_response["EndpointConfigArn"]

Χρησιμοποιούμε αυτήν τη διαμόρφωση τελικού σημείου για να δημιουργήσουμε ένα νέο τελικό σημείο του SageMaker και περιμένουμε να ολοκληρωθεί η ανάπτυξη. Η κατάσταση αλλάζει σε InService όταν η ανάπτυξη είναι επιτυχής.

create_endpoint_response = sm_client.create_endpoint(
    EndpointName=endpoint_name, EndpointConfigName=endpoint_config_name
)
endpoint_arn = create_endpoint_response["EndpointArn"]

Ωφέλιμο φορτίο συμπερασμάτων

Η εικόνα ωφέλιμου φορτίου εισόδου διέρχεται από τη γραμμή προεπεξεργασίας DALI και χρησιμοποιείται στον προγραμματιστή συνόλου που παρέχεται από τον Triton Inference Server. Κατασκευάζουμε το ωφέλιμο φορτίο που θα μεταβιβαστεί στο τελικό σημείο συμπερασμάτων:

payload = {
    "inputs": [
        {
            "name": "INPUT",
            "shape": rv2.shape,
            "datatype": "UINT8",
            "data": rv2.tolist(),
        }
    ]
}

Συμπέρασμα συνόλου

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

response = runtime_sm_client.invoke_endpoint(
    EndpointName=endpoint_name, ContentType="application/octet-stream", Body=json.dumps(payload)
)
print(json.loads(response["Body"].read().decode("utf8")))

Με την binary+json μορφή, πρέπει να καθορίσουμε το μήκος των μεταδεδομένων αιτήματος στην κεφαλίδα για να επιτρέψουμε στον Triton να αναλύσει σωστά το δυαδικό ωφέλιμο φορτίο. Αυτό γίνεται χρησιμοποιώντας μια προσαρμοσμένη κεφαλίδα τύπου περιεχομένου application/vnd.sagemaker-triton.binary+json;json-header-size={}.

Αυτό είναι διαφορετικό από τη χρήση ενός Inference-Header-Content-Length κεφαλίδα σε έναν αυτόνομο διακομιστή Triton επειδή οι προσαρμοσμένες κεφαλίδες δεν επιτρέπονται στο SageMaker.

Το πακέτο tritonclient παρέχει βοηθητικές μεθόδους για τη δημιουργία του ωφέλιμου φορτίου χωρίς να χρειάζεται να γνωρίζετε τις λεπτομέρειες των προδιαγραφών. Χρησιμοποιούμε τις ακόλουθες μεθόδους για να μετατρέψουμε το αίτημα συμπερασμάτων μας σε δυαδική μορφή, η οποία παρέχει χαμηλότερους χρόνους καθυστέρησης για εξαγωγή συμπερασμάτων. Ανατρέξτε στο GitHub σημειωματάριο για λεπτομέρειες υλοποίησης.

response = runtime_sm_client.invoke_endpoint(
    EndpointName=endpoint_name,
    ContentType="application/vnd.sagemaker-triton.binary+json;json-header-size={}".format(
        header_length
    ),
    Body=request_body,
)

Συμπέρασμα

Σε αυτήν την ανάρτηση, παρουσιάσαμε πώς μπορείτε να δημιουργήσετε σύνολα μοντέλων που εκτελούνται σε μία μόνο παρουσία στο SageMaker. Αυτό το σχέδιο σχεδίασης μπορεί να είναι χρήσιμο για το συνδυασμό οποιασδήποτε λογικής προεπεξεργασίας και μεταεπεξεργασίας μαζί με προβλέψεις συμπερασμάτων. Το SageMaker χρησιμοποιεί το Triton για να εκτελέσει το συμπέρασμα συνόλου σε ένα μόνο κοντέινερ σε ένα στιγμιότυπο που υποστηρίζει όλα τα κύρια πλαίσια.

Για περισσότερα δείγματα σχετικά με τα σύνολα Triton στο SageMaker, ανατρέξτε στο GitHub repo. Δοκίμασέ το!


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

Εκτελέστε μοντέλα ML συνόλου στο Amazon SageMaker PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.Τζέιμς Παρκ είναι αρχιτέκτονας λύσεων στο Amazon Web Services. Συνεργάζεται με την Amazon.com για το σχεδιασμό, την κατασκευή και την ανάπτυξη τεχνολογικών λύσεων στο AWS και έχει ιδιαίτερο ενδιαφέρον για την τεχνητή νοημοσύνη και τη μηχανική μάθηση. Στον ελεύθερο χρόνο του, του αρέσει να αναζητά νέους πολιτισμούς, νέες εμπειρίες και να ενημερώνεται για τις τελευταίες τάσεις της τεχνολογίας.

Εκτελέστε μοντέλα ML συνόλου στο Amazon SageMaker PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.Vikram Elango είναι Senior AI/ML Specialist Solutions Architect στην Amazon Web Services, με έδρα τη Βιρτζίνια των ΗΠΑ. Η Vikram βοηθά τους πελάτες του χρηματοοικονομικού και ασφαλιστικού κλάδου με ηγετικό σχεδιασμό και σκέψη να δημιουργήσουν και να αναπτύξουν εφαρμογές μηχανικής εκμάθησης σε κλίμακα. Επί του παρόντος επικεντρώνεται στην επεξεργασία φυσικής γλώσσας, στην υπεύθυνη τεχνητή νοημοσύνη, στη βελτιστοποίηση συμπερασμάτων και στην κλιμάκωση της ML σε όλη την επιχείρηση. Στον ελεύθερο χρόνο του, του αρέσει να ταξιδεύει, να κάνει πεζοπορία, να μαγειρεύει και να κατασκηνώνει με την οικογένειά του.

Εκτελέστε μοντέλα ML συνόλου στο Amazon SageMaker PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.Saurabh Trikande είναι Ανώτερος Διευθυντής Προϊόντων για το Amazon SageMaker Inference. Είναι παθιασμένος με τη συνεργασία με πελάτες και παρακινείται από τον στόχο του εκδημοκρατισμού της μηχανικής μάθησης. Εστιάζει στις βασικές προκλήσεις που σχετίζονται με την ανάπτυξη πολύπλοκων εφαρμογών ML, μοντέλων ML πολλαπλών μισθωτών, βελτιστοποιήσεις κόστους και καθιστώντας την ανάπτυξη μοντέλων βαθιάς μάθησης πιο προσιτή. Στον ελεύθερο χρόνο του, ο Saurabh απολαμβάνει την πεζοπορία, μαθαίνει για καινοτόμες τεχνολογίες, ακολουθεί το TechCrunch και περνά χρόνο με την οικογένειά του.

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

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