Amazon SageMaker 如何运行您的训练映像 - Amazon SageMaker
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Amazon SageMaker 如何运行您的训练映像

要配置 Docker 容器以作为可执行文件运行,请使用 Dockerfile 中的 ENTRYPOINT 指令。请注意以下几点:

  • 对于模型训练,Amazon SageMaker 按如下方式运行容器:

    docker run image train

    SageMaker 通过在映像名称后指定 train 参数来覆盖容器中的任何默认 CMD 语句。train 参数也覆盖您使用 Dockerfile 中的 CMD 提供的参数。

     

  • 在您的 dockerfile 中,使用 ENTRYPOINT 指令的 exec 形式:

    ENTRYPOINT ["executable", "param1", "param2", ...]

    例如:

    ENTRYPOINT ["python", "k-means-algorithm.py"]

    形式的 exec 指令将直接启动可执行文件,而不是作为 ENTRYPOINT 的子级。/bin/sh 这使其能够从 SIGTERM SIGKILL 接收信号,例如 SageMaker 和 APIs。 请注意以下几点:

     

    • CreateTrainingJob API 有一个停止条件,它指示 SageMaker 在特定的时间后停止模型训练。

       

    • StopTrainingJob API 发出与 等效的命令,并使用 2 分钟的超时命令正常停止指定的容器:docker stop

      docker stop -t120

      该命令尝试通过发送 SIGTERM 信号来停止正在运行的容器。在 2 分钟超时后,发送 SIGKILL 并强制停止容器。如果容器正常处理了 SIGTERM 并在收到该信号后的 120 秒内退出,则不会发送 SIGKILL。

    注意

    如果您希望在 SageMaker 停止训练之后访问中间模型构件,则添加代码以处理在 SIGTERM 处理程序中保存构件的操作。

  • 如果您计划使用 GPU 设备进行模型训练,请确保您的容器与 nvidia-docker 兼容。容器应仅包含 CUDA 工具包;不要将 NVIDIA 驱动程序与镜像捆绑。有关 nvidia-docker 的更多信息,请参阅 NVIDIA/nvidia-docker

  • 不能使用 tini 初始化程序作为 SageMaker 容器中的入口点,因为它会被 trainserve 参数混淆。

  • SageMaker 训练会保留 /opt/ml 和所有子目录。在构建算法的 Docker 映像时,请确保您未将算法所需的任何数据放置在其下方,因为数据在训练期间可能不再可见。