TensorFlow Serving入門

2021-02-20 機器學習算法工程師

   作者:劉才權           

編輯:趙一帆           

大家習慣使用TensorFlow進行模型的訓練、驗證和預測,但模型完善之後的生產上線流程,就變得五花八門了。針對這種情況Google提供了TensorFlow Servering,可以將訓練好的模型直接上線並提供服務。在2017年的TensorFlow開發者Summit上便提出了TensorFlow Serving。

傳送門:

https://www.youtube.com/watch?v=q_IkJcPyNl0&list=PLOU2XLYxmsIKGc_NBoIhTn2Qhraji53cv&index=13

但那時候客戶端和服務端的通信只支持gRPC。在實際的生產環境中比較廣泛使用的C/S通信手段是基於RESTfull API的,幸運的是從TF1.8以後,TF Serving也正式支持RESTfull API通信方式了。

服務框架

基於TF Serving的持續集成框架還是挺簡明的,基本分三個步驟:

模型訓練
這是大家最熟悉的部分,主要包括數據的收集和清洗、模型的訓練、評測和優化;

模型上線
前一個步驟訓練好的模型在TF Server中上線;

服務使用
客戶端通過gRPC和RESTfull API兩種方式同TF Servering端進行通信,並獲取服務;

TF Serving工作流程

TF Serving的工作流程主要分為以下幾個步驟:

Source會針對需要進行加載的模型創建一個Loader,Loader中會包含要加載模型的全部信息;

Source通知Manager有新的模型需要進行加載;

Manager通過版本管理策略(Version Policy)來確定哪些模型需要被下架,哪些模型需要被加載;

Manger在確認需要加載的模型符合加載策略,便通知Loader來加載最新的模型;

客戶端像服務端請求模型結果時,可以指定模型的版本,也可以使用最新模型的結果

簡單示例

TF Serving客戶端和服務端的通信方式有兩種(gRPC和RESTfull API)

示例(一):RESTfull API形式

1. 準備TF Serving的Docker環境

目前TF Serving有Docker、APT(二級制安裝)和源碼編譯三種方式,但考慮實際的生產環境項目部署和簡單性,推薦使用Docker方式。

docker pull tensorflow/serving

2. 下載官方示例代碼

示例代碼中包含已訓練好的模型和與服務端進行通信的客戶端(RESTfull API形式不需要專門的客戶端)

mkdir -p /tmp/tfservingcd /tmp/tfservinggit clone https://github.com/tensorflow/serving

3. 運行TF Serving

這裡需要注意的是,較早的docker版本沒有「--mount」選項,比如Ubuntu16.04默認安裝的docker就沒有(我的環境是Ubuntu 18.04)。

docker run -p 8501:8501 \    --mount type=bind,\
   source=/tmp/tfserving/serving/tensorflow_serving/servables/tensorflow/testdata/saved_model_half_plus_two_cpu,\    target=/models/half_plus_two \    -e MODEL_NAME=half_plus_two -t tensorflow/serving &

4. 客戶端驗證

curl -d '{"instances": [1.0, 2.0, 5.0]}' \
   -X POST http://localhost:8501/v1/models/half_plus_two:predict

5. 返回結果

示例(二):gRPC形式

1. 準備TF Serving的Docker環境

目前TF Serving有Docker、APT(二級制安裝)和源碼編譯三種方式,但考慮實際的生產環境項目部署和簡單性,推薦使用Docker方式。

docker pull tensorflow/serving

2. 下載官方示例代碼

mkdir -p /tmp/tfservingcd /tmp/tfservinggit clone https://github.com/tensorflow/serving

3. 模型編譯

python tensorflow_serving/example/mnist_saved_model.py models/mnist

4. 運行TF Serving

這裡需要注意的是,較早的docker版本沒有「--mount」選項,比如Ubuntu16.04默認安裝的docker就沒有(我的環境是Ubuntu 18.04)。

docker run -p 8500:8500 \    --mount type=bind,source=$(pwd)/models/mnist,target=/models/mnist \    -e MODEL_NAME=mnist -t tensorflow/serving

5. 客戶端驗證

python tensorflow_serving/example/mnist_client.py --num_tests=1000 --server=127.0.0.1:8500

6. 返回結果

Inference error rate: 11.13%

這裡需要注意的是,直接運行mnist_client.py會出現找不到「tensorflow_serving」的問題,需要手動安裝,

pip install tensorflow-serving-api

資料參考

TF Serving官方文檔:<https://www.tensorflow.org/serving/>

END








機器學習算法工程師

                            一個用心的公眾號

長按,識別,加關注

進群,學習,得幫助

你的關注,我們的熱度,

我們一定給你學習最大的幫助

相關焦點

  • tensorflow(6)利用tensorflow/serving實現模型部署及預測
    在文章tensorflow(5)將ckpt轉化為pb文件並利用tensorflow/serving實現模型部署及預測中,筆者以一個簡單的例子,來介紹如何在tensorflow中將ckpt轉化為pb文件,並利用tensorflow/serving來實現模型部署及預測。本文將會介紹如何使用tensorflow/serving來實現單模型部署、多模型部署、模型版本控制以及模型預測。
  • tensorflow(7)利用tensorflow/serving實現BERT模型部署
    本文將會詳細介紹如何使用tensorflow/serving來實現BERT模型的部署及預測。  我們以Github上的bertNER為例,該項目使用BERT+Bi-LSTM+CRF結構實現中文序列標註,對BERT進行微調,並且提供了模型訓練、模型預測的辦法。
  • tensorflow(8)將h5文件轉化為pb文件並利用tensorflow/serving實現模型部署
    在文章Keras入門(七)使用Flask+Keras-bert構建模型預測服務,我們也介紹了如何使用Flask和example.h5文件來實現模型預測的HTTP服務。  本文將會介紹如何將h5文件轉化為pb文件並利用tensorflow/serving實現模型部署。
  • TensorFlow 2.0 部署:TensorFlow Serving
    使用以下命令即可:tensorflow_model_server \ --rest_api_port=埠號(如8501) \ --model_name=模型名 \ --model_base_path="SavedModel格式模型的文件夾絕對地址(不含版本號)"註解TensorFlow
  • 國外大神在Kubernetes上使用Istio部署TensorFlow模型
    version: v1    spec:      containers:      - name: tensorflow-serving        image: tensorflow/serving:latest        command:        - tensorflow_model_server
  • Tensorflow 入門:Tensor
    通過最後一句代碼可以看到:tensorflow 2.0 中的計算圖默認是立即執行的(Eagerly Execution)。 Tensor 持有標量值Tensor 可以持有標量:tensor 的 dtype 屬性給出了這個 tensor 的數據類型。這裡 tensorflow 推斷出該 tensor 的數據類型是 int32。
  • 教程 | 從零開始:TensorFlow機器學習模型快速部署指南
    GitHub 地址:https://github.com/hiveml/simple-ml-serving其中包含的條目有:檢查 TensorFlow 安裝:https://github.com/hiveml/simple-ml-serving/blob/master/test/test_tensorflow.sh利用 stdin 運行在線分類
  • TensorFlow筆記:模型保存、加載和Fine-tune
    其中inputs和outputs分別用來獲取輸入輸出向量的信息,在部署服務後來的數據會餵到inputs中,服務吐的結果會以outputs的形式返回;而method_name如果用來部署模型的話需要設置為"tensorflow/serving/predict", "tensorflow/serving/classify", "tensorflow/serving
  • 社區分享 | Spark 玩轉 TensorFlow 2.0
    import tensorflow as tffrom tensorflow.keras import models,layers,optimizers## 樣本數量n = 800## 生成測試用數據集X = tf.random.uniform([n,2],minval=-10,maxval=10)w0 = tf.constant
  • TensorFlow框架裡的各種模型們
    saved_model/"def freeze_graph_solution():  x = tf.placeholder(tf.float32, shape=[None, 224, 224, 3], name='input')    # output是模型的輸出 output = network(x) #設置輸出類型以及輸出的接口名字    flow
  • TensorFlow 安裝手冊 — 使用 pip 安裝 TensorFlow
    Python 2.7 GPU supporthttps://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-1.11.0-cp27-none-linux_x86_64.whlPython 3.4 CPU-onlyhttps://storage.googleapis.com/tensorflow
  • Tensorflow Object Detection API 終於支持tensorflow1.x與tensorflow2.x了
    基於tensorflow框架構建的快速對象檢測模型構建、訓練、部署框架,是針對計算機視覺領域對象檢測任務的深度學習框架。之前tensorflow2.x一直不支持該框架,最近Tensorflow Object Detection API框架最近更新了,同時支持tensorflow1.x與tensorflow2.x。
  • 如何使用TensorFlow Hub和代碼示例
    https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/slim TensorFlow現在已經提出了一個更好的框架,稱為TensorFlow Hub,它非常易於使用且組織良好。
  • TensorFlow讀寫數據
    一、入門對數據集的數據進行讀和寫首先,我們來體驗一下怎麼造一個TFRecord文件,怎麼從TFRecord文件中讀取數據,遍歷(消費)這些數據。1.2 讀取TFRecord文件demo代碼如下:import tensorflow as tfdef read_tensorflow_tfrecord_files():        def _parse_function(single_sample):        features = {
  • TensorFlow 1.9 新增 tf.keras 官方入門教程(Keras與TF的深度集成)
    好消息是Keras的許多核心功能已經融入了原生的TensorFlow(tf.keras),TensorFlow 1.9新增tf.keras官方入門文檔,介紹了tf.keras的使用。這幾天打開TensorFlow的官方教程頁(https://www.tensorflow.org/tutorials/),會發現教程頁中給出的DEMO變成了基於tf.keras的教程。
  • C# 編寫 TensorFlow 人工智慧應用
    TensorFlowSharp入門使用C#編寫TensorFlow人工智慧應用學習。示例Python代碼:import tensorflow as tfimport numpy as np# Create 100 phony x, y data points in NumPy, y = x * 0.1 + 0.3x_data = np.random.rand(100).astype(np.float32)
  • Tensorflow如何導出與使用預測圖
    as f:            f.write(output_graph_def.SerializeToString())        print("%d ops in the final graph." % len(output_graph_def.node))    return output_graph_def這段代碼我也是借鑑tensorflow
  • 將您的代碼從 TensorFlow 1 遷移到 TensorFlow 2(二)
    INFO:tensorflow:Evaluation [1/5]INFO:tensorflow:Evaluation [1/5]INFO:tensorflow:Evaluation [2/5]INFO:tensorflow:Evaluation [2/5]INFO:tensorflow:Evaluation [3/5]
  • 教程 | Tensorflow keras 極簡神經網絡構建與使用
    發布於2015年,是一套高級API框架,其默認的backend是tensorflow,但是可以支持CNTK、Theano、MXNet作為backend運行。其特點是語法簡單,容易上手,提供了大量的實驗數據接口與預訓練網絡接口,最初是谷歌的一位工程師開發的,非常適合快速開發。
  • OpenCV+TensorFlow圖片手寫數字識別(附源碼)
    初次接觸TensorFlow,而手寫數字訓練識別是其最基本的入門教程,網上關於訓練的教程很多,但是模型的測試大多都是官方提供的一些素材,能不能自己隨便寫一串數字讓機器識別出來呢