【问题标题】:Creating a Training Job using sagemaker estimator gives me "error: unrecognized arguments: train"使用 sagemaker estimator 创建培训作业给了我“错误:无法识别的参数:训练”
【发布时间】:2021-09-06 21:19:32
【问题描述】:

我正在使用一个包含所有必需文件的 docker 映像,然后将其推送到 aws ecr,在那里我可以使用该映像传递给估算器。我已将 train.py 文件添加为 dockerfile 中的入口点。

ENTRYPOINT ["python3", "-m","train"]

这在本地使用docker run -it image 可以正常工作但在运行训练作业时出现错误。

Training - Training image download completed. Training in progress...usage: train.py [-h] [--epochs EPOCHS] [--learning_rate LEARNING_RATE]
                [--max_sequence_length MAX_SEQUENCE_LENGTH]
                [--train_batch_size TRAIN_BATCH_SIZE]
                [--valid_batch_size VALID_BATCH_SIZE]
train.py: error: unrecognized arguments: train

使用 sagemaker 估算器的训练作业:

estimator = sagemaker.estimator.Estimator(image, # docker image
                                          role,
                                          train_instance_count=1, 
                                          train_instance_type='ml.p2.xlarge', 
                                          output_path=output_path, 
                                          hyperparameters=hyperparameters,
                                          sagemaker_session=session
                                         )

train.py main fun():

if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument('--epochs', type=int, default=2)
    parser.add_argument('--learning_rate', type=float, default=2e-5)
    parser.add_argument('--max_sequence_length', type=int, default=512)
    parser.add_argument('--train_batch_size', type=int, default=12)
    parser.add_argument('--valid_batch_size', type=int, default=8)
    # SageMaker environment variables.
    #parser.add_argument('--hosts', type=str, default=os.environ['SM_HOSTS'])
    #parser.add_argument('--current_host', type=str, default=os.environ['SM_CURRENT_HOST'])
    # Parse command-line args and run main.
    args = parser.parse_args()
    # Get SageMaker host information from runtime environment variables
    #sm_hosts = json.loads(args.hosts)
    #sm_current_host = args.current_host
    train(args)

sagemaker doc,我发现训练作业中的图像以docker run image train 运行,当我在本地尝试相同时,我得到了同样的错误。

【问题讨论】:

    标签: python docker dockerfile amazon-sagemaker


    【解决方案1】:

    假设 train.py 位于 docker 的根目录或工作目录,

    以下代码应该可以为您解决问题:

    ENTRYPOINT ["python3", "train.py"]
    

    更多信息: https://github.com/awslabs/amazon-sagemaker-examples/blob/master/advanced_functionality/scikit_bring_your_own/scikit_bring_your_own.ipynb

    【讨论】:

      【解决方案2】:

      您根本不需要定义ENTRYPOINT。我所做的只是拥有一个带有我的培训代码的train(没有文件扩展名)文件。确保使其可执行并将其放入/opt/ml/code。查看完整代码here

      【讨论】:

        【解决方案3】:

        【讨论】:

        • 请添加更多详细信息以扩展您的答案,例如工作代码或文档引用。
        • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。
        猜你喜欢
        • 2019-11-13
        • 1970-01-01
        • 1970-01-01
        • 2021-02-08
        • 2018-10-04
        • 1970-01-01
        • 2021-05-22
        • 2019-01-20
        • 2019-08-02
        相关资源
        最近更新 更多