Ошибка в методе TFS MultiInference rpc (неопределенное поведение) - PullRequest
0 голосов
/ 05 февраля 2019

Я пытаюсь использовать метод MultiInference для проверки двух разных версий какой-либо модели в одном запросе (A / B тест).Однако в некоторых случаях у меня появляется ошибка Duplicate evaluation of signature: classification, а в другом - действительно странные результаты.

Примеры:

  1. Это тот случай, когда якак для модели "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 , но, похоже, мой случай не был проверен.

Я буду очень признателен, если только за небольшой совет, который поможет мне решить эту проблему.

1 Ответ

0 голосов
/ 23 февраля 2019

Я думаю, что путаница связана с тем, что запрос MultiInference предназначен для применения к одной сохраненной модели на уровне детализации версии модели.Фактически, версия модели, указанная в спецификации первой модели в запросе, является единственной, которая имеет значение (см. здесь ).Возможно, было бы чище применить ту же версию модели, точно так же, как уже используется то же имя модели здесь .Затем приведенный выше комментарий будет дополнен чем-то вроде: «Все ModelSpecs в MultiInferenceRequest должны иметь одинаковые имя и версию модели».

Рад помочь с любыми дополнительными проблемами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...