Erstellen eines Multimodell-Endpunkts - Amazon SageMaker AI

Erstellen eines Multimodell-Endpunkts

Einen Multimodell-Endpunkt können Sie mit dem AWS SDK für Python (Boto) oder der SageMaker-AI-Konsole erstellen. Informationen dazu, wie ein CPU- oder GPU-gestützter Endpunkt über die Konsole erstellt wird, finden Sie im Konsolenverfahren in den folgenden Abschnitten. Wenn Sie mit dem AWS SDK für Python (Boto) einen Multimodell-Endpunkt erstellen möchten, verwenden Sie entweder das in den folgenden Abschnitten beschriebene CPU- oder GPU-Verfahren. Die CPU- und GPU-Workflows sind ähnlich, weisen jedoch mehrere Unterschiede auf, z. B. die Container-Anforderungen.

Erstellen eines Multimodell-Endpunkts (Konsole)

Über die Konsole können Sie CPU- und GPU-gestützte Multimodell-Endpunkte erstellen. Gehen Sie wie folgt vor, um über die SageMaker-AI-Konsole einen Multimodell-Endpunkt zu erstellen.

So erstellen Sie einen Multimodell-Endpunkt (Konsole)
  1. Öffnen Sie die Konsole von Amazon SageMaker AI 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 Sie für IAM-Rolle eine IAM-Rolle bzw. erstellen Sie eine, die mit der AmazonSageMakerFullAccess IAM-Richtlinie verknüpft ist.

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

    Der Bereich auf der Seite „Modell erstellen“, in dem Sie die Option Mehrere Modelle verwenden auswählen können
  6. Geben Sie für das Inference-Container-Image den Amazon ECR-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-gestützten Endpunkten funktionieren, finden Sie in den NVIDIA Triton Inference Containers (nur SM-Unterstützung). Weitere Informationen zum NVIDIA Triton Inference Server finden Sie unter Triton Inference Server mit SageMaker AI verwenden.

  7. Wählen Sie Modell erstellen aus.

  8. Stellen Sie Ihren Multimodell-Endpunkt genauso wie einen Einzelmodell-Endpunkt bereit. Detaillierte Anweisungen finden Sie unter Bereitstellen des Modells für Hosting-Services von SageMaker AI.

Erstellen Sie mit dem AWS SDK für Python (Boto3) einen Multimodell-Endpunkt mit Hilfe von CPUs

Erstellen Sie mit Hilfe des folgenden Abschnitts einen durch CPU-Instances unterstützten Multimodell-Endpunkt. Sie erstellen einen Multimodell-Endpunkt mithilfe der Amazon SageMaker AI APIs create_model, create_endpoint_config und create_endpoint genau so, wie Sie einen Endpunkt mit nur einem 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 Beispiel-Notebook, das SageMaker AI zum Bereitstellen mehrerer XGBoost-Modelle auf einem Endpunkt verwendet, finden Sie unter Multimodell-Endpunkt XGBoost Beispiel-Notebook.

Im folgenden Verfahren werden die wichtigsten Schritte beschrieben, die in diesem Beispiel zum Erstellen eines Multimodell-Endpunkts mit CPU-Unterstützung verwendet werden.

So stellen Sie das Modell bereit (AWS SDK fü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 für Multimodell-Endpunkte. In diesem Beispiel verwenden wir den integrierten Algorithmus K-nearest neighbors (k-NN)-Algorithmus. Wir rufen die Hilfsfunktion image_uris.retrieve() von SageMaker Python SDK auf, um die Adresse für das integrierte K-Nearest-Neighbors-Algorithmus-Image 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. Holen Sie sich einen AWS SDK für Python (Boto3)-SageMaker-AI-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 in einer seriellen Inferenz-Pipeline jeweils nur einen Multimodell-fähigen Endpunkt 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. So kann SageMaker AI für die Modelle einen hochverfügbaren Satz von Vorhersagen über mehrere Availability Zones hinweg bereitstellen.

    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 in einer seriellen Inferenz-Pipeline jeweils nur einen Multimodell-fähigen Endpunkt 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 mit dem AWS SDK für Python (Boto3) einen Multimodell-Endpunkt mit Hilfe von CPUs

Erstellen Sie mit Hilfe des folgenden Abschnitts einen durch GPU unterstützten Multimodell-Endpunkt. Einen Multimodell-Endpunkt erstellen Sie mithilfe der Amazon SageMaker AI APIs create_model, create_endpoint_config und create_endpoint, ähnlich wie bei der Erstellung von Einzelmodell-Endpunkten, jedoch mit 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-gestützte Multimodell-Endpunkte müssen Sie außerdem einen Container mit dem NVIDIA Triton Inference Server verwenden, der für die Ausführung auf GPU-Instances optimiert ist. Eine Liste der Container-Images, die mit GPU-gestützten Endpunkten funktionieren, finden Sie in den NVIDIA Triton Inference Containers (nur SM-Unterstützung).

Ein Beispiel-Notebook, das demonstriert, wie ein von GPUs unterstützter Multimodell-Endpunkt erstellt wird, finden Sie unter Ausführen mehrerer Deep-Learning-Modelle auf GPUs mit Multimodell-Endpunkten (MME) von Amazon SageMaker AI.

Das folgende Verfahren beschreibt die wichtigsten Schritte zur Erstellung eines GPU-gestützten Multimodell-Endpunkts.

So stellen Sie das Modell bereit (AWS SDK für Python (Boto 3))
  1. Definieren Sie das Container-Image. Um einen Multimodell-Endpunkt mit GPU-Unterstützung für ResNet-Modelle zu erstellen, definieren Sie den Container so, dass er das NVIDIA Triton Server-Image verwendet. Dieser Container unterstützt Multimodell-Endpunkte und ist für die Ausführung auf GPU-Instances optimiert. Wir rufen die Hilfsfunktion image_uris.retrieve() des SageMaker AI Python SDK auf, um die Adresse für das Image abzurufen. Zum Beispiel:

    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 für Python (Boto3)-SageMaker-AI-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 in einer seriellen Inferenz-Pipeline jeweils nur einen Multimodell-fähigen Endpunkt 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 mit GPU-gestützten Instances 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>')