赞
踩
TensorFlow Serving是google开源的一个适用于部署机器学习模型,具有灵活、高性能、可用于生产环境的模型框架。
它支持模型版本控制和回滚、 支持并发、支持多模型部署、 支持模型热更新等,由于这些特性,使得我们不需要为部署线上服务而操心,只需要训练好线下模型即可。
同时,TensorFlow Serving还提供gRPC和REST API两种接口访问形式,其中gRPC接口对应的端口号为8500,而REST API对应的端口号为8501。
基于TensorFlow Serving的持续集成框架还是挺简明的,基本分三个步骤:
模型训练:这是大家最熟悉的部分,主要包括数据的收集和清洗、模型的训练、评测和优化;
模型上线:前一个步骤训练好的模型在TF Server中上线;
服务使用:客户端通过gRPC和RESTfull API两种方式同TF Servering端进行通信,并获取服务。
目前TensorFlow Serving提供Docker、APT(二进制安装)和源码编译三种安装方式,其中Docker方式的安装相对来说较为简单,而且对后期项目部署的环境依赖不强,项目部署与迁移较为容易,推荐使用Docker方式进行TensorFlow Serving的安装。
docker pull tensorflow/serving
docker run -p 8501:8501 --name yc_model -v /home/tensorflow/model_yc/:/models/model_yc -e MODEL_NAME=model_yc tensorflow/serving
启动成功日志:
后台启动:
docker run -d -p 8501:8501 --name yc_model -v /home/tensorflow/model_yc/:/models/model_yc -e MODEL_NAME=model_yc tensorflow/serving
- {
- "model_spec":{
- "name": "model_yc",
- "signature_name": "",
- "version": "1"
- }
- ,
- "metadata": {"signature_def": {
- "signature_def": {
- "serving_default": {
- "inputs": {
- "input_data": {
- "dtype": "DT_FLOAT",
- "tensor_shape": {
- "dim": [
- {
- "size": "-1",
- "name": ""
- },
- {
- "size": "4",
- "name": ""
- }
- ],
- "unknown_rank": false
- },
- "name": "serving_default_input_data:0"
- }
- },
- "outputs": {
- "output_data": {
- "dtype": "DT_FLOAT",
- "tensor_shape": {
- "dim": [
- {
- "size": "-1",
- "name": ""
- },
- {
- "size": "1",
- "name": ""
- }
- ],
- "unknown_rank": false
- },
- "name": "StatefulPartitionedCall:0"
- }
- },
- "method_name": "tensorflow/serving/predict"
- },
- "__saved_model_init_op": {
- "inputs": {},
- "outputs": {
- "__saved_model_init_op": {
- "dtype": "DT_INVALID",
- "tensor_shape": {
- "dim": [],
- "unknown_rank": true
- },
- "name": "NoOp"
- }
- },
- "method_name": ""
- }
- }
- }
- }
- }
http://127.0.0.1:8501/v1/models/model_yc:predict
#model_yc:模型名
参数:
{
"signature_name":"serving_default",
"instances":[
{
"input_data":[[22],[11],[34],[27],[36],[36],[10],[8]]
}
]
}
【补充说明】:
1.signature_name(serving_default)
- signature_key = 'traffic_predict'
-
- builder.add_meta_graph_and_variables(
- ......,
- tags=[tf.saved_model.tag_constants.SERVING], # 预定义值 SERVING
- signature_def_map={signature_key: signature}, # signature_def_map={'traffic_predict':signature},
- ......
- )
2.method_name
- method_name=tf.saved_model.signature_constants.PREDICT_METHOD_NAME
- # method_name = 'tensorflow/serving/predict'
如果是多参数呢?
{
"signature_name": "traffic_predict",
"instances":[
{
"input_1": [1],
"input_2": [2],
"input_3": [3]
}
]
}
到这里,简单的模型部署就完成了,那么一开始说的Tensorflow Serving支持模型版本控制和回滚、 支持并发、支持多模型部署、 支持模型热更新等特性是如何体现的呢?
模型结构:
1.在multiModel文件夹下新建一个配置文件model.config【相当于配置路由】
- model_config_list:{
- config:{
- name:"model1",
- base_path:"/models/multiModel/model1",
- model_platform:"tensorflow"
- },
- config:{
- name:"model2",
- base_path:"/models/multiModel/model2",
- model_platform:"tensorflow"
- },
- config:{
- name:"model3",
- base_path:"/models/multiModel/model3",
- model_platform:"tensorflow"
- }
- }
2.启动TensorFlow Serving容器
- docker run -p 8501:8501 \
- --mount type=bind,source=/home/tensorflow/serving/tensorflow_serving/servables/tensorflow/testdata/multiModel/,target=/models/multiModel \
- -t tensorflow/serving --model_config_file=/models/multiModel/models.config
3.查看模型【访问网址为 models/model1, 地址中不包含 multiModel 】
- http://xx.xx.xx.xx:8501/v1/models/model1
- http://xx.xx.xx.xx:8501/v1/models/model1/metadata
那么,同一个模型如何部署多版本呢?
修改model.config文件,增加model_version_policy:
- model_config_list:{
- config:{
- name:"model1",
- base_path:"/models/multiModel/model1",
- model_platform:"tensorflow",
- model_version_policy:{
- all:{}
- }
- },
- config:{
- name:"model2",
- base_path:"/models/multiModel/model2",
- model_platform:"tensorflow"
- },
- config:{
- name:"model3",
- base_path:"/models/multiModel/model3",
- model_platform:"tensorflow"
- }
- }
请求的URL为:
http://localhost:8501/v1/models/model1/versions/100001:predict
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。