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 表示和文档,如此处所示。
- TensorFlowModel - https://github.com/aws/sagemaker-python-sdk/blob/master/src/sagemaker/tensorflow/model.py#L47
- 文档:
https://github.com/aws/sagemaker-python-sdk/tree/v1.12.0/src/sagemaker/tensorflow#deploying-directly-from-model-artifacts
- 主要区别:使用代理 GRPC 客户端发送请求
- 容器实现:
https://github.com/aws/sagemaker-tensorflow-container/blob/master/src/tf_container/serve.py
- 型号 - https://github.com/aws/sagemaker-python-sdk/blob/master/src/sagemaker/tensorflow/serving.py#L96
- 文档:https://github.com/aws/sagemaker-python-sdk/blob/master/src/sagemaker/tensorflow/deploying_tensorflow_serving.rst
- 主要区别:利用 TensorFlow 服务休息 API
- 容器实现:https://github.com/aws/sagemaker-tensorflow-serving-container/blob/master/container/sagemaker/serve.py
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')
此外,这是成功的结果。
这是我第一次使用亚马逊网络服务来部署我的机器学习预训练模型。我想将预训练的 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 表示和文档,如此处所示。
- TensorFlowModel - https://github.com/aws/sagemaker-python-sdk/blob/master/src/sagemaker/tensorflow/model.py#L47
- 文档: https://github.com/aws/sagemaker-python-sdk/tree/v1.12.0/src/sagemaker/tensorflow#deploying-directly-from-model-artifacts
- 主要区别:使用代理 GRPC 客户端发送请求
- 容器实现: https://github.com/aws/sagemaker-tensorflow-container/blob/master/src/tf_container/serve.py
- 型号 - https://github.com/aws/sagemaker-python-sdk/blob/master/src/sagemaker/tensorflow/serving.py#L96
- 文档:https://github.com/aws/sagemaker-python-sdk/blob/master/src/sagemaker/tensorflow/deploying_tensorflow_serving.rst
- 主要区别:利用 TensorFlow 服务休息 API
- 容器实现:https://github.com/aws/sagemaker-tensorflow-serving-container/blob/master/container/sagemaker/serve.py
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')
此外,这是成功的结果。