#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