是啥导致 AWS SageMaker kmeans predict 方法输出 413 Request Entity Too Large 错误?

Posted

技术标签:

【中文标题】是啥导致 AWS SageMaker kmeans predict 方法输出 413 Request Entity Too Large 错误?【英文标题】:What causes AWS SageMaker kmeans predict method to output a 413 Request Entity Too Large error?是什么导致 AWS SageMaker kmeans predict 方法输出 413 Request Entity Too Large 错误? 【发布时间】:2021-02-27 22:16:28 【问题描述】:

我正在尝试使用 AWS SageMaker 中的 k-means 算法创建无监督机器学习模型。调用 kmeans 预测器预测方法时,我收到 413 Request Entity Too Large 错误。是什么导致了这样的错误?我进行了搜索,大多数回复都谈到了不适用于我的案例的 Elastic Beanstalk 和 nginx 设置。

相关代码和错误可以在下面看到,我的整个 Jupyter Notebook 可以在 (https://github.com/bgaber/machine-learning-recommendation-engine-with-aws-sagemaker/blob/main/imdb-movie-recommendation.ipynb) 找到。完整的错误可以在 Jupyter notebook 的底部看到。我查看了 CloudWatch Logs,但它没有提供更多具体信息。

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】:

当您调用“kmeans_predictor.predict”时,这意味着您将调用 Sagemaker 端点来处理预测。在 AWS 文档中我发现“端点调用的最大有效负载大小 = 5 MB”,这意味着当预测数据集太大(有效负载大小超过 5MB)时,您将得到“HTTP 413 Payload Too Large”响应。

我的解决方案是将数据分成两部分并调用端点两次以获得两个预测,然后我将两个结果合并为一个以适应原始格式。

例子:

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

【讨论】:

以上是关于是啥导致 AWS SageMaker kmeans predict 方法输出 413 Request Entity Too Large 错误?的主要内容,如果未能解决你的问题,请参考以下文章

如何修复 aws 区域错误“ValueError:必须使用 SageMaker 支持的区域设置本地 AWS 配置”

如何将 AWS SageMaker 提供给组织外部的人员使用?

我们如何在 AWS Sagemaker 推理中添加复杂的预处理

AWS Sagemaker Spark S3 访问问题

如何在等待响应时增加 AWS Sagemaker 调用超时

从 AWS SageMaker 访问 Google BigQuery