對 Amazon SageMaker 模型部署進行故障診斷 - Amazon SageMaker

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

對 Amazon SageMaker 模型部署進行故障診斷

如果您在 Amazon 中部署機器學習模型時遇到問題 SageMaker,請參閱下列指引。

Active CPU Count 中的偵測錯誤

如果您使用 Linux Java 虛擬機器 (JVM) 部署 SageMaker 模型,您可能會遇到偵測錯誤,而無法使用可用CPU資源。此問題會影響JVMs支援 Java 8 和 Java 9 的部分 ,以及大多數支援 Java 10 和 Java 11 的部分 。這些JVMs實作的機制可偵測並處理在 Docker 容器中執行模型時可用的CPU計數和最大記憶體,更普遍而言,是在 Linux taskset命令或控制群組 (群組) SageMaker 內。 部署會利用 JVM用於管理這些資源的一些設定。目前,這會導致容器錯誤地偵測可用 的數量CPUs。

SageMaker 不會限制執行個體CPUs對 的存取。不過,當容器CPUs有更多可用1時, JVM可能會偵測到CPU計數。因此, 會JVM調整其所有內部設定以執行,就像只有1CPU核心可用一樣。這些設定會影響垃圾收集、鎖定、編譯器執行緒,以及其他對容器並行、輸送量和延遲產生負面影響JVM的內部。

例如,在為 SageMaker 設定的容器中,使用以 Java8_191 JVM 為基礎的 進行部署,且執行個體CPUs上有四個可用 ,請執行下列命令來啟動您的 JVM:

java -XX:+UnlockDiagnosticVMOptions -XX:+PrintActiveCpus -version

這麼做會產生以下輸出:

active_processor_count: sched_getaffinity processor count: 4 active_processor_count: determined by OSContainer: 1 active_processor_count: sched_getaffinity processor count: 4 active_processor_count: determined by OSContainer: 1 active_processor_count: sched_getaffinity processor count: 4 active_processor_count: determined by OSContainer: 1 active_processor_count: sched_getaffinity processor count: 4 active_processor_count: determined by OSContainer: 1 openjdk version "1.8.0_191" OpenJDK Runtime Environment (build 1.8.0_191-8u191-b12-2ubuntu0.16.04.1-b12) OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)

許多受此問題JVMs影響的 可以選擇停用此行為,並重新建立執行個體CPUs上所有 的完整存取權。啟動 Java 應用程式時,CPUs請加入 -XX:-UseContainerSupport 參數,以停用不需要的行為並建立對所有執行個體的完整存取權。例如,執行 java命令以啟動您的 JVM ,如下所示:

java -XX:-UseContainerSupport -XX:+UnlockDiagnosticVMOptions -XX:+PrintActiveCpus -version

這麼做會產生以下輸出:

active_processor_count: sched_getaffinity processor count: 4 active_processor_count: sched_getaffinity processor count: 4 active_processor_count: sched_getaffinity processor count: 4 active_processor_count: sched_getaffinity processor count: 4 openjdk version "1.8.0_191" OpenJDK Runtime Environment (build 1.8.0_191-8u191-b12-2ubuntu0.16.04.1-b12) OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)

檢查容器中JVM使用的 是否支援 -XX:-UseContainerSupport 參數。如果這樣做,請務必在啟動 時傳遞 參數JVM。這可讓您存取執行個體CPUs中的所有 。

在JVM SageMaker 容器中間接使用 時,您也可能會遇到此問題。例如,使用 JVM支援 SparkML Scala 時。-XX:-UseContainerSupport 參數也會影響 Java Runtime.getRuntime().availableProcessors() API 傳回的輸出

部署 model.tar.gz 檔案時發生的問題

當您使用 model.tar.gz 檔案部署模型時,模型壓縮包不應包含任何符號連結。符號連結會導致模型建立失敗。此外,建議您不要在 tarball 中包含任何不必要的檔案。

主要容器未通過 ping 健康檢查

如果您的主要容器未通過 ping 健康狀態檢查並顯示下列錯誤訊息,表示您的容器或指令碼發生問題:

The primary container for production variant beta did not pass the ping health check. Please check CloudWatch Logs logs for this endpoint.

若要疑難排解此問題,您應該檢查相關端點的 CloudWatch 日誌,以查看是否有任何錯誤或問題導致容器無法回應 /ping/invocations。記錄檔可能會提供可能指向問題的錯誤訊息。確定錯誤和失敗原因後,您應該解決錯誤。

在建立端點之前,最好先在本機測試模型部署。

  • 在 SageMaker SDK中使用本機模式,透過將模型部署到本機端點來模擬託管環境。如需詳細資訊,請參閱本機模式

  • 使用普通 docker 命令來測試容器對 /ping 和 /invocations 的回應。如需詳細資訊,請參閱 local_test