【Tensorflow教程笔记】TensorFlow Serving

Tensorflow教程笔记基础TensorFlow 基础TensorFlow 模型建立与训练基础示例:多层感知机(MLP)卷积神经网络(CNN)循环神经网络(RNN)深度强化学习(DRL)Keras Pipeline自定义层、损失函数和评估指标常用模块 tf.train.Checkpoint :变量的保存与恢复常用模块 TensorBoard:训练过程可视化常用模块 tf.data :数据集的构建与预处理常用模块 TFRecord :TensorFlow 数据集存储格式常用
摘要由CSDN通过智能技术生成

Tensorflow教程笔记

  1. 基础
    TensorFlow 基础
    TensorFlow 模型建立与训练
    基础示例:多层感知机(MLP)
    卷积神经网络(CNN)
    循环神经网络(RNN)
    深度强化学习(DRL)
    Keras Pipeline
    自定义层、损失函数和评估指标
    常用模块 tf.train.Checkpoint :变量的保存与恢复
    常用模块 TensorBoard:训练过程可视化
    常用模块 tf.data :数据集的构建与预处理
    常用模块 TFRecord :TensorFlow 数据集存储格式
    常用模块 tf.function :图执行模式
    常用模块 tf.TensorArray :TensorFlow 动态数组
    常用模块 tf.config:GPU 的使用与分配

  2. 部署
    TensorFlow 模型导出
    TensorFlow Serving
    TensorFlow Lite

  3. 大规模训练与加速
    TensorFlow 分布式训练
    使用 TPU 训练 TensorFlow 模型

  4. 扩展
    TensorFlow Hub 模型复用
    TensorFlow Datasets 数据集载入

  5. 附录
    强化学习基础简介


当我们将模型训练完毕后,往往需要将模型在生产环境中部署。最常见的方式,是在服务器上提供一个 API,即客户机向服务器的某个 API 发送特定格式的请求,服务器收到请求数据后通过模型进行计算,并返回结果。如果仅仅是做一个 Demo,不考虑高并发和性能问题,其实配合 Flask 等 Python 下的 Web 框架就能非常轻松地实现服务器 API。不过,如果是在真的实际生产环境中部署,这样的方式就显得力不从心了。这时,TensorFlow 为我们提供了 TensorFlow Serving 这一组件,能够帮助我们在实际生产环境中灵活且高性能地部署机器学习模型。

TensorFlow Serving 安装

TensorFlow Serving 可以使用 apt-get 或 Docker 安装。在生产环境中,推荐 使用 Docker 部署 TensorFlow Serving 。不过此处出于教学目的,介绍依赖环境较少的 apt-get 安装 。

首先设置安装源:

# 添加Google的TensorFlow Serving源
echo "deb [arch=amd64] http://storage.googleapis.com/tensorflow-serving-apt stable tensorflow-model-server tensorflow-model-server-universal" | sudo tee /etc/apt/sources.list.d/tensorflow-serving.list
# 添加gpg key
curl https://storage.googleapis.com/tensorflow-serving-apt/tensorflow-serving.release.pub.gpg | sudo apt-key add -

更新源后,即可使用 apt-get 安装 TensorFlow Serving

sudo apt-get update
sudo apt-get install tensorflow-model-server

在运行 curl 和 apt-get 命令时,可能需要设置代理。

curl 设置代理的方式为 -x 选项或设置 http_proxy 环境变量,即

export http_proxy=http://代理服务器IP:端口

curl -x http://代理服务器IP:端口 URL

apt-get 设置代理的方式为 -o 选项,即

sudo apt-get -o Acquire::http::proxy="http://代理服务器IP:端口" ...

Windows 10 下,可以在 Linux 子系统(WSL) 内使用相同的方式安装 TensorFlow Serving。

TensorFlow Serving 模型部署

TensorFlow Serving 可以直接读取 SavedModel 格式的模型进行部署(导出模型到 SavedModel 文件的方法见 前文 )。使用以下命令即可:

tensorflow_model_server \
    --rest_api_port=端口号(如8501) \
    --model_name=模型名 \
    --model_base_path="SavedModel格式模型的文件夹绝对地址(不含版本号)"

TensorFlow Serving 支持热更新模型,其典型的模型文件夹结构如下:

/saved_model_files
    /1      # 版本号为1的模型文件
        /assets
        /variables
        saved_model.pb
    ...
    /N      # 版本号为N的模型文件
        /assets
        /variables
        saved_model.pb

上面 1~N 的子文件夹代表不同版本号的模型。当指定 --model_base_path 时,只需要指定根目录的 绝对地址 (不是相对地址)即可。例如,如果上述文件夹结构存放在 home/snowkylin 文件夹内,则 --model_base_path 应当设置为 home/snowkylin/saved_model_files (不附带模型版本号)。TensorFlow Serving 会自动选择版本号最大的模型进行载入。

Keras Sequential 模式模型的部署

由于 Sequential 模式的输入和输出都很固定,因此这种类型的模型很容易部署,无需其他额外操作。例如,要将 前文使用 SavedModel 导出的 MNIST 手写体识别模型 (使用 Keras Sequential 模式建立)以 MLP 的模型名在 8501 端口进行部署,可以直接使用以下命令:

tensorflow_model_server \
    --rest_api_port=8501 \
    --model_name=MLP \
    --model_base_path="/home/.../.../saved"  # 文件夹绝对地址根据自身情况填写,无需加入版本号

然后就可以按照 后文的介绍 ,使用 gRPC 或者 RESTful API 在客户端调用模型了。

自定义 Keras 模型的部署

使用继承 tf.keras.Model 类建立的自定义 Keras 模型的自由度相对更高。因此当使用 TensorFlow Serving 部署模型时,对导出的 SavedModel 文件也有更多的要求:

  • 需要导出到 SavedModel 格式的方法(比如 call )不仅需要使用 @tf.function 修饰,还要在修饰时指定 input_signature 参数,以显式说明输入的形状。该参数传入一个由 tf.TensorSpec 组成的列表,指定每个输入张量的形状和类型。例如,对于 MNIST 手写体数字识别,我们的输入是一个 [None, 28, 28, 1] 的四维张量( None 表示第一维即 Batch Size 的大小不固定),此时我们可以将模型的call方法做以下修饰:
class MLP(tf.keras.Model):
    ...

    @tf.function(input_signature=[tf.TensorSpec([None, 28, 28, 1], tf.float32)]
  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值