簡體   English   中英

如何使用 Boto3 SDK 為 SageMaker 訓練作業指定源目錄和入口點? 用例是通過 Lambda 調用開始訓練

[英]How to specify source directory and entry point for a SageMaker training job using Boto3 SDK? The use case is start training via Lambda call

我一直在 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_dir是一個 S3 URI,用於查找我的src.zip.gz ,其中包含 model 和執行訓練的腳本。
  • entry_point是訓練開始的地方。 TensorFlow 容器只運行python main.py
  • code_location是一個 S3 前綴,如果我要使用本地 model 和腳本在本地運行此培訓,則可以將培訓源代碼上傳到該前綴。
  • output_path是一個 S3 URI,訓練作業會將 model 工件上傳到其中。

但是,我瀏覽了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 接受訓練輸入和 output 位置,但是哪個配置字段允許用戶指定源代碼目錄和入口點?

您可以像這樣將 source_dir 傳遞給超參數:

    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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM