Tensorflow serving: request fails with object has no attribute 'unary_unary

蓝咒 提交于 2019-12-07 04:44:33

问题


I'm building a CNN text classifier using TensorFlow which I want to load in tensorflow-serving and query using the serving apis. When I call the Predict() method on the grcp stub I receive this error: AttributeError: 'grpc._cython.cygrpc.Channel' object has no attribute 'unary_unary'

What I've done to date: I have successfully trained and exported a model suitable for serving (i.e., the signatures are verified and using tf.Saver I can successfully return a prediction). I can also load the model in tensorflow_model_server without error.

Here is a snippet of the client code (simplified for readability):

with tf.Session() as sess:
    host = FLAGS.server
    channel = grpc.insecure_channel('localhost:9001')
    stub = prediction_service_pb2.beta_create_PredictionService_stub(channel)

    request = predict_pb2.PredictRequest()
    request.model_spec.name = 'predict_text'
    request.model_spec.signature_name = 'predict_text'

    x_text = ["space"]

    # restore vocab processor
    # then create a ndarray with transform_fit using the vocabulary
    vocab = learn.preprocessing.VocabularyProcessor.restore('/some_path/model_export/1/assets/vocab')
    x = np.array(list(vocab.fit_transform(x_text)))

    # data
    temp_data = tf.contrib.util.make_tensor_proto(x, shape=[1, 15], verify_shape=True)
    request.inputs['input'].CopyFrom(tf.contrib.util.make_tensor_proto(x, shape=[1, 15], verify_shape=True))

    # get classification prediction
    result = stub.Predict(request, 5.0)

Where I'm bending the rules: I am using tensorflow-serving-apis in Python 3.5.3 when pip install is not officially supported. Various posts (example: https://github.com/tensorflow/serving/issues/581) have reported that using tensorflow-serving with Python 3 has been successful. I have downloaded tensorflow-serving-apis package from pypi (https://pypi.python.org/pypi/tensorflow-serving-api/1.5.0)and manually pasted into the environment.

Versions: tensorflow: 1.5.0, tensorflow-serving-apis: 1.5.0, grpcio: 1.9.0rc3, grcpio-tools: 1.9.0rcs, protobuf: 3.5.1 (all other dependency version have been verified but are not included for brevity -- happy to add if they have utility)

Environment: Linux Mint 17 Qiana; x64, Python 3.5.3

Investigations: A github issue (https://github.com/GoogleCloudPlatform/google-cloud-python/issues/2258) indicated that a historical package triggered this error was related to grpc beta.

What data or learning or implementation am I missing?


回答1:


beta_create_PredictionService_stub() is deprecated. Try this:

from tensorflow_serving.apis import prediction_service_pb2_grpc
...
stub = prediction_service_pb2_grpc.PredictionServiceStub(channel)



回答2:


Try to use grpc.beta.implementations.insecure_channel instead of grpc.insecure_channel.

See example code here.



来源:https://stackoverflow.com/questions/48529389/tensorflow-serving-request-fails-with-object-has-no-attribute-unary-unary

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!