當我將自訂容器帶到 Amazon SageMaker 進行訓練或推論時,我想要對出現的問題進行疑難排解。
簡短描述
您可使用以下其中一種方法在 SageMaker 自訂容器映像檔:
擴充預先建置的 SageMaker 容器:如果您需要新增其他功能來自訂環境或架構,請採用此方法。透過此方法,您不必從頭開始建立容器映像檔,因為已經預先定義了深度學習程式庫。
**使用自有容器:**當您擁有用於處理資料、模型訓練或即時推論的映像檔,而預先建置的 SageMaker 映像檔目前並不支援其中的額外功能及安全要求時,請採用此方法。
**從頭開始建立容器映像檔:**如果您有自訂演算法,但還沒有自訂容器映像檔,則最佳做法是使用此方法。
藉由此方法的任何一種,您所獲得的錯誤可能主要跟未正確建立容器映像檔有關。因此,請確定已正確設定容器。
解決方案
擴充預先建置的 SageMaker 容器
- 請確定在 Dockerfile 設定了 SAGEMAKER_SUBMIT_DIRECTORY 及 SAGEMAKER_PROGRAM 環境變數。
- 請確定您已在 Dockerfile 安裝所需的其他程式庫。您可以執行以下命令來執行這項操作:
# SageMaker PyTorch image
FROM 763104351884.dkr.ecr.us-east-1.amazonaws.com/pytorch-training:1.5.1-cpu-py36-ubuntu16.04
ENV PATH="/opt/ml/code:${PATH}"
# this environment variable is used by the SageMaker PyTorch container to determine our user code directory.
ENV SAGEMAKER_SUBMIT_DIRECTORY /opt/ml/code
# install the libraries using pip
COPY requirements.txt./requirements.txt
RUN pip install requirements.txt
# /opt/ml and all subdirectories are utilized by SageMaker, use the /code subdirectory to store your user code.
COPY cifar10.py /opt/ml/code/cifar10.py
# Defines cifar10.py as script
entrypoint
ENV SAGEMAKER_PROGRAM cifar10.py
- 在成功建立映像檔之後,以本機模式執行容器。請確定映像檔如預期運行。
如需深入瞭解,請參閱擴充預先建置的容器。
使用自有容器
請確定您已安裝對應的 SageMaker 工具組程式庫,以便進行訓練或推論。這些工具組會定義程式碼和其他資源的位置,並包含程式碼的進入點,以便在容器啟動時加以執行。當建立 SageMaker 訓練任務或推論端點時,SageMaker 會建立下列目錄:
/opt/ml
├── input
│
├── model
│
├── code
│
├── output
│
└── failure
當執行訓練任務時,/opt/ml/input 目錄包含資料通道的相關資訊,用以存取存放於 Amazon Simple Storage Service (Amazon S3) 的資料。訓練指令碼 (train.py) 及其相依性存放於 opt/ml/code。請確定在訓練任務完成之後,指令碼會將最終模型寫入 /opt/ml/model 目錄。
當您在 SageMaker 託管經訓練的模型進行推論時,該模型會存放於 /opt/ml/model,而推論程式碼 (inference.py) 會存放於 /opt/ml/code。
如需深入瞭解,請參閱調整您自己的 Docker 容器以使用 SageMaker。
從頭開始建立容器
- 為了確保容器以執行檔的形式執行,請在 Dockerfile 使用 exec 格式的 ENTRYPOINT 指令:
ENTRYPOINT ["python", "cifar10.py"]
- 對於訓練任務,如果訓練成功,則訓練指令碼必須以 0 結束;如果訓練不成功,則結束代碼必須為零以外的內容。
- 請確保將最終模型寫入 /opt/ml/model,並且所有相依性及成品都存放於 /opt/ml/output。如果訓練任務失敗,指令碼必須將失敗資訊寫入 /opt/ml/output/failure。
- 當建立推論端點時,請確定以 FILENAME.tar.gz 格式儲存模型。容器必須在 /invocations 實施 HTTP POST 請求才能進行推論,並在 /ping 實施 HTTP GET 請求才能進行端點運作狀態檢查。
如需深入瞭解,請參閱使用您自己的演算法和模型建立容器。
相關資訊
使用 Amazon SageMaker 本機模式在筆記本執行個體上進行訓練