Рандеву RPC, завершившегося с помощью (StatusCode.UNAVAILABLE, Сокет закрыт)> - PullRequest
0 голосов
/ 18 октября 2018
  • tenorflow-gpu 1.10.0
  • tenorflow-сервер 1.10.0

Я развернул сервер tenorflow, который обслуживает несколько моделей.Код клиента похож на client.py this, и я вызываю функцию прогнозирования.

channel = implementations.insecure_channel(host, port)
stub = prediction_service_pb2.beta_create_PredictionService_stub(channel)
request = predict_pb2.PredictRequest()

def predict(data, shape, model_name, signature_name="predict"):
    request.model_spec.name = model_name
    request.model_spec.signature_name = signature_name
    request.inputs['image'].CopyFrom(tf.contrib.util.make_tensor_proto(data, shape=shape))
    result = stub.Predict(request, 10.0)
    return result.outputs['prediction'].float_val[0]

У меня около 100 клиентов с одинаковой конфигурацией.И вот пример кода для вызова функции predict:

from client import predict
while True:
    print(predict(data, shape, model_name))
    # time.sleep some while

Сначала, когда я запускаю код клиента, я могу получить ответ правильно .Но через несколько часов произошел сбой клиента с ошибкой

_Rendezvous of RPC that terminated with (StatusCode.UNAVAILABLE, Socket closed)

Я пытаюсь изменить свой код клиента на

def predict(data, shape, model_name, signature_name="predict"):
    channel = implementations.insecure_channel(host, port)
    stub = prediction_service_pb2.beta_create_PredictionService_stub(channel)
    request = predict_pb2.PredictRequest()
    request.model_spec.name = model_name
    request.model_spec.signature_name = signature_name
    request.inputs['image'].CopyFrom(tf.contrib.util.make_tensor_proto(data, shape=shape))
    result = stub.Predict(request, 10.0)
    return result.outputs['prediction'].float_val[0]

, что означает, что я пытаюсь установить соединение с сервером tfsкаждый раз, когда вызывается функция predict.Но этот код также не удался, как и раньше.

Так что же мне делать, чтобы справиться с этой ситуацией?

1 Ответ

0 голосов
/ 30 ноября 2018

Наконец я добавил channel.close() перед return, и он отлично работает.

...