Что приводит к тому, что метод прогнозирования AWS SageMaker kmeans выдает слишком большую ошибку объекта запроса 413?

#amazon-web-services #machine-learning #k-means #amazon-sagemaker

#amazon-web-services #машинное обучение #k-означает #amazon-sagemaker

Вопрос:

Я пытаюсь создать неконтролируемую модель машинного обучения с использованием алгоритма k-means в AWS SageMaker. Я получаю слишком большую ошибку объекта запроса 413 при вызове метода прогнозирования kmeans predictor. Что вызывает такую ошибку? Я искал, и в большинстве ответов говорится о настройках Elastic Beanstalk и nginx, что не относится к моему случаю.

Соответствующий код и ошибку можно увидеть ниже, а весь мой блокнот Jupyter можно найти по адресу (https://github.com/bgaber/machine-learning-recommendation-engine-with-aws-sagemaker/blob/main/imdb-movie-recommendation.ipynb). Полную ошибку можно увидеть в нижней части записной книжки Jupyter. Я просмотрел журналы CloudWatch, но он больше не предоставлял конкретной информации.

 scaler=MinMaxScaler()
df_scaled=pd.DataFrame(scaler.fit_transform(df))
df_scaled.columns=df.columns
df_scaled.index=df.index
train_data = df_scaled.values.astype('float32')
role = get_execution_role()
bucket_name = 'bg-sagemaker-bucket'
num_clusters = 15
kmeans = KMeans(role=role,
                train_instance_count=1,
                train_instance_type='ml.c4.xlarge',
                output_path='s3://'  bucket_name  '/kmeans-project/',              
                k=num_clusters)

kmeans.fit(kmeans.record_set(train_data))    
kmeans_predictor = kmeans.deploy(initial_instance_count=1, 
                                 instance_type='ml.t2.medium')
result=kmeans_predictor.predict(train_data)

Error:
ModelError: An error occurred (ModelError) when calling the InvokeEndpoint operation: Received client error (413) from model with message "
413 Request Entity Too Large
Request Entity Too Large
The data value transmitted exceeds the capacity limit. 
  

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

1. Вы нашли что-нибудь для этого, получая те же ошибки.

2. Да, я получил ответ, и я опубликую решение ниже.

Ответ №1:

Когда вы вызываете «kmeans_predictor.predict», это означает, что вы вызовете конечную точку Sagemaker для обработки прогноза. В документе AWS я нашел «Максимальный размер полезной нагрузки для вызова конечной точки = 5 МБ», что означает, что когда набор данных прогнозирования слишком велик (размер полезной нагрузки превышает 5 МБ), вы получите ответ «Слишком большая полезная нагрузка HTTP 413».

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

Пример:

 train_data1 = train_data[0:40000]
train_data2 = train_data[40000:]
result1=kmeans_predictor.predict(train_data1)
result2=kmeans_predictor.predict(train_data2)
result = result1   result2