You need to enable JavaScript to run this app. TensorFlow Serving与本地加载同一模型预测结果不一致排查
优惠活动
大模型
产品
解决方案
定价
更多

TensorFlow Serving与本地加载同一模型预测结果不一致排查

输出不一致的核心原因

两侧给模型传入的三个输入张量存在完全错位的键值映射,根本没有把同一组数据喂给模型,输出自然存在极大差异。

具体错误的映射细节

本地加载模型的输入错配

你本地构造模型输入的代码存在键值对应错误:

inputs = {
    'input_word_ids': tf.convert_to_tensor([encodes['input_ids']]), # 该键值匹配正确
    'input_mask': tf.convert_to_tensor([encodes['token_type_ids']]), # 匹配错误
    'input_type_ids': tf.convert_to_tensor([encodes['token_type_ids']]) # 该键值匹配正确
}
  • input_mask是Bert模型要求的注意力掩码,作用是标记序列中哪些位置是有效文本、哪些是填充的[PAD],本该传入tokenizer返回的attention_mask字段,但你错误传入了token_type_ids(段类型id,用于区分拼接的两个句子),二者语义、取值分布完全不同。

TensorFlow Serving端的输入错配

你在构造Serving推理请求时的键值错配更严重,之前尝试调整输入的嵌套结构,但没有修正每个键对应的实际取值,所以问题依然存在:

inputs= {"instances": [{"input_word_ids": encodes['input_ids'], "input_mask": encodes['input_ids'], "input_type_ids": encodes['input_ids']}]}
  • 你给三个输入通道全都塞了同一份input_ids:本该传注意力掩码的input_mask、本该传段类型id的input_type_ids,都直接传了文本转成的字id序列,完全不符合模型输入要求。

正确的输入对应规则

结合Bert模型的输入要求、以及tokenizer encode_plus的返回字段,正确的映射关系应该是:

  • input_word_ids → 取tokenizer返回的input_ids(文本转换后的token id序列)
  • input_mask → 取tokenizer返回的attention_mask(0/1取值的注意力标记)
  • input_type_ids → 取tokenizer返回的token_type_ids(0/1取值的段类型标记)

快速验证方法

不需要跑模型就能定位问题:把本地构造好的三个输入张量、Serving请求里的三个数组单独打印出来逐元素对比,就能发现两边的input_mask、input_type_ids从根上就不是同一份数据,甚至Serving端传入的掩码、段类型字段是取值为大整数的token id,根本不是0/1的标记值。

内容的提问来源于stack exchange,提问作者ibmxiang2021

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.02 12:24:02