Я пытаюсь использовать метод MultiInference для проверки двух разных версий какой-либо модели в одном запросе (A / B тест).Однако в некоторых случаях у меня появляется ошибка Duplicate evaluation of signature: classification
, а в другом - действительно странные результаты.
Примеры:
- Это тот случай, когда якак для модели "stpeter" в версиях 7 и 8, и signature_name = "классификация" (обе задачи).
Input request:
tasks {
model_spec {
name: "stpeter"
version {
value: 7
}
signature_name: "classification"
}
method_name: "tensorflow/serving/classify"
}
tasks {
model_spec {
name: "stpeter"
version {
value: 8
}
signature_name: "classification"
}
method_name: "tensorflow/serving/classify"
}
input {
example_list {
examples {
features {
feature {
key: "inputs"
value {
bytes_list {
value: "ala.kowalska"
}
}
}
}
}
}
}
Traceback (most recent call last):
File "ab_test.py", line 146, in <module>
do_inference(args)
File "ab_test.py", line 123, in do_inference
results = stub.MultiInference(request, 10)
File "/anaconda3/envs/ents/lib/python3.6/site-packages/grpc/_channel.py", line 533, in __call__
return _end_unary_response_blocking(state, call, False, None)
File "/anaconda3/envs/ents/lib/python3.6/site-packages/grpc/_channel.py", line 467, in _end_unary_response_blocking
raise _Rendezvous(state, None, None, deadline)
grpc._channel._Rendezvous: <_Rendezvous of RPC that terminated with:
status = StatusCode.INVALID_ARGUMENT
details = "Duplicate evaluation of signature: classification"
debug_error_string = "{"created":"@1549359403.703597000","description":"Error received from peer","file":"src/core/lib/surface/call.cc","file_line":1017,"grpc_message":"Duplicate evaluation of signature: classification","grpc_status":3}"
>
Итак, измените один из
signature_name
.
Input request:
tasks {
model_spec {
name: "stpeter"
version {
value: 7
}
signature_name: "classification"
}
method_name: "tensorflow/serving/classify"
}
tasks {
model_spec {
name: "stpeter"
version {
value: 8
}
}
method_name: "tensorflow/serving/classify"
}
input {
example_list {
examples {
features {
feature {
key: "inputs"
value {
bytes_list {
value: "ala.kowalska"
}
}
}
}
}
}
}
Results:
results {
model_spec {
name: "stpeter"
version {
value: 7
}
signature_name: "classification"
}
classification_result {
classifications {
classes {
label: "BOT"
score: 0.010155047290027142
}
classes {
label: "HUMAN"
score: 0.9898449182510376
}
}
}
}
results {
model_spec {
name: "stpeter"
version {
value: 7
}
signature_name: "serving_default"
}
classification_result {
classifications {
classes {
label: "BOT"
score: 0.010155047290027142
}
classes {
label: "HUMAN"
score: 0.9898449182510376
}
}
}
}
Кажется, он работает хорошо (ошибки нет).Но давайте посмотрим ближе на результаты.Мы можем увидеть ответ от stpeter в версии 7 для обеих задач (signature_name = "классификация" и signature_name = "serve_default"), несмотря на то, что задача № 2 определила: version {value: 8}
.
Обслуживаемая модель была создана с использованием оценщиков Tensorflowи сохраняется с помощью export_savedmodel
.Так как у нас есть доступные подписи:
INFO:tensorflow:Signatures INCLUDED in export for Classify: ['serving_default', 'classification']
INFO:tensorflow:Signatures INCLUDED in export for Regress: ['regression']
INFO:tensorflow:Signatures INCLUDED in export for Predict: ['predict']
Для версии модели нет ограничений в inference.proto .
Я также проверил тестовые случаи TFS , но, похоже, мой случай не был проверен.
Я буду очень признателен, если только за небольшой совет, который поможет мне решить эту проблему.