

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 用于训练和部署模型的 Docker 容器
<a name="docker-containers"></a>

Amazon SageMaker AI 广泛使用 *Docker 容器*来执行构建和运行时任务。 SageMaker AI 为其内置算法以及用于训练和推理的支持的深度学习框架提供了预构建的 Docker 镜像。使用容器，您可以快速可靠地训练机器学习算法并部署任意规模的模型。此部分中的主题展示了如何根据自己的使用场景部署这些容器。有关如何自带容器用于 Amazon SageMaker Studio Classic 的信息，请参阅[亚马逊 SageMaker Studio 经典版中的自定义图片](studio-byoi.md)。

**Topics**
+ [使用 SageMaker AI 运行脚本、训练算法或部署模型的场景](#container-scenarios)
+ [Docker 容器基础知识](docker-basics.md)
+ [预先构建的 SageMaker AI Docker 镜像](docker-containers-prebuilt.md)
+ [带有 AI 的自定义 Docker 容 SageMaker 器](docker-containers-adapt-your-own.md)
+ [使用自己的算法和模型创建容器](docker-containers-create.md)
+ [示例和更多信息：使用自己的算法或模型](docker-containers-notebooks.md)
+ [对 Docker 容器和部署进行故障排除](#docker-containers-troubleshooting)

## 使用 SageMaker AI 运行脚本、训练算法或部署模型的场景
<a name="container-scenarios"></a>

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

以下决策树说明了三种主要场景：**使用带有 SageMaker AI 的预建 Docker 容器的用****例；扩展预构建的 Docker 容器的用例；构建自己的容器的****用例**。

![\[容器使用场景的决策树。\]](http://docs.amazonaws.cn/sagemaker/latest/dg/images/your-algorithm-containers-flowchart-diagram.png)


**Topics**
+ [使用带有 AI 的预构建 Docker 容器的用例 SageMaker](#container-scenarios-use-prebuilt)
+ [扩展预构建 Docker 容器的使用场景](#container-scenarios-extend-prebuilt)
+ [自行构建容器的使用场景](#container-scenarios-byoc)

### 使用带有 AI 的预构建 Docker 容器的用例 SageMaker
<a name="container-scenarios-use-prebuilt"></a>

使用带有 SageMaker AI 的容器时，请考虑以下用例：
+ **预建的 SageMaker AI 算法** — 使用内置算法附带的图像。有关更多信息，请参阅[使用 SageMaker Amazon AI 内置算法或预训练模型](https://docs.amazonaws.cn//sagemaker/latest/dg/algos.html)。
+ **带有预构建 SageMaker AI 容器的自定义模型** — 如果您训练或部署自定义模型，但使用的框架包含预先构建的 SageMaker AI 容器（包括 TensorFlow 和） PyTorch，请选择以下选项之一：
  + 如果您不需要自定义软件包，并且容器已包含所有必需的软件包：请使用与您的框架关联的预构建 Docker 映像。有关更多信息，请参阅 [预先构建的 SageMaker AI Docker 镜像](docker-containers-prebuilt.md)。
  + 如果您需要安装到预建容器之一中的自定义软件包：请确认预构建的 Docker 映像允许 requirements.txt 文件，或者根据以下使用场景扩展预构建的容器。

### 扩展预构建 Docker 容器的使用场景
<a name="container-scenarios-extend-prebuilt"></a>

以下是扩展预构建 Docker 容器的使用场景：
+ **无法导入依赖项** – 扩展与您的框架关联的预构建 Docker 映像。请参阅[扩展预构建容器](prebuilt-containers-extend.md)了解更多信息。
+ **无法在预建容器中导入依赖项，并且预构建容器支持 requirements.txt** – 在 requirements.txt 中添加所有必需的依赖项。以下框架支持使用 requirements.txt。
  + [TensorFlow](https://sagemaker.readthedocs.io/en/v2.18.0/frameworks/tensorflow/using_tf.html)
  + [Chainer](https://sagemaker.readthedocs.io/en/v2.18.0/frameworks/chainer/using_chainer.html?highlight=requirements.txt)
  + [Sci-kit learn](https://sagemaker.readthedocs.io/en/stable/frameworks/sklearn/using_sklearn.html?highlight=requirements.txt)
  + [PyTorch](https://sagemaker.readthedocs.io/en/v2.18.0/frameworks/pytorch/using_pytorch.html?highlight=requirements.txt)
  + [Apache MXNet](https://sagemaker.readthedocs.io/en/v2.18.0/frameworks/mxnet/using_mxnet.html?highlight=requirements.txt)

### 自行构建容器的使用场景
<a name="container-scenarios-byoc"></a>

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

作为训练和部署 TensorFlow 模型的示例用例，以下指南展示了如何确定前面**用例部分中哪个选项适合该案例**。

假设您在训练和部署 TensorFlow 模型时有以下要求。
+  TensorFlow 模型是自定义模型。
+ 由于要在 TensorFlow 框架中构建 TensorFlow 模型，因此请使用 TensorFlow 预先构建的框架容器来训练和托管模型。
+ 如果您需要在[入口点](https://sagemaker.readthedocs.io/en/stable/frameworks/tensorflow/using_tf.html#train-a-model-with-tensorflow)脚本或[推理脚本中使用自定义软件包，请扩展预构建容器，或者使用 requirements.txt 文件在运行时安装依赖项](https://sagemaker.readthedocs.io/en/stable/frameworks/tensorflow/deploying_tensorflow_serving.html#how-to-implement-the-pre-and-or-post-processing-handler-s)。

确定所需的容器类型后，以下列表提供了之前列出选项的详细信息。
+ **使用内置的 A SageMaker I 算法或框架**。对于大多数使用场景，您可以使用内置算法和框架而不必为容器费心。你可以通过 SageMaker AI 控制台、 Amazon Command Line Interface (Amazon CLI)、Python 笔记本或 A [mazon Pyth SageMaker on SDK](https://sagemaker.readthedocs.io/en/stable) 训练和部署这些算法。您可在创建估算器时，通过指定算法或框架版本来做到这一点。可用的内置算法将会分项列出，[Amazon 中的内置算法和预训练模型 SageMaker](algos.md)主题中对此进行了介绍。有关可用框架的更多信息，请参阅 [ML 框架和语言](frameworks.md)。有关如何使用在笔记本实例中运行的 Jupyter 笔记本训练和部署内置算法的 SageMaker 示例，请参阅主题。[亚马逊 A SageMaker I 入门指南](gs.md)
+ **使用预构建的 SageMaker AI 容器镜像**。或者，您可以使用 Docker 容器使用内置算法和框架。 SageMaker AI 为其内置算法提供了容器，并为一些最常见的机器学习框架（例如 Apache MXNet、、和 Chainer）提供了预构建的 Docker 镜像。 TensorFlow PyTorch有关可用 SageMaker 图像的完整列表，请参阅[可用的 Deep Learning Containers 镜像](https://github.com/aws/deep-learning-containers/blob/master/available_images.md)。它还支持 scikit-learn 和 SparkML 等机器学习库。如果您使用 [Amaz SageMaker on Python 软件开发工具包](https://sagemaker.readthedocs.io/en/stable)，则可以通过将完整的容器 URI 传递给相应的 SageMaker 软件开发工具包`Estimator`类来部署容器。有关 A SageMaker I 目前支持的深度学习框架的完整列表，请参阅[用于深度学习的预构建 SageMaker AI Docker 镜像](pre-built-containers-frameworks-deep-learning.md)。有关 scikit-learn 和 SparkML 预构建容器映像的信息，请参阅[访问 Scikit-learn 和 Spark ML 的预构建 Docker 映像](pre-built-docker-containers-scikit-learn-spark.md)。有关在 [Amaz SageMaker on Python 软件开发工具包](https://sagemaker.readthedocs.io/en/stable)中使用框架的更多信息，请参阅中相应的主题[机器学习框架和语言](frameworks.md)。
+ **扩展预先构建的 SageMaker AI 容器镜像**。如果您想扩展预先构建的 SageMaker AI 算法或建模 Docker 镜像，可以修改 SageMaker 镜像以满足您的需求。有关示例，请参阅[扩展我们的 PyTorch 容器](https://github.com/aws/amazon-sagemaker-examples-community/blob/215215eb25b40eadaf126d055dbb718a245d7603/bring-your-own-container/pytorch_extending_our_containers/pytorch_extending_our_containers.ipynb)。
+ **调整现有的容器镜像**：如果您想调整先前存在的容器镜像以使用 SageMaker AI，则必须修改 Docker 容器以启用 SageMaker 训练或推理工具包。有关说明如何构建您自己的容器来训练和托管算法的示例，请参阅[使用自己的 R 算法](https://github.com/aws/amazon-sagemaker-examples/blob/main/advanced_functionality/scikit_bring_your_own/scikit_bring_your_own.ipynb)。

## 对 Docker 容器和部署进行故障排除
<a name="docker-containers-troubleshooting"></a>

以下是您在使用带有 SageMaker AI 的Docker容器时可能遇到的常见错误。每个错误的后面都提供了错误的解决方案。
+ **错误： 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` 的目录必须已经存在。A SageMaker I Python 软件开发工具包不会尝试创建它。

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

  使用此配置，本地模式使用 `/temp` 目录而不是默认的 `/tmp` 目录。
+ ** SageMaker 笔记本实例出现空间不足错误**

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

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