跳至内容

如何排查将自定义容器带到 SageMaker 进行训练或推理时出现的问题?

2 分钟阅读
0

我想排查将自定义容器带到 Amazon SageMaker 进行训练或推理时出现的问题。

简短描述

使用以下方法之一在 SageMaker 中自定义容器映像:

  • 扩展预构建的 SageMaker 容器。
  • 自带容器。
  • 从头开始构建容器映像。

使用这些方法时,您会遇到与容器映像构建错误相关的错误。请务必正确配置容器。

解决方法

扩展预构建的 SageMaker 容器

使用此方法可通过添加额外功能来自定义您的环境或框架。采用此方法时,您无需从头开始构建容器映像,因为深度学习库已预先定义。

确保在 Dockerfile 中设置环境变量 SAGEMAKER_SUBMIT_DIRECTORYSAGEMAKER_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 实例上进行训练

AWS 官方已更新 2 年前