美文网首页
最简洁使用Tensorflow_model_server

最简洁使用Tensorflow_model_server

作者: 领导的玩具 | 来源:发表于2020-03-17 10:25 被阅读0次

    最简洁使用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.接受流,生成 responedoneJob

    • 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

    相关文章

      网友评论

          本文标题:最简洁使用Tensorflow_model_server

          本文链接:https://www.haomeiwen.com/subject/wbmzehtx.html