本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon SageMaker Processing 如何執行您的處理容器映像
Amazon SageMaker Processing 會以類似下列命令的方式執行處理容器映像,其中 URI AppSpecification.ImageUri
是您在 CreateProcessingJob
操作中指定的 Amazon ECR映像。
docker run [AppSpecification.ImageUri]
這個命令會執行 Docker 映像中配置的 ENTRYPOINT
命令。
您也可以在 CreateProcessingJob
請求中使用 AppSpecification.ContainerEntrypoint
和 AppSpecification.ContainerArgument
參數,以覆寫映像中的進入點命令,或提供命令列引數給進入點命令。指定這些參數會設定 Amazon SageMaker Processing 執行容器的方式,類似於下列命令。
docker run --entry-point [AppSpecification.ContainerEntrypoint] [AppSpecification.ImageUri] [AppSpecification.ContainerArguments]
例如,如果您將 指定ContainerEntrypoint
為CreateProcessingJob
請求[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 映像也可以使用 和 CMD指示來設定進入點
ENTRYPOINT
和命令列引數。CreateProcessingJob
ContainerEntrypoint
和ContainerArgument
參數設定 Docker 映像進入點和引數的方式,會反映 Docker 透過 Docker 覆寫進入點和引數的方式API:-
如果既未提供
ContainerEntrypoint
,也ContainerArguments
未提供,處理會使用預設ENTRYPOINT
或 映像CMD。 -
如果
ContainerEntrypoint
已提供,但未提供ContainerArguments
,處理會使用指定的進入點執行映像,並忽略映像CMD中的ENTRYPOINT
和 。 -
如果提供
ContainerArguments
,但未提供ContainerEntrypoint
,則 Processing 會以映像中的預設ENTRYPOINT
搭配提供的參數來執行影像。 -
如果同時提供
ContainerArguments
ContainerEntrypoint
和 ,處理會使用指定的進入點和引數執行映像,並忽略映像CMD中的ENTRYPOINT
和 。
-
-
在 Dockerfile 中,請使用 exec 形式的
ENTRYPOINT
指令 (ENTRYPOINT
["executable", "param1", "param2"])
,而不是 “shell” 形式 (ENTRYPOINT
command param1 param2
)。這可讓您的處理容器接收SIGINT
和SIGKILL
訊號,處理會使用 來停止處理任務StopProcessingJob
API。 -
/opt/ml
及其所有子目錄都由 保留 SageMaker。在建置 Processing Docker 映像時,請不要將處理容器所需的任何資料放在這些目錄中。 -
如果您打算使用 GPU 裝置,請確定您的容器與 nvidia-docker 相容。僅將CUDA工具組包含在容器中。請勿將NVIDIA驅動程式與映像綁定在一起。如需 nvidia-docker 的詳細資訊,請參閱 NVIDIA/nvidia-docker。