将推理工作负载从 x86 迁移到 AWS Graviton - Amazon SageMaker

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

将推理工作负载从 x86 迁移到 AWS Graviton

AWS Graviton 是一系列ARM基于 Graviton 的处理器,由 AWS。 它们比基于 x86 的处理器更节能,并且具有令人信服的性价比。Amazon SageMaker 提供基于 Graviton 的实例,因此您可以利用这些高级处理器来满足您的推理需求。

您可以使用ARM兼容的容器镜像或多架构容器镜像,将现有的推理工作负载从基于 x86 的实例迁移到基于 Graviton 的实例。本指南假设您要么在使用 AWS 深度学习容器镜像,或者你自己的ARM兼容容器镜像。有关构建您自己的映像的更多信息,请查看构建您的映像

概括来说,将推理工作负载从基于 x86 的实例迁移到基于 Graviton 的实例需要以下四个步骤:

  1. 将容器镜像推送到亚马逊弹性容器注册表 (AmazonECR), 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 映像

从本质上讲,多架构容器映像是一组支持不同架构或操作系统的容器映像,您可以用通用的清单名称来引用这些映像。如果您使用的是多架构容器镜像,那么除了将镜像推送到亚马逊之外ECR,您还必须将清单列表推送到亚马逊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

有关创建清单列表并将其推送到亚马逊的更多信息ECR,请查看为亚马逊ECR介绍多架构容器镜像和推送多架构镜像

创建 SageMaker 模型

通过调用来创建 SageMaker 模型CreateModelAPI。

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 )

创建端点配置

通过调用来创建终端节点配置CreateEndpointConfigAPI。有关基于 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 } ] )

创建端点

通过调用来创建终端节点CreateEndpointAPI。

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