本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
对 Amazon A SageMaker I 模型部署进行故障排除
如果您在 Amazon A SageMaker I 中部署机器学习模型时遇到问题,请参阅以下指南。
活动 CPU 计数中的检测错误
如果使用 Linux Java 虚拟机 (JVM) 部署 A SageMaker I 模型,则可能会遇到检测错误,导致无法使用可用 CPU 资源。此问题会影响一些 JVMs 支持 Java 8 和 Java 9 的产品,以及大多数支持 Java 10 和 Java 11 的产品。它们 JVMs 实现了一种机制,该机制可以检测和处理在 Docker 容器中运行模型时以及更笼统地说,在 Linux taskset
命令或控制组 (cgroups) 中运行模型时的 CPU 数量和最大可用内存。 SageMaker AI 部署利用了 JVM 用于管理这些资源的某些设置。当前,这会导致容器错误地检测到可用数量 CPUs。
SageMaker AI 不限制 CPUs 对实例的访问权限。但是,当容器 CPUs 有更多可用1
时,JVM 可能会检测到 CPU 计数。因此,JVM 会将其所有内部设置调整为像只有 1
个 CPU 内核可用时运行一样。这些设置会影响垃圾回收、锁定、编译器线程及其他 JVM 内部组件,从而对容器的并发性、吞吐量和延迟产生负面影响。
举例来说,在为 SageMaker AI 配置的容器中,如果该容器部署了基于 Java8_191 的 JVM,并且该实例上有四个可用 CPUs 的 JVM,则运行以下命令来启动 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 应用程序时添加-XX:-UseContainerSupport
参数,禁用不需要 CPUs 的行为并建立对所有实例的完全访问权限。例如,按如下所示运行 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 中所有内容的访问权限。
在 SageMaker AI 容器中间接使用 JVM 时,也可能会遇到此问题。例如,使用 JVM 支持 SparkML Scala 时。-XX:-UseContainerSupport
参数也会影响 Java Runtime.getRuntime().availableProcessors()
API 返回的输出。
部署 model.tar.gz 文件时出现问题
使用 model.tar.gz
文件部署模型时,模型 tarball 不应包含任何符号链接。符号链接会导致模型创建失败。此外,我们建议您不要在 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 中使用本地模式通过将模型部署到本地端点来模仿托管环境。有关更多信息,请参阅本地模式
。 -
使用 vanilla docker 命令来测试容器的响应。to /ping and /invocations有关更多信息,请参阅 local_test
。