用于训练和部署模型的 Docker 容器 - Amazon SageMaker AI

用于训练和部署模型的 Docker 容器

Amazon SageMaker AI 广泛地将 Docker 容器用于构建和运行时任务。SageMaker AI 为其内置算法提供预构建的 Docker 映像,并提供支持的深度学习框架来用于训练和推理。使用容器,您可以快速可靠地训练机器学习算法并部署任意规模的模型。此部分中的主题展示了如何根据自己的使用场景部署这些容器。有关如何自带容器以用于 Amazon SageMaker Studio Classic 的信息,请参阅 Amazon SageMaker Studio Classic 中的自定义映像

使用 SageMaker AI 运行脚本、训练算法或部署模型的场景

在运行脚本、训练算法或部署模型时,Amazon SageMaker AI 始终使用 Docker 容器。您与容器的互动程度取决于您的使用场景。

下面的决策树说明了三种主要场景:将预构建 Docker 容器与 SageMaker AI 结合使用的使用案例扩展预构建 Docker 容器的使用案例自行构建容器的使用案例

容器使用场景的决策树。

将预构建 Docker 容器与 SageMaker AI 结合使用的使用案例

将容器与 SageMaker AI 结合使用时,请考虑以下使用案例:

  • 预构建 SageMaker AI 算法:使用内置算法附带的映像。有关更多信息,请参阅 Use Amazon SageMaker AI Built-in Algorithms or Pre-trained Models

  • 带有预构建 SageMaker AI 容器的自定义模型:如果您训练或部署自定义模型,但所用框架中的预构建 SageMaker AI 容器包括 TensorFlow 和 PyTorch,请选择以下选项之一:

    • 如果您不需要自定义软件包,并且容器已包含所有必需的软件包:请使用与您的框架关联的预构建 Docker 映像。有关更多信息,请参阅 预构建的 SageMaker AI Docker 映像

    • 如果您需要安装到预建容器之一中的自定义软件包:请确认预构建的 Docker 映像允许 requirements.txt 文件,或者根据以下使用场景扩展预构建的容器。

扩展预构建 Docker 容器的使用场景

以下是扩展预构建 Docker 容器的使用场景:

  • 无法导入依赖项 – 扩展与您的框架关联的预构建 Docker 映像。请参阅扩展预构建容器了解更多信息。

  • 无法在预建容器中导入依赖项,并且预构建容器支持 requirements.txt – 在 requirements.txt 中添加所有必需的依赖项。以下框架支持使用 requirements.txt。

自行构建容器的使用场景

如果您构建或训练自定义模型,并且需要没有预构建映像的自定义框架,请构建一个自定义容器。

作为训练和部署 TensorFlow 模型的示例使用场景,以下指南显示了如何从使用场景的前几节中确定适合这种情况的选项。

假设您在训练和部署 TensorFlow 模型时有以下需求。

确定所需的容器类型后,以下列表提供了之前列出选项的详细信息。

  • 使用内置的 SageMaker AI 算法或框架。对于大多数使用场景,您可以使用内置算法和框架而不必为容器费心。您可以从 SageMaker AI 控制台、AWS Command Line Interface(AWS CLI)、Python 笔记本或 Amazon SageMaker Python SDK 中训练和部署这些算法。您可在创建估算器时,通过指定算法或框架版本来做到这一点。可用的内置算法将会分项列出,Amazon SageMaker 中的内置算法和预训练模型主题中对此进行了介绍。有关可用框架的更多信息,请参阅 ML 框架和语言。有关如何使用在 SageMaker 笔记本实例中运行的 Jupyter 笔记本训练和部署内置算法的示例,请参阅Amazon SageMaker AI 设置指南主题。

  • 使用预构建 SageMaker AI 容器映像。或者,您可以通过 Docker 容器使用内置算法和框架。SageMaker AI 为其内置算法提供容器,并为一些最常见的机器学习框架(例如 Apache MXNet、TensorFlow、PyTorch 和 Chainer)提供预构建的 Docker 映像。有关可用 SageMaker 映像的完整列表,请参阅可用的深度学习容器映像。它还支持 scikit-learn 和 SparkML 等机器学习库。如果您使用 Amazon SageMaker Python SDK,则可以通过将完整的容器 URI 传递给相应的 SageMaker SDK Estimator 类来部署容器。有关 SageMaker AI 当前支持的深度学习框架的完整列表,请参阅用于深度学习的预构建 SageMaker AI Docker 映像。有关 scikit-learn 和 SparkML 预构建容器映像的信息,请参阅访问 Scikit-learn 和 Spark ML 的预构建 Docker 映像。有关将框架与 Amazon SageMaker Python SDK 结合使用的更多信息,请参阅机器学习框架和语言中相应的主题。

  • 扩展预构建 SageMaker AI 容器映像。如果您想扩展预构建的 SageMaker AI 算法或模型 Docker 映像,您可以修改 SageMaker AI 映像以满足需求。有关示例,请参阅扩展 PyTorch 容器

  • 调整现有容器映像:如果您要调整预先存在的容器映像以用于 SageMaker AI,则必须修改 Docker 容器以启用 SageMaker AI 训练或推理工具包。有关说明如何构建您自己的容器来训练和托管算法的示例,请参阅使用自己的 R 算法

对 Docker 容器和部署进行故障排除

将 Docker 容器与 SageMaker AI 结合使用时,您可能会遇到以下常见错误。每个错误的后面都提供了错误的解决方案。

  • 错误:SageMaker AI 丢失了 Docker 进程守护程序。

    要修复此错误,请使用以下命令重新启动 Docker。

    sudo service docker restart
  • 错误:Docker 容器 /tmp 目录的空间不足。

    Docker 容器使用 //tmp 分区来存储代码。在本地模式下使用大型代码模块时,这些分区很容易填满。SageMaker AI Python SDK 支持为本地模式根目录指定自定义临时目录以避免此问题。

    要在 Amazon Elastic Block Store 卷存储中指定自定义临时目录,请在路径 ~/.sagemaker/config.yaml 中创建文件,然后添加以下配置。您指定作为 container_root 的目录必须已经存在。SageMaker AI Python SDK 不会尝试创建它。

    local: container_root: /home/ec2-user/SageMaker/temp

    使用此配置,本地模式使用 /temp 目录而不是默认的 /tmp 目录。

  • SageMaker 笔记本实例出现空间不足错误

    在 SageMaker 笔记本实例上运行的 Docker 容器默认使用笔记本实例的根 Amazon EBS 卷。要解决空间不足的错误,请提供连接到笔记本实例的 Amazon EBS 卷的路径,作为 Docker 命令卷参数的一部分。

    docker run -v EBS-volume-path:container-path