1. 程式人生 > >Tensorflow Serving介紹及部署安裝

Tensorflow Serving介紹及部署安裝

space dock epo move push fault 自動 library ali

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?

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

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

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

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

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

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

Tensorflow Serving介紹及部署安裝