Как динамически настроить задачу AWS Sage Maker с помощью AWS Step Function - PullRequest
0 голосов
/ 06 февраля 2020

Я пытаюсь построить конвейер ML, используя AWS Step Function.

Я хотел бы настроить «CreateHyperParameterTuningJob» динамически в зависимости от ввода задачи. Вот скриншот конечного автомата, который я пытаюсь построить: ML State Machine

Когда я пытаюсь создать этот конечный автомат, я получил следующую ошибку:

  • Значение поля MaxParallelTrainingJobs должно быть INTEGER

Я пытаюсь выяснить, в чем здесь проблема. Есть ли у вас какие-либо предложения по настройке конфигурации SM c с помощью функции шага? Возможно ли это?

Вот входные данные, переданные в 'Задание по запуску обучения ' task:

{
  "client_id": "test",
  "training_job_definition": {
    "AlgorithmSpecification": {
      "TrainingImage": "433757028032.dkr.ecr.us-west-2.amazonaws.com/xgboost:latest",
      "TrainingInputMode": "File"
    },
    "ResourceConfig": {
      "InstanceCount": 1,
      "InstanceType": "ml.m5.large",
      "VolumeSizeInGB": 5
    },
    "StaticHyperParameters": {
      "num_round": 750
    },
    "StoppingCondition": {
      "MaxRuntimeInSeconds": 900
    },
    "InputDataConfig": [
      {
        "ChannelName": "train",
        "CompressionType": "None",
        "ContentType": "csv",
        "DataSource": {
          "S3DataSource": {
            "S3DataDistributionType": "FullyReplicated",
            "S3DataType": "S3Prefix",
            "S3Uri": "..."
          }
        }
      },
      {
        "ChannelName": "validation",
        "CompressionType": "None",
        "ContentType": "csv",
        "DataSource": {
          "S3DataSource": {
            "S3DataDistributionType": "FullyReplicated",
            "S3DataType": "S3Prefix",
            "S3Uri": "..."
          }
        }
      }
    ],
    "OutputDataConfig": {
      "S3OutputPath": "..."
    },
    "RoleArn": "arn:aws:iam::679298748479:role/landingzone_sagemaker_role"
  },
  "hyper_parameter_tuning_job_config": {
    "HyperParameterTuningJobObjective": {
      "MetricName": "validation:rmse",
      "Type": "Minimize"
    },
    "Strategy": "Bayesian",
    "ResourceLimits": {
      "MaxParallelTrainingJobs": 2,
      "MaxNumberOfTrainingJobs": 10
    },
    "ParameterRanges": {
      "ContinuousParameterRanges": [
        {
          "Name": "eta",
          "MinValue": 0.01,
          "MaxValue": 0.04
        },
        {
          "Name": "gamma",
          "MinValue": 0,
          "MaxValue": 100
        },
        {
          "Name": "subsample",
          "MinValue": 0.6,
          "MaxValue": 1
        },
        {
          "Name": "lambda",
          "MinValue": 0,
          "MaxValue": 5
        },
        {
          "Name": "alpha",
          "MinValue": 0,
          "MaxValue": 2
        }
      ],
      "IntegerParameterRanges": [
        {
          "Name": "max_depth",
          "MinValue": 5,
          "MaxValue": 10
        }
      ]
}

}}

Вот файл JSON, который описывает конечный автомат:

{
  "StartAt": "Generate Training Dataset",
  "States": {
    "Generate Training Dataset": {
      "Resource": "arn:aws:lambda:uswest-2:012345678912:function:StepFunctionsSample-SageMaLambdaForDataGeneration-1TF67BUE5A12U",
      "Type": "Task",
      "Next": "Run training job"
    },
    "Run training job": {
      "Resource": "arn:aws:states:::sagemaker:createHyperParameterTuningJob.sync",
      "Parameters": {
        "HyperParameterTuningJobName.$": "$.execution_date",
        "HyperParameterTuningJobConfig": {
          "HyperParameterTuningJobObjective": {
            "MetricName": "$.hyper_parameter_tuning_job_config.HyperParameterTuningJobObjective.MetricName",
            "Type": "Minimize"
          },
          "Strategy": "$.hyper_parameter_tuning_job_config.Strategy",
          "ResourceLimits": {
            "MaxParallelTrainingJobs": "$.hyper_parameter_tuning_job_config.ResourceLimits.MaxParallelTrainingJobs",
            "MaxNumberOfTrainingJobs": "$.hyper_parameter_tuning_job_config.ResourceLimits.MaxNumberOfTrainingJobs"
          },
          "ParameterRanges": "$.hyper_parameter_tuning_job_config.ParameterRanges"
        },
        "TrainingJobDefinition": {
          "AlgorithmSpecification": "$.training_job_definition.AlgorithmSpecification",
          "StoppingCondition": "$.training_job_definition.StoppingCondition",
          "ResourceConfig": "$.training_job_definition.ResourceConfig",
          "RoleArn": "$.training_job_definition.RoleArn",
          "InputDataConfig": "$.training_job_definition.InputDataConfig",
          "OutputDataConfig": "$.training_job_definition.OutputDataConfig",
          "StaticHyperParameters": "$.training_job_definition.StaticHyperParameters"
        },
        "HyperParameterTuningJobConfig.ResourceLimits": ""
      },
      "Type": "Task",
      "End": true
    }
  }
}
...