我正在研究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-********* ***”,其中保存了模型工件。我该如何强制将其保存在给定存储桶中。
答案 0 :(得分:0)
仅当未指定output_path时,估算器才应创建存储桶:
我也无法复制此内容。我在复制样本笔记本上的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对象的单元格?