

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

# Amazon SageMaker Processing 如何執行您的處理容器映像
<a name="byoc-run-image"></a>

Amazon SageMaker Processing 會以類似下列命令的方式執行容器映像，其中 `AppSpecification.ImageUri` 是您在 `CreateProcessingJob` 操作中指定的 Amazon ECR 映像 URI。

```
docker run [AppSpecification.ImageUri]
```

這個命令會執行 Docker 映像中配置的 `ENTRYPOINT` 命令。

您也可以在 `CreateProcessingJob` 請求中使用 `AppSpecification.ContainerEntrypoint` 和 `AppSpecification.ContainerArgument` 參數，以覆寫映像中的進入點命令，或提供命令列引數給進入點命令。指定這些參數會設定 Amazon SageMaker Processing 為執行容器，類似於下列命令的執行方式。

```
 docker run --entry-point [AppSpecification.ContainerEntrypoint] [AppSpecification.ImageUri] [AppSpecification.ContainerArguments]
```

例如，如果您在 `CreateProcessingJob ` 請求中將 `ContainerEntrypoint` 指定為 `[python3, -v, /processing_script.py]`，並將 `ContainerArguments` 指定為 `[data-format, csv]`，Amazon SageMaker Processing 會使用以下命令執行您的容器。

```
 python3 -v /processing_script.py data-format csv 
```

 建置處理容器時，請注意下列細節：
+ Amazon SageMaker Processing 會根據命令執行的結束代碼，判斷任務完成或失敗。如果所有處理容器都成功結束且結束代碼為 0，表示處理任務完成，如果有任何容器結束時傳回非零結束代碼，表示處理任務失敗。
+  Amazon SageMaker Processing 可讓您覆寫處理容器的進入點，並設定命令列引數，就像使用 Docker API 時一樣。Docker 影像也可以使用 `ENTRYPOINT` 和 CMD 指令來設定進入點和命令列引數。`CreateProcessingJob` 的 `ContainerEntrypoint` 和 `ContainerArgument` 參數設定 Docker 映像的進入點和引數時，方式類似於 Docker 透過 Docker API 覆寫進入點和引數：
  + 如果 `ContainerEntrypoint` 和 `ContainerArguments` 都未提供，Processing 會使用預設的 `ENTRYPOINT` 或映像中的 CMD。
  + 如果提供 `ContainerEntrypoint`，但未提供 `ContainerArguments`，則 Processing 會執行具有指定入口點的映像，並忽略映像中的 `ENTRYPOINT` 和 CMD。
  + 如果提供 `ContainerArguments`，但未提供 `ContainerEntrypoint`，則 Processing 會以映像中的預設 `ENTRYPOINT` 搭配提供的參數來執行影像。
  + 如果同時提供 `ContainerEntrypoint` 和 `ContainerArguments`，Processing 則會以特定的進入點和引數執行映像，並忽略映像中的 `ENTRYPOINT` 和 CMD。
+ 在 Dockerfile 中，請使用 exec 形式的 `ENTRYPOINT` 指令 (`ENTRYPOINT` `["executable", "param1", "param2"])`，而不是 “shell” 形式 (`ENTRYPOINT`` command param1 param2`)。這可讓您的處理容器接收 `SIGINT` 和 `SIGKILL` 訊號，Processing 會根據這些訊號，使用 `StopProcessingJob` API 停止處理任務。
+ SageMaker AI 會保留 `/opt/ml` 與所有子目錄。在建置 Processing Docker 映像時，請不要將處理容器所需的任何資料放在這些目錄中。
+ 如果您打算使用 GPU 裝置，請確保您的容器與 nvidia-docker 相容。請只在容器中包含 CUDA 工具組。請勿將 NVIDIA 驅動程式與映像整合成套件。如需 nvidia-docker 的詳細資訊，請參閱 [NVIDIA/nvidia-docker](https://github.com/NVIDIA/nvidia-docker)。