使用您自己的推論程式碼來執行批次轉換 - Amazon SageMaker

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

使用您自己的推論程式碼來執行批次轉換

本節說明 Amazon 如何與執行自己的批次轉 SageMaker 換推論程式碼的 Docker 容器互動。請運用本文資訊來撰寫推論程式碼和建立 Docker 影像。

如何 SageMaker 執行您的推論影像

欲設定容器並將其做為可執行檔,則可使用 Dockerfile 的 ENTRYPOINT 指示。注意下列事項:

  • 對於批次轉換,請代表您 SageMaker 呼叫模型。 SageMaker 運行容器為:

    docker run image serve

    批次轉換的輸入必須是可以分割成較小的檔案平行處理的格式。這些格式包括 CSV、JSONJSON 行TFRecordRecordIO

    SageMaker 透過在影像名稱之後指定serve引數,覆寫容器中的預設CMD陳述式。您以 Dockerfile 的 serve 指令所提供之引數,亦會遭 CMD 引數覆寫。

     

  • 建議使用 exec 指示的 ENTRYPOINT 格式:

    ENTRYPOINT ["executable", "param1", "param2"]

    例如:

    ENTRYPOINT ["python", "k_means_inference.py"]

     

  • SageMaker 設置在容器CreateModel和容器CreateTransformJob上指定的環境變量。此外會填入以下環境變數:

    • 容器執行批次轉換時,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 檔案形式存放在 Amazon S3 中。 SageMaker 在批次轉換工作開始之前,會將此 tar 檔案解壓縮並儲存在容器中的/opt/ml/model目錄中。

容器處理請求的方式

容器必須實作一個 Web 伺服器,用以在 8080 埠上回應呼叫和 ping。對於批次轉換,您可以選擇設定演算法來實作執行參數要求,以提供動態執行階段組態給。 SageMaker SageMaker使用下列端點:

  • ping— 用於定期檢查容器的健康狀況。 SageMaker 在發送調用請求之前,等待 HTTP 200 狀態碼和空主體以成功 ping 請求。您可以使用 ping 請求來將模型載入到記憶體以在傳送呼叫請求時產生推論。

  • (選用) execution-parameters—允許演算法在執行階段為任務提供最佳的調校參數。根據容器可用的記憶體和 CPU,演算法會選擇適當的 MaxConcurrentTransformsBatchStrategyMaxPayloadInMB 值。

在呼叫叫用要求之前, SageMaker 會嘗試叫用執行參數要求。建立批次轉換工作時,可以提供MaxConcurrentTransformsBatchStrategy、和MaxPayloadInMB參數的值。 SageMaker 使用以下優先順序決定這些參數的值:

  1. 您建立 CreateTransformJob 請求時提供的參數值。

  2. SageMaker 調用執行參數端點時,模型容器返回的值 >

  3. 下表列出的預設參數值。

    參數 預設值
    MaxConcurrentTransforms

    1

    BatchStrategy

    MULTI_RECORD

    MaxPayloadInMB

    6

GET execution-parameters 請求的回應是 JSON 物件,具有 MaxConcurrentTransformsBatchStrategyMaxPayloadInMB 參數的索引鍵。這是有效回應的範例:

{ “MaxConcurrentTransforms”: 8, “BatchStrategy": "MULTI_RECORD", "MaxPayloadInMB": 6 }

容器對推論請求應有的回應方式

為了獲得推論,Amazon SageMaker 將 POST 請求發送到推論容器。POST 請求內文包含來自 Amazon S3 的資料。Amazon 會將請求傳 SageMaker 送至容器,然後從容器傳回推論結果,將資料從回應儲存到 Amazon S3。

為了接收推論請求,容器必須擁有可以監聽 8080 埠的 Web 伺服器,且需接受對 /invocations 端點的 POST 請求。可透過 ModelClientConfig 設定推論要求逾時和重試次數最大值。

容器對運作狀態檢查 (Ping) 請求應有的回應方式

容器上最簡單的請求是以 HTTP 200 狀態碼和空內文做為回應。這表示容器 SageMaker 已準備好在/invocations端點接受推論要求。

雖然容器的最低標準是傳回靜態的 200,容器開發人員也能運用此功能來進行更加深入的檢查。/ping 嘗試的請求逾時為 2 秒。