Tensorflow Serving介紹及部署安裝


TensorFlow Serving 是一個用於機器學習模型 serving 的高性能開源庫。它可以將訓練好的機器學習模型部署到線上,使用 gRPC 作為接口接受外部調用。更加讓人眼前一亮的是,它支持模型熱更新與自動模型版本管理。這意味着一旦部署 TensorFlow Serving 后,你再也不需要為線上服務操心,只需要關心你的線下模型訓練。

TensorFlow Serving的典型的流程如下:學習者(Learner,比如TensorFlow)根據輸入數據進行模型訓練。等模型訓練完成、驗證之后,模型會被發布到TensorFlow Serving系統服務器端。客戶端提交請求,由服務端返回預測結果。客戶端和服務端之間的通信采用的是RPC協議。

安裝方式

1)使用Docker安裝

使用TensorFlow服務的最簡單,最直接的方法是通過 Docker鏡像

提示:這也是讓TensorFlow服務支持GPU的最簡單方法

2)使用APT安裝

TensorFlow服務模型服務器二進制文件有兩種變體:

tensorflow-model-server:完全優化的服務器,使用一些特定於平台的編譯器優化,如SSE4和AVX指令。這應該是大多數用戶的首選選項,但可能不適用於某些舊機器。

tensorflow-model-server-universal:使用基本優化編譯,但不包括特定於平台的指令集

apt-get remove tensorflow-model-server

可以使用以下命令升級到tensorflow-model-server的較新版本:

apt-get upgrade tensorflow-model-server

3)從源頭構建

從源代碼構建的推薦方法是使用Docker。TensorFlow服務Docker開發映像封裝了構建自己的TensorFlow服務版本所需的所有依賴項。

安裝過程(在Kubernetes中部署):

一 導出Inception模型:

克隆Tensorflow服務

克隆TensorFlow服務源到本地計算機:

git clone https://github.com/tensorflow/serving
cd serving

清除我們的本地模型目錄,以防我們已經有一個

rm -rf ./models/inception

導出初始模型

在這里,可以采用不同的方式進行模型導出,主要有bazel和pip兩種構建方式,這里以pip為例。

導出Inception模型:

python tensorflow_serving/example/mnist_saved_model.py models/mnist

查看導出模型:

ls models/inception
1

二 上傳Docker鏡像

首先,我們$USER/inception_serving使用Container Registry格式和項目名稱標記鏡像

docker tag $USER/inception_serving /library/inception_serving:v2.0

接下來我們將鏡像推送到docker私有倉庫

docker push /library/inception_serving:v2.0

 

三 創建Kubernetes部署和服務

部署由Kubernetes部署inception_inference控制的3個服務器 副本組成。副本由Kubernetes服務外部暴露 。

我們使用示例Kubernetes config inception_k8s.yaml創建它們 。
inception_k8s.yaml文件如下:

apiVersion: extensions/v1beta1

kind: Deployment

metadata:

  name: inception-deployment

spec:

  replicas: 3

  template:

    metadata:

      labels:

        app: inception-server

    spec:

      containers:

      - name: inception-container

        image: ***/library/inception_serving:v2.0

        ports:

        - containerPort: 8500

---

apiVersion: v1

kind: Service

metadata:

  labels:

    run: inception-service

  name: inception-service

spec:

  ports:

  - port: 8500

    targetPort: 8500

  selector:

    app: inception-server

  type: NodePort

kubectl create -f tensorflow_serving/example/inception_k8s.yaml
安裝完成后輸出:
deployment "inception-deployment" created
service "inception-service" created

要查看部署和pod的狀態,請執行以下操作:

$ kubectl get deployments
NAME                    DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
inception-deployment    3         3         3            3           5s

 $ kubectl get pods

NAME                         READY     STATUS    RESTARTS   AGE
inception-deployment-bbcbc   1/1       Running   0          10s
inception-deployment-cj6l2   1/1       Running   0          10s
inception-deployment-t1uep   1/1       Running   0          10s
要查看服務的狀態:
$ kubectl get services

NAME                    CLUSTER-IP       EXTERNAL-IP       PORT(S)     AGE
inception-service       10.239.240.227   104.155.184.157   8500/TCP    1
一切都可能需要一段時間才能啟動和運行。
$ kubectl describe service inception-service

Name:           inception-service
Namespace:      default
Labels:         run=inception-service
Selector:       run=inception-service
Type:           LoadBalancer
IP:         10.239.240.227
LoadBalancer Ingress:   104.155.184.157
Port:           <unset> 8500/TCP
NodePort:       <unset> 30334/TCP
Endpoints:      <none>
Session Affinity:   None
Events:
  FirstSeen LastSeen    Count   From            SubobjectPath   Type        Reason      Message
  --------- --------    -----   ----            -------------   --------    ------      -------
  1m        1m      1   {service-controller }           Normal      CreatingLoadBalancer    Creating load balancer
  1m        1m      1   {service-controller }           Normal      CreatedLoadBalancer Created load balancer

 

四 查詢模型

我們現在可以從本地主機的外部地址查詢服務。

已成功部署Inception模型作為Kubernetes中的服務!

五 主要問題和注意事項:

安裝的過程中典型的問題如下:

1) K8s安裝中出現的問題:

The connection to the server 192.168.170.132:8080 was refused - did you specify the right host or port?

問題產生的原因主要集中在:

  ① 在該安裝過程中需要翻牆,有些組件由於網絡問題安裝的不完整,導致出現此類錯誤,同時,這樣的問題是最難排查的,已經安裝的組件顯示是正常的,由於安裝的的組件較多,新手一時間難以排查出沒有成功啟動的組件。

  ② 已經成功安裝的組件由於某種操作導致服務關閉,安裝過程中遇到了此類問題,短時間內很難解決,當時haproxy和keepalived沒有完全啟動,執行
  啟動服務: systemctl restart haproxy
  檢查服務狀態:systemctl status haproxy|grep Active
  keepalived操作同上

  ③ 使用的 ~/.kube/config文件不對,需要切換到正確的賬戶后再執行該命令:

2) docker私有倉庫的鏡像上傳和下載的問題:

由於官方組件下載需要翻牆的原因,模型成功導出后,要上傳到自己的私有鏡像庫才能直接在k8s中創建pod並應用,這需要自己的私有鏡像庫。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM