部署用於即時推論的模型
重要
允許 Amazon SageMaker Studio 或 Amazon SageMaker Studio Classic 建立 Amazon SageMaker 資源的自訂 IAM 政策也必須授予許可,才能將標籤新增至這些資源。需要將標籤新增至資源的許可,因為 Studio 和 Studio Classic 會自動標記它們建立的任何資源。如果 IAM 政策允許 Studio 和 Studio Classic 建立資源,但不允許標記,則在嘗試建立資源時可能會出現「AccessDenied」錯誤。如需更多詳細資訊,請參閱 提供標記 SageMaker AI 資源的許可。
提供許可來建立 SageMaker 資源的 Amazon SageMaker AI 的 AWS 受管政策 已包含建立這些資源時新增標籤的許可。
有數個選項可以使用 SageMaker AI 託管服務部署模型。您可以使用 SageMaker Studio 以互動方式部署模型。或者,您可以使用 AWS SDK 以程式設計方式部署模型,例如 SageMaker Python SDK 或 SDK for Python (Boto3)。您也可以使用 AWS CLI 進行部署。
開始之前
在您部署 SageMaker AI 模型之前,請先找出並記下以下內容:
-
Amazon S3 儲存貯體所在的 AWS 區域
-
儲存模型成品的 Amazon S3 URI 路徑
-
適用於 SageMaker AI 的 IAM 角色
-
包含推論程式碼之自訂映像檔的 Docker Amazon ECR URI 登錄檔路徑,或 AWS 支援之內建 Docker 映像檔的架構和版本
如需每個 AWS 區域 中可用的 AWS 服務 清單,請參閱區域地圖和邊緣網路
重要
儲存模型成品的 Amazon S3 儲存貯體,必須位在您建立模型的相同 AWS 區域。
與多個模型共享資源使用率
您可以使用 Amazon SageMaker AI 將一個或多個模型部署至端點。多個模型共用端點時,也會共用在該處託管的資源,例如 ML 運算執行個體、CPU 和加速器。部署多個模型到端點的最靈活方是將每個模型定義為推論元件。
推論元件
推論元件是 SageMaker AI 託管物件,可以用來將模型部署到端點。在推論元件設定中,您可以指定模型、端點,以及模型如何利用端點託管的資源。若要指定模型,您可以指定 SageMaker AI 模型物件,也可以直接指定模型成品和影像。
在設定中,您可以自訂所需 CPU 核心、加速器和記憶體配置給模型的方式,以最佳化資源使用率。您可以將多個推論元件部署到端點,其中每個推論元件包含一個模型,以及該模型的資源使用率需求。
部署推論元件之後,您可以在 SageMaker API 中使用 InvokeEndpoint 動作時直接調用相關聯的模型。
推論元件具有以下優點:
- 彈性
-
推論元件會從端點本身分離託管模型的詳細資訊。這麼一來,您可以更靈活地控制模型的託管方式和端點提供該模型的方式。您可以在相同的基礎架構上託管多個模型,也可以根據需求從端點新增或移除模型。您可以獨立更新每個模型。
- 可擴展性
-
您可以指定每個模型要託管的複本數量,也可以設定複本數量下限,以確保模型能夠載入您處理請求時所需的數量。您可以將任何推論元件複本縮減為零,讓其他複本有向上擴展的空間。
當您透過以下方式部署模型時,SageMaker AI 會將模型封裝為推論元件:
-
SageMaker Studio Classic。
-
部署模型物件的 SageMaker Python SDK (您在其中將端點類型設為
EndpointType.INFERENCE_COMPONENT_BASED)。 -
定義您部署到端點的
InferenceComponent物件的 適用於 Python (Boto3) 的 AWS SDK。
透過 SageMaker Studio 部署模型
請完成以下步驟,透過 SageMaker Studio 以互動方式建立和部署模型。如需進一步瞭解 Studio,請參閱 Studio 文件。如需更多多種部署案例演練,請參閱部落格使用 Amazon SageMaker AI 輕鬆套件和部署傳統 ML 模型和 LLM – 第 2 部分
準備您的成品和許可
在 SageMaker Studio 中建立模型之前,請先完成本區段。
您可以透過兩種方式,在 Studio 中納入成品和建立模型:
-
您可以先準備好預先封裝的
tar.gz封存,其中應包含模型成品、任何自訂推論程式碼,以及requirements.txt檔案中列出的任何相依項目。 -
SageMaker AI 可以幫您封裝成品。您只需要在
requirements.txt檔案中納入原始模型成品和任何相依項目,SageMaker AI 可以為您提供預設推論程式碼;或者您可以使用自己的自訂推論程式碼覆寫預設程式碼。針對這種方式,SageMaker AI 支援下列架構:PyTorch、XGBoost。
除了您的模型、您的 AWS Identity and Access Management (IAM) 角色和 Docker 容器 (或 SageMaker AI 在其中具預先建置容器的所需架構和版本) 之外,您也必須授予許可,透過 SageMaker AI Studio 建立和部署模型。
您應該將 AmazonSageMakerFullAccess 政策連接到您的 IAM 角色,以便您存取 SageMaker AI 和其他相關服務。若要查看 Studio 中執行個體類型的價格,您還必須連接 AWSPriceListServiceFullAccess 政策;或者如果您不想連接整個政策 (具體來說是 pricing:GetProducts 動作)。
如果您在建立模型時選擇上傳模型成品或上傳範例承載檔案以取得推論建議,則您必須建立 Amazon S3 儲存貯體。儲存貯體名稱的字首必須是 SageMaker AI。或者也可以是 SageMaker AI 的替代大寫:Sagemaker 或 sagemaker。
建議您使用儲存貯體命名慣例 sagemaker-{。此儲存貯體會用來存放您上傳的成品。Region}-{accountID}
建立儲存貯體之後,請將下列 CORS (跨來源資源共用) 政策連接至儲存貯體:
[ { "AllowedHeaders": ["*"], "ExposeHeaders": ["Etag"], "AllowedMethods": ["PUT", "POST"], "AllowedOrigins": ['https://*.sagemaker.aws'], } ]
您可以透過以下任一方式,將 CORS 政策連接至 Amazon S3 儲存貯體:
-
透過 Amazon S3 主控台的編輯跨來源資源共用 (CORS)
頁面 -
使用 Amazon S3 API PutBucketCors
-
使用 put-bucket-cors AWS CLI 命令:
aws s3api put-bucket-cors --bucket="..." --cors-configuration="..."
建立可部署模型
在此步驟中,您可以提供成品和其他規格,例如所需的容器和架構、任何自訂推論程式碼和網路設定,在 SageMaker AI 中建立可部署的模型版本。
請執行以下動作,在 SageMaker Studio 中建立可部署模型:
-
開啟您的 SageMaker Studio 應用程式。
-
在左側導覽窗格中選擇 Models (模型)。
-
選擇可部署模型索引標籤。
-
在可部署模型頁面上,選擇建立。
-
在建立可部署模型頁面上的模型名稱欄位中,輸入模型的名稱。
在建立可部署模型頁面上還有一些需要填寫的區段。
容器定義區段如下螢幕擷取畫面:
請在容器定義區段中,執行下列動作:
-
在容器類型中,如果您要使用 SageMaker AI 受管容器,請選取預先建置的容器,如果您有自己的容器,請選取使用自有容器。
-
如果您選取預先建置的容器,請選取您要使用的容器架構、架構版本和硬體類型。
-
如果您選取使用自有容器,請輸入容器影像的 ECR 路徑的 Amazon ECR 路徑。
接著填寫成品區段,請參考如下螢幕擷取畫面:
請在成品區段中,執行下列動作:
-
如果您使用 SageMaker AI 所支援的架構 (PyTorch 或 XGBoost) 來封裝模型成品,則您可以在成品選擇上傳成品選項。您可以透過這個選項直接指定原始模型成品、您擁有的任何自訂推論程式碼,以及您的 requirements.txt 檔案,而 SageMaker AI 會幫您封裝封存。請執行下列操作:
-
在成品選取上傳成品以繼續提供您的檔案。如果您已經有包含模型檔案、推論程式碼和
requirements.txt檔案的tar.gz封存,請選取預先封裝成品的輸入 S3 URI。 -
如果您選擇上傳成品,則請在 S3 儲存貯體輸入您希望 SageMaker AI 在封裝成品之後存放成品的儲存貯體 Amazon S3 路徑。然後,請完成下列步驟。
-
在上傳模型成品上傳您的模型檔案。
-
針對推論程式碼,如果您要使用 SageMaker AI 提供的預設程式碼來提供推論,請選取使用預設推論程式碼。否則請選取上傳自訂推論程式碼,使用您自有的推論程式碼。
-
針對上傳 requirements.txt,請上傳文字檔案,其中列出您想在執行時期安裝的任何相依項目。
-
-
如果您未使用 SageMaker AI 支援的架構來封裝模型成品,Studio 會顯示預先封裝成品選項,您必須提供已封裝為
tar.gz封存的所有成品。請執行下列操作:-
針對預先封裝的成品,如果您的
tar.gz封存已上傳至 Amazon S3,請選取預先封裝模型成品的輸入 S3 URI。如果您想將封存直接上傳至 SageMaker AI,請選取上傳預先封裝的模型成品。 -
如果您選取預先封裝模型成品的輸入 S3 URI,請輸入 S3 URI 的封存 Amazon S3 路徑。否則請從本機電腦選取並上傳封存。
-
下一部分是安全性,其螢幕擷取畫面如下:
請針對安全性區段執行以下動作:
-
針對 IAM 角色輸入 IAM 角色的 ARN。
-
(選用) 針對虛擬私有雲端 (VPC),您可以選取一個 Amazon VPC 來存放模型組態和成品。
-
(選用) 如果您想限制容器的網際網路存取,請開啟網路隔離。
最後,您可以填寫進階選項區段,其螢幕擷取畫面如下:
(選用) 請在進階選項區段中,執行下列動作:
-
如果您想在建立模型之後在模型上執行 Amazon SageMaker Inference Recommender 任務,請開啟自訂執行個體建議。推論建議程式是一項功能,可以為您提供最佳化推論效能和成本的建議執行個體類型。您可以在準備部署模型時檢視這些執行個體建議。
-
在新增環境變數中,輸入容器的環境變數做為鍵值組。
-
在標籤中,輸入任何標籤做為鍵值組。
-
完成模型和容器組態後,選擇建立可部署模型。
現在,您在 SageMaker Studio 中應該已經擁有準備好進行部署的模型。
部署模型
最後,請將您在上一個步驟中設定的模型部署到 HTTPS 端點。您可以將一個或多個模型部署到端點。
模型和端點相容性
模型和端點必須具有以下相同設定值,才能將模型部署至端點:
-
IAM 角色
-
Amazon VPC,包括其子網路和安全群組
-
網路隔離 (啟用或停用)
Studio 會透過以下方式,防止您將模型部署至不相容的端點:
-
如果您嘗試將模型部署到新端點,SageMaker AI 會使用相容的初始設定來設定端點。如果您因變更這些設定而導致不相容,Studio 會顯示警示並防止部署。
-
如果您嘗試部署到現有端點且該端點不相容,Studio 會顯示警示並防止部署。
-
如果您嘗試將多個模型新增至部署,Studio 會防止您部署彼此不相容的模型。
當 Studio 顯示模型和端點不相容的警示時,您可以選擇在警示中檢視詳細資訊,查看哪些設定不相容。
其中一種部署模型的方法是在 Studio 中執行下列動作:
-
開啟您的 SageMaker Studio 應用程式。
-
在左側導覽窗格中選擇 Models (模型)。
-
在模型頁面上,從 SageMaker AI 模型清單中選取一個或多個模型。
-
選擇部署。
-
針對端點名稱,開啟下拉式功能表。您可以選取現有端點,也可以建立要部署模型的新端點。
-
針對執行個體類型,選取您要用於端點的執行個體類型。如果您先前已經為模型執行推論建議程式任務,您的建議執行個體類型會顯示在建議標題下的清單中。否則您會看到可能適合您模型的潛在執行個體。
JumpStart 的執行個體類型相容性
如果您要部署 JumpStart 模型,Studio 只會顯示模型所支援的執行個體類型。
-
針對初始執行個體數量,輸入您要為端點佈建的執行個體初始數量。
-
針對執行個體數量上限,指定端點擴展時可佈建的執行個體數量上限,以因應流量提升。
-
如果您要部署的模型是從模型中樞最常使用的 JumpStart LLM 之一,則執行個體類型和執行個體數量欄位後會顯示替代組態選項。
AWS 對於最熱門的 JumpStart LLM 有預先標記的執行個體類型,可以最佳化成本或效能。這份資料可以協助您決定要用於部署 LLM 的執行個體類型。選擇替代組態以開啟包含預先標記資料的對話方塊。該面板外觀如下螢幕擷取畫面:
請在替代組態方塊中,執行下列動作:
-
選取執行個體類型。您可以選擇每小時成本或最佳效能,查看最佳化指定模型的成本或效能的執行個體類型。您也可以選擇其他支援的執行個體,查看與 JumpStart 模型相容的其他執行個體類型。請注意,在此處選取的執行個體類型會覆寫步驟 6 中指定的任何先前執行個體。
-
(選用) 開啟自訂所選組態,以指定總記號數量上限 (記號數量上限,即輸入記號和模型產生的輸出總和)、輸入記號長度上限 (每個請求輸入的記號數量上限) 和並行請求上限 (模型一次可處理的請求數量上限)。
-
選擇選取,確認您的執行個體類型和組態設定。
-
-
模型欄位應該已填入您要部署的模型名稱。您可以選擇新增模型,將更多模型新增至部署。請針對您新增的每個模型,填寫下列欄位:
-
針對 CPU 核心數量,輸入您要專用於模型使用的 CPU 核心。
-
針對複本數量下限,輸入您在任何時間要在端點上託管的最少模型複本數量。
-
針對 CPU 記憶體下限 (MB),輸入模型所需的記憶體數量下限 (以 MB 為單位)。
-
針對 CPU 記憶體上限 (MB),輸入您允許模型使用的記憶體數量上限 (以 MB 為單位)。
-
-
(選用) 請在進階選項中,執行下列動作:
-
針對 IAM 角色,使用預設 SageMaker AI IAM 執行角色,或指定具所需許可的自有角色。請注意,此 IAM 角色必須與您在建立可部署模型時指定的角色相同。
-
針對虛擬私有雲端 (VPC),您可以指定要負責託管端點的 VPC。
-
針對加密 KMS 金鑰,選取 AWS KMS 金鑰以加密連接至託管端點的 ML 運算執行個體儲存磁碟區上的資料。
-
開啟網路隔離,限制容器的網際網路存取。
-
針對逾時組態,輸入模型資料下載逾時 (秒) 和容器啟動運作狀態檢查逾時 (秒) 欄位的值。這些值會決定 SageMaker AI 分別可以將模型下載至容器和啟動容器的時間上限。
-
在標籤中,輸入任何標籤做為鍵值組。
注意
SageMaker AI 會使用與您部署的模型相容的初始值來設定 IAM 角色、VPC 和網路隔離設定。如果您因變更這些設定而導致不相容,Studio 會顯示警示並防止部署。
-
設定選項後,頁面應該如下螢幕擷取畫面。
設定部署後,選擇部署以建立端點並部署模型。
使用 Python SDK 部署模型
您可以透過 SageMaker Python SDK,以兩種方式建置模型。第一個方式是從 Model 或 ModelBuilder 類別建立模型物件。如果您使用 Model 類別建立 Model 物件,您需要指定模型套件或推論程式碼 (取決於您的模型伺服器)、處理用戶端和伺服器之間資料序列化和還原序列化的指令碼,以及要上傳到 Amazon S3 供使用的任何相依項目。第二個方式是使用提供模型成品或推論程式碼的 ModelBuilder。ModelBuilder 會自動擷取您的相依項目、推論所需序列化和還原序列化函數,並封裝您的相依項目以建立 Model 物件。如需 ModelBuilder 的相關資訊,請參閱 使用 ModelBuilder 在 Amazon SageMaker AI 建立模型。
下一個部分將說明兩種建立模型和部署模型物件的方法。
設定
以下是準備模型部署程序的範例。過程中會匯入必要的程式庫,並定義尋找模型成品的 S3 URL。
範例 模型成品 URL
下列程式碼會建置範例 Amazon S3 URL。URL 會在 Amazon S3 儲存貯體中找到預先訓練模型的模型成品。
# Create a variable w/ the model S3 URL # The name of your S3 bucket: s3_bucket = "amzn-s3-demo-bucket" # The directory within your S3 bucket your model is stored in: bucket_prefix = "sagemaker/model/path" # The file name of your model artifact: model_filename = "my-model-artifact.tar.gz" # Relative S3 path: model_s3_key = f"{bucket_prefix}/"+model_filename # Combine bucket name, model file name, and relate S3 path to create S3 model URL: model_url = f"s3://{s3_bucket}/{model_s3_key}"
完整的 Amazon S3 URL 會存放在變數 model_url 中,該變數會用於以下範例。
概觀
您可以透過 SageMaker Python SDK 或 SDK for Python (Boto3),以多種方式部署模型。以下各部分將摘要說明各種方式的步驟。以下範例將示範這些步驟。
設定
以下範例會設定將模型部署至端點所需的資源。
部署
下列範例會將模型部署至端點。
使用 AWS CLI 部署模型
您可以使用 AWS CLI 將模型部署至端點。
概觀
當您使用 AWS CLI 來部署模型時,您可以選擇要不要使用推論元件來部署模型。以下各部分將摘要說明用來執行兩種方式的命令。以下範例將示範這些命令。
設定
以下範例會設定將模型部署至端點所需的資源。
部署
下列範例會將模型部署至端點。