將推論工作負載從 x86 遷移至 AWS Graviton - Amazon SageMaker

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

將推論工作負載從 x86 遷移至 AWS Graviton

AWS Graviton 是由 設計的一系列 ARM型處理器 AWS。它們比基於 x86 的處理器更具能源效率,並且具有令人信服的性價比。Amazon SageMaker 提供以 Graviton 為基礎的執行個體,以便您可以利用這些進階處理器來滿足您的推論需求。

您可以使用ARM相容的容器映像或多架構容器映像,將現有的推論工作負載從以 x86 為基礎的執行個體遷移到以 Graviton 為基礎的執行個體。本指南假設您正在使用 AWS 深度學習容器映像 ,或您自己的ARM相容容器映像。如需建立自己映像的詳細資訊,請勾選建立您的映像

在高層級上,將推論工作負載從 x86 型執行個體遷移到 Graviton 型執行個體需要四個步驟:

  1. 將容器映像推送至 Amazon Elastic Container Registry (Amazon ECR),這是 AWS 受管容器登錄檔。

  2. 建立 SageMaker 模型。

  3. 建立端點組態。

  4. 建立端點。

本指南的以下各節提供有關上述步驟的更多詳細資訊。取代 user placeholder text 在程式碼範例中,使用您自己的資訊。

將容器映像推送至 Amazon ECR

您可以使用 ECR將容器映像推送至 Amazon AWS CLI。使用ARM相容映像時,請確認其支援ARM架構:

docker inspect deep-learning-container-uri

回應"Architecture": "arm64"表示映像支援ARM架構。您可以使用 docker push命令ECR將其推送至 Amazon。如需詳細資訊,請查看推送 Docker 映像檔

多架構容器映像基本上是一組支援不同架構或作業系統的容器映像檔,您可以透過通用資訊清單名稱來參考這些映像檔。如果您使用的是多架構容器映像,則除了將映像推送到 Amazon 之外ECR,您還必須將資訊清單清單推送到 Amazon ECR。資訊清單允許巢狀包含其他影像資訊清單,其中每個包含的映像檔都由架構、作業系統和其他平台屬性指定。下列範例會建立資訊清單清單,並將其推送至 Amazon ECR。

  1. 建立資訊清單清單。

    docker manifest create aws-account-id.dkr.ecr.aws-region.amazonaws.com/my-repository \ aws-account-id.dkr.ecr.aws-account-id.amazonaws.com/my-repository:amd64 \ aws-account-id.dkr.ecr.aws-account-id.amazonaws.com/my-repository:arm64 \
  2. 註釋資訊清單,以便它正確識別哪個映像適用於哪個體系結構。

    docker manifest annotate --arch arm64 aws-account-id.dkr.ecr.aws-region.amazonaws.com/my-repository \ aws-account-id.dkr.ecr.aws-region.amazonaws.com/my-repository:arm64
  3. 推送清單檔案。

    docker manifest push aws-account-id.dkr.ecr.aws-region.amazonaws.com/my-repository

如需建立清單清單並將其推送至 Amazon 的詳細資訊ECR,請參閱介紹 Amazon 的多架構容器映像ECR,以及推送多架構映像。

建立 SageMaker 模型

呼叫 CreateModel 來建立 SageMaker 模型API。

import boto3 from sagemaker import get_execution_role aws_region = "aws-region" sagemaker_client = boto3.client("sagemaker", region_name=aws_region) role = get_execution_role() sagemaker_client.create_model( ModelName = "model-name", PrimaryContainer = { "Image": "deep-learning-container-uri", "ModelDataUrl": "model-s3-location", "Environment": { "SAGEMAKER_PROGRAM": "inference.py", "SAGEMAKER_SUBMIT_DIRECTORY": "inference-script-s3-location", "SAGEMAKER_CONTAINER_LOG_LEVEL": "20", "SAGEMAKER_REGION": aws_region, } }, ExecutionRoleArn = role )

建立一個端點組態

呼叫 CreateEndpointConfig 來建立端點組態API。如需以 Graviton 為基礎的執行個體清單,請勾選運算最佳化執行個體

sagemaker_client.create_endpoint_config( EndpointConfigName = "endpoint-config-name", ProductionVariants = [ { "VariantName": "variant-name", "ModelName": "model-name", "InitialInstanceCount": 1, "InstanceType": "ml.c7g.xlarge", # Graviton-based instance } ] )

建立端點

呼叫 CreateEndpoint 來建立端點API。

sagemaker_client.create_endpoint( EndpointName = "endpoint-name", EndpointConfigName = "endpoint-config-name" )