首页 > 解决方案 > 在使用自定义 docker 映像初始化 pytorch 估计器以在 AWS Sagemaker 上进行训练时,将什么定义为入口点?

问题描述

所以我创建了一个用于训练的 docker 镜像。在 dockerfile 中,我定义了一个入口点,以便在docker run执行时,它将开始运行我的 python 代码。据我了解,要在 aws sagemaker 上使用它,我需要在 sagemaker 的 jupyter notebook 中创建一个 pytorch 估计器。我试过这样的事情:

import sagemaker
from sagemaker.pytorch import PyTorch

sagemaker_session = sagemaker.Session()

role = sagemaker.get_execution_role()

estimator = PyTorch(entry_point='train.py',
                    role=role,
                    framework_version='1.3.1',
                    image_name='xxx.ecr.eu-west-1.amazonaws.com/xxx:latest',
                    train_instance_count=1,
                    train_instance_type='ml.p3.xlarge',
                    hyperparameters={})

estimator.fit({})

在文档中,我发现作为图像名称,我可以在 aws ecr 上指定我的 docker 图像的链接。当我尝试执行此操作时,它一直在抱怨

[Errno 2] No such file or directory: 'train.py'

它立即抱怨,所以我肯定做错了什么。我希望首先我的 docker 映像应该运行,然后它会发现入口点不存在。

但除此之外,为什么我需要指定一个入口点,例如,我的培训的入口是否很简单docker run

为了更好的理解。我的 docker 映像中的入口点 python 文件如下所示:

if __name__=='__main__':
    parser = argparse.ArgumentParser()

    # Hyperparameters sent by the client are passed as command-line arguments to the script.
    parser.add_argument('--epochs', type=int, default=5)
    parser.add_argument('--batch_size', type=int, default=16)
    parser.add_argument('--learning_rate', type=float, default=0.0001)

    # Data and output directories
    parser.add_argument('--output_data_dir', type=str, default=os.environ['OUTPUT_DATA_DIR'])
    parser.add_argument('--train_data_path', type=str, default=os.environ['CHANNEL_TRAIN'])
    parser.add_argument('--valid_data_path', type=str, default=os.environ['CHANNEL_VALID'])

    # Start training
    ...

稍后我想指定超参数和数据通道。但现在我根本不明白该把什么作为入口点。在文档中,它说入口点是必需的,它应该是入口点的本地/全局路径......

标签: amazon-web-servicesdockerpytorchamazon-sagemakerentry-point

解决方案


如果您真的想使用完全独立的自己构建 docker 映像,您应该创建一个 Amazon Sagemaker 算法(这是 Sagemaker 菜单中的选项之一)。在这里,您必须指定指向您在亚马逊 ECR 上的 docker 映像的链接以及输入参数和数据通道等。选择此选项时,您不应使用PyTorch 估计器,而应使用Algoritm 估计器。这样您确实不必指定入口点,因为它在训练时简单地运行 docker,并且可以在您的 docker 文件中定义默认入口点。

当您拥有自己的模型代码时,可以使用 Pytorch 估算器,但您希望在现成的 Sagemaker PyTorch docker 映像中运行此代码。这就是为什么您必须例如指定 PyTorch 框架版本的原因。在这种情况下,默认情况下入口点文件应放置在存储 jupyter 笔记本的位置旁边(只需通过单击上传按钮上传文件)。PyTorch 估计器从框架估计器继承所有选项,其中可以找到放置入口点和模型的选项,例如source_dir


推荐阅读