AWS Sagemaker不适合SKLearn模型:调用CreateBucket操作时访问被拒绝

时间:2019-01-15 15:12:46

标签: python amazon-web-services scikit-learn

我正在研究AWS SageMaker笔记本示例,当我玩“使用Scikit-learn和Linear Learner进行推理的管道”时,在适应SKLearn模型时遇到问题。

示例中的代码是:

from sagemaker.sklearn.estimator import SKLearn

script_path = 'sklearn_abalone_featurizer.py'

sklearn_preprocessor = SKLearn(
    entry_point=script_path,
    role=role,
    train_instance_type="ml.c4.xlarge",
    sagemaker_session=sagemaker_session)

sklearn_preprocessor.fit({'train': train_input})

运行此命令时,出现错误:

  

ClientError:调用时发生错误(AccessDenied)   CreateBucket操作:访问被拒绝

所以我将sklearn_preprocessor更改为:

sklearn_preprocessor = SKLearn(
    output_path='s3://{}/{}/model'.format(s3_bucket, prefix),
    entry_point=script_path,
    role=role,
    train_instance_type="ml.c4.xlarge",
    sagemaker_session=sagemaker_session)

其中s3_bucket是我的存储桶的名称,前缀是其中的路径。

但是,SKLearn仍然希望创建一个存储桶,即使它已经存在。当我使用相同的output_path拟合AWS模型时,它可以正常工作。有没有一种方法可以解决此问题而无需更改授权策略?

编辑:我编辑了笔记本实例的角色,并且可以运行培训,但确实创建了一个存储桶“ INFO:sagemaker:Created S3 bucket:sagemaker-eu-west-1-********* ***”,其中保存了模型工件。我该如何强制将其保存在给定存储桶中。

1 个答案:

答案 0 :(得分:0)

仅当未指定output_path时,估算器才应创建存储桶:

https://github.com/aws/sagemaker-python-sdk/blob/ab1f7587bf1c35a54549cc676c273dea356301e4/src/sagemaker/estimator.py#L199

我也无法复制此内容。我在复制样本笔记本上的AWS SageMaker上启动了托管笔记本实例,并进行了相同的修改:

   from sagemaker.sklearn.estimator import SKLearn

    script_path = 'sklearn_abalone_featurizer.py'

    sklearn_preprocessor = SKLearn(
        entry_point=script_path,
        output_path='s3://<my_bucket>/',
        role=role,
        train_instance_type="ml.c4.xlarge",
        sagemaker_session=sagemaker_session)

培训作业运行并完成,没有创建任何其他存储桶。我能找到训练的模型在我现有的桶。

有时候很难跟踪Jupyter Notebook中实际正在运行的代码,在修改后是否重新运行了创建SKLearn对象的单元格?