C. Schindler
C. Schindler

Reputation: 51

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

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?

Upvotes: 5

Views: 3276

Answers (2)

s0urcer
s0urcer

Reputation: 332

beta_create_PredictionService_stub() is deprecated. Try this:

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

Upvotes: 3

Ruchen Zhang
Ruchen Zhang

Reputation: 1

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

See example code here.

Upvotes: -1

Related Questions