我可以为 sagemaker.sklearn.estimator 的 SKLearn 指定 S3 存储桶吗?

Can I specify S3 bucket for sagemaker.sklearn.estimator's SKLearn?

我正在关注此示例笔记本以了解 SageMaker 的处理作业 API:https://github.com/aws/amazon-sagemaker-examples/blob/master/sagemaker_processing/scikit_learn_data_processing_and_model_evaluation/scikit_learn_data_processing_and_model_evaluation.ipynb

我正在尝试修改他们的代码以避免使用默认的 S3 存储桶,即:s3://sagemaker-<region>-<account_id>/

他们使用 .run 方法的数据处理步骤:

from sagemaker.processing import ProcessingInput, ProcessingOutput

sklearn_processor.run(
    code="preprocessing.py",
    inputs=[ProcessingInput(source=input_data, destination="/opt/ml/processing/input")],
    outputs=[
        ProcessingOutput(output_name="train_data", source="/opt/ml/processing/train"),
        ProcessingOutput(output_name="test_data", source="/opt/ml/processing/test"),
    ],
    arguments=["--train-test-split-ratio", "0.2"],
)

我能够通过使用 destination 参数将其修改为使用我自己的 S3 存储桶,如下所示:

sklearn_processor.run( 
    code=output_bucket_uri + "preprocessing.py", 
    inputs=[ProcessingInput( 
        source=input_bucket_uri + "census-income.csv", 
        destination=path+"input/", 
    )], 
    outputs=[ 
        ProcessingOutput( 
            output_name="train_data", 
            source=path+"train/", 
            destination=output_bucket_uri + "train/", 
        ), 
        ProcessingOutput( 
            output_name="test_data", 
            source=path+"test/", 
            destination=output_bucket_uri + "test/", 
        ), 
    ], 
    arguments=["--train-test-split-ratio", "0.2"], 
)

但对于 .fit 方法:

sklearn.fit({"train": preprocessed_training_data})

我找不到传递它的参数,以便将输出工件保存到我指定的 S3 存储桶,而不是默认的 s3 存储桶 s3://sagemaker-<region>-<account_id>/

万一对别人有帮助...

为了让 .fit() 输出到指定的 S3 存储桶,我结束了使用 output_path 配置估算器。

示例代码如下:

from sagemaker.sklearn.estimator import SKLearn 

sklearn = SKLearn( 
    entry_point="../processor/code/train.py", 
    output_path=output_bucket_uri, 
    framework_version="0.20.0", 
    instance_type="ml.m5.xlarge", 
    role=role, 
)
sklearn.fit({"train": preprocessed_training_data})

这是与基本估算器相关的文档 class:https://sagemaker.readthedocs.io/en/stable/api/training/estimators.html

对于 SKLearnProcessor,指定默认存储桶的理想方法是使用该存储桶创建一个 sagemaker 会话,并将其作为 sagemaker_session 参数发送。示例:

from sagemaker.session import Session    
sklearn_processor = SKLearnProcessor(framework_version='0.20.0',
                                     role='<arn-role>',
                                     instance_type='ml.m5.xlarge',
                                     instance_count=1,
                                     sagemaker_session=Session(default_bucket='<s3-bucket-name>'))

我知道这不是您的确切问题,但您在问题详细信息中添加了替代方案。所以我在这里添加它作为一种更简洁的方法。