本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
具有批次轉換的自訂推論程式碼
本節說明 Amazon 如何與 Docker 容器 SageMaker 互動,該容器會執行您自己的推論程式碼以進行批次轉換。請運用本文資訊來撰寫推論程式碼和建立 Docker 映像。
如何 SageMaker 執行推論映像
欲設定容器做為可執行檔來執行,請使用 Dockerfile 的 ENTRYPOINT
指示。注意下列事項:
-
對於批次轉換, 會代表您 SageMaker 叫用模型。 會將容器 SageMaker 執行為:
docker run
image
serve批次轉換的輸入必須採用可以分割成較小檔案以利平行處理的格式。這些格式包括 CSV、JSON
、 JSON行 TFRecord 和 RecordIO 。 SageMaker 透過在映像名稱後面指定
serve
引數來覆寫容器中的預設CMD
陳述式。您在 Dockerfile 中搭配CMD
指令提供的引數,會被serve
引數覆寫。 -
建議使用
ENTRYPOINT
指示的exec
格式:ENTRYPOINT ["executable", "param1", "param2"]
例如:
ENTRYPOINT ["python", "k_means_inference.py"]
-
SageMaker 會在您的容器
CreateTransformJob
上設定CreateModel
和 中指定的環境變數。此外會填入以下環境變數:-
容器執行批次轉換時,
SAGEMAKER_BATCH
設定為true
。 -
SAGEMAKER_MAX_PAYLOAD_IN_MB
設定為透過 傳送至容器的最大大小承載HTTP。 -
容器一次呼叫收到一筆記錄以調用時,
SAGEMAKER_BATCH_STRATEGY
會設定為SINGLE_RECORD
;但當容器收到承載能接受的記錄數量上限時,其會設定為MULTI_RECORD
。 -
SAGEMAKER_MAX_CONCURRENT_TRANSFORMS
設為/invocations
請求可同時開啟的數量上限。
注意
最後三個環境變數來自使用者進行的API呼叫。如果使用者不設定其值,就不傳遞。在這種情況下,會使用預設值或演算法請求的值 (回應
/execution-parameters
)。 -
-
如果您計劃使用GPU裝置進行模型推論 (在
CreateTransformJob
請求中指定 GPU型 ML 運算執行個體),請確定您的容器與 nvidia-docker 相容。請勿將NVIDIA驅動程式與映像綁定在一起。如需 nvidia-docker 的詳細資訊,請參閱 NVIDIA/nvidia-docker。 -
您無法在容器中使用
init
初始化器作為進入點 SageMaker,因為它會受到火車和服務引數的混淆。
如何 SageMaker 載入模型偽影
在 CreateModel
請求中,容器定義包含 ModelDataUrl
參數,該參數可識別出儲存模型成品的 Amazon S3 位置。當您使用 SageMaker 執行推論時,它會使用此資訊來決定從何處複製模型成品。其會將成品複製到 Docker 容器的 /opt/ml/model
目錄內,以供您的推論程式碼使用。
ModelDataUrl
參數必須指向 tar.gz 檔案。否則, SageMaker 不能下載檔案。如果您在 中訓練模型 SageMaker,則會將成品儲存為 Amazon S3 中的單一壓縮 tar 檔案。如果您在另一個架構中訓練模型,則需要將模型成品以壓縮 tar file 形式儲存在 Amazon S3 中。在批次轉換任務開始之前, 會 SageMaker 解壓縮此 tar 檔案並將其儲存在容器中的/opt/ml/model
目錄中。
容器處理請求的方式
容器必須實作一個 Web 伺服器,用以在 8080 連接埠上回應調用和 ping。對於批次轉換,您可以選擇設定演算法以實作執行參數請求,為 提供動態執行期組態 SageMaker。 SageMaker 使用下列端點:
-
ping
—用於定期檢查容器的運作狀態。在傳送調用請求之前, SageMaker 等待HTTP200
狀態碼和成功 ping 請求的空白內文。您可以使用 ping 請求來將模型載入到記憶體,以便在傳送調用請求時產生推論。 -
(選用)
execution-parameters
— 允許演算法在執行期為工作提供最佳的調校參數。根據記憶體和容器CPUs可用的 ,演算法會為任務選擇適當的BatchStrategy
、MaxConcurrentTransforms
和MaxPayloadInMB
值。
在呼叫叫用請求之前, 會 SageMaker 嘗試叫用執行參數請求。建立批次轉換任務時,您可以為 MaxConcurrentTransforms
、 BatchStrategy
和 MaxPayloadInMB
參數提供值。使用以下優先順序來 SageMaker 決定這些參數的值:
-
您建立
CreateTransformJob
請求時提供的參數值。 -
模型容器 SageMaker 在叫用執行參數端點時傳回的值>
-
下表列出的預設參數值。
參數 預設值 MaxConcurrentTransforms
1
BatchStrategy
MULTI_RECORD
MaxPayloadInMB
6
GET
執行參數請求的回應是具有 MaxConcurrentTransforms
、 BatchStrategy
和 MaxPayloadInMB
參數金鑰的JSON物件。這是有效回應的範例:
{ “MaxConcurrentTransforms”: 8, “BatchStrategy": "MULTI_RECORD", "MaxPayloadInMB": 6 }
容器對推論請求應有的回應方式
若要取得推論,Amazon 會將POST請求 SageMaker 傳送至推論容器。POST 請求內文包含來自 Amazon S3 的資料。Amazon 會將請求 SageMaker 傳遞至容器,並從容器傳回推論結果,將資料從回應儲存至 Amazon S3。
若要接收推論請求,容器必須有 Web 伺服器接聽連接埠 8080,且必須接受對/invocations
端點的POST請求。可透過 ModelClientConfig
設定推論請求逾時和重試次數上限。
容器對運作狀態檢查 (Ping) 請求應有的回應方式
容器上最簡單的要求是使用 HTTP 200 狀態碼和空內文回應。這表示 SageMaker 容器已準備好在/invocations
端點接受推論請求。
雖然容器的最低標準是傳回靜態的 200,容器開發人員也能運用此功能來進行更加深入的檢查。/ping
嘗試的請求逾時為 2 秒。