【tensorlow】tensorflow-serving初步使用记录

概述

tensorflow-serving支持rpc和rest,本文基于rest编写。构建k8s的pod

部署

单模型部署,dockerfile如下:

FROM tensorflow/serving
MAINTAINER zhouwenyang
ADD model /models/${model_name}/${version}
ENV MODEL_NAME=${model_name}

${model_name}和${version}根据自己需要更改。可以使用挂载文件的方式,但是如果部署k8s则需要打进容器,或者使用共享的volumes的方式

多模型部署参考:https://www.jianshu.com/p/d11a5c3dc757

查看模型输入输出情况: http://${host}:${port}/v1/models/${model_name}/metadata

自定义op

预测

根据查看模型的metadata,搞起一个http post接口

接口地址为: http://${host}:${port}/v1/models/${model_name}:predict 

post参数为:

{
  "inputs":{
    "${param1}":${value1},
    "${param2}":${value2},
    "${param3}":${value3},
    "${param4}":${value4}
  }  
}

 问题

  • tag只支持serve

tf-serving模型目前支持模型tag为serve。这个是因为tf-serving官方支持的比较烂

排查: 查看源码 https://github.com/tensorflow/serving/blob/ceba636bb7c5c98bde35d1818fd033b36300fffe/tensorflow_serving/model_servers/main.cc#L189

查看tensorflow-serving这个镜像的Dockerfile如下: https://hub.docker.com/layers/tensorflow/serving/latest/images/sha256-6651f4839e1124dbde75ee531825112af0a6b8ef082c88ab14ca53eb69a2e4bb?context=explore 可知,其实tf-serving的docker镜像内部就是运行的/usr/bin/tf_serving_entrypoint.sh 脚本,

脚本内容: 

#!/bin/bash 
tensorflow_model_server --port=8500 --rest_api_port=8501 --model_name=${MODEL_NAME} --model_base_path=${MODEL_BASE_PATH}/${MODEL_NAME} "$@"

解决: 

编写tf-serving-entrypoint.sh

#!/bin/bash

tensorflow_model_server --port=8500 --rest_api_port=8501 --model_name=${MODEL_NAME} --model_base_path=${MODEL_BASE_PATH}/${MODEL_NAME} --saved_model_tags=${MODEL_TAGS} "$@"

编写Dockerfile

FROM tensorflow/serving:latest
MAINTAINER zhouwenyang
ENV MODEL_TAGS=serve
ADD tf_serving_entrypoint.sh /usr/bin
RUN chmod u+x /usr/bin/tf_serving_entrypoint.sh
ENTRYPOINT ["/usr/bin/tf_serving_entrypoint.sh"]

然后docker build。使用这个生成的镜像代替tensorflow-serving官方镜像即可

具体使用:

docker run -itd --name my-tf -v /model:/models/1/modelname -e MODEL_NAME=modelname -e MODEL_TAGS=my-tag wenyangchou/tf-serving:latest

镜像已上传:wenyangchou/tf-serving:latest

原文地址:https://www.cnblogs.com/zhouwenyang/p/15319868.html