TensorFlow与Serving,深度学习模型高效服务化实践指南

使用TensorFlow和TensorFlow Serving进行模型服务化是一个常见且高效的方法。以下是一个基本的步骤指南,帮助你完成这一过程:
### 1. 准备模型
首先,你需要有一个训练好的TensorFlow模型。假设你已经有一个训练好的模型,并且模型文件保存在`model/`目录下,包含以下文件: - `saved_model.pb`:保存的模型文件 - `variables/`:包含模型的变量
### 2. 使用TensorFlow Serving进行服务化
#### 安装TensorFlow Serving
首先,你需要安装TensorFlow Serving。你可以使用pip来安装:
```bash pip install tensorflow-serving ```
#### 启动TensorFlow Serving
创建一个`model_config.json`文件,配置你的模型:
```json { "model_config": { "model_name": "your_model_name", "base_path": "/path/to/your/model", "restore_session": { "signature_name": "serving_default" } } } ```
然后,使用以下命令启动TensorFlow Serving:
```bash tensorflow_model_server --model_config_file=model_config.json --port=8501 ```
这将启动一个服务,监听端口8501。
### 3. 编写客户端代码
你可以使用TensorFlow的`tf-serving-api`来编写客户端代码,发送请求到TensorFlow Serving。
首先,安装`tf-serving-api`:
```bash pip install tensorflow

相关内容:


方法简述

1、实验室环境下,直接saver和restore即可。

2、生产环境:

(1)部署在移动终端上的(例如ios、android),场景:图像识别等。用freeze_graph合成pb和ckpt文件,然后用optimize_for_inference、quantize_graph进行优化。再用
TensorFlowInferenceInterface调用(这个,不知道ios和android是否相同)。

(2)部署在服务端提供服务使用的,场景:推荐系统等。使用tensorflow serving进行模型服务化。


下边是基于部署在服务端提供服务的方式,查阅资料时tensorflow和tensorflow serving都是1.3版本。

基本架构

在读goole的paper的时候经常看到下边这张图。三个虚框已经把google的系统典型流程描述得很清楚。Data Generation这步,有非常多的学问这里木有经验,略过。我们来看Model Training和Model Serving两部分。也正是题主的问题的核心。

注:整个系统流程都为线上生产流程非实验室环境。

前面几位答友的知识点已经都提到了,这里也就总结整理了下,没有新知识:

1、Previous Models为训练好的模型,即Model Trainer的训练结果。通常在实验室环境中完成一个模型并验证其能发布到线上使用后,通过模型保存扔到生产环境的这里提供给线上系统使用。对应的代码实现:

# Export inference model.
output_path = os.path.join(
          tf.compat.as_bytes(FLAGS.output_dir),
          tf.compat.as_bytes(str(FLAGS.model_version)))
print 'Exporting trained model to', output_path
 ...
builder = tf.saved_model.builder.SavedModelBuilder(output_path)
 ...
builder.save()

目录里是类似这样的文件:(没什么神秘的,看save的手册即可)

2、Model Trainer,模型训练。只要训练集准备好,就可以对模型进行训练。通常需要有个触发的条件,例如晚上1点,或者数据集抽样完成等,只要能把你的模型运行起来就可以。那这里就涉及两点1)加载Previous Model,2)验证模型,如果满足你的要跟则保存模型。加载模型的代码实现:

# Restore variables from training checkpoint.
variable_averages = tf.train.ExponentialMovingAverage(inception_model.MOVING_AVERAGE_DECAY)
variables_to_restore = variable_averages.variables_to_restore()
saver = tf.train.Saver(variables_to_restore)
ckpt = tf.train.get_checkpoint_state(FLAGS.checkpoint_dir)
if ckpt and ckpt.model_checkpoint_path:
        saver.restore(sess, ckpt.model_checkpoint_path)


3、Model Verifier,不多说,每个模型都要实现的。即accuracy,通常只有accuracy达到我们预计的值为才执行。对应的代码类似:

train_accuracy = accuracy.eval(feed_dict={
      x:batch, y_: batch, keep_prob: 1.0})
print "step %d, training accuracy %g"%(i, train_accuracy) 

4、关键一步,Model verfierg到Model Servers。模型保存训练并达到我们的要求后,把它保存了下来。因为是生产环境,为了保障线上实时运行的稳定性,需要让训练中的模型和线上系统进行隔离,需要使用model_version+AB分流来解决这个问题。这里就开始用到Tensorflow Serving这个家伙了,即把你的模型给服务化,通过gRPC方式的HTTP提供实时调用。当然,移动端本地化的不需要这样,需要合成pb文件后直接本地调用。

模型服务化的命令:

下载完Tensorflow Serving,编译的命令,具体看官网。

bazel build -c opt //tensorflow_serving/model_servers:tensorflow_model_server


模型服务化,后边那个“/models/mnist_mode”为前边保存模型的目录

bazel-bin/tensorflow_serving/model_servers/tensorflow_model_server --port=9000 --model_name=mnist --model_base_path=/models/mnist_model/


如果能顺利到这步,剩下的事情就是通过9000端口调用你的模型了。

5、使用方调用Model Servers的Clients端,做个gRPC或http发请求调用就可以了。

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章