

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

# 用於訓練和部署模型的 Docker 容器
<a name="docker-containers"></a>

Amazon SageMaker AI 廣泛使用 *Docker 容器*來執行建置和執行期任務。SageMaker AI 為其內建演算法提供預先建置的 Docker 映像，以及用於訓練和推論的受支援深度學習架構。您可以使用容器來訓練機器學習演算法，並快速又可靠地部署任何規模的模型。本節中的主題說明如何針對您自己的使用案例部署這些容器。如需如何使用自有的容器並與 Amazon SageMaker Studio Classic 搭配使用的相關資訊，請參閱 [Amazon SageMaker Studio Classic 中的自訂映像](studio-byoi.md)。

**Topics**
+ [在 SageMaker AI 中執行指令碼、訓練演算法或部署模型的情境](#container-scenarios)
+ [Docker 容器基本概念](docker-basics.md)
+ [預先建置的 SageMaker AI Docker 映像](docker-containers-prebuilt.md)
+ [使用 SageMaker AI 自訂 Docker 容器](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.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/your-algorithm-containers-flowchart-diagram.png)


**Topics**
+ [搭配 SageMaker AI 使用預先建置的 Docker 容器的使用案例](#container-scenarios-use-prebuilt)
+ [延伸預先建置的 Docker 容器的使用案例](#container-scenarios-extend-prebuilt)
+ [建置您自有的容器的使用案例](#container-scenarios-byoc)

### 搭配 SageMaker AI 使用預先建置的 Docker 容器的使用案例
<a name="container-scenarios-use-prebuilt"></a>

將容器與 SageMaker AI 搭配使用時，請考慮下列使用案例：
+ **預先建立的 SageMaker AI 演算法** — 使用內建演算法所附的映像。如需更多資訊，請參閱[使用 Amazon SageMaker AI 內建演算法或預訓練模型](https://docs.aws.amazon.com//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)

決定所需的容器類型後，下列清單會提供有關先前列出選項的詳細資訊。
+ **使用內建的 SageMaker AI 演算法或架構**。對於大多數使用案例，您可以使用內建演算法和架構，而不必擔心容器問題。您可以從 SageMaker AI 主控台、 AWS Command Line Interface (AWS CLI)、Python 筆記本或 [Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) 訓練和部署這些演算法。您可以在建立估算器時指定演算法或架構版本以達成此目的。[Amazon SageMaker 中的內建演算法和預先訓練模型](algos.md)主題中列舉並描述了可用的內建演算法。有關可用架構的更多相關資訊，請參閱[機器學習 (ML) 架構和語言](frameworks.md)。有關如何使用在 SageMaker 筆記本執行個體中執行的 Jupyter 筆記本來訓練和部署內建演算法的範例，請參閱主題[使用 Amazon SageMaker AI 進行設定的指南](gs.md)。
+ **使用預先建立的 SageMaker AI 容器映像**。或者，您可以用 Docker 容器使用內建演算法和架構。SageMaker AI 為其內建演算法提供容器，並為一些最常見的機器學習架構 (例如 Apache MXNet、TensorFlow、PyTorch 和 Chainer) 提供預先建置的 Docker 映像。有關可用 SageMaker 映像的完整清單，請參閱[可用的深度學習容器映像](https://github.com/aws/deep-learning-containers/blob/master/available_images.md)。它還支援機器學習 (ML) 程式庫，例如 scikit-learn 和 SparkML。如果您使用 [Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable)，您可以透過將完整容器 URI 傳遞至其各自的 SageMaker SDK `Estimator` 類別來部署容器。有關 SageMaker AI 目前支援的深度學習架構的完整清單，請參閱 [適用於深度學習的預先建置 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)。如需透過 [Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) 使用架構的更多相關資訊，請參閱[Machine Learning 架構和語言](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>

以下是將 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 磁碟區。若要解決空間不足錯誤，請提供作為一部分 Docker 命令的磁碟區參數，連接至筆記本執行個體的 Amazon EBS 磁碟區路徑。

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