当前位置: 首页 > 知识库问答 >
问题:

如何使用Boto3 SDK为SageMaker培训作业指定源目录和入口点?用例是通过Lambda调用开始培训

劳和雅
2023-03-14

我一直在SageMaker笔记本实例上使用SageMaker Python SDK运行培训作业,并在本地使用IAM凭据。他们工作得很好,但我希望能够通过AWS Lambda Gateway开始培训工作。

Lambda不支持SageMaker SDK(高级SDK),所以我被迫在我的Lambda处理程序中使用来自boto3的SageMaker客户端,例如:

sagemaker = boto3.client('sagemaker')

假设这个boto3服务级别SDK会给我100%的控制权,但我找不到用于指定源目录和入口点的参数或配置名称。我正在运行一个定制的培训任务,需要在飞行中生成一些数据(使用Keras生成器)。

下面是我的SageMaker SDK调用的一个示例

tf_estimator = TensorFlow(base_job_name='tensorflow-nn-training',
                          role=sagemaker.get_execution_role(),
                          source_dir=training_src_path,
                          code_location=training_code_path,
                          output_path=training_output_path,
                          dependencies=['requirements.txt'],
                          entry_point='main.py',
                          script_mode=True,
                          instance_count=1,
                          instance_type='ml.g4dn.2xlarge',
                          framework_version='2.3',
                          py_version='py37',
                          hyperparameters={
                              'model-name': 'my-model-name',
                              'epochs': 1000,
                              'batch-size': 64,
                              'learning-rate': 0.01,
                              'training-split': 0.80,
                              'patience': 50,
                          })

通过调用fit()

input_channels = {
    'train': training_input_path,
}
tf_estimator.fit(inputs=input_channels)
  • source\u dir是一个S3URI,用于查找我的src。拉链gz,其中包含用于执行培训的模型和脚本

然而,我通过了SageMaker的留档。Client.create_training_job,我找不到任何字段,允许我设置源目录和切入点。

这里有一个例子,

sagemaker = boto3.client('sagemaker')
sagemaker.create_training_job(
    TrainingJobName='tf-training-job-from-lambda',
    Hyperparameters={} # Same dictionary as above,
    AlgorithmSpecification={
        'TrainingImage': '763104351884.dkr.ecr.us-west-1.amazonaws.com/tensorflow-training:2.3.1-gpu-py37-cu110-ubuntu18.04',
        'TrainingInputMode': 'File',
        'EnableSageMakerMetricsTimeSeries': True
    },
    RoleArn='My execution role goes here',
    InputDataConfig=[
        {
            'ChannelName': 'train',
            'DataSource': {
                'S3DataSource': {
                    'S3DataType': 'S3Prefix',
                    'S3Uri': training_input_path,
                    'S3DataDistributionType': 'FullyReplicated'
                }
            },
            'CompressionType': 'None',
            'RecordWrapperType': 'None',
            'InputMode': 'File',
        }  
    ],
    OutputDataConfig={
        'S3OutputPath': training_output_path,
    }
    ResourceConfig={
        'InstanceType': 'ml.g4dn.2xlarge',
        'InstanceCount': 1,
        'VolumeSizeInGB': 16
    }
    StoppingCondition={
        'MaxRuntimeInSeconds': 600 # 10 minutes for testing
    }
)

从上面的配置中,SDK接受培训输入和输出位置,但哪个配置字段允许用户指定源代码目录和入口点?

共有1个答案

公孙智
2023-03-14

您可以将源目录传递给超参数,如下所示:

    response = sm_boto3.create_training_job(
        TrainingJobName=f"{your job name}"),
        HyperParameters={
            'model-name': 'my-model-name',
            'epochs': 1000,
            'batch-size': 64,
            'learning-rate': 0.01,
            'training-split': 0.80,
            'patience': 50,
            "sagemaker_program": "script.py", # this is where you specify your train script
            "sagemaker_submit_directory": "s3://" + bucket + "/" + project + "/" + source, # your s3 URI like s3://sm/tensorflow/source/sourcedir.tar.gz
        },
        AlgorithmSpecification={
            "TrainingImage": training_image,
            ...
        }, 

注意:确保xxx.tar.gz。否则Sagemaker将抛出错误。

提到https://github.com/aws/amazon-sagemaker-examples/blob/master/sagemaker-python-sdk/scikit_learn_randomforest/Sklearn_on_SageMaker_end2end.ipynb

 类似资料:
  • 我正在尝试使用我自己的sickit learn ML模型和SageMaker,并使用github示例。 python代码如下所示: 但是我得到了这个错误: 信息:sagemaker:创建培训工作与名称:决策树样本-2018-04-24-13-13-38-281 ---------------------------------------------------------------------

  • 我正在尝试创建自己的定制Sagemaker框架,该框架运行定制python脚本,以使用entry_point参数训练ML模型。 遵循pythonsdk文档(https://sagemaker.readthedocs.io/en/stable/estimators.html),我编写了运行培训作业的最简单代码,只是为了了解它的行为以及Sagemaker框架的工作方式。 我的问题是,我不知道如何正确构

  • 我想在aws sagemaker上培训YOLOv5,还要在sagemaker上部署模型,还需要了解entrypoint python脚本。我如何为此构建管道?

  • 我试图避免将现有的模型训练过程迁移到SageMaker,并避免创建一个定制Docker容器来承载我们训练过的模型。 我的希望是将我们现有的、经过培训的模型注入AWS通过sagemaker python sdk提供的预构建scikit学习容器中。我发现的所有示例都需要先培训模型,然后在SageMaker中创建模型/模型配置。然后使用方法进行部署。 是否可以为方法提供经过培训的模型,并将其托管在AWS

  • 我有一个优化代码运行在sagemaker。我想每1小时运行一次代码。我怎么能在sagemaker安排跑步?。我不想调用模型endpoint,但我想在每1小时运行整个代码。

  • 我有一些python代码,它使用tensorflow训练神经网络。 我基于运行python脚本的tensorflow/tensorflow:latest-gpu-py3映像创建了一个docker映像。当我启动EC2P2时。xlarge实例我可以使用以下命令运行docker容器 包含我的代码的容器运行时没有错误,并且使用主机GPU。 问题是,当我尝试使用实例ml.p2.xlarge在AWS Sage