首页 > 解决方案 > Sagemaker tensorflow 端点在被调用进行预测时未调用 input_handler

问题描述

我正在通过参数部署带有自定义脚本的tensorflow.serving端点inference.pyentry point

model = Model(role='xxx',
              framework_version='2.2.0',
              entry_point='inference.py',
              model_data='xxx')

predictor = model.deploy(instance_type='xxx',
                         initial_instance_count=1,
                         endpoint_name='xxx')

inference.py 包含一个input_handler和一个output_handler函数,但是当我调用 predict 时:

model = Predictor(endpoint_name='xxx')
url = 'xxx'

input = {
    'instances': [url]
}

predictions = model.predict(input)

我得到以下信息error

botocore.errorfactory.ModelError:调用 InvokeEndpoint 操作时发生错误 (ModelError):收到来自模型的客户端错误 (400),消息为“{”错误”:“无法处理元素:‘实例’列表的 0。错误:无效参数:JSON 值:“xxx”类型:字符串不是预期类型:float“}”

似乎该函数从未input_handler在 inference.py 脚本中调用该函数。你知道为什么会发生这种情况吗?

标签: tensorflowamazon-sagemaker

解决方案


我正在为这个错误消息添加另一个可能的原因,因为我花了一些时间来解决这个问题。

我使用的是不同的 sagemaker api 版本(1.x 和 2.x)。

对于较新的 sagemaker tf 容器,处理程序的名称已从 input_fn() 更改为 input_handler()。

因此从未调用 input_fn() 并且从未处理过特殊的输入类型。

详情见:https ://sagemaker.readthedocs.io/en/stable/frameworks/tensorflow/upgrade_from_legacy.html

也许这对某人有帮助。


推荐阅读