Deploy pre-trained tensorflow model on the aws sagemaker - ModelError: An error occurred (ModelError) when calling the InvokeEndpoint operation

Deploy pre-trained tensorflow model on the aws sagemaker - ModelError: An error occurred (ModelError) when calling the InvokeEndpoint operation

这是我第一次使用亚马逊网络服务来部署我的机器学习预训练模型。我想将预训练的 TensorFlow 模型部署到 Aws-Sagemaker。我以某种方式能够成功部署端点但是每当我调用 predictor.predict(some_data) 方法来预测调用端点时它就会抛出错误。

ModelError: An error occurred (ModelError) when calling the InvokeEndpoint operation: Received server error (500) from model with message "". See https://us-west-2.console.aws.amazon.com/cloudwatch/home?region=us-west-2#logEventViewer:group=/aws/sagemaker/Endpoints/sagemaker-tensorflow-2020-04-07-04-25-27-055 in account 453101909370 for more information.

查看云监视日志后,我发现了这个错误。

#011details = "NodeDef mentions attr 'explicit_paddings' not in Op<name=Conv2D; signature=input:T, filter:T -> output:T; attr=T:type,allowed=[DT_HALF, DT_BFLOAT16, DT_FLOAT, DT_DOUBLE]; attr=strides:list(int); attr=use_cudnn_on_gpu:bool,default=true; attr=padding:string,allowed=["SAME", "VALID"]; attr=data_format:string,default="NHWC",allowed=["NHWC", "NCHW"]; attr=dilations:list(int),default=[1, 1, 1, 1]>; NodeDef: {{node conv1_conv/convolution}} = Conv2D[T=DT_FLOAT, _output_shapes=[[?,112,112,64]], data_format="NHWC", dilations=[1, 1, 1, 1], explicit_paddings=[], padding="VALID", strides=[1, 2, 2, 1], use_cudnn_on_gpu=true, _device="/job:localhost/replica:0/task:0/device:CPU:0"](conv1_pad/Pad, conv1_conv/kernel/read). (Check whether your GraphDef-interpreting binary is up to date with your GraphDef-generating binary.).

我不知道我哪里错了,我已经浪费了 2 天的时间来解决这个错误,但找不到与此相关的信息。我分享的详细日志here

我的笔记本实例的 Tensorflow 版本是 1.15

经过大量的搜索和试错,我终于解决了这个问题。在许多情况下,问题的出现是因为 TensorFlow 和 Python 版本。

问题原因: 为了部署端点,我在 TF 1.12 和 python 3 上使用了 TensorflowModel,这正是导致问题的原因。

sagemaker_model = TensorFlowModel(model_data = model_data,
                                  role = role,
                                  framework_version = '1.12',
                                  entry_point = 'train.py')

显然,TensorFlowModel 只允许 python 2 在 TF 版本 1.11、1.12 上。 2.1.0.

我是如何修复它的: Python SDK 中有两个处理服务的 TensorFlow 解决方案。它们有不同的 class 表示和文档,如此处所示。

  1. TensorFlowModel - https://github.com/aws/sagemaker-python-sdk/blob/master/src/sagemaker/tensorflow/model.py#L47
  1. 型号 - https://github.com/aws/sagemaker-python-sdk/blob/master/src/sagemaker/tensorflow/serving.py#L96

Python 3 不支持使用 TensorFlowModel 对象,因为容器使用 TensorFlow 服务 API 库与 GRPC 客户端一起处理推理,但是, Python 3 官方不支持 TensorFlow 服务 API,因此使用 TensorFlowModel 对象时只有 Python 2 个版本的容器。 如果您需要 Python 3,那么您将需要使用上面 #2 中定义的 Model 对象。

最后,我使用了 Model 和 TensorFlow 版本 1.15.1。

sagemaker_model = Model(model_data = model_data,
                        role = role,
                        framework_version='1.15.2',
                        entry_point = 'train.py')

此外,这是成功的结果。