使用自定义 docker 图像初始化 pytorch 估计器以在 AWS Sagemaker 上进行训练时,将什么定义为入口点?

What to define as entrypoint when initializing a pytorch estimator with a custom docker image for training on AWS Sagemaker?

所以我创建了一个 docker 图像用于训练。在 docker 文件中,我定义了一个入口点,以便在执行 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 上指定 link 我的 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
    ...

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

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

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