我想排查将自定义容器带到 Amazon SageMaker 进行训练或推理时出现的问题。
简短描述
使用以下方法之一在 SageMaker 中自定义容器映像:
- 扩展预构建的 SageMaker 容器。
- 自带容器。
- 从头开始构建容器映像。
使用这些方法时,您会遇到与容器映像构建错误相关的错误。请务必正确配置容器。
解决方法
扩展预构建的 SageMaker 容器
使用此方法可通过添加额外功能来自定义您的环境或框架。采用此方法时,您无需从头开始构建容器映像,因为深度学习库已预先定义。
确保在 Dockerfile 中设置环境变量 SAGEMAKER_SUBMIT_DIRECTORY 和 SAGEMAKER_PROGRAM。然后,在 Dockerfile 中安装所需的额外库。
要安装所需的额外库,请运行以下命令:
# SageMaker PyTorch imageFROM 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 训练作业或推理端点时,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 中使用 ENTRYPOINT 指令的 exec 形式:
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 本地模式在 Notebook 实例上进行训练