tensorflow - Sagemaker tensorflow 端点在被调用进行预测时未调用 input_handler
问题描述
我正在通过参数部署带有自定义脚本的tensorflow.serving
端点inference.py
entry 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 脚本中调用该函数。你知道为什么会发生这种情况吗?
解决方案
我正在为这个错误消息添加另一个可能的原因,因为我花了一些时间来解决这个问题。
我使用的是不同的 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
也许这对某人有帮助。
推荐阅读
- sql-server - 使用 pentaho 数据集成器从 SQL Server 表中的 varchar(max) 列加载 Oracle 表中的 clob 列时提高性能
- matlab - 如何将数据采集 Matlab 脚本转换为 Simulink?
- typescript - Vue 根据条件选择选项
- laravel - Laravel 5.6 嵌套查询关系
- javascript - 如何在不刷新页面的情况下格式化模态内容
- kubernetes - 未经授权获取 kubectl api-versions
- python - Python 3.4.3 - 多项目追加和列表扩展
- java - LibGDX:AssetManager 有限制吗?
- rest - microsoft sharepoint 使用 REST API 访问文档返回 404
- php - laravel 服务提供者对 laravel 有什么用