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

#amazon-web-services #amazon-sagemaker

#amazon-web-services #amazon-sagemaker

Вопрос:

Я развернул конвейерную модель в AWS и теперь пытаюсь использовать ModelMonitor для оценки поведения входящих данных, но при создании отчета о мониторинге он не работает

Конвейер состоит из этапа предварительной обработки, а затем обычного контейнера XGBoost. Модель вызывается с Content-type: application/json помощью .

Для этого я настроил, как указано в документах, но он завершается ошибкой со следующей ошибкой

Исключение в потоке «main» com.amazonaws.sagemaker.dataanalyzer.исключение.Ошибка пользователя: несоответствие кодировки: кодировка — JSON для endpointInput, но кодировка — CSV для endpointOutput. На данный момент мы поддерживаем только один и тот же тип кодирования ввода и вывода.

Я нашел эту проблему на GitHub, но она мне не помогла.

Копаясь в том, как выводит XGBoost, я обнаружил, что он закодирован в формате CSV, поэтому ошибка имеет смысл, но даже развертывание модели, применяющей сериализаторы, завершается неудачей (код в разделе ниже)

Я настраиваю расписание в соответствии с рекомендациями AWS, я только что изменил расположение своих ограничений (пришлось их настраивать вручную)

—> Пробовал до сих пор (все попытки завершаются с той же ошибкой)

  1. Как упоминалось в проблеме, но поскольку я ожидаю полезную нагрузку json, я использовал
 data_capture_config=DataCaptureConfig(
    enable_capture = True,
    sampling_percentage=100,
    json_content_types = ['application/json'],
    destination_s3_uri=MY_BUCKET)
 
  1. Попытался применить (де) сериализатор предиктора (я не уверен, имеет ли это вообще смысл)
 predictor = Predictor(
    endpoint_name=MY_ENDPOINT,
    # Hoping that I could force the output to be a JSON
    deserializer=sagemaker.deserializers.JSONDeserializer) 
 

и более поздние версии

 predictor = Predictor(
    endpoint_name=MY_ENDPOINT,
    # Hoping that I could force the input to be a CSV
    serializer=sagemaker.serializers.CSVSerializer) 
 
  1. Настройка (де) сериализатора во время развертывания
 p_modle = pipeline_model.deploy(
    initial_instance_count=1,
    instance_type='ml.m4.xlarge',
    endpoint_name=MY_ENDPOINT,
    serializer = sagemaker.serializers.JSONSerializer(),
    deserializer= sagemaker.deserializers.JSONDeserializer(),
    wait = True)
 

Комментарии:

1. Мне кажется, что мне нужно десериализовать сам ответ перед отправкой в model monitor, но я не могу этого сделать docs.aws.amazon.com/sagemaker/latest/dg /…

Ответ №1:

Ранее я сталкивался с аналогичной проблемой при вызове конечной точки с использованием среды выполнения boto3 sagemaker. Попробуйте добавить параметр ‘Accept’ в функцию invoke_endpoint со значением ‘application / json’.

обратитесь за дополнительной помощью https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_runtime_InvokeEndpoint.html#API_runtime_InvokeEndpoint_RequestSyntax

Комментарии:

1. проблема не в том, что при самостоятельном вызове конечной точки не возвращается json или csv, проблема в том, что model monitor должен вызывать саму конечную точку, и нет очевидного способа настроить вызовы model monitor для конкретной настройки параметра Accept InvokeEndpoint.

2. в принципе, как мы можем настроить конечную точку так, чтобы она всегда отправляла обратно определенный тип контента, соответствующий типу входного контента, чтобы model monitor мог захватывать и отслеживать?