Ошибки при выполнении пакетного преобразования Sagemaker с моделью LDA

#python #amazon-web-services #amazon-sagemaker #protobuf-c

#python #amazon-веб-сервисы #amazon-sagemaker #protobuf-c

Вопрос:

Я успешно обучил модель LDA с помощью sagemaker, я смог настроить API вывода, но у него есть ограничение на количество записей, которые я могу запрашивать одновременно.

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

Моя дата ввода указана в типе содержимого application / x-recordio-protobuf, код выглядит следующим образом:

 # Initialize the transformer object
transformer =sagemaker.transformer.Transformer(
    base_transform_job_name='Batch-Transform',
    model_name=model_name,
    instance_count=1,
    instance_type='ml.c4.xlarge',
    output_path=output_location,
    max_payload=20,
    strategy='MultiRecord'
    )
# Start a transform job
transformer.transform(input_location, content_type='application/x-recordio-protobuf',split_type="RecordIO")
# Then wait until the transform job has completed
transformer.wait()

# Fetch validation result 
s3_client.download_file(bucket, 'topic_model_batch_transform/output/batch_tansform_part0.pbr.out', 'batch_tansform-result')
with open('batch_tansform-result') as f:
    results = f.readlines()   
print("Sample transform result: {}".format(results[0]))
  

Я разделил входной файл на 10 файлов, каждый размером около 19 МБ. Сначала я пытаюсь запустить один фрагмент, следовательно, всего 19 МБ. Я попытался изменить стратегию, попробовав SingleRecord. Я также пробовал разные split_types, также пробовал None и «Line».

Я прочитал документацию, но не ясно, что еще я должен попробовать, также сообщения об ошибках очень неясны.

 2019-04-02T15:49:47.617:[sagemaker logs]: MaxConcurrentTransforms=1, MaxPayloadInMB=20, BatchStrategy=MULTI_RECORD
#011at java.lang.Thread.run(Thread.java:748)2019-04-02T15:49:48.035:[sagemaker logs]: du-sagemaker/data/batch_transform/batch_tansform_part0.pbr: Bad HTTP status returned from invoke: 413
2019-04-02T15:49:48.036:[sagemaker logs]: du-sagemaker/data/batch_transform/batch_tansform_part0.pbr:
2019-04-02T15:49:48.036:[sagemaker logs]: du-sagemaker/data/batch_transform/batch_tansform_part0.pbr: Message:
2019-04-02T15:49:48.036:[sagemaker logs]: du-sagemaker/data/batch_transform/batch_tansform_part0.pbr: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
2019-04-02T15:49:48.036:[sagemaker logs]: du-sagemaker/data/batch_transform/batch_tansform_part0.pbr: <title>413 Request Entity Too Large</title>
2019-04-02T15:49:48.036:[sagemaker logs]: du-sagemaker/data/batch_transform/batch_tansform_part0.pbr: <h1>Request Entity Too Large</h1>
2019-04-02T15:49:48.036:[sagemaker logs]: du-sagemaker/data/batch_transform/batch_tansform_part0.pbr: <p>The data value transmitted exceeds the capacity limit.</p>
  

Приведенное выше — последнее, что я получил с вышеуказанной конфигурацией, до этого я также получал код ошибки 400 HTTP.

Любая помощь или указатели будут с благодарностью приняты! Спасибо

Ответ №1:

Хотя платформа пакетного преобразования поддерживает гибкие ограничения полезной нагрузки (через MaxPayloadInMB ), многие алгоритмы устанавливают более строгие внутренние ограничения. Это верно для встроенного алгоритма LDA SageMaker, который отклоняет «большие» запросы в соответствии с его внутренней конфигурацией.

Ошибка, которую вы видите в журнале, говорит именно об этом: клиент пакетного преобразования попытался отправить запрос размером до 20 МБ, но сервер алгоритма LDA отклонил запрос с кодом ошибки 413 (Request Entity Too Large) .

При использовании контейнера встроенного алгоритма SageMaker или любого другого контейнера, который не является вашим собственным, мы рекомендуем оставить параметр MaxPayloadInMB неустановленным в вашем CreateTransformJob запросе. Это предложит платформе выбрать параметры выполнения алгоритма по умолчанию, которые вы увидите напечатанными в вашем журнале следующим образом:

 [sagemaker logs]: MaxConcurrentTransforms=1, MaxPayloadInMB=${DEFAULT_MAX_PAYLOAD_IN_MB}, BatchStrategy=MultiRecord
  

Для получения дополнительной информации о том, как разрешаются эти «параметры выполнения», см. «Порядок приоритета», задокументированный здесь.

Помимо контроля размера полезной нагрузки, другие варианты параметров задания преобразования ( SplitType=RecordIO и BatchStrategy=MultiRecord ) выглядят правильными для передачи данных RecordIO-Protobuf.

Ответ №2:

Мне удалось решить проблему, казалось, что используемая мной максимальная загрузка была слишком высокой. Я установил MaxPayloadInMB=1 , и теперь он работает как мечта