本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
创建多模型端点
您可以使用 SageMaker 控制台或创建多模型终端节点。 AWS SDK for Python (Boto) 要通过控制台创建CPU或GPU支持的终端节点,请参阅以下各节中的控制台程序。如果要使用创建多模型端点 AWS SDK for Python (Boto),请使用以下各节中的CPU或GPU过程。CPU和GPU工作流程相似,但有一些区别,例如容器要求。
创建多模型端点(控制台)
您可以通过控制台创建CPU和GPU支持的多模型端点。使用以下过程通过 SageMaker 控制台创建多模型终端节点。
创建多模型端点(控制台)
-
打开 Amazon SageMaker 控制台,网址为https://console.aws.amazon.com/sagemaker/
。 -
选择 Models (模型),然后从 Inference (推理) 组选择 Create models (创建模型)。
-
对于 Model name (模型名称),输入一个名称。
-
对于IAM角色,请选择或创建已附加
AmazonSageMakerFullAccess
IAM策略的IAM角色。 -
在容器定义部分中,为提供模型构件和推理映像选项选择使用多个模型。
-
对于推理容器镜像,请输入所需容器镜像的 Amazon ECR 路径。
对于GPU模型,必须使用由 NVIDIA Triton 推理服务器支持的容器。有关GPU支持端点的容器镜像列表,请参阅 NVIDIATriton 推理容器(仅支持 SM)
。有关 NVIDIA Triton 推理服务器的更多信息,请参阅将 Triton 推理服务器与配合使用。 SageMaker -
选择创建模型。
-
按照单个模型端点的部署方式来部署多模型端点。有关说明,请参阅 将模型部署到 SageMaker 托管服务。
使用CPUs和创建多模型端点 AWS SDK for Python (Boto3)
使用以下部分创建由CPU实例支持的多模型终端节点。您可以使用 Amazon 创建多模型终端节点 SageMaker create_model
create_endpoint_config
create_endpoint
Mode
参数值 MultiModel
。您还需要传递 ModelDataUrl
字段,该字段指定模型构件在 Amazon S3 中位置的前缀,而不是像部署单个模型时一样指定单个模型构件的路径。
有关用于将多个XGBoost模型部署 SageMaker 到端点的示例笔记本,请参阅多模型端点XGBoost示例笔记本
以下过程概述了该示例中用于创建CPU支持的多模型端点的关键步骤。
部署模型(AWS SDK适用于 Python(Boto 3))
-
获取包含支持部署多模型端点的映像的容器。有关支持多模型端点的内置算法和框架容器的列表,请参阅多模型端点支持的算法、框架和实例。在此示例中,我们使用 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' } -
获取 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]) -
(可选)如果您使用的是串行推理管道,请获取要包含在管道中的其他容器,并将其包含在
CreateModel
的Containers
参数中: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端点。
-
(可选)如果您的使用案例不能通过模型缓存受益,请将
MultiModelConfig
参数的ModelCacheSetting
字段值设置为Disabled
,并将其包含在调用create_model
的Container
参数中。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] ) -
为模型配置多模型端点。我们建议您至少为端点配置两个实例。这 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端点。
-
使用
EndpointName
和EndpointConfigName
参数创建多模型端点。response = sagemaker_client.create_endpoint( EndpointName =
'<ENDPOINT_NAME>'
, EndpointConfigName ='<ENDPOINT_CONFIG_NAME>'
)
使用GPUs和创建多模型端点 AWS SDK for Python (Boto3)
使用以下部分创建GPU支持的多模型端点。您可以使用 Amazon 创建多模型终端节点 SageMaker create_model
create_endpoint_config
create_endpoint
Mode
参数值 MultiModel
。您还需要传递 ModelDataUrl
字段,该字段指定模型构件在 Amazon S3 中位置的前缀,而不是像部署单个模型时一样指定单个模型构件的路径。对于GPU支持的多模型终端节点,您还必须使用带有 NVIDIA Triton Inference Server 的容器,该服务器已针对在实例上运行进行了优化。GPU有关GPU支持端点的容器镜像列表,请参阅 NVIDIATriton 推理容器(仅支持 SM)
有关演示如何创建由支持的多模型终端节点的示例笔记本GPUs,请参阅使用 GPUs Amazon 多模型终端节点运行多个深度学习 SageMaker 模型
以下过程概述了创建GPU支持的多模型端点的关键步骤。
部署模型(AWS SDK适用于 Python(Boto 3))
-
定义容器映像。要创建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"}, } -
获取 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]) -
(可选)如果您使用的是串行推理管道,请获取要包含在管道中的其他容器,并将其包含在
CreateModel
的Containers
参数中: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端点。
-
(可选)如果您的使用案例不能通过模型缓存受益,请将
MultiModelConfig
参数的ModelCacheSetting
字段值设置为Disabled
,并将其包含在调用create_model
的Container
参数中。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] ) -
使用该模型的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' } ] ) -
使用
EndpointName
和EndpointConfigName
参数创建多模型端点。response = sagemaker_client.create_endpoint( EndpointName =
'<ENDPOINT_NAME>'
, EndpointConfigName ='<ENDPOINT_CONFIG_NAME>'
)