Обслуживание обученной модели обнаружения объекта с подачей тензорного потока - PullRequest
0 голосов
/ 29 августа 2018

Мне трудно обслуживать модель с тензорным потоком, которую я обучил по предварительно обученной модели с API обнаружения объектов с тензорным потоком.

Я обучил модель (Resnet101) с помощью сценария model_main.py, и производительность, похоже, готова к использованию. Таким образом, я создал Docker-контейнер, который запускает tenorflow-serve. Мне удалось служить модели, которая была создана в конце учебного процесса. Я полагаю, что эта функция совершенно новая, но кажется, что скрипт model_main.py создает servable в конце обучения. (Я нашел новую папку с именем "export" в моем "train_dir", который содержит saved_model.pb и variables variables.data-00000-of-00001 и variables.index). Тем не менее, мне удалось обслуживать эту модель, и вывод tensorflow_model_server выглядит следующим образом:

2018-08-29 07:47:50.268810: I tensorflow_serving/core/loader_harness.cc:86] Successfully loaded servable version {name: my_model version: 123}
2018-08-29 07:47:50.271480: I tensorflow_serving/model_servers/main.cc:327] Running ModelServer at 0.0.0.0:8500 ...

Итак, служение, похоже, работает.

Проблема в том, что я изо всех сил пытаюсь подключиться к серверу с помощью клиента Python. Я изменил клиентский файл, который поставляется с примером начала подачи тензорного потока, и выглядит так:

from __future__ import print_function

# This is a placeholder for a Google-internal import.

import grpc
import tensorflow as tf

from tensorflow_serving.apis import predict_pb2
from tensorflow_serving.apis import prediction_service_pb2_grpc


tf.app.flags.DEFINE_string('server', 'localhost:9000',
                       'PredictionService host:port')
tf.app.flags.DEFINE_string('image', '', 'path to image in JPEG format')
FLAGS = tf.app.flags.FLAGS

def main(_):
  channel = grpc.insecure_channel(FLAGS.server)
  stub = prediction_service_pb2_grpc.PredictionServiceStub(channel)
  # Send request
  with open(FLAGS.image, 'rb') as f:
    # See prediction_service.proto for gRPC request/response details.
    data = f.read()
    request = predict_pb2.PredictRequest()
    request.model_spec.name = 'my_model'
    request.model_spec.signature_name = 'serving_default'
    request.inputs['serialized_example'].CopyFrom(
        tf.contrib.util.make_tensor_proto(data, shape=[1]))
    result = stub.Predict(request, 10.0)  # 10 secs timeout
    print(result)


if __name__ == '__main__':
  tf.app.run()

Если я запускаю этот сценарий с правильно настроенными портами, я получаю сообщение об ошибке изнутри сервера моделирования:

2018-08-29 08:32:48.426016: W external/org_tensorflow/tensorflow/core/framework/op_kernel.cc:1275] OP_REQUIRES failed at example_parsing_ops.cc:240 : Invalid argument: Could not parse example input, value: '����

Клиент возвращает несколько случайных двоичных строк. Но соединение явно установлено, и запрос достигает сервера.

Мне кажется, что-то не так с запросом клиента, но я понятия не имею, как его правильно настроить. Я не нашел никакой информации о ключе подписи по умолчанию, который сценарий model_main.py использует для экспорта обученной модели и пытается создать новый обслуживаемый объект с помощью контрольных точек обучения, а измененный сценарий exporter.py не выполнен.

Кто-нибудь знает, как правильно настроить запрос клиента в этом случае?

1 Ответ

0 голосов
/ 15 марта 2019

Похоже, вы вызываете порт gRPC, а не REST API. https://www.tensorflow.org/tfx/serving/docker

Port 8500 exposed for gRPC

Port 8501 exposed for the REST API

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