如何调试 "INVALID_ARGUMENT: input tensor alias not found in signature"
How to debug "INVALID_ARGUMENT: input tensor alias not found in signature"
我正在尝试访问我的 tensorflow 服务模型,该模型具有从该代码段中可以看出的签名:
regression_signature = predict_signature_def(
inputs={"phase_features" : phase_features},
outputs={"phase_weight": phase_weight}
)
builder.add_meta_graph_and_variables(
sess=sess,
tags=[tag_constants.SERVING],
signature_def_map={'regress_phase_weight': regression_signature})
builder.save()
它使用具有以下内容的模型配置文件加载到 tf 服务中:
model_config_list: {
config: {
name: "PhaseModificationWeightRegressor",
base_path: "../../models/phase-mod-weights",
model_platform: "tensorflow"
}
}
现在我正在尝试基于 TensorFlow API 和 TensorFlow Serving API 原型从 Java 创建请求:
...
tensorflow.serving.Model.ModelSpec.Builder modelSped = ModelSpec.newBuilder()
.setName("PhaseModificationWeightRegressor") // name as defined in the tensorflow serving model config file
.setSignatureName("regress_phase_weight") // signature name as defined in signature_def_map of add_meta_graph_and_variables of your SavedModelBuilder
.setVersion(Int64Value.newBuilder().setValue(1)); // model version as indicated by the version of your model when saving it
tensorflow.serving.Predict.PredictRequest.Builder requestBuilder = PredictRequest.newBuilder()
.setModelSpec(modelSped)
.putInputs("phase_features", createTensorProto(phaseFeatures));
return requestBuilder.build();
不幸的是我得到一个例外:
Exception in thread "main" io.grpc.StatusRuntimeException: INVALID_ARGUMENT: input tensor alias not found in signature: phase_features
据我了解,这意味着它已到达服务器,在版本 1 中找到名为 "PhaseModificationWeightRegressor" 的模型,找到名为 "regress_phase_weight" 的签名,但找不到逻辑名称(别名) "phase_features" 导致相应的占位符。还有什么可能是问题吗?我现在已经关注了 2 个小时,但看不到 problem/typo 等,这使得它不起作用。
知道哪里出了问题吗?我怎样才能更好地调试它?也许在未来,TFserving 应该回答它所期望的。
我解决了:
.putInputs("inputs", createTensorProto(phaseFeatures));
客户端使用的别名似乎完全是"inputs"
,而python代码保持不变。
通过此修改,我的代码可以正常工作。
UPDATE:我还使用具有多个(两个)输入的模型对其进行了测试。在这种情况下,您应该使用导出模型时使用的别名。
我正在尝试访问我的 tensorflow 服务模型,该模型具有从该代码段中可以看出的签名:
regression_signature = predict_signature_def(
inputs={"phase_features" : phase_features},
outputs={"phase_weight": phase_weight}
)
builder.add_meta_graph_and_variables(
sess=sess,
tags=[tag_constants.SERVING],
signature_def_map={'regress_phase_weight': regression_signature})
builder.save()
它使用具有以下内容的模型配置文件加载到 tf 服务中:
model_config_list: {
config: {
name: "PhaseModificationWeightRegressor",
base_path: "../../models/phase-mod-weights",
model_platform: "tensorflow"
}
}
现在我正在尝试基于 TensorFlow API 和 TensorFlow Serving API 原型从 Java 创建请求:
...
tensorflow.serving.Model.ModelSpec.Builder modelSped = ModelSpec.newBuilder()
.setName("PhaseModificationWeightRegressor") // name as defined in the tensorflow serving model config file
.setSignatureName("regress_phase_weight") // signature name as defined in signature_def_map of add_meta_graph_and_variables of your SavedModelBuilder
.setVersion(Int64Value.newBuilder().setValue(1)); // model version as indicated by the version of your model when saving it
tensorflow.serving.Predict.PredictRequest.Builder requestBuilder = PredictRequest.newBuilder()
.setModelSpec(modelSped)
.putInputs("phase_features", createTensorProto(phaseFeatures));
return requestBuilder.build();
不幸的是我得到一个例外:
Exception in thread "main" io.grpc.StatusRuntimeException: INVALID_ARGUMENT: input tensor alias not found in signature: phase_features
据我了解,这意味着它已到达服务器,在版本 1 中找到名为 "PhaseModificationWeightRegressor" 的模型,找到名为 "regress_phase_weight" 的签名,但找不到逻辑名称(别名) "phase_features" 导致相应的占位符。还有什么可能是问题吗?我现在已经关注了 2 个小时,但看不到 problem/typo 等,这使得它不起作用。
知道哪里出了问题吗?我怎样才能更好地调试它?也许在未来,TFserving 应该回答它所期望的。
我解决了:
.putInputs("inputs", createTensorProto(phaseFeatures));
客户端使用的别名似乎完全是"inputs"
,而python代码保持不变。
通过此修改,我的代码可以正常工作。
UPDATE:我还使用具有多个(两个)输入的模型对其进行了测试。在这种情况下,您应该使用导出模型时使用的别名。