创建多模型端点 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

创建多模型端点

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

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

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

创建多模型端点(控制台)
  1. 通过 https://console.aws.amazon.com/sagemaker/ 打开 Amazon SageMaker 控制台。

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

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

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

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

    
              在创建模型页面的相应部分中,您可以选择使用多个模型以在单个端点上托管多个模型。
  6. 对于推理容器镜像,请输入所需容器镜像的 Amazon ECR 路径。

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

  7. 选择 Create model (创建模型)

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

通过 Amazon SDK for Python (Boto3) 并使用 CPU 创建多模型端点

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

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

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

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

    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. 获取 Amazon 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] )
    注意

    在串行推理管道中只能使用一个启用多模型的端点。

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

    在串行推理管道中只能使用一个启用多模型的端点。

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

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

通过 Amazon SDK for Python (Boto3) 并使用 GPU 创建多模型端点

使用以下部分创建由 GPU 支持的多模型端点。您可以使用 Amazon SageMaker create_modelcreate_endpoint_configcreate_endpoint API 按照创建单个模型端点的方式来创建多模型端点,但存在多处变化。定义模型容器时,您需要传递一个新的 Mode 参数值 MultiModel。您还需要传递 ModelDataUrl 字段,该字段指定模型构件在 Amazon S3 中位置的前缀,而不是像部署单个模型时一样指定单个模型构件的路径。对于 GPU 支持的多模型端点,所使用的容器必须具有已针对在 GPU 实例上运行进行优化的 NVIDIA Triton 推理服务器。有关使用 GPU 支持的端点的容器映像列表,请参阅 NVIDIA Triton 推理容器(仅支持 SM)

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

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

部署模型(适用于 Python 的 Amazon SDK (Boto 3))
  1. 定义容器映像。要为 ResNet 模型创建 GPU 支持的多模型端点,请将容器定义为使用 NVIDIA Triton 服务器映像。此容器支持多模型端点,并针对在 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. 获取 Amazon 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] )
    注意

    在串行推理管道中只能使用一个启用多模型的端点。

  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>')