1. 程式人生 > 其它 >tensorflow model server遠端_使用Grpc呼叫TensorFlow-Serving服務

tensorflow model server遠端_使用Grpc呼叫TensorFlow-Serving服務

技術標籤:tensorflow model server遠端

在上一篇文章中,我們學習了在Mac機器上搭建TensorFlow-Serving的示例,並提供了使用Http介面訪問的方法。本文中,我們將嘗試使用Grpc介面訪問TensorFlow-Serving服務。

啟動服務

nohup sudo docker run -p 8502:8500 -p 8501:8501 --name tfserving_testnet  --mount type=bind,source=/home/tensorflow/xception,target=/models/xception  -e MODEL_NAME=xception -t tensorflow/serving &

其中,本機的8502埠對應Docker的8500埠(GRPC埠),本機8501埠對應Docker的8501埠(HTTP埠)。

模型資訊

在寫Gprc服務之前,需要明確模型的名字、輸入、輸出等。我們使用curl http://localhost:8501/v1/models/xception/metadata可以看到Docker中模型的基本資訊。

6f034465dc6f81ae1f972e14a53d9e8a.png

其中,方框內的內容要在下面Client的程式碼中用到。

Python Grpc Client

下面程式碼是python的客戶端程式碼,輸入一張圖片,輸出模型對這張圖片的打分。

#encoding=utf8
import requests
import numpy as np
import tensorflow.compat.v1 as tf
import time
tf.disable_v2_behavior()
np.set_printoptions(threshold=np.inf)
np.set_printoptions(precision=3)

from tensorflow.keras.models import load_model
from tensorflow.keras.preprocessing import image
from keras.applications import xception
from tensorflow.python.platform import gfile

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

tf.app.flags.DEFINE_string('server', '127.0.0.1:8502', 'PredictionService host:port')
FLAGS = tf.app.flags.FLAGS

def prediction():
    images = image.load_img("test.jpg", target_size=(480, 480))
    x = image.img_to_array(images)
    x = np.expand_dims(x, axis=0)
    image_np = xception.preprocess_input(x)

    options = [('grpc.max_send_message_length', 1000 * 1024 * 1024), ('grpc.max_receive_message_length', 1000 * 1024 * 1024)]
    channel = grpc.insecure_channel(FLAGS.server, options = options)
    stub = prediction_service_pb2_grpc.PredictionServiceStub(channel)
    request = predict_pb2.PredictRequest()
    request.model_spec.name = 'xception' #對應上圖第一個方框
    request.model_spec.signature_name = 'serving_default' #對應上圖第二個方框
    request.inputs['in'].CopyFrom(tf.make_tensor_proto(image_np)) #in對應上圖第三個方框,為模型的輸入Name

    result_future = stub.Predict.future(request, 10.0)  # 10 secs timeout
    result = result_future.result()
    print result

if __name__ == "__main__":
    prediction()