我有一个文件process_script.py,它看起来如下:
import argparse
if __name__=='__main__':
parser = argparse.ArgumentParser()
parser.add_argument('--example_argument', type=str, help='Example argument description')
args, _ = parser.parse_known_args()
print('Received arguments {}'.format(args))
SageMaker示例代码如下:
import boto3, os, sagemaker
from sagemaker.processing import ScriptProcessor, ProcessingInput, ProcessingOutput
from sagemaker import get_execution_role
sagemaker_session = sagemaker.Session()
default_s3_bucket = sagemaker_session.default_bucket()
print(default_s3_bucket)
input_data = sagemaker_session.upload_data(path='./data_files',
bucket=default_s3_bucket)
role = get_execution_role()
script_processor = ScriptProcessor(command=['python3'],
image_uri='ecr/docker_image:latest',
role=role,
instance_count=1,
base_job_name = 'run-processing',
instance_type='ml.c5.xlarge')
output_location = os.path.join('s3://',default_s3_bucket, 'processing_output')
script_processor.run(code='process_script.py',
arguments=['--example_argument', 'value'],
inputs=[ProcessingInput(source=input_data,destination='/opt/ml/processing/input')],
outputs=[ProcessingOutput(source='/opt/ml/processing/output',destination=output_location)]
)
如何按照上述示例使用 SageMaker ScriptProcessor 来安排在不同 ec2 实例上使用自定义参数每次运行 process_script.py 文件?我知道我必须更改“instance_count=1”,但尚不清楚如何使用 SageMaker 在多个 ec2 实例上编排运行。
SageMaker 处理可用于通过使用来自 S3 的不同数据增加每个实例的实例计数来运行并行作业。对于输入数据,您可以使用 shardbys3key (https://sagemaker.readthedocs.io/en/v2.4.1/api/training/processing.html#sagemaker.processing.ProcessingInput) 在不同节点之间拆分数据文件。相同的脚本将在具有 s3key 分片的不同数据文件的每个实例上运行。
如果您想进行分布式处理,可以使用 dask 之类的工具来运行处理 - https://github.com/aws/amazon-sagemaker-examples/tree/main/sagemaker_processing/spark_distributed_data_processing