Voraussetzungen für die Verwendung von Amazon SageMaker Inference Recommender - Amazon SageMaker

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Voraussetzungen für die Verwendung von Amazon SageMaker Inference Recommender

Bevor Sie Amazon SageMaker Inference Recommender verwenden können, müssen Sie die erforderlichen Schritte ausführen. Als Beispiel zeigen wir, wie Sie ein vortrainiertes Modell PyTorch (v1.7.1) ResNet -18 für beide Arten von Amazon SageMaker Inference Recommender-Empfehlungsjobs verwenden können. Die gezeigten Beispiele verwenden die. AWS SDK for Python (Boto3)

Anmerkung
  • Die folgenden Codebeispiele verwenden Python. Entfernen Sie das ! Präfixzeichen, wenn Sie eines der folgenden Codebeispiele in Ihrem Terminal ausführen oder AWS CLI.

  • Sie können die folgenden Beispiele mit dem Python 3-Kernel (TensorFlow 2.6 Python 3.8 CPU Optimized) in einem Amazon SageMaker Studio-Notebook ausführen. Weitere Informationen zu Studio finden Sie unterAmazon SageMaker Studio.

  1. Erstellen Sie eine IAM Rolle für Amazon SageMaker.

    Erstellen Sie eine IAM Rolle für Amazon SageMaker , der die AmazonSageMakerFullAccess IAM verwaltete Richtlinie angehängt ist.

  2. Richten Sie Ihre Umgebung ein.

    Importieren Sie Abhängigkeiten und erstellen Sie Variablen für Sie AWS-Region, Ihre SageMaker IAM Rolle (aus Schritt 1) und den SageMaker Client.

    !pip install --upgrade pip awscli botocore boto3 --quiet from sagemaker import get_execution_role, Session, image_uris import boto3 region = boto3.Session().region_name role = get_execution_role() sagemaker_client = boto3.client("sagemaker", region_name=region) sagemaker_session = Session()
  3. (Optional) Überprüfen Sie bestehende Modelle, die von Inference Recommender bewertet wurden.

    Inference Recommender vergleicht Modelle beliebter Modellzoos. Inference Recommender unterstützt Ihr Modell, auch wenn es noch nicht einem Benchmarking unterzogen wurde.

    ListModelMetaData wird verwendet, um ein Antwortobjekt abzurufen, das die Domain-, Framework-, Aufgaben- und Modellnamen von Modellen für Machine Learning auflistet, die in gängigen Modellzoos zu finden sind.

    In späteren Schritten verwenden Sie die Domäne, das Framework, die Framework-Version, die Aufgabe und den Modellnamen, um sowohl ein Docker-Image für Inferenzen auszuwählen als auch Ihr Modell bei SageMaker Model Registry zu registrieren. Im Folgenden wird gezeigt, wie Modellmetadaten SDK für Python (Boto3) aufgelistet werden:

    list_model_metadata_response=sagemaker_client.list_model_metadata()

    Die Ausgabe umfasst Modellzusammenfassungen (ModelMetadataSummaries) und Antwortmetadaten (ResponseMetadata), die dem folgenden Beispiel ähneln:

    { 'ModelMetadataSummaries': [{ 'Domain': 'NATURAL_LANGUAGE_PROCESSING', 'Framework': 'PYTORCH:1.6.0', 'Model': 'bert-base-cased', 'Task': 'FILL_MASK' }, { 'Domain': 'NATURAL_LANGUAGE_PROCESSING', 'Framework': 'PYTORCH:1.6.0', 'Model': 'bert-base-uncased', 'Task': 'FILL_MASK' }, { 'Domain': 'COMPUTER_VISION', 'Framework': 'MXNET:1.8.0', 'Model': 'resnet18v2-gluon', 'Task': 'IMAGE_CLASSIFICATION' }, { 'Domain': 'COMPUTER_VISION', 'Framework': 'PYTORCH:1.6.0', 'Model': 'resnet152', 'Task': 'IMAGE_CLASSIFICATION' }], 'ResponseMetadata': { 'HTTPHeaders': { 'content-length': '2345', 'content-type': 'application/x-amz-json-1.1', 'date': 'Tue, 19 Oct 2021 20:52:03 GMT', 'x-amzn-requestid': 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' }, 'HTTPStatusCode': 200, 'RequestId': 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx', 'RetryAttempts': 0 } }

    Für diese Demo verwenden wir ein PyTorch (v1.7.1) ResNet -18-Modell, um die Bildklassifizierung durchzuführen. Im folgenden Python-Codebeispiel werden das Framework, die Framework-Version, die Domain und die Aufgabe zur späteren Verwendung in Variablen gespeichert:

    # ML framework details framework = 'pytorch' framework_version = '1.7.1' # ML model details ml_domain = 'COMPUTER_VISION' ml_task = 'IMAGE_CLASSIFICATION'
  4. Laden Sie Ihr Modell für Machine Learning auf Amazon S3 hoch.

    Verwenden Sie dieses PyTorch (v1.7.1) ResNet -18-Modell, wenn Sie kein vortrainiertes Modell für maschinelles Lernen haben:

    # Optional: Download a sample PyTorch model import torch from torchvision import models, transforms, datasets # Create an example input for tracing image = torch.zeros([1, 3, 256, 256], dtype=torch.float32) # Load a pretrained resnet18 model from TorchHub model = models.resnet18(pretrained=True) # Tell the model we are using it for evaluation (not training). Note this is required for Inferentia compilation. model.eval() model_trace = torch.jit.trace(model, image) # Save your traced model model_trace.save('model.pth')

    Laden Sie ein Beispiel für ein Inferenzskript inference.py herunter. Erstellen Sie ein code Verzeichnis und verschieben Sie das Inferenzskript in das code Verzeichnis.

    # Download the inference script !wget https://aws-ml-blog-artifacts.s3.us-east-2.amazonaws.com/inference.py # move it into a code/ directory !mkdir code !mv inference.py code/

    Amazon SageMaker verlangt, dass vortrainierte Modelle für maschinelles Lernen als komprimierte TAR Datei verpackt werden (*.tar.gz). Komprimieren Sie Ihr Modell und Ihr Inferenzskript, um diese Anforderung zu erfüllen:

    !tar -czf test.tar.gz model.pth code/inference.py

    Wenn Ihr Endpunkt bereitgestellt wird, werden die Dateien im Archiv /opt/ml/model/ auf den Endpunkt extrahiert.

    Nachdem Sie Ihr Modell und die Modellartefakte als .tar.gz Datei komprimiert haben, laden Sie sie in Ihren Amazon S3-Bucket hoch. Das folgende Beispiel zeigt, wie Sie Ihr Modell mit dem auf Amazon S3 hochladen AWS CLI:

    !aws s3 cp test.tar.gz s3://{your-bucket}/models/
  5. Wählen Sie ein vorgefertigtes Docker-Inferenz-Image aus oder erstellen Sie Ihr eigenes Inference-Docker-Image.

    SageMaker bietet Container für seine integrierten Algorithmen und vorgefertigte Docker-Images für einige der gängigsten Frameworks für maschinelles Lernen wie ApacheMXNet, TensorFlow PyTorch, und Chainer. Eine vollständige Liste der verfügbaren SageMaker Images finden Sie unter Verfügbare Deep Learning Containers Learning-Container-Images.

    Wenn keiner der vorhandenen SageMaker Container Ihren Anforderungen entspricht und Sie keinen eigenen Container haben, erstellen Sie ein neues Docker-Image. Weitere Informationen zum Erstellen eines Docker-Image finden Sie unter Container mit benutzerdefiniertem Inferenzcode.

    Im Folgenden wird gezeigt, wie ein Inferenzbild der PyTorch Version 1.7.1 mit Python abgerufen wird SageMaker : SDK

    from sagemaker import image_uris ## Uncomment and replace with your own values if you did not define ## these variables a previous step. #framework = 'pytorch' #framework_version = '1.7.1' # Note: you can use any CPU-based instance here, # this is just to set the arch as CPU for the Docker image instance_type = 'ml.m5.2xlarge' image_uri = image_uris.retrieve(framework, region, version=framework_version, py_version='py3', instance_type=instance_type, image_scope='inference')

    Eine Liste der verfügbaren SageMaker Instances finden Sie unter SageMakerAmazon-Preise.

  6. Erstellen Sie ein Beispiel-Payload-Archiv.

    Erstellen Sie ein Archiv, das einzelne Dateien enthält, die das Lasttest-Tool an Ihre SageMaker Endgeräte senden kann. Ihr Inferenzcode muss in der Lage sein, die Dateiformate aus der Beispiel-Payload zu lesen.

    Im Folgenden wird ein JPG-Bild heruntergeladen, das in diesem Beispiel in einem späteren Schritt für das Modell ResNet -18 verwendet wird.

    !wget https://cdn.pixabay.com/photo/2020/12/18/05/56/flowers-5841251_1280.jpg

    Komprimieren Sie die Beispiel-Payload als Tarball:

    !tar -cvzf payload.tar.gz flowers-5841251_1280.jpg

    Laden Sie die Beispielnutzlast auf Amazon S3 hoch und notieren Sie sich Amazon S3URI:

    !aws s3 cp payload.tar.gz s3://{bucket}/models/

    Sie benötigen den Amazon S3 URI in einem späteren Schritt, also speichern Sie ihn in einer Variablen:

    bucket_prefix='models' bucket = '<your-bucket-name>' # Provide the name of your S3 bucket payload_s3_key = f"{bucket_prefix}/payload.tar.gz" sample_payload_url= f"s3://{bucket}/{payload_s3_key}"
  7. Bereiten Sie Ihre Modelleingaben für den Job mit den Empfehlungen vor

    Für die letzte Voraussetzung haben Sie zwei Möglichkeiten, Ihre Modelleingabe vorzubereiten. Sie können Ihr Modell entweder bei SageMaker Model Registry registrieren, das Sie zum Katalogisieren von Modellen für die Produktion verwenden können, oder Sie können ein SageMaker Modell erstellen und es vor ContainerConfig Ort angeben, wenn Sie einen Empfehlungsauftrag erstellen. Die erste Option eignet sich am besten, wenn Sie die Funktionen von Model Registry nutzen möchten, z. B. die Verwaltung von Modellversionen und die Automatisierung der Modellbereitstellung. Die zweite Option ist ideal, wenn Sie schnell loslegen möchten. Für die erste Option fahren Sie mit Schritt 7 fort. Für die zweite Option überspringen Sie Schritt 7 und fahren Sie mit Schritt 8 fort.

  8. Option 1: Registrieren Sie Ihr Modell in der Modellregistrierung

    Mit SageMaker Model Registry können Sie Modelle für die Produktion katalogisieren, Modellversionen verwalten, Metadaten (z. B. Trainingsmetriken) mit einem Modell verknüpfen, den Genehmigungsstatus eines Modells verwalten, Modelle für die Produktion bereitstellen und die Modellbereitstellung mit CI/CD automatisieren.

    Wenn Sie SageMaker Model Registry verwenden, um Ihre Modelle nachzuverfolgen und zu verwalten, werden sie als versioniertes Modellpaket innerhalb von Modellpaketgruppen dargestellt. Modellpakete ohne Version sind nicht Teil einer Modellgruppe. Modellpaketgruppen enthalten mehrere Versionen oder Iterationen eines Modells. Sie müssen zwar nicht für jedes Modell in der Registrierung erstellt werden, sie helfen jedoch dabei, verschiedene Modelle zu organisieren, die alle demselben Zweck dienen, und ermöglichen eine automatische Versionsverwaltung.

    Um Amazon SageMaker Inference Recommender verwenden zu können, benötigen Sie ein versioniertes Modellpaket. Sie können ein versioniertes Modellpaket programmgesteuert mit AWS SDK for Python (Boto3) oder mit Amazon SageMaker Studio Classic erstellen. Um ein versioniertes Modellpaket programmgesteuert zu erstellen, erstellen Sie zunächst eine Modellpaketgruppe mit dem. CreateModelPackageGroup API Als Nächstes erstellen Sie ein Modellpaket mit dem. CreateModelPackage API Durch den Aufruf dieser Methode wird ein versioniertes Modellpaket erstellt.

    Unter Erstellen einer Modellgruppe und Registrieren Sie eine Modellversion finden Sie detaillierte Anweisungen zum programmgesteuerten und interaktiven Erstellen einer Modellpaketgruppe bzw. zum Erstellen eines versionierten Modellpakets mit dem AWS SDK for Python (Boto3) und Amazon Studio Classic. SageMaker

    Das folgende Codebeispiel zeigt, wie Sie ein versioniertes Modellpaket mit dem AWS SDK for Python (Boto3) erstellen.

    Anmerkung

    Sie müssen das Modellpaket nicht genehmigen, um einen Inference Recommender-Job zu erstellen.

    1. Erstellen einer Modellpaketgruppe

      Erstellen Sie eine Modellpaketgruppe mit dem. CreateModelPackageGroup API Geben Sie einen Namen für die Modellpaketgruppe für ModelPackageGroupName und optional eine Beschreibung des Modellpakets in das ModelPackageGroupDescription Feld ein.

      model_package_group_name = '<INSERT>' model_package_group_description = '<INSERT>' model_package_group_input_dict = { "ModelPackageGroupName" : model_package_group_name, "ModelPackageGroupDescription" : model_package_group_description, } model_package_group_response = sagemaker_client.create_model_package_group(**model_package_group_input_dict)

      Eine vollständige Liste der optionalen und erforderlichen Argumente, an die Sie übergeben können, finden Sie im SageMaker APIAmazon-Referenzhandbuch CreateModelPackageGroup.

      Erstellen Sie ein Modellpaket, indem Sie ein Docker-Image angeben, das Ihren Inferenzcode und den Amazon S3 S3-Speicherort Ihrer Modellartefakte ausführt und Werte für bereitstellt. InferenceSpecification InferenceSpecificationsollte Informationen über Inferenzjobs enthalten, die mit Modellen ausgeführt werden können, die auf diesem Modellpaket basieren, einschließlich der folgenden:

      • Die ECR Amazon-Pfade von Bildern, auf denen Ihr Inferenzcode ausgeführt wird.

      • (Optional) Die Instance-Typen, die das Modellpaket für Transformationsjobs unterstützt, und die Echtzeit-Endpunkte, die für Inferenzen verwendet werden.

      • Die Eingabe- und Ausgabeinhaltsformate, die das Modellpaket für Inferenzen unterstützt.

      Darüber hinaus müssen Sie beim Erstellen eines Modellpakets die folgenden Parameter angeben:

      • Domain: Der Bereich des Machine Learning für Ihr Modellpaket und seine Komponenten. Zu den gängigen Bereichen des Machine Learnings gehören Computer Vision und die natürliche Sprachverarbeitung.

      • Aufgabe: Die Aufgabe des maschinellen Lernens, die Ihr Modellpaket erfüllt. Zu den gängigen Machine-Learning-Aufgaben gehören die Objekterkennung und die Image-Klassifizierung. Geben Sie "OTHER" an, wenn keine der im APIReferenzhandbuch aufgeführten Aufgaben Ihrem Anwendungsfall entspricht. Eine Liste der unterstützten Aufgaben für maschinelles Lernen finden Sie in den Beschreibungen der API Aufgabenfelder.

      • SamplePayloadUrl: Der Amazon Simple Storage Service (Amazon S3) -Pfad, in dem die Beispielnutzdaten gespeichert werden. Dieser Pfad muss auf ein einzelnes GZIP komprimiertes TAR Archiv verweisen (Suffix .tar.gz).

      • Framework: Das Framework für Machine Learning des Modellpakets Container Image.

      • FrameworkVersion: Die Framework-Version des Container-Images des Modellpakets.

      Wenn Sie eine Zulassungsliste mit Instance-Typen angeben, anhand derer in Echtzeit Inferenzen für die generiert werden können SupportedRealtimeInferenceInstanceTypes, schränkt Inference Recommender den Suchraum für Instance-Typen während eines Jobs ein. Default Verwenden Sie diesen Parameter, wenn Sie Budgetbeschränkungen haben oder wissen, dass es bestimmte Instance-Typen gibt, die Ihr Modell und Ihr Container-Image unterstützen können.

      In einem vorherigen Schritt haben wir ein vortrainiertes ResNet 18-Modell heruntergeladen und es in einem Amazon S3 S3-Bucket in einem Verzeichnis namens models gespeichert. Wir haben ein Deep-Learning-Container-Inferenzbild PyTorch (v1.7.1) abgerufen und es URI in einer Variablen namens gespeichert. image_uri Verwenden Sie diese Variablen im folgenden Codebeispiel, um ein Wörterbuch zu definieren, das als Eingabe für das verwendet wird. CreateModelPackageAPI

      # Provide the Amazon S3 URI of your compressed tarfile # so that Model Registry knows where to find your model artifacts bucket_prefix='models' bucket = '<your-bucket-name>' # Provide the name of your S3 bucket model_s3_key = f"{bucket_prefix}/test.tar.gz" model_url= f"s3://{bucket}/{model_s3_key}" # Similar open source model to the packaged model # The name of the ML model as standardized by common model zoos nearest_model_name = 'resnet18' # The supported MIME types for input and output data. In this example, # we are using images as input. input_content_type='image/jpeg' # Optional - provide a description of your model. model_package_description = '<INSERT>' ## Uncomment if you did not store the domain and task in an earlier ## step #ml_domain = 'COMPUTER_VISION' #ml_task = 'IMAGE_CLASSIFICATION' ## Uncomment if you did not store the framework and framework version ## in a previous step. #framework = 'PYTORCH' #framework_version = '1.7.1' # Optional: Used for optimizing your model using SageMaker Neo # PyTorch uses NCHW format for images data_input_configuration = "[[1,3,256,256]]" # Create a dictionary to use as input for creating a model pacakge group model_package_input_dict = { "ModelPackageGroupName" : model_package_group_name, "ModelPackageDescription" : model_package_description, "Domain": ml_domain, "Task": ml_task, "SamplePayloadUrl": sample_payload_url, "InferenceSpecification": { "Containers": [ { "Image": image_uri, "ModelDataUrl": model_url, "Framework": framework.upper(), "FrameworkVersion": framework_version, "NearestModelName": nearest_model_name, "ModelInput": {"DataInputConfig": data_input_configuration} } ], "SupportedContentTypes": [input_content_type] } }
    2. Erstellen Sie ein Modellpaket

      Verwenden Sie die CreateModelPackageAPI, um ein Modellpaket zu erstellen. Übergeben Sie das im vorherigen Schritt definierte Eingabewörterbuch:

      model_package_response = sagemaker_client.create_model_package(**model_package_input_dict)

      Sie benötigen das ModellpaketARN, um Amazon SageMaker Inference Recommender verwenden zu können. Notieren Sie sich das Modell ARN des Pakets oder speichern Sie es in einer Variablen:

      model_package_arn = model_package_response["ModelPackageArn"] print('ModelPackage Version ARN : {}'.format(model_package_arn))
  9. Option 2: Erstellen Sie ein Modell und konfigurieren Sie das ContainerConfig Feld

    Verwenden Sie diese Option, wenn Sie einen Job mit Inferenzempfehlungen starten möchten und Ihr Modell nicht in der Modellregistrierung registrieren müssen. In den folgenden Schritten erstellen Sie ein Modell in SageMaker und konfigurieren das ContainerConfig Feld als Eingabe für den Recommendations-Job.

    1. Erstellen eines Modells

      Erstellen Sie ein Modell mit dem CreateModelAPI. Ein Beispiel, das diese Methode aufruft, wenn ein Modell für SageMaker Hosting bereitgestellt wird, finden Sie unter Create a Model (AWS SDK for Python (Boto3)).

      In einem vorherigen Schritt haben wir ein vortrainiertes ResNet 18-Modell heruntergeladen und es in einem Amazon S3 S3-Bucket in einem Verzeichnis namens models gespeichert. Wir haben ein Deep-Learning-Container-Inferenzbild PyTorch (v1.7.1) abgerufen und es URI in einer Variablen namens gespeichert. image_uri Wir verwenden diese Variablen im folgenden Codebeispiel, in dem wir ein Wörterbuch definieren, das als Eingabe für die verwendet wird. CreateModel API

      model_name = '<name_of_the_model>' # Role to give SageMaker permission to access AWS services. sagemaker_role= "arn:aws:iam::<region>:<account>:role/*" # Provide the Amazon S3 URI of your compressed tarfile # so that Model Registry knows where to find your model artifacts bucket_prefix='models' bucket = '<your-bucket-name>' # Provide the name of your S3 bucket model_s3_key = f"{bucket_prefix}/test.tar.gz" model_url= f"s3://{bucket}/{model_s3_key}" #Create model create_model_response = sagemaker_client.create_model( ModelName = model_name, ExecutionRoleArn = sagemaker_role, PrimaryContainer = { 'Image': image_uri, 'ModelDataUrl': model_url, })
    2. Konfigurieren Sie das ContainerConfig Feld

      Als Nächstes müssen Sie das ContainerConfigFeld mit dem Modell konfigurieren, das Sie gerade erstellt haben, und darin die folgenden Parameter angeben:

      • Domain: Die Domain des Modells für Machine Learning und seine Komponenten, z. B. Computer Vision oder Verarbeitung natürlicher Sprache.

      • Task: Die Aufgabe des maschinellen Lernens, die das Modell erfüllt, z. B. Bildklassifizierung oder Objekterkennung.

      • PayloadConfig: Die Konfiguration für die Nutzlast für einen Empfehlungsjob. Weitere Informationen zu den Teilbereichen finden Sie unter RecommendationJobPayloadConfig.

      • Framework: Das Framework für maschinelles Lernen des Container-Images, z. PyTorch B.

      • FrameworkVersion: Die Framework-Version des Container-Images.

      • (Optional) SupportedInstanceTypes: Eine Liste der Instance-Typen, die zur Erzeugung von Schlussfolgerungen in Echtzeit verwendet werden.

      Wenn Sie den SupportedInstanceTypes Parameter verwenden, schränkt Inference Recommender den Suchraum für Instance-Typen während eines Jobs Default ein. Verwenden Sie diesen Parameter, wenn Sie Budgetbeschränkungen haben oder wissen, dass es bestimmte Instance-Typen gibt, die Ihr Modell und Ihr Container-Image unterstützen können.

      Im folgenden Codebeispiel verwenden wir die zuvor definierten Parameter zusammen mit, um ein Wörterbuch zu definierenNearestModelName, das als Eingabe für die verwendet wird CreateInferenceRecommendationsJobAPI.

      ## Uncomment if you did not store the domain and task in a previous step #ml_domain = 'COMPUTER_VISION' #ml_task = 'IMAGE_CLASSIFICATION' ## Uncomment if you did not store the framework and framework version in a previous step #framework = 'PYTORCH' #framework_version = '1.7.1' # The name of the ML model as standardized by common model zoos nearest_model_name = 'resnet18' # The supported MIME types for input and output data. In this example, # we are using images as input input_content_type='image/jpeg' # Optional: Used for optimizing your model using SageMaker Neo # PyTorch uses NCHW format for images data_input_configuration = "[[1,3,256,256]]" # Create a dictionary to use as input for creating an inference recommendation job container_config = { "Domain": ml_domain, "Framework": framework.upper(), "FrameworkVersion": framework_version, "NearestModelName": nearest_model_name, "PayloadConfig": { "SamplePayloadUrl": sample_payload_url, "SupportedContentTypes": [ input_content_type ] }, "DataInputConfig": data_input_configuration "Task": ml_task, }