tensorflow model server遠端_使用Grpc呼叫TensorFlow-Serving服務
阿新 • • 發佈:2021-02-10
技術標籤: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中模型的基本資訊。
其中,方框內的內容要在下面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()