AWS Sagemaker DeepAR Validation Error Дополнительные свойства не разрешены («обучение» было неожиданным)

Я не знаю, в чем проблема. Вот код:

      estimator = sagemaker.estimator.Estimator(
    image_uri=image_name,
    sagemaker_session=sagemaker_session,
    role=role,
    train_instance_count=1,
    train_instance_type="ml.m5.large",
    base_job_name="deepar-stock",
    output_path=s3_output_path,
)

hyperparameters = {
    "time_freq": "24H",
    "epochs": "100",
    "early_stopping_patience": "10",
    "mini_batch_size": "64",
    "learning_rate": "5E-4",
    "context_length": str(context_length),
    "prediction_length": str(prediction_length),
    "likelihood": "gaussian",
}

estimator.set_hyperparameters(**hyperparameters)

%%time

estimator.fit(inputs=f"{s3_data_path}/train/")

И когда я пытаюсь обучить модель, я получаю следующую ошибку (полностью).

      ------------------------------------------------------------------------

---
UnexpectedStatusException                 Traceback (most recent call last)
<timed eval> in <module>

/opt/conda/lib/python3.7/site-packages/sagemaker/estimator.py in fit(self, inputs, wait, logs, job_name, experiment_config)
    681         self.jobs.append(self.latest_training_job)
    682         if wait:
--> 683             self.latest_training_job.wait(logs=logs)
    684 
    685     def _compilation_job_name(self):

/opt/conda/lib/python3.7/site-packages/sagemaker/estimator.py in wait(self, logs)
   1626         # If logs are requested, call logs_for_jobs.
   1627         if logs != "None":
-> 1628             self.sagemaker_session.logs_for_job(self.job_name, wait=True, log_type=logs)
   1629         else:
   1630             self.sagemaker_session.wait_for_job(self.job_name)

/opt/conda/lib/python3.7/site-packages/sagemaker/session.py in logs_for_job(self, job_name, wait, poll, log_type)
   3658 
   3659         if wait:
-> 3660             self._check_job_status(job_name, description, "TrainingJobStatus")
   3661             if dot:
   3662                 print()

/opt/conda/lib/python3.7/site-packages/sagemaker/session.py in _check_job_status(self, job, desc, status_key_name)
   3218                 ),
   3219                 allowed_statuses=["Completed", "Stopped"],
-> 3220                 actual_status=status,
   3221             )
   3222 
UnexpectedStatusException: Error for Training job deepar-2021-07-31-22-25-54-110: Failed. Reason: ClientError: Unable to initialize the algorithm. Failed to validate input data configuration. (caused by ValidationError)

Caused by: Additional properties are not allowed ('training' was unexpected)

Failed validating 'additionalProperties' in schema:
    {'$schema': 'http://json-schema.org/draft-04/schema#',
     'additionalProperties': False,
     'anyOf': [{'required': ['train']}, {'required': ['state']}],
     'definitions': {'data_channel': {'properties': {'ContentType': {'enum': ['json',
                                                                              'json.gz',
                                                                              'parquet',
                                                                              'auto'],
                                                                     'type': 'string'},
                                                     'RecordWrapperType': {'enum': ['None'],

On instance:
    {'training': {'RecordWrapperType': 'None',
                  'S3DistributionType': 'FullyReplicated',
                  'TrainingInputMode': 'File'}}

Здесь говорится 'training' was unexpected. Я не знаю, почему там написано 'training' на этой последней строке On instance:. Я не знаю, как это решить. Я просмотрел другие страницы в поисках помощи, но не могу найти прямого ответа. Я знаю, что мои данные правильно структурированы. Кажется, что ошибки связаны с гиперпараметрами, но я этого точно не знаю. Пожалуйста помоги!

2 ответа

Мне просто нужно было добавить эту строку кода и изменить следующий код, чтобы он выглядел так.

      data_channels = {"train": f"{s3_data_path}/train/"}

estimator.fit(inputs=data_channels)

Всем оценщикам AWS требуется словарь для ввода данных. Просто указать путь к файлу не получится. Это связано с тем, что все оценщики AWS (встроенные и пользовательские) используют контейнеры. Каждый раз, когда модель используется, для нее строится новый контейнер. Каждый контейнер имеет свою собственную общую файловую систему каталогов. Путь обучающих данных внутри каждого контейнера обычно выглядит примерно так: opt/ml/data/train. При создании контейнера он ищет данные в форме data = {'train': x, 'test': y}. Вам нужно установить эти ключи и значения, потому что контейнер ищет их, а затем создает каталог, извлекая и копируя данные из data['train'] в общее расположение внутри контейнера, связанное с обучающими данными. Точно так же, если бы вы настроили DeepAR для тестирования, он бы копировал и сохранял данные из data['test'

Другие вопросы по тегам