#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, я только что изменил расположение своих ограничений (пришлось их настраивать вручную)
—> Пробовал до сих пор (все попытки завершаются с той же ошибкой)
- Как упоминалось в проблеме, но поскольку я ожидаю полезную нагрузку json, я использовал
data_capture_config=DataCaptureConfig(
enable_capture = True,
sampling_percentage=100,
json_content_types = ['application/json'],
destination_s3_uri=MY_BUCKET)
- Попытался применить (де) сериализатор предиктора (я не уверен, имеет ли это вообще смысл)
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)
- Настройка (де) сериализатора во время развертывания
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 мог захватывать и отслеживать?