我想要對 Amazon SageMaker 端點建立或更新失敗的原因進行疑難排解。
解決方案
SageMaker 端點的建立或更新失敗時,SageMaker 會提供失敗原因。請使用下列其中一個選項來檢閱此原因:
- 在 SageMaker 主控台中檢查端點。失敗原因會在主控台中報告。
- 執行 AWS Command Line Interface (AWS CLI) describe-endpoint。檢查 FailureReason (失敗原因) 欄位以瞭解失敗原因。
**注意:**如果您在執行 AWS CLI 命令時收到錯誤,請確保您使用的是最新版 AWS CLI。
以下是一些失敗原因及其解決方法。
由於 InsufficientInstanceCapacity (執行個體容量不足) 錯誤,無法佈建要求的機器學習 (ML) 運算容量
您嘗試建立端點時,可能會收到下列錯誤:
Unable to provision requested ML compute capacity due to InsufficientInstanceCapacity error
AWS 沒有足夠容量來佈建端點請求的執行個體時,就會發生此錯誤。
您可以嘗試下列一種或多種方法來解決此錯誤:
- 由於容量可能會經常轉移,請等待幾分鐘,然後再試一次。
- 如果您的端點使用多個執行個體,請嘗試使用較少的執行個體來建立端點。如果您已設定 Auto Scaling,SageMaker 可根據需要並在容量允許的情況下縱向擴展或縮減。
- 嘗試支援您工作負載的其他執行個體類型。建立端點後,使用所需的執行個體類型更新端點。由於 SageMaker 使用藍/綠部署方法來最大化可用性,因此您可以轉換為新的執行個體類型,而不會影響目前的生產工作負載。
生產變體 <variant> 的容器未通過 Ping 運作狀態檢查。請檢查此端點的 CloudWatch Logs。
用於 SageMaker 端點的容器必須實作可回應 /invocations 和 /ping 端點的 Web 伺服器。建立端點時,SageMaker 會在容器啟動後開始傳送定期的 GET 請求至 /ping 端點。
容器至少必須使用 HTTP 200 OK 狀態代碼和空的主體來回應,以指出容器已準備好接受推論請求。SageMaker 在容器啟動後的四分鐘內未從容器取得一致的回應時,就會發生此錯誤。由於端點不會回應運作狀態檢查,SageMaker 不會認為端點狀態良好。因此,端點會標示為 Failed (失敗)。
您使用其中一個 AWS 深度學習容器映像時,運作狀態檢查也可能會失敗。這些映像使用 TorchServe 或 Multi Model Server 來為實作用於推論和運作狀態檢查的 HTTP 端點的模型提供服務。這些架構會先檢查模型是否已載入,然後再以 200 OK 回應 SageMaker。如果伺服器無法看到模型已載入,則運作狀態檢查會失敗。模型可能由於許多原因而無法載入,包括記憶體用量。相對應的錯誤訊息會記錄在端點的 Amazon CloudWatch Logs。如果載入到端點的程式碼造成失敗 (例如,PyTorch 的 model_fn),則會將錯誤記錄在 AWS CloudTrail。若要增加這些日誌的詳細程度,請使用 Python 日誌的日誌層級來更新模型的 SAGEMAKER_CONTAINER_LOG_LEVEL 環境變數。
運作狀態檢查請求必須在兩秒鐘內收到回應,才能成功。務必在本機啟動模型容器,並向容器傳送 GET 請求來檢查回應,藉此測試回應。
無法擷取容器的模型資料封存
SageMaker 需要包含模型資料的 TAR 檔案,以便在端點中使用。SageMaker 下載 TAR 檔案後,就會擷取資料封存。如果 SageMaker 無法擷取此資料封存,可能會發生此錯誤。例如,如果模型成品包含位於 TAR 檔案中的檔案的符號連結,則 SageMaker 無法擷取資料封存。
建立端點時,請確定模型成品不會在 TAR 檔案中包含符號連結。若要檢查 TAR 檔案是否包含符號連結,請擷取模型資料,然後在成品內執行下列命令:
find . -type l -ls
此命令傳回透過當前目錄及其任何子目錄搜尋後找到的所有符號連結。將傳回的任何連結替換為檔案的實際副本。
CannotStartContainerError
SageMaker 無法啟動容器以準備用於推論的容器時,就會發生此錯誤。
SageMaker 啟動端點時,您的容器會使用下列命令啟動:
docker run <image-id> serve
執行此命令時,容器必須啟動服務程序。
若要解決此錯誤,請使用 SageMaker Python SDK 的本機模式。或者,請嘗試使用 docker run 命令執行推論映像。SageMaker Python SDK 會載入您的模型,類似於 SageMaker 端點。但是,Docker 不會載入模型,除非您將命令或容器設定為這樣做。您可以使用類似下列的命令在本機載入模型:
docker run -v $(pwd)/test_dir:/opt/ml -p 8080:8080 --rm ${image} serve