建立多模型端點 - 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. 選擇 Model (模型),然後從 Inference (推斷) 群組中選擇 Create model (建立模型)。

  3. Model name (模型名稱) 中,輸入名稱。

  4. 對於IAM角色,請選擇或建立已附加AmazonSageMakerFullAccessIAM原則的IAM角色。

  5. 針對 Container definition (容器定義) 區段的 Provide model artifacts and inference image options (提供模型成品與推論映像選項),選擇 Use multiple models (使用多個模型)。

    您可以在「建立模型」頁面中選擇「使用多個模型」區段。
  6. 對於推論容器映像,請輸入所需容器映像的 Amazon ECR 路徑。

    對於GPU模型,您必須使用 NVIDIA Triton 推論伺服器支援的容器。如需與GPU受支援端點搭配使用的容器映像檔清單,請參閱 NVIDIATriton 推論容器 (僅限 SM 支援)。如需 NVIDIA Triton 推論伺服器的詳細資訊,請參閱搭配使用 Trit on 推論伺服器。 SageMaker

  7. 選擇建立模型

  8. 部署多模型端點,做法就像部署單一模型端點一樣。如需說明,請參閱 將模型部署到 SageMaker 託管服務

使用建立多模型端CPUs點 AWS SDK for Python (Boto3)

請參閱下一節來建立由CPU執行個體支援的多模型端點。您可以使用 Amazon 建立多模型端點 SageMaker create_modelcreate_endpoint_config,和create_endpointAPIs建立單一模型端點一樣,但有兩項變更。當定模型義容器時,您必須傳遞新的 Mode 參數值 MultiModel。您也需要傳遞指定模型成品所在之 Amazon S3 的字首 ModelDataUrl 欄位,而不是單一模型成品的路徑,就像部署單一模型時的做法一樣。

有關用於將多個模XGBoost型部署 SageMaker 到端點的範例筆記本,請參閱多模型端點XGBoost範例筆記本

下列程序概述了該範例中用來建立CPU備份多模型端點的關鍵步驟。

若要部署模型 (AWS SDK對於 Python (投票 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. 取得用 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。您也需要傳遞指定模型成品所在之 Amazon S3 的字首 ModelDataUrl 欄位,而不是單一模型成品的路徑,就像部署單一模型時的做法一樣。對於GPU支援的多模型端點,您也必須使用 NVIDIA Triton 推論伺服器的容器,該容器已針對在執行個體上執行最佳化。GPU如需與GPU受支援端點搭配使用的容器映像檔清單,請參閱 NVIDIATriton 推論容器 (僅限 SM 支援)。

如需示範如何建立支援的多模型端點的範例筆記本GPUs,請參閱在 Amazon 多模型端點上GPUs執行 SageMaker 多個深度學習模型 ()。MME

下列程序概述建立GPU備份多模型端點的關鍵步驟。

若要部署模型 (AWS SDK對於 Python (投票 3))
  1. 定義容器映像。若要建立GPU支援模型的多模型端點,請 ResNet 定義要使用 NVIDIATriton Server 映像的容器。此容器支援多模型端點,並針對在執行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>')