GCP AI Platform部署TensorFlow讽刺文本检测模型JSON序列化报错咨询
GCP AI Platform部署TensorFlow模型张量JSON序列化问题解决方案
核心原因:EagerTensor是TensorFlow运行时专属对象,不符合JSON序列化规则,GCP AI Platform预测接口仅支持原生Python类型、列表、字符串等可序列化输入,以下是可行方案:
方案1:客户端张量转原生列表(最便捷)
直接在构造请求前将张量转换为Python原生整数/浮点数列表,即可直接序列化:
import json # 原有tokenize逻辑 text = tokenize_text('This is a text') # 分别提取两个张量转成列表 input_ids = text[0].numpy().tolist() attention_mask = text[1].numpy().tolist() # 构造GCP要求的标准请求格式 request_data = { "instances": [ { "input_ids": input_ids[0], "attention_mask": attention_mask[0] } ] } # 序列化无报错 json_str = json.dumps(request_data)
注意:JSON中的键名需要和你部署模型的输入签名的输入名完全对应,若你模型的两个输入是其他名称,需同步修改键名。
方案2:将tokenize逻辑封装到模型部署包中
将文本转张量的处理逻辑集成到模型的前处理环节,部署后的模型直接接收原始文本字符串作为输入,客户端无需处理张量相关逻辑:
- 用
tf.keras.Model封装原模型,新增输入层接收字符串,内置调用tokenize_text的逻辑完成张量转换后再传入原预测层 - 重新导出SavedModel格式部署,客户端直接传字符串即可,无需做张量处理,避免序列化问题
方案3:使用GCP自定义预测例程
如果需要更灵活的预处理逻辑,可以使用GCP AI Platform的自定义预测功能:
- 编写自定义
predictor.py,在preprocess方法中完成JSON输入到张量的转换 - 打包依赖和模型上传部署,客户端可根据自定义逻辑传任意可序列化内容,预处理由服务端完成
方案4:批量预测优化
如果是批量处理文本,可直接将所有样本的张量转成嵌套列表,放入instances数组中即可,单请求支持批量预测,无需多次调用接口。
内容的提问来源于stack exchange,提问作者Oweys
相关产品推荐
相关产品推荐

