我有一个模型的版本1和版本2,我正在按照https://www.tensorflow.org/serving/serving_config#assigning_string_labels_to_model_versions_to_simplify_canary_and_rollback
上的说明为它们分配标签我分别在/path/to/model/1
和/path/to/model/2
中导出了两个版本,并使用以下命令启动服务器:
tensorflow_model_server --rest_api_port=8501 --model_config_file=models.config
以下models.config
文件有效,并且仅产生服务版本1
(如果省略了specific
消息,则按预期提供版本2
,因为它对应到最高的数字):
model_config_list {
config {
name: 'm1'
base_path: '/path/to/model/'
model_platform: 'tensorflow'
model_version_policy {
specific {
versions: 1
}
}
}
我已验证我可以使用服务器将请求发送到模型并按预期执行推断。但是,如果我尝试使用此配置文件添加version_labels
:
model_config_list {
config {
name: 'm1'
base_path: '/path/to/model/'
model_platform: 'tensorflow'
model_version_policy {
specific {
versions: 1
}
version_labels {
key: 'current'
value: 1
}
}
}
然后启动服务器失败,并显示以下错误:
Failed to start server. Error: Failed precondition: Request to assign label to version 1 of model m1, which is not currently available for inference
。
我还注意到,将value
字段更改为不存在的版本文件夹会产生类似的结果:
Failed to start server. Error: Failed precondition: Request to assign label to version 1234 of model m1, which is not currently available for inference
。
我正在使用:
TensorFlow ModelServer: 1.12.0-rc0+dev.sha.87470f0
TensorFlow Library: 1.12.0
我找不到关于version_labels
的任何问题,可用的tensorflow文档似乎不完整且过时(例如,它没有提到需要在配置文件中传递model_platform: 'tensorflow'
)。
任何帮助将不胜感激!
答案 0 :(得分:0)
参阅https://www.tensorflow.org/tfx/serving/serving_config
请注意,标签只能分配给具有以下特征的模型版本: 已加载并可以投放。一旦模型版本是 可用时,可以即时重新加载模型配置,以分配一个 为其添加标签(可以使用HandleReloadConfigRequest RPC实现 端点)。
也许您应该首先删除与标签相关的部分,然后开始tensorflow服务,最后将与标签相关的部分动态添加到配置文件中。
答案 1 :(得分:0)
最近,如果指定了--allow_version_labels_for_unavailable_models=true
标志(在指定--model_config_file=...
变量的同一位置,则可以将标签分配给尚未加载的模型。在docker-compose.yaml文件中执行此操作。)
有关更多信息,请参见official documentation,在撰写本文时说,
如果您想为尚未加载的版本分配标签(例如,在启动时同时提供模型版本和标签),则必须将--allow_version_labels_for_unavailable_models标志设置为true,这将允许新标签将分配给尚未加载的模型版本。