创建多模型端点 - Amazon SageMaker

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

创建多模型端点

您可以使用 SageMaker 控制台或创建多模型终端节点。 AWS SDK for Python (Boto) 要通过控制台创建CPU或GPU支持的终端节点,请参阅以下各节中的控制台程序。如果要使用创建多模型端点 AWS SDK for Python (Boto),请使用以下各节中的CPU或GPU过程。CPU和GPU工作流程相似,但有一些区别,例如容器要求。

创建多模型端点(控制台)

您可以通过控制台创建CPU和GPU支持的多模型端点。使用以下过程通过 SageMaker 控制台创建多模型终端节点。

创建多模型端点(控制台)
  1. 打开 Amazon SageMaker 控制台,网址为https://console.aws.amazon.com/sagemaker/

  2. 选择 Models (模型),然后从 Inference (推理) 组选择 Create models (创建模型)

  3. 对于 Model name (模型名称),输入一个名称。

  4. 对于IAM角色,请选择或创建已附加AmazonSageMakerFullAccessIAM策略的IAM角色。

  5. 容器定义部分中,为提供模型构件和推理映像选项选择使用多个模型

    创建模型页面的部分,您可以在其中选择 “使用多个模型”。
  6. 对于推理容器镜像,请输入所需容器镜像的 Amazon ECR 路径。

    对于GPU模型,必须使用由 NVIDIA Triton 推理服务器支持的容器。有关GPU支持端点的容器镜像列表,请参阅 NVIDIATriton 推理容器(仅支持 SM)。有关 NVIDIA Triton 推理服务器的更多信息,请参阅将 Triton 推理服务器与配合使用。 SageMaker

  7. 选择创建模型

  8. 按照单个模型端点的部署方式来部署多模型端点。有关说明,请参阅 将模型部署到 SageMaker 托管服务

使用CPUs和创建多模型端点 AWS SDK for Python (Boto3)

使用以下部分创建由CPU实例支持的多模型终端节点。您可以使用 Amazon 创建多模型终端节点 SageMaker create_modelcreate_endpoint_configcreate_endpointAPIs就像创建单一模型终端节点一样,但有两处更改。定义模型容器时,您需要传递一个新的 Mode 参数值 MultiModel。您还需要传递 ModelDataUrl 字段,该字段指定模型构件在 Amazon S3 中位置的前缀,而不是像部署单个模型时一样指定单个模型构件的路径。

有关用于将多个XGBoost模型部署 SageMaker 到端点的示例笔记本,请参阅多模型端点XGBoost示例笔记本

以下过程概述了该示例中用于创建CPU支持的多模型端点的关键步骤。

部署模型(AWS SDK适用于 Python(Boto 3))
  1. 获取包含支持部署多模型端点的映像的容器。有关支持多模型端点的内置算法和框架容器的列表,请参阅多模型端点支持的算法、框架和实例。在此示例中,我们使用 K 最近邻 (k-NN) 算法 内置算法。我们调用 SageMaker Python SDK 实用函数image_uris.retrieve()来获取 K-Nearest Neighbors 内置算法图像的地址。

    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. 获取 AWS SDK for Python (Boto3) SageMaker 客户端并创建使用此容器的模型。

    import boto3 sagemaker_client = boto3.client('sagemaker') response = sagemaker_client.create_model( ModelName = '<MODEL_NAME>', ExecutionRoleArn = role, Containers = [container])
  3. (可选)如果您使用的是串行推理管道,请获取要包含在管道中的其他容器,并将其包含在 CreateModelContainers 参数中:

    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] )
    注意

    在串行推理管道中,您只能使用一个 multi-model-enabled端点。

  4. (可选)如果您的使用案例不能通过模型缓存受益,请将 MultiModelConfig 参数的 ModelCacheSetting 字段值设置为 Disabled,并将其包含在调用 create_modelContainer 参数中。ModelCacheSetting 字段的默认值是 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. 为模型配置多模型端点。我们建议您至少为端点配置两个实例。这 SageMaker 允许为模型提供跨多个可用区域的高可用性预测集。

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

    在串行推理管道中,您只能使用一个 multi-model-enabled端点。

  6. 使用 EndpointNameEndpointConfigName 参数创建多模型端点。

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

使用GPUs和创建多模型端点 AWS SDK for Python (Boto3)

使用以下部分创建GPU支持的多模型端点。您可以使用 Amazon 创建多模型终端节点 SageMaker create_modelcreate_endpoint_config,与创建单模型终端节点create_endpointAPIs类似,但有几处更改。定义模型容器时,您需要传递一个新的 Mode 参数值 MultiModel。您还需要传递 ModelDataUrl 字段,该字段指定模型构件在 Amazon S3 中位置的前缀,而不是像部署单个模型时一样指定单个模型构件的路径。对于GPU支持的多模型终端节点,您还必须使用带有 NVIDIA Triton Inference Server 的容器,该服务器已针对在实例上运行进行了优化。GPU有关GPU支持端点的容器镜像列表,请参阅 NVIDIATriton 推理容器(仅支持 SM)

有关演示如何创建由支持的多模型终端节点的示例笔记本GPUs,请参阅使用 GPUs Amazon 多模型终端节点运行多个深度学习 SageMaker 模型 ()。MME

以下过程概述了创建GPU支持的多模型端点的关键步骤。

部署模型(AWS SDK适用于 Python(Boto 3))
  1. 定义容器映像。要创建GPU支持模型的多模型端点,请定义容器以使用 NVIDIATriton Server 镜像。 ResNet 此容器支持多模型终端节点,并针对在GPU实例上运行进行了优化。我们调用 SageMaker Python SDK 实用函数image_uris.retrieve()来获取图像的地址。例如:

    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. 获取 AWS SDK for Python (Boto3) SageMaker 客户端并创建使用此容器的模型。

    import boto3 sagemaker_client = boto3.client('sagemaker') response = sagemaker_client.create_model( ModelName = '<MODEL_NAME>', ExecutionRoleArn = role, Containers = [container])
  3. (可选)如果您使用的是串行推理管道,请获取要包含在管道中的其他容器,并将其包含在 CreateModelContainers 参数中:

    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] )
    注意

    在串行推理管道中,您只能使用一个 multi-model-enabled端点。

  4. (可选)如果您的使用案例不能通过模型缓存受益,请将 MultiModelConfig 参数的 ModelCacheSetting 字段值设置为 Disabled,并将其包含在调用 create_modelContainer 参数中。ModelCacheSetting 字段的默认值是 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. 使用该模型的GPU支持实例配置多模型终端节点。我们建议在您的端点上配置多个实例,以实现高可用性和更高的缓存命中率。

    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. 使用 EndpointNameEndpointConfigName 参数创建多模型端点。

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