摘要:大會以機器學習資料中心和云端安全為主要議題,為未來發展做戰略規劃。在年,谷歌開發了一個內部深度學習基礎設施叫做,這個設施允許谷歌人創建更大的神經網絡和擴容實訓成千上萬個核心。
導言
Google近日3月23-24日在美國舊金山舉辦首次谷歌云平臺(Google Cloud Platform) GCP NEXT大會,參會人數超過2000人。GCP NEXT大會以機器學習、資料中心和云端安全為主要議題,為未來GCP發展做戰略規劃。
其中,關于機器學習,谷歌發布了云端機器學習平臺(Cloud Machine Learning),為開發者和企業用戶提供一整套包含視聽及翻譯的應用API,例如Cloud Translate API和Cloud Vision API。除了machine learning,谷歌去年就推出了機器學習開放原始碼平臺TensorFlow,鼓勵開發者利用該平臺來開發創新應用服務。現在TensorFlow和Kubernetes相結合,將建立更為強大的機器學習模型,擴充功能,開啟人工智能機器學習在谷歌云端的新紀元。
在2011年,谷歌開發了一個內部深度學習基礎設施叫做“DistBelief”,這個設施允許谷歌人創建更大的神經網絡和擴容實訓成千上萬個核心。最近幾年,谷歌引進了TensorFlow,也就是它的二代機器學習系統。TensorFlow的特點是通用,靈活的,便攜的,易于使用,最重要的是,它是使用開源社區開發的。
將機器學習引入到你的產品的過程包括創建和訓練數據集模型。
引入機器學習到你的產品這個過程涉及到創建和訓練模型在你的數據集上,然后push模型到生產過程來提供請求。在這篇博客中,我們將會展示給你們如何通過TensorFlow使用Kubernetes,TensorFlow是一個高性能,滿足應用程序的擴展需求,為機器學習模型提供開源服務系統。
現在讓我們以鏡像作為例子。假設你的應用程序需要能夠在一系列類別中正確的識別一個鏡像。比如,給出下面這個可愛的小狗圖,你的系統應該將它歸類到獵犬這一類。
你可以通過TensorFlow使用從ImageNet數據集上面trained的Inception-v3模型,來實現圖像分類。這個數據集包含圖片和標簽,允許TensorFlow學習者train一個模型,該模型可以被用在生產過程中。
一旦模型被訓練和輸出,TensorFlow服務使用該模型來進行推理——基于客戶提供的新數據的預言。在我們的例子中,客戶在gRPC請求提交鏡像分類,gRPC是一個來自谷歌的高性能,開源RPC的框架。
推理可以是十分資源密集型的。我們的服務器執行以下TensorFlow來處理它接收到的每一個分類的要求。Inception-v3模型有超過2700萬個參數,每次運算推理(inference)運行57億浮點。
幸運地,這就是Kubernetes可以幫助到我們的地方。Kubernetes分布推斷請求處理跨集群使用外部負載均衡器。集群中的每個pod都包含一個TensorFlow服務于Docker鏡像,還有TensorFlow服務為基礎的gRPC服務器,以及一個trained的Inception-v3模型。這個模型以文件集描述TensorFlow圖的形式呈現,模型權重,資產等等。既然所有東西都是整齊的打包好放到一起,那么我們就可以使用Kubernetes Replication Controller動態的擴展復制pods,以此來跟上服務要求。
為了幫助你自己試一試,我們寫了一個tutorial教程,它展示了如何創建TensorFlow服務Docker容器來給Inception-v3鏡像分類模型提供服務,安裝Kubernetes集群,并且應對該集群運行分類請求。我們希望這個教程能夠讓你更加容易地去整合機器學習到你自己的程序上,以及用Kubernetes擴大規模。學習更多關于TensorFlow,請看下文補充:
用TensorFlow Serving和Kubernetes給Inception模型提供服務這個tutorial展示了如何使用TensorFlow Serving組件在容器里面的運用,以此來服務TensorFlow模型,還展示了如何用Kubernetes配置服務中的集群。
為了解更多關于TensorFlow服務的信息,我們推薦《TensorFlow服務初級教程》和《TensorFlow服務教程》。
為了解更多關于TensorFlow Inception模型,我們推薦《Inception in TensorFlow》。
Part0 展示的是怎樣為配置創建一個TensorFlow服務Docker
Part1 展示的是如何在本地容器運行鏡像
Part2 展示了如何在kubernetes上配置
Part0: 創建一個Docker鏡像請參考《通過Docker使用TensorFlow服務》來了解創建過程中的更多細節。
運行容器
我們使用Dockerfile.devel來創建一個基底鏡像$USER/tensorflow-serving-devel,然后使用創建好的鏡像來啟動本地容器。
$ docker build -t $USER/tensorflow-serving-devel -f tensorflow_serving/tools/docker/Dockerfile.devel .$ docker run --name=inception_container -it $USER/tensorflow-serving-devel
在容器中克隆,配置以及創建TensorFlow服務
在運行的容器中,我們克隆,配置以及創建TensorFlow服務。然后測試運行 inception_inference(網址:點擊)
root@c97d8e820ced:/# git clone --recurse-submodules https://github.com/tensorflow/servingroot@c97d8e820ced:/# cd serving/tensorflowroot@c97d8e820ced:/serving/tensorflow# ./configureroot@c97d8e820ced:/serving# cd ..root@c97d8e820ced:/serving# bazel build -c opt tensorflow_serving/...root@c97d8e820ced:/serving# ls AUTHORS LICENSE RELEASE.md bazel-bin bazel-out bazel-testlogs tensorflow zlib.BUILD CONTRIBUTING.md README.md WORKSPACE bazel-genfiles bazel-serving grpc tensorflow_servingroot@c97d8e820ced:/serving# bazel-bin/tensorflow_serving/example/inception_inference E tensorflow_serving/example/inception_inference.cc:362] Usage: inception_inference --port=9000 /path/to/exports
容器中的輸出Inception
在容器中,我們運行inception_export.py(點擊)使用發布的Inception model training checkpoint(點擊)來出口inception模型。我們使用訓練有素的現成的動態檢查點來恢復直接推理,并且直接輸出它。
root@c97d8e820ced:/serving# curl -O http://download.tensorflow.org/models/image/imagenet/inception-v3-2016-03-01.tar.gzroot@c97d8e820ced:/serving# tar xzf inception-v3-2016-03-01.tar.gzroot@c97d8e820ced:/serving# ls inception-v3 README.txt checkpoint model.ckpt-157585root@c97d8e820ced:/serving# bazel-bin/tensorflow_serving/example/inception_export --checkpoint_dir=inception-v3 --export_dir=inception-export Successfully loaded model from inception-v3/model.ckpt-157585 at step=157585. Successfully exported model to inception-exportroot@c97d8e820ced:/serving# ls inception-export 00157585root@c97d8e820ced:/serving# [Ctrl-p] + [Ctrl-q]
提交鏡像到配置
注意我們從上述指令的容器中分離出來而不是終止它,因為我們想要為Kubernetes配置提交所有的修改到新的鏡像 $USER/inception_serving。
$ docker commit inception_container $USER/inception_serving$ docker stop inception_containerPart1:在本地Docker容器運行
讓我們在本地用創建的鏡像測試一下服務流程。
$ docker run -it $USER/inception_serving
開啟服務器
在容器中運行gRPC服務器
root@f07eec53fd95:/# cd servingroot@f07eec53fd95:/serving# bazel-bin/tensorflow_serving/example/inception_inference --port=9000 inception-export &> inception_log &[1] 45
查詢服務器
用inception_client.py.(點擊)。客戶端通過gRPC用一個命令行參數發送一個指定的鏡像到服務器。然后查找ImageNet同義詞集合和元數據文件,并且返回到人類可讀的分類。
root@f07eec53fd95:/serving# bazel-bin/tensorflow_serving/example/inception_client --server=localhost:9000 --image=/path/to/my_cat_image.jpg 8.976576 : tabby, tabby cat 8.725506 : Egyptian cat 6.883981 : tiger cat 2.659257 : lynx, catamount 2.028728 : window screenroot@f07eec53fd95:/serving# exit
它運行起來了!服務器成功地分類了你的cat鏡像!
Part2:在kubernetes上配置在這一節里,我們使用Part0中創建的容器鏡像來配置一個服務集群,用的是Google Cloud Platform中的Kubernetes。
Cloud項目登錄
這里我們假設你已經創建并且已經登陸了名“ tensorflow-serving”gcloud項目。
$ gcloud auth login --project tensorflow-serving
創建一個容器集群
首先,我們為服務配置創建一個Google Container Engine集群。
$ gcloud container clusters create inception-serving-cluster --num-nodes 5 Creating cluster inception-serving-cluster...done. Created [https://container.googleapis.com/v1/projects/tensorflow-serving/zones/us-central1-f/clusters/inception-serving-cluster]. kubeconfig entry generated for inception-serving-cluster. NAME ZONE MASTER_VERSION MASTER_IP MACHINE_TYPE NODE_VERSION NUM_NODES STATUS inception-serving-cluster us-central1-f 1.1.8 104.197.163.119 n1-standard-1 1.1.8 5 RUNNING
為gcloud容器命令設置默認集群,并且發送集群憑證到kubectl。
$ gcloud config set container/cluster inception-serving-cluster$ gcloud container clusters get-credentials inception-serving-cluster Fetching cluster endpoint and auth data. kubeconfig entry generated for inception-serving-cluster.
上傳Docker鏡像
現在讓我們來把我們的鏡像push到[Google Container Registry](https://cloud.google.com/container-registry/docs/),這樣我們就可以在Google Cloud Platform上面運行了。
首先,我們給$USER/inception_serving 鏡像貼上標簽,用Container Registry格式以及我們的項目名稱,
$ docker tag $USER/inception_serving gcr.io/tensorflow-serving/inception
下面我們push鏡像到Registry,
$ gcloud docker push gcr.io/tensorflow-serving/inception
創建Kubernetes ReplicationController 和服務
配置包括不同的副本inception_inference 被一個kubernetes Replication Controller服務器控制。副本是由Kubernetes以及外部負載均衡起暴露在外部的。
我們使用那個Kubernetes公式inception_k8s.json的例子創建他們。
$ kubectl create -f tensorflow_serving/example/inception_k8s.json replicationcontroller "inception-controller" created service "inception-service" created
來看一下副本控制器和pods:
$ kubectl get rc CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS AGE inception-controller inception-container gcr.io/tensorflow-serving/inception worker=inception-pod 3 20s $ kubectl get pod NAME READY STATUS RESTARTS AGE inception-controller-bbcbc 1/1 Running 0 1m inception-controller-cj6l2 1/1 Running 0 1m inception-controller-t1uep 1/1 Running 0 1m
來看一下服務的狀態:
$ kubectl get svc NAME CLUSTER_IP EXTERNAL_IP PORT(S) SELECTOR AGE inception-service 10.15.242.244 146.148.88.232 9000/TCP worker=inception-pod 3m kubernetes 10.15.240.1443/TCP 1h $ kubectl describe svc inception-service Name: inception-service Namespace: default Labels: Selector: worker=inception-pod Type: LoadBalancer IP: 10.15.242.244 LoadBalancer Ingress: 146.148.88.232 Port: 9000/TCP NodePort: 32006/TCP Endpoints: 10.12.2.4:9000,10.12.4.4:9000,10.12.4.5:9000 Session Affinity: None Events: FirstSeen LastSeen Count From SubobjectPath Reason Message ───────── ──────── ───── ──── ───────────── ────── ─────── 4m 3m 2 {service-controller } CreatingLoadBalancer Creating load balancer 3m 2m 2 {service-controller } CreatedLoadBalancer Created load balancer
任何東西上傳或者運行都需要時間。服務的外部IP地址就在LoadBalancer旁邊被列出來。
查詢模型
我們現在可以從我們的本地主機外部地址查詢服務。
$ bazel-bin/tensorflow_serving/example/inception_client --server=146.148.88.232:9000 --image=/path/to/my_cat_image.jpg 8.976576 : tabby, tabby cat 8.725506 : Egyptian cat 6.883981 : tiger cat 2.659257 : lynx, catamount 2.028728 : window screen
你已經在Kubernetes里成功部署了inception服務。
原文在這里
(如果需要轉載,請聯系我們哦,尊重知識產權人人有責)
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/32444.html
摘要:它使用機器學習來解釋用戶提出的問題,并用相應的知識庫文章來回應。使用一類目前較先進的機器學習算法來識別相關文章,也就是深度學習。接下來介紹一下我們在生產環境中配置模型的一些經驗。 我們如何開始使用TensorFlow ?在Zendesk,我們開發了一系列機器學習產品,比如的自動答案(Automatic Answers)。它使用機器學習來解釋用戶提出的問題,并用相應的知識庫文章來回應。當用戶有...
摘要:解決服務運行環境統一,和部署問題。解決服務上線面臨的一系列治理問題。目前參與的公司主要是,于年月份對外發布,目前處于快速發展階段。服務系統利用的部分功能,來配置應用路由,升級以及彈性伸縮。事件系統用于自動完成事件的綁定與觸發。 導讀 目前以Kubernetes為基礎構建的容器生態逐漸完善,這其中Kubernetes、Istio、Knative三個獨立項目被越來越多的人提及,并且已經開始...
閱讀 3504·2021-10-18 13:30
閱讀 2957·2021-10-09 09:44
閱讀 1973·2019-08-30 11:26
閱讀 2305·2019-08-29 13:17
閱讀 769·2019-08-29 12:17
閱讀 2259·2019-08-26 18:42
閱讀 482·2019-08-26 13:24
閱讀 2964·2019-08-26 11:39