Erstellen eines Multimodell-Endpunkts - 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.

Erstellen eines Multimodell-Endpunkts

Sie können die SageMaker Konsole oder die verwenden, AWS SDK for Python (Boto) um einen Endpunkt mit mehreren Modellen zu erstellen. Informationen zum Erstellen eines CPU oder eines GPU gesicherten Endpunkts über die Konsole finden Sie im Konsolenverfahren in den folgenden Abschnitten. Wenn Sie mit dem einen Endpunkt mit mehreren Modellen erstellen möchten AWS SDK for Python (Boto), verwenden Sie entweder das GPU Verfahren CPU oder in den folgenden Abschnitten. Die GPU Workflows CPU und sind ähnlich, weisen jedoch mehrere Unterschiede auf, z. B. die Container-Anforderungen.

Erstellen eines Multimodell-Endpunkts (Konsole)

Über die Konsole können Sie CPU sowohl Endgeräte als auch GPU gesicherte Multimodell-Endpoints erstellen. Gehen Sie wie folgt vor, um über die Konsole einen Endpunkt mit mehreren Modellen zu erstellen. SageMaker

So erstellen Sie einen Multimodell-Endpunkt (Konsole)
  1. Öffnen Sie die SageMaker Amazon-Konsole unter https://console.aws.amazon.com/sagemaker/.

  2. Wählen Sie Model (Modell) und wählen Sie dann aus der Gruppe Inference (Inferenz) die Option Create model (Modell erstellen) aus.

  3. Geben Sie für Model name (Modellname) einen Namen ein.

  4. Wählen oder erstellen Sie unter IAM Rolle eine Rolle, der die AmazonSageMakerFullAccess IAM Richtlinie beigefügt ist. IAM

  5. Wählen Sie im Abschnitt Containerdefinition für Modellartefakte und Optionen für Inference-Bilder bereitstellen die Option Mehrere Modelle verwenden aus.

    Der Abschnitt auf der Seite Modell erstellen, in dem Sie Mehrere Modelle verwenden auswählen können.
  6. Geben Sie für das Inference-Container-Image den ECR Amazon-Pfad für Ihr gewünschtes Container-Image ein.

    Für GPU Modelle müssen Sie einen Container verwenden, der vom NVIDIA Triton Inference Server unterstützt wird. Eine Liste der Container-Images, die mit GPU unterstützten Endpunkten funktionieren, finden Sie in den NVIDIATriton Inference Containers (nur SM-Unterstützung). Weitere Informationen zum Triton Inference Server finden Sie unter NVIDIA Triton Inference Server verwenden mit. SageMaker

  7. Wählen Sie Modell erstellen aus.

  8. Stellen Sie Ihren Multimodell-Endpunkt genauso wie einen Einzelmodell-Endpunkt bereit. Detaillierte Anweisungen finden Sie unter Stellen Sie das Modell für SageMaker Hosting-Services bereit.

Erstellen Sie einen Endpunkt mit mehreren Modellen mithilfe von CPUs AWS SDK for Python (Boto3)

Verwenden Sie den folgenden Abschnitt, um einen durch CPU Instances gestützten Endpunkt mit mehreren Modellen zu erstellen. Sie erstellen einen Endpunkt mit mehreren Modellen mithilfe von Amazon SageMaker create_model, create_endpoint_config, und zwar create_endpointAPIsgenauso, wie Sie einen Endpunkt mit einem einzigen Modell erstellen würden, jedoch mit zwei Änderungen. Wenn Sie den Container für das Modell definieren, müssen Sie einen neuen Mode-Parameterwert übergeben, MultiModel. Sie müssen auch das Feld ModelDataUrl übergeben, das das Präfix in Amazon S3 angibt, in dem sich die Modellartefakte befinden, anstatt den Pfad zu einem Artefakt mit nur einem Modell, wie beim Bereitstellen eines einzelnen Modells.

Ein Beispielnotizbuch, mit dem mehrere XGBoost Modelle SageMaker auf einem Endpunkt bereitgestellt werden, finden Sie unter XGBoostBeispielnotizbuch für Endgeräte mit mehreren Modellen.

Das folgende Verfahren beschreibt die wichtigsten Schritte, die in diesem Beispiel zur Erstellung eines CPU gesicherten Endpunkts mit mehreren Modellen verwendet wurden.

Um das Modell bereitzustellen (AWS SDKfür Python (Boto 3))
  1. Besorgen Sie sich einen Container mit einem Image, das die Bereitstellung von Multimodell-Endpunkten unterstützt. Eine Liste der integrierten Algorithmen und Framework-Container, die Multimodell-Endpunkte unterstützen, finden Sie unter Unterstützte Algorithmen, Frameworks und Instances. In diesem Beispiel verwenden wir den integrierten Algorithmus K-nearest neighbors (k-NN)-Algorithmus. Wir rufen die SageMaker SDKPython-Utility-Funktion image_uris.retrieve() auf, um die Adresse für das integrierte Algorithmus-Image von K-Nearest Neighbors abzurufen.

    import sagemaker region = sagemaker_session.boto_region_name image = sagemaker.image_uris.retrieve("knn",region=region) container = { 'Image': image, 'ModelDataUrl': 's3://<BUCKET_NAME>/<PATH_TO_ARTIFACTS>', 'Mode': 'MultiModel' }
  2. Besorgen Sie sich einen AWS SDK for Python (Boto3) SageMaker Client und erstellen Sie das Modell, das diesen Container verwendet.

    import boto3 sagemaker_client = boto3.client('sagemaker') response = sagemaker_client.create_model( ModelName = '<MODEL_NAME>', ExecutionRoleArn = role, Containers = [container])
  3. (Optional) Wenn Sie eine serielle Inferenz-Pipeline verwenden, rufen Sie die zusätzlichen Container ab, die in der Pipeline enthalten sein sollen, und fügen sie in das Argument Containers von CreateModel ein:

    preprocessor_container = { 'Image': '<ACCOUNT_ID>.dkr.ecr.<REGION_NAME>.amazonaws.com/<PREPROCESSOR_IMAGE>:<TAG>' } multi_model_container = { 'Image': '<ACCOUNT_ID>.dkr.ecr.<REGION_NAME>.amazonaws.com/<IMAGE>:<TAG>', 'ModelDataUrl': 's3://<BUCKET_NAME>/<PATH_TO_ARTIFACTS>', 'Mode': 'MultiModel' } response = sagemaker_client.create_model( ModelName = '<MODEL_NAME>', ExecutionRoleArn = role, Containers = [preprocessor_container, multi_model_container] )
    Anmerkung

    Sie können nur einen multi-model-enabled Endpunkt in einer seriellen Inferenzpipeline verwenden.

  4. (Optional) Wenn Ihr Anwendungsfall vom Modell-Caching nicht profitiert, setzen Sie den Wert des Feldes ModelCacheSetting des Parameters MultiModelConfig auf Disabled und nehmen Sie ihn in das Argument Container des Aufrufs von create_model auf. Der Wert für das Feld ModelCacheSetting ist standardmäßig Enabled.

    container = { 'Image': image, 'ModelDataUrl': 's3://<BUCKET_NAME>/<PATH_TO_ARTIFACTS>', 'Mode': 'MultiModel' 'MultiModelConfig': { // Default value is 'Enabled' 'ModelCacheSetting': 'Disabled' } } response = sagemaker_client.create_model( ModelName = '<MODEL_NAME>', ExecutionRoleArn = role, Containers = [container] )
  5. Konfigurieren Sie den Multimodell-Endpunkt für das Modell. Wir empfehlen, Ihre Endpunkte mit mindestens zwei Instances zu konfigurieren. Dies ermöglicht SageMaker die Bereitstellung eines hochverfügbaren Satzes von Vorhersagen in mehreren Availability Zones für die Modelle.

    response = sagemaker_client.create_endpoint_config( EndpointConfigName = '<ENDPOINT_CONFIG_NAME>', ProductionVariants=[ { 'InstanceType': 'ml.m4.xlarge', 'InitialInstanceCount': 2, 'InitialVariantWeight': 1, 'ModelName': '<MODEL_NAME>', 'VariantName': 'AllTraffic' } ] )
    Anmerkung

    Sie können nur einen multi-model-enabled Endpunkt in einer seriellen Inferenzpipeline verwenden.

  6. Erstellen Sie den Multimodell-Endpunkt mit den Parametern EndpointName und EndpointConfigName.

    response = sagemaker_client.create_endpoint( EndpointName = '<ENDPOINT_NAME>', EndpointConfigName = '<ENDPOINT_CONFIG_NAME>')

Erstellen Sie einen Endpunkt mit mehreren Modellen mithilfe von GPUs AWS SDK for Python (Boto3)

Verwenden Sie den folgenden Abschnitt, um einen GPU gesicherten Endpunkt mit mehreren Modellen zu erstellen. Sie erstellen einen Endpunkt mit mehreren Modellen mithilfe von Amazon SageMaker create_modelcreate_endpoint_config, und zwar create_endpointAPIsähnlich wie beim Erstellen von Einzelmodell-Endpunkten, es gibt jedoch mehrere Änderungen. Wenn Sie den Container für das Modell definieren, müssen Sie einen neuen Mode-Parameterwert übergeben, MultiModel. Sie müssen auch das Feld ModelDataUrl übergeben, das das Präfix in Amazon S3 angibt, in dem sich die Modellartefakte befinden, anstatt den Pfad zu einem Artefakt mit nur einem Modell, wie beim Bereitstellen eines einzelnen Modells. Für GPU gesicherte Endpunkte mit mehreren Modellen müssen Sie außerdem einen Container mit dem NVIDIA Triton Inference Server verwenden, der für die Ausführung auf Instances optimiert ist. GPU Eine Liste der Container-Images, die mit GPU unterstützten Endpunkten funktionieren, finden Sie in den NVIDIATriton Inference Containers (nur SM-Unterstützung).

Ein Beispiel-Notizbuch, das demonstriert, wie Sie einen Multimodell-Endpoint erstellen, der von unterstützt wirdGPUs, finden Sie unter Ausführen mehrerer Deep-Learning-Modelle auf GPUs Amazon SageMaker Multi-Model-Endpoints (). MME

Das folgende Verfahren beschreibt die wichtigsten Schritte zur Erstellung eines gesicherten Endpunkts mit mehreren Modellen. GPU

Um das Modell bereitzustellen (AWS SDKfür Python (Boto 3))
  1. Definieren Sie das Container-Image. Um einen Endpunkt mit mehreren Modellen mit GPU Unterstützung für ResNet Modelle zu erstellen, definieren Sie den Container so, dass er das NVIDIATriton Server-Image verwendet. Dieser Container unterstützt Endpunkte mit mehreren Modellen und ist für die Ausführung auf Instanzen optimiert. GPU Wir rufen die SageMaker SDKPython-Utility-Funktion image_uris.retrieve() auf, um die Adresse für das Bild abzurufen. Beispielsweise:

    import sagemaker region = sagemaker_session.boto_region_name // Find the sagemaker-tritonserver image at // https://github.com/aws/amazon-sagemaker-examples/blob/main/sagemaker-triton/resnet50/triton_resnet50.ipynb // Find available tags at https://github.com/aws/deep-learning-containers/blob/master/available_images.md#nvidia-triton-inference-containers-sm-support-only image = "<ACCOUNT_ID>.dkr.ecr.<REGION_NAME>.amazonaws.com/sagemaker-tritonserver:<TAG>".format( account_id=account_id_map[region], region=region ) container = { 'Image': image, 'ModelDataUrl': 's3://<BUCKET_NAME>/<PATH_TO_ARTIFACTS>', 'Mode': 'MultiModel', "Environment": {"SAGEMAKER_TRITON_DEFAULT_MODEL_NAME": "resnet"}, }
  2. Holen Sie sich einen AWS SDK for Python (Boto3) SageMaker Client und erstellen Sie das Modell, das diesen Container verwendet.

    import boto3 sagemaker_client = boto3.client('sagemaker') response = sagemaker_client.create_model( ModelName = '<MODEL_NAME>', ExecutionRoleArn = role, Containers = [container])
  3. (Optional) Wenn Sie eine serielle Inferenz-Pipeline verwenden, rufen Sie die zusätzlichen Container ab, die in der Pipeline enthalten sein sollen, und fügen sie in das Argument Containers von CreateModel ein:

    preprocessor_container = { 'Image': '<ACCOUNT_ID>.dkr.ecr.<REGION_NAME>.amazonaws.com/<PREPROCESSOR_IMAGE>:<TAG>' } multi_model_container = { 'Image': '<ACCOUNT_ID>.dkr.ecr.<REGION_NAME>.amazonaws.com/<IMAGE>:<TAG>', 'ModelDataUrl': 's3://<BUCKET_NAME>/<PATH_TO_ARTIFACTS>', 'Mode': 'MultiModel' } response = sagemaker_client.create_model( ModelName = '<MODEL_NAME>', ExecutionRoleArn = role, Containers = [preprocessor_container, multi_model_container] )
    Anmerkung

    Sie können nur einen multi-model-enabled Endpunkt in einer seriellen Inferenzpipeline verwenden.

  4. (Optional) Wenn Ihr Anwendungsfall vom Modell-Caching nicht profitiert, setzen Sie den Wert des Feldes ModelCacheSetting des Parameters MultiModelConfig auf Disabled und nehmen Sie ihn in das Argument Container des Aufrufs von create_model auf. Der Wert für das Feld ModelCacheSetting ist standardmäßig Enabled.

    container = { 'Image': image, 'ModelDataUrl': 's3://<BUCKET_NAME>/<PATH_TO_ARTIFACTS>', 'Mode': 'MultiModel' 'MultiModelConfig': { // Default value is 'Enabled' 'ModelCacheSetting': 'Disabled' } } response = sagemaker_client.create_model( ModelName = '<MODEL_NAME>', ExecutionRoleArn = role, Containers = [container] )
  5. Konfigurieren Sie den Endpunkt mit mehreren Modellen mit GPU unterstützten Instanzen für das Modell. Wir empfehlen, Ihre Endpunkte mit mehr als einer Instance zu konfigurieren, um eine hohe Verfügbarkeit und höhere Cache-Zugriffe zu gewährleisten.

    response = sagemaker_client.create_endpoint_config( EndpointConfigName = '<ENDPOINT_CONFIG_NAME>', ProductionVariants=[ { 'InstanceType': 'ml.g4dn.4xlarge', 'InitialInstanceCount': 2, 'InitialVariantWeight': 1, 'ModelName': '<MODEL_NAME>', 'VariantName': 'AllTraffic' } ] )
  6. Erstellen Sie den Multimodell-Endpunkt mit den Parametern EndpointName und EndpointConfigName.

    response = sagemaker_client.create_endpoint( EndpointName = '<ENDPOINT_NAME>', EndpointConfigName = '<ENDPOINT_CONFIG_NAME>')