AWS Sagemaker ClientError: не указан канал обучения (ошибка файла манифеста)

Вопрос или проблема

В качестве теста я запускаю train_manifest и validation_manifest, которые идентичны и содержат только один файл…

{"source-ref": "s3://<имя_бакета>/bad_ofs/Images_final/Crushing/iO/A_2208040CA2_1430_220804-205516.jpg", "bounding-box": {"annotations": [{"class_id": 0, "top": 750, "left": 7000, "height": 450, "width": 5500}, {"class_id": 0, "top": 3000, "left": 7000, "height": 500, "width": 5500}]}, "bounding-box-metadata": {"objects": [{"confidence": 1.0}, {"confidence": 1.0}], "class-map": {"0": "good"}, "type": "groundtruth/object-detection", "human-annotated": "yes", "creation-date": "2024-11-05T00:00:00", "job-name": "labeling-job/bounding-box"}}

При попытке обучить модель я получаю следующую ошибку…

INFO:sagemaker.image_uris:Одни и те же изображения использованы для обучения и вывода. Устанавливаю область изображения: вывод.
INFO:sagemaker.image_uris:Устанавливаю единственную поддерживаемую версию фреймворка/алгоритма: 1.
INFO:sagemaker.image_uris:Игнорирую ненужный тип экземпляра: None.
INFO:sagemaker:Создание задания на обучение с именем: object-detection-2024-11-06-11-11-07-815
----------------------------------------------
Конфигурация входных данных для обучения: {'DataSource': {'S3DataSource': {'S3DataType': 'AugmentedManifestFile', 'S3Uri': 's3://agilent-aws-tmp-12-data/bad_ofs/Images_final/Crushing/train_manifest.json', 'S3DataDistributionType': 'FullyReplicated', 'AttributeNames': ['source-ref', 'bounding-box']}}, 'ContentType': 'application/x-image', 'InputMode': 'Pipe'}
----------------------------------------------
Конфигурация входных данных для валидации: {'DataSource': {'S3DataSource': {'S3DataType': 'AugmentedManifestFile', 'S3Uri': 's3://agilent-aws-tmp-12-data/bad_ofs/Images_final/Crushing/validation_manifest.json', 'S3DataDistributionType': 'FullyReplicated', 'AttributeNames': ['source-ref', 'bounding-box']}}, 'ContentType': 'application/x-image', 'InputMode': 'Pipe'}
----------------------------------------------
2024-11-06 11:11:10 Запуск - Начало обучения...
2024-11-06 11:11:23 Запуск - Подготовка экземпляров для обучения...
2024-11-06 11:12:08 Загрузка - Загрузка изображения для обучения...............
2024-11-06 11:14:40 Обучение - Загрузка изображения завершена. Обучение в процессе... Docker entrypoint вызван с аргументами: train
Запуск скрипта конфигурации окружения по умолчанию
Устройства Nvidia gpu, драйверы и версии cuda toolkit (доступны только на хостах с GPU):
Ср Ноя  6 11:14:49 2024       
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 550.127.05             Версия драйвера: 550.127.05     Версия CUDA: 12.4     |
|-----------------------------------------+------------------------+----------------------+
| Название GPU              Продолжительность-M | Bus-Id          Disp.A | Уязвимые некорр. ECC |
| Вентилятор  Темп  Производительность          Потребление:Использование/Макс. |           Использование памяти | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  Tesla T4                       Вкл  |   00000000:00:1E.0 Оф |                    0 |
| N/A   23C    P8              9W /   70W |       1MiB /  15360MiB |      0%      По умолчанию |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+

+-----------------------------------------------------------------------------------------+
| Процессы:                                                                              |
|  GPU   GI   CI        PID   Тип   Название процесса                              Использование GPU памяти |
|        ID   ID                                                               Использование      |
|=========================================================================================|
|  Процессов не найдено                                                             |
+-----------------------------------------------------------------------------------------+
Проверка совместимости драйвера nvidia и cuda.
Предоставлен драйвер совместимости CUDA.
Продолжаю с проверкой совместимости между драйвером, cuda-toolkit и cuda-compat.
Обнаружена версия cuda-toolkit: 11.1.
Обнаружена версия cuda-compat: 455.32.00.
Обнаружена версия драйвера Nvidia: 550.127.05.
Драйвер Nvidia совместим с cuda-toolkit. Отключение cuda-compat.
Запуск пользовательского скрипта конфигурации окружения
/opt/amazon/lib/python3.8/site-packages/mxnet/model.py:97: SyntaxWarning: "is" с литералом. Вы имели в виду "=="?
  if num_device is 1 and 'dist' not in kvstore:
[11/06/2024 11:14:52 INFO 140179896461120] Чтение конфигурации по умолчанию из /opt/amazon/lib/python3.8/site-packages/algorithm/default-input.json: {'base_network': 'vgg-16', 'use_pretrained_model': '0', 'num_classes': '', 'mini_batch_size': '32', 'epochs': '30', 'learning_rate': '0.001', 'lr_scheduler_step': '', 'lr_scheduler_factor': '0.1', 'optimizer': 'sgd', 'momentum': '0.9', 'weight_decay': '0.0005', 'overlap_threshold': '0.5', 'nms_threshold': '0.45', 'num_training_samples': '', 'image_shape': '300', '_tuning_objective_metric': '', '_kvstore': 'device', 'kv_store': 'device', '_num_kv_servers': 'auto', 'label_width': '350', 'freeze_layer_pattern': '', 'nms_topk': '400', 'early_stopping': 'False', 'early_stopping_min_epochs': '10', 'early_stopping_patience': '5', 'early_stopping_tolerance': '0.0', '_begin_epoch': '0'}
[11/06/2024 11:14:52 INFO 140179896461120] Слияние с предоставленной конфигурацией из /opt/ml/input/config/hyperparameters.json: {'base_network': 'resnet-50', 'epochs': '30', 'image_shape': '300', 'learning_rate': '0.001', 'mini_batch_size': '16', 'nms_threshold': '0.45', 'num_classes': '2', 'num_training_samples': '1000', 'optimizer': 'adam', 'overlap_threshold': '0.5', 'use_pretrained_model': '1'}
[11/06/2024 11:14:52 INFO 140179896461120] Финальная конфигурация: {'base_network': 'resnet-50', 'use_pretrained_model': '1', 'num_classes': '2', 'mini_batch_size': '16', 'epochs': '30', 'learning_rate': '0.001', 'lr_scheduler_step': '', 'lr_scheduler_factor': '0.1', 'optimizer': 'adam', 'momentum': '0.9', 'weight_decay': '0.0005', 'overlap_threshold': '0.5', 'nms_threshold': '0.45', 'num_training_samples': '1000', 'image_shape': '300', '_tuning_objective_metric': '', '_kvstore': 'device', 'kv_store': 'device', '_num_kv_servers': 'auto', 'label_width': '350', 'freeze_layer_pattern': '', 'nms_topk': '400', 'early_stopping': 'False', 'early_stopping_min_epochs': '10', 'early_stopping_patience': '5', 'early_stopping_tolerance': '0.0', '_begin_epoch': '0'}
Процесс 13 является рабочим.
[11/06/2024 11:14:52 INFO 140179896461120] Использую worker по умолчанию.
[11/06/2024 11:14:52 INFO 140179896461120] Загружен создатель итератора application/x-image для типа контента ('application/x-image', '1.0')
[11/06/2024 11:14:52 INFO 140179896461120] Загружен создатель итератора application/x-recordio для типа контента ('application/x-recordio', '1.0')
[11/06/2024 11:14:52 INFO 140179896461120] Загружен создатель итератора image/jpeg для типа контента ('image/jpeg', '1.0')
[11/06/2024 11:14:52 INFO 140179896461120] Загружен создатель итератора image/png для типа контента ('image/png', '1.0')
[11/06/2024 11:14:52 INFO 140179896461120] Загрузка и сохранение контрольных точек отключены.
[11/06/2024 11:14:52 INFO 140179896461120] Канал 'train' находится в режиме ввода pipe под /opt/ml/input/data/train.
[11/06/2024 11:14:52 INFO 140179896461120] Канал 'train' находится в режиме ввода pipe под /opt/ml/input/data/train.
[11/06/2024 11:14:52 ERROR 140179896461120] Ошибка клиента: канал train не указан.

2024-11-06 11:15:04 Загрузка - Загрузка сгенерированной модели обучения
2024-11-06 11:15:04 Не удалось - Задание на обучение не выполнено
---------------------------------------------------------------------------
UnexpectedStatusException                 Traceback (most recent call last)
Cell In[118], line 70
     54 od_model.set_hyperparameters(
     55     base_network="resnet-50",
     56     use_pretrained_model=1,
   (...)
     65     num_training_samples=1000
     66 )
     68 # Запуск задания на обучение с каналами train и validation
     69 # od_model.fit({"train": train_input, "validation": validation_input})
---> 70 od_model.fit({"train": train_input, "validation": validation_input})

File ~/anaconda3/envs/tensorflow2_p310/lib/python3.10/site-packages/sagemaker/workflow/pipeline_context.py:346, in runnable_by_pipeline.<locals>.wrapper(*args, **kwargs)
    342         return context
    344     return _StepArguments(retrieve_caller_name(self_instance), run_func, *args, **kwargs)
--> 346 return run_func(*args, **kwargs)

File ~/anaconda3/envs/tensorflow2_p310/lib/python3.10/site-packages/sagemaker/estimator.py:1376, in EstimatorBase.fit(self, inputs, wait, logs, job_name, experiment_config)
   1374     forward_to_mlflow_tracking_server = True
   1375 if wait:
-> 1376     self.latest_training_job.wait(logs=logs)
   1377 if forward_to_mlflow_tracking_server:
   1378     log_sagemaker_job_to_mlflow(self.latest_training_job.name)

File ~/anaconda3/envs/tensorflow2_p310/lib/python3.10/site-packages/sagemaker/estimator.py:2750, in _TrainingJob.wait(self, logs)
   2748 # Если запрашиваются логи, вызовите logs_for_jobs.
   2749 if logs != "None":
-> 2750     self.sagemaker_session.logs_for_job(self.job_name, wait=True, log_type=logs)
   2751 else:
   2752     self.sagemaker_session.wait_for_job(self.job_name)

File ~/anaconda3/envs/tensorflow2_p310/lib/python3.10/site-packages/sagemaker/session.py:5945, in Session.logs_for_job(self, job_name, wait, poll, log_type, timeout)
   5924 def logs_for_job(self, job_name, wait=False, poll=10, log_type="All", timeout=None):
   5925     """Отображение логов для данного задания на обучение, с возможностью их подгрузки до завершения задания.
   5926 
   5927     Если вывод является tty или ячейкой Jupyter, он будет цветным
   (...)
   5943         exceptions.UnexpectedStatusException: Если будет ожидание и задание на обучение завершится неудачно.
   5944     """
-> 5945     _logs_for_job(self, job_name, wait, poll, log_type, timeout)

File ~/anaconda3/envs/tensorflow2_p310/lib/python3.10/site-packages/sagemaker/session.py:8547, in _logs_for_job(sagemaker_session, job_name, wait, poll, log_type, timeout)
   8544             last_profiler_rule_statuses = profiler_rule_statuses
   8546 if wait:
-> 8547     _check_job_status(job_name, description, "TrainingJobStatus")
   8548 if dot:
   8549         print()

File ~/anaconda3/envs/tensorflow2_p310/lib/python3.10/site-packages/sagemaker/session.py:8611, in _check_job_status(job, desc, status_key_name)
   8605 if "CapacityError" in str(reason):
   8606     raise exceptions.CapacityError(
   8607         message=message,
   8608         allowed_statuses=["Completed", "Stopped"],
   8609         фактический статус=status,
   8610     )
-> 8611 raise exceptions.UnexpectedStatusException(
   8612     message=message,
   8613     allowed_statuses=["Completed", "Stopped"],
   8614     фактический статус=status,
   8615 )

UnexpectedStatusException: Ошибка для задания на обучение object-detection-2024-11-06-11-11-07-815: Не удалось. Причина: ClientError: канал train не указан., код выхода: 2. Проверьте руководство по устранению неполадок для общих ошибок: https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-python-sdk-troubleshooting.html

Код выглядит следующим образом:

import boto3
import sagemaker
from sagemaker import get_execution_role
from sagemaker.inputs import TrainingInput
from sagemaker.image_uris import retrieve

# Инициализация сессии и роли
sagemaker_session = sagemaker.Session()
role = get_execution_role()

# Укажите имя бакета S3 и путь к файлу манифеста
bucket_name = "<имя_бакета>"
train_manifest_s3_key = "bad_ofs/Images_final/Crushing/train_manifest.json"
validation_manifest_s3_key = "bad_ofs/Images_final/Crushing/validation_manifest.json"

# Определите TrainingInput для обучающих и валидирующих данных
train_input = TrainingInput(
    s3_data=f"s3://{bucket_name}/{train_manifest_s3_key}",
    content_type="application/x-image",
    s3_data_type="AugmentedManifestFile",
    attribute_names=["source-ref", "bounding-box"],
    input_mode="Pipe"
)
validation_input = TrainingInput(
    s3_data=f"s3://{bucket_name}/{validation_manifest_s3_key}",
    content_type="application/x-image",
    s3_data_type="AugmentedManifestFile",
    attribute_names=["source-ref", "bounding-box"],
    input_mode="Pipe"
)

print('----------------------------------------------')
print("Конфигурация входных данных для обучения:", train_input.config)
print('----------------------------------------------')
print("Конфигурация входных данных для валидации:", validation_input.config)
print('----------------------------------------------')

# Получите контейнер Docker для обнаружения объектов
container = retrieve("object-detection", sagemaker_session.boto_region_name)

# Определите эстиматор для SageMaker
od_model = sagemaker.estimator.Estimator(
    контейнер,
    роль,
    количество_экземпляров=1,
    тип_экземпляра="ml.g4dn.xlarge",
    объем_хранилища=50,
    максимальное_время_выполнения=3600,
    выходной_путь=f"s3://{bucket_name}/output",
    sagemaker_session=sagemaker_session
)

# Установите гиперпараметры для обнаружения объектов
od_model.set_hyperparameters(
    базовая_сеть="resnet-50",
    использовать_предобученную_модель=1,
    количество_классов=2,
    размер_мини_пакета=16,
    эпохи=30,
    скорость_обучения=0.001,
    оптимизатор="adam",
    порог_перекрытия=0.5,
    порог_nms=0.45,
    форма_изображения=300,
    количество_обучающих_образцов=1000
)

# Начните задание на обучение с каналами train и validation
# od_model.fit({"train": train_input, "validation": validation_input})
od_model.fit({"train": train_input, "validation": validation_input})

Ответ или решение

Ошибка клиента AWS Sagemaker: не указан канал train (Ошибка файла манифеста)

Когда вы работаете с AWS Sagemaker для обучения моделей, важно убедиться, что все параметры конфигурации и входные данные корректно настроены. Сообщение об ошибке "train channel is not specified" связано с тем, что Sagemaker не может найти необходимые данные для всех указанных каналов ввода во время обучения модели. Рассмотрим основные аспекты, связанные с этой ошибкой, и предложим возможные решения.

Что происходит?

На основе вашего описания, вы используете AugmentedManifestFile для обработки данных. Однако возникает ошибка, указывающая на то, что Sagemaker не может распознать канал train. Это может происходить по нескольким причинам:

  1. Неверное форматирование манифеста: Проверить структуру вашего файла манифеста. Он должен соответствовать требованиям Sagemaker, чтобы правильно воспринимать источники данных и аннотации.

  2. Ошибки в конфигурации DataInput: Убедитесь, что при создании объекта TrainingInput вы указали все необходимые параметры.

  3. Проблемы с именами каналов: Убедитесь, что ключи в словаре fit() совпадают с именами каналов, которые ожидает Sagemaker. Если вы пытаетесь использовать другой вид данных, ошибка может появиться из-за неправильного назначения данных.

Анализ предоставленного кода

В вашем коде вы создали два объекта TrainingInput для обучения и валидации:

train_input = TrainingInput(
    s3_data=f"s3://{bucket_name}/{train_manifest_s3_key}",
    content_type="application/x-image",
    s3_data_type="AugmentedManifestFile",
    attribute_names=["source-ref", "bounding-box"],
    input_mode="Pipe"
)

validation_input = TrainingInput(
    s3_data=f"s3://{bucket_name}/{validation_manifest_s3_key}",
    content_type="application/x-image",
    s3_data_type="AugmentedManifestFile",
    attribute_names=["source-ref", "bounding-box"],
    input_mode="Pipe"
)

Важный момент здесь – правильно ли вы указали s3_data_type. Убедитесь, что ваша версия AWS SDK для Python (boto3 и sagemaker) обновлена, так как это может также повлиять на поведение функций.

Рекомендации по исправлению ошибки

  1. Проверка файла манифеста: Убедитесь, что ваш JSON-файл корректен и отсутствуют ошибки в его структуре. Каждый объект в JSON должен быть правильно сформирован, как указано в документации AWS.

  2. Тестирование Слояоватие манифеста: Если вы сталкиваетесь с ошибкой, попробуйте протестировать другой, более простой файл манифеста, чтобы уточнить, не является ли проблема в текущем формате.

  3. Проверка конфигурации: Убедитесь, что вы определили fit() с правильными ключами:

    od_model.fit({"train": train_input, "validation": validation_input})

    Проверьте, что названия каналов (‘train’ и ‘validation’) действительно совпадают с ожидаемыми Sagemaker.

  4. Логи Sagemaker: Просмотр логов может дать больше информации о том, почему произошла ошибка. Вы можете использовать консоль AWS, чтобы увидеть, что именно происходит во время выполнения задачи.

  5. Обновление пакетов: Убедитесь, что используете последнюю версию библиотек SDK:

    pip install --upgrade boto3 sagemaker

Заключение

Ошибки при настройке моделирования на платформе AWS Sagemaker могут быть непредсказуемыми и требовать внимательного анализа различных этапов разработки. Следуя приведенным рекомендациям, вы сможете выявить корень проблемы и корректно настроить каналы ввода. Для более детальной информации всегда обращайтесь к документации AWS, где представлены все последние обновления и советы.

Оцените материал
Добавить комментарий

Капча загружается...