部署模型后调用端点:[Err 104]对等方重置连接

时间:2019-04-28 16:54:17

标签: tensorflow amazon-sagemaker

我是Sagemaker的新手。我已经使用Json和Weight文件在tensorflow中部署了训练有素的模型。但是奇怪的是,在我的笔记本中,我没有看到它说“成功构建了端点”。仅显示以下内容:

--------------------------------------------------------------------------------!

相反,我从控制台中找到了端点号。

import sagemaker
from sagemaker.tensorflow.model import TensorFlowModel
        predictor=sagemaker.tensorflow.model.TensorFlowPredictor(endpoint_name, sagemaker_session)
data= test_out2
predictor.predict(data)

然后,我尝试使用2D数组调用端点: (1)如果我的2D数组大小为(5000,170),则出现错误:

ConnectionResetError: [Errno 104] Connection reset by peer

(2)如果将数组缩小为(10,170),则错误为:

ModelError: An error occurred (ModelError) when calling the InvokeEndpoint operation: Received server error (500) from model with message "". See https://us-east-2.console.aws.amazon.com/cloudwatch/home?region=us-east-2#logEventViewer:group=/aws/sagemaker/Endpoints/sagemaker-tensorflow-2019-04-28-XXXXXXXXX in account 15XXXXXXXX for more information.

有什么建议吗?在github https://github.com/awslabs/amazon-sagemaker-examples/issues/589中发现了类似情况。

请问类似的情况吗?

非常感谢您!

2 个答案:

答案 0 :(得分:1)

第一个数据大小为(5000,170)的错误可能是由于容量问题引起的。 SageMaker端点预测的大小限制为5mb。因此,如果您的数据大于5mb,则需要将其切成碎片并多次调用预测。

对于第二个数据大小为(10,170)的错误,错误消息要求您查看日志。您在cloudwatch日志中发现了什么有趣的东西吗?这个问题有什么可以分享的吗?

答案 1 :(得分:0)

我遇到了这个问题,这篇文章帮助我解决了这个问题。预测变量将采用的数据集的大小似乎确实存在限制。我不确定这是什么,但是无论如何我现在都以不同的方式划分训练/测试数据。

我认为有一个限制,该限制基于原始数据量。粗略地说,这将转换为数据框中的单元数,因为每个单元可能都是整数或浮点数。

如果我可以得到70%/ 30%的分割,我会使用该分割,但是如果30%的测试数据超出了最大单元格的数量,我会分割我的数据以使我能容纳的最大行数达到最大值。

这是拆分代码:

# Check that the test data isn't too big for the predictor
max_test_cells = 200000
model_rows, model_cols = model_data.shape
print('model_data.shape=', model_data.shape)
max_test_rows = int(max_test_cells / model_cols)
print('max_test_rows=', max_test_rows)
test_rows = min(int(0.3 * len(model_data)), max_test_rows)
print('actual_test_rows=', test_rows)
training_rows = model_rows - test_rows
print('training_rows=', training_rows)

# Split the data to get the largest test set possible
train_data, test_data = np.split(model_data.sample(frac=1, random_state=1729), [training_rows])
print(train_data.shape, test_data.shape)