為 SageMaker多模型端點構建自己的容器 - Amazon SageMaker

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

為 SageMaker多模型端點構建自己的容器

請參閱以下各節了解如何針對多模型端點使用自有容器及相依性。

在CPU支援的執行個體上為多模型端點提供自己的相依性

如果沒有任何預先建置的容器映像檔能滿足您的需求,您可以建置自己的容器,以便與CPU支援的多模型端點搭配使用。

在 Amazon 中部署的自訂 Amazon 彈性容器登錄 (Amazon ECR SageMaker ) 映像應遵守所述的基本合約,搭配託管服務來使用您自有的推論程式碼該合約規範與執行您自己的推論程式碼的 Docker 容器 SageMaker 互動方式。為了使容器能夠同時加載和服務多個模型,必須遵循其他APIs和行為。這個額外的合約包括新APIs的載入、列出、取得和卸載模型,以及不同的叫API用模型。對於APIs需要遵守的錯誤情況也有不同的行為。若要表示容器符合額外的要求,您可以將下列命令新增到 Docker 檔案:

LABEL com.amazonaws.sagemaker.capabilities.multi-models=true

SageMaker 也注入一個環境變量到容器

SAGEMAKER_MULTI_MODEL=true

如果您要為序列推論管道建立多模型端點,則 Docker 檔案必須具有多模型和序列推論管道所需的標籤。如需序列資訊管道的詳細資訊,請參閱使用推論管道執行即時預測

為協助您實作自訂容器的這些要求,提供下列兩個程式庫:

  • 多模型伺服器是提供機器學習模型的開放原始碼架構,可安裝在容器中,以提供符合新多模型端點容器需求的前端。APIs它提供了多模型端點所需的HTTP前端和模型管理功能,以便在單一容器中託管多個模型、以動態方式將模型載入至容器中並卸載模型,以及對指定載入的模型執行推論。它還提供了隨插即用的後端,支援隨插即用的自訂後端處理常式,可讓您實作自己的演算法。

  • SageMaker 推論工具包是一個庫,它使用配置和設置來引導多模型服務器,使其與 SageMaker 多模型端點兼容。也可讓您根據不同的情境需求調校重要效能參數,例如每個模型的工作者數量。

在GPU支援的執行個體上為多模型端點提供自己的相依性

多模型伺服器和 SageMaker 推論工具組程式庫目前不支援在具GPU備支援執行個體的多模型端點上使用自己的容器 (BYOC) 功能。

若要建立具GPU備支援執行個體的多模型端點,您可以使用 SageMaker支援的 NVIDIATriton 推論伺服器。搭配 Triton 推論容器。NVIDIA要使用自己的依賴關係,您可以使用 SageMaker 支持的 NVIDIATriton 推論服務器構建自己的容器作為 Docker 文件的基本映像:

FROM 301217895009.dkr.ecr.us-west-2.amazonaws.com/sagemaker-tritonserver:22.07-py3
重要

具有 Triton 推論伺服器的容器是唯一可用於GPU支援多模型端點的容器。

使用 SageMaker 推論工具包

注意

SageMaker 推論工具組僅支援支援的多模型CPU端點。支援 SageMaker 的多模型GPU端點目前不支援推論工具組。

支援的演算法、架構與執行個體 列出支援多模型端點的預先建置容器。如果你想要使用其他任何架構或演算法,則需要建置容器。若要執行這項操作,最簡單的方法是使用SageMaker 推論工具組來擴充現有的預先建置容器。 SageMaker 推論工具組是多模型伺服器 (MMS) 的實作,可建立可在中部署的端點。 SageMaker如需示範如何在中設定和部署支援多模型端點的自訂容器的範例筆記本 SageMaker,請參閱多模型端點BYOC範例筆記本。

注意

SageMaker 推論工具組僅支援 Python 模型處理常式。如果您想要使用任何其他語言實作處理常式,您必須建置自己的容器來實作額外的多模型端點APIs。如需相關資訊,請參閱 多模型端點的自訂容器合約

若要使用 SageMaker 推論工具組來擴充容器
  1. 建立模型處理常式。MMS需要一個模型處理程序,它是一個 Python 文件,它實現了函數以進行預處理,從模型獲取預先處理,並在模型處理程序中處理輸出。如需模型處理常式的範例,請參閱範例筆記本中的 model_handler.py

  2. 匯入推論工具組並使用其model_server.start_model_server函數啟MMS動。下列範例來自範例筆記本中的 dockerd-entrypoint.py 檔案。請注意,呼叫 model_server.start_model_server 會傳遞上一個步驟中描述的模型處理常式:

    import subprocess import sys import shlex import os from retrying import retry from subprocess import CalledProcessError from sagemaker_inference import model_server def _retry_if_error(exception): return isinstance(exception, CalledProcessError or OSError) @retry(stop_max_delay=1000 * 50, retry_on_exception=_retry_if_error) def _start_mms(): # by default the number of workers per model is 1, but we can configure it through the # environment variable below if desired. # os.environ['SAGEMAKER_MODEL_SERVER_WORKERS'] = '2' model_server.start_model_server(handler_service='/home/model-server/model_handler.py:handle') def main(): if sys.argv[1] == 'serve': _start_mms() else: subprocess.check_call(shlex.split(' '.join(sys.argv[1:]))) # prevent docker exit subprocess.call(['tail', '-f', '/dev/null']) main()
  3. Dockerfile 中,複製第一個步驟中的模型處理常式,並將上一個步驟中的 Python 檔案指定為 Dockerfile 中的進入點。下列幾行來自範例筆記本中使用的 Dockerfile

    # Copy the default custom service file to handle incoming data and inference requests COPY model_handler.py /home/model-server/model_handler.py # Define an entrypoint script for the docker image ENTRYPOINT ["python", "/usr/local/bin/dockerd-entrypoint.py"]
  4. 建置並註冊容器。範例筆記本中有下列殼層指令碼,可建置容器,並上傳到您 AWS 帳戶的 Amazon Elastic Container Registry 儲存庫:

    %%sh # The name of our algorithm algorithm_name=demo-sagemaker-multimodel cd container account=$(aws sts get-caller-identity --query Account --output text) # Get the region defined in the current configuration (default to us-west-2 if none defined) region=$(aws configure get region) region=${region:-us-west-2} fullname="${account}.dkr.ecr.${region}.amazonaws.com/${algorithm_name}:latest" # If the repository doesn't exist in ECR, create it. aws ecr describe-repositories --repository-names "${algorithm_name}" > /dev/null 2>&1 if [ $? -ne 0 ] then aws ecr create-repository --repository-name "${algorithm_name}" > /dev/null fi # Get the login command from ECR and execute it directly $(aws ecr get-login --region ${region} --no-include-email) # Build the docker image locally with the image name and then push it to ECR # with the full name. docker build -q -t ${algorithm_name} . docker tag ${algorithm_name} ${fullname} docker push ${fullname}

您現在可以使用此容器在中 SageMaker部署多模型端點。