我可以为 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>'))
我知道这不是您的确切问题,但您在问题详细信息中添加了替代方案。所以我在这里添加它作为一种更简洁的方法。
我正在关注此示例笔记本以了解 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>'))
我知道这不是您的确切问题,但您在问题详细信息中添加了替代方案。所以我在这里添加它作为一种更简洁的方法。