最简洁使用Tensorflow_model_server
=========
Tensorflow_model_server的目的是:
统一管理一个模型服务器,利于让他人使用这个模型,而且可以动态更新模型,模型也会常住在内存里面,加快结果输出,减少模型加载时间。
事先准备操作:
Tensorflow_model_server 安装:
参考:https://www.tensorflow.org/serving/setup
这里会有一个坑: 直接
pip intall tensorflow-model-server
的时候它会显示已经安装完,但是实际上还是没有找到这个库,处理方法是,先把原来的tensorflow-model-server
给uninstall 再按安装库上面安装即可。
启动 tensorflow_model_server
:
tensorflow_model_server \
--port=端口号
8000 \
--model_name=模型名称
例:256 \
--model_base_path=绝对路径
例: /notebooks/animieGan/TwinGAN/export
正常情况下:
正常图片异常情况:
它回报找不到模型,检查下路径是否是绝对路径
这样就启动完了 tensorflow_model_server
编写客户端:
=====
引入头文文件:
如果没找到,就通过pip安装:
import numpy as np
import scipy.misc
import tensorflow as tf
from grpc.beta import implementations
from tensorflow_serving.apis import predict_pb2 # pip install tensorflow-serving-api
from tensorflow_serving.apis import prediction_service_pb2
from PIL import Image
import sys
tf.app.flags.DEFINE_string('server', '10.11.32.51:8000',
'twingan_server host:port')
tf.flags.DEFINE_integer('gpu', -1,
'GPU ID (negative value indicates CPU)')
FLAGS = tf.app.flags.FLAGS
output_dir = './'
def main(_):
image_hw = 256
raw_image = Image.open('./78ae254bdcc94ffc5e8a921923a8d266.jpg')
image_resized = raw_image.resize((image_hw, image_hw), Image.BICUBIC)
input_image = np.expand_dims(image_resized / np.float32(255.0), 0)
#input_image = np.reshape(int_image, 927696).astype(np.float32)
host, port = FLAGS.server.split(':')
print('GPU: {}'.format(FLAGS.gpu))
channel = implementations.insecure_channel(host, int(port))
stub = prediction_service_pb2.beta_create_PredictionService_stub(channel)
request = predict_pb2.PredictRequest()
request.model_spec.name = "256"
request.model_spec.signature_name = "serving_default"
request.inputs['inputs'].CopyFrom(tf.contrib.util.make_tensor_proto(input_image))
result_future = stub.Predict.future(request, 15.0) # 5 seconds
exception = result_future.exception()
if exception:
print(exception)
else:
result_future.add_done_callback(doneJob(result_future))
return 'hello wrod'
def doneJob(result_future):
print("finish")
sys.stdout.write('.')
sys.stdout.flush()
# TODO: do post-processing using another function.
response_images = np.reshape(np.array(result_future.result().outputs['outputs'].float_val),[dim.size for dim in result_future.result().outputs['outputs'].tensor_shape.dim]) * 255.0
scipy.misc.imsave('outfile2.jpg', response_images[0])
if __name__ == '__main__':
tf.app.run()
核心是:
-
1.构造一个
request = predict_pb2.PredictRequest()
-
2.填充这个
request
的必要参数 比如image,数据 -
3.通过
prediction_service_pb2
来处理 2中的request
-
4.接受流,生成
respone
看doneJob
-
5.通过
tf.app.run()
启动进程
测试模型与启动代码:
模型地址
https://drive.google.com/file/d/1C1tadCQjzsiW2GBeL8BbgfyKXKsoQCjJ/view
启动代码
python model_server.py --twingan_server=10.11.32.51:8000 --image_hw=256 --gpu=1
网友评论