本篇文章為大家展示了如何理解Kubeflow,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。
創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括萬安網(wǎng)站建設(shè)、萬安網(wǎng)站制作、萬安網(wǎng)頁制作以及萬安網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,萬安網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到萬安省份的部分城市,未來相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
提起機(jī)器學(xué)習(xí),尤其是深度學(xué)習(xí),大家可能會(huì)對諸如Tensorflow,Pytorch,Caffee的工具耳熟能詳。但其實(shí)在實(shí)際的機(jī)器學(xué)習(xí)的生命周期中,訓(xùn)練模型(上述工具主要解決的問題)只是整個(gè)機(jī)器學(xué)習(xí)生命周期的很小一部分。
數(shù)據(jù)如何準(zhǔn)備?模型訓(xùn)練好了如何部署?如何上云?如何上規(guī)模Scale?等等挑戰(zhàn)隨之而來。隨著機(jī)器學(xué)習(xí)的廣泛應(yīng)用,許多工具響應(yīng)而生,以解決模型部署的問題。例如:
Oracle 的 graphpipe
Databricks 的 mlflow
Google的 kubeflow
我們今天就來看一看Google推出的Kubeflow。Kubeflow,顧名思義,是Kubernetes + Tensorflow,是Google為了支持自家的Tensorflow的部署而開發(fā)出的開源平臺(tái),當(dāng)然它同時(shí)也支持Pytorch和基于Python的SKlearn等其它機(jī)器學(xué)習(xí)的引擎。與其它的產(chǎn)品相比較,因?yàn)槭腔趶?qiáng)大的Kubernetes之上構(gòu)建,Kubeflow的未來和生態(tài)系統(tǒng)更值得看好。
Kukeflow主要提供在生產(chǎn)系統(tǒng)中簡單的大規(guī)模部署機(jī)器學(xué)習(xí)的模型的功能,利用Kubernetes,它可以做到:
簡單,可重復(fù),可移植的部署
利用微服務(wù)提供松耦合的部署和管理
按需擴(kuò)大規(guī)模
Kubeflow是基于K8S的機(jī)器學(xué)習(xí)工具集,它提供一系列的腳本和配置,來管理K8S的組件。Kubeflow基于K8s的微服務(wù)架構(gòu),其核心組件包括:
Jupyterhub 多租戶Nootbook服務(wù)
Tensorflow/Pytorch/MPI/MXnet/Chainer 主要的機(jī)器學(xué)習(xí)引擎
Seldon 提供在K8s上對于機(jī)器學(xué)習(xí)模型的部署
Argo 基于K8s的工作流引擎
Ambassador API Gateway
Istio 提供微服務(wù)的管理,Telemetry收集
Ksonnet K8s部署工具
基于K8s,擴(kuò)展其它能力非常方便,Kubeflow提供的其它擴(kuò)展包括:
Pachyderm 基于容器和K8s的數(shù)據(jù)流水線 (git for data)
Weaveworks flux 基于git的配置管理
... ...
我們可以看出,基于K8s,Kubeflow利用已有的生態(tài)系統(tǒng)來構(gòu)微服務(wù),可以說充分體現(xiàn)了微服務(wù)的高度擴(kuò)展性。
我們下面就來看看Kubeflow是如何整合了這些組件,來提供機(jī)器學(xué)習(xí)模型部署的功能的。
Jupyter Notebook是深受數(shù)據(jù)科學(xué)家喜愛的開發(fā)工具,它提供出色的交互和實(shí)時(shí)反饋。JupyterHub提供一個(gè)使用Juypter Notebook的多用戶使用環(huán)境,它包含以下組件:
多用戶Hub
可配置的HTTP代理
多個(gè)但用戶Notebook server
運(yùn)行以下的命令通過port-forward訪問jyputer hub
kubectl port-forward tf-hub-0 8000:8000 -n <ns>
第一次訪問,可以創(chuàng)建一個(gè)notebook的實(shí)例。創(chuàng)建的實(shí)例可以選擇不同的鏡像,可以實(shí)現(xiàn)對GPU的支持。同時(shí)需要選擇配置資源的參數(shù)。
創(chuàng)建好的jupyterlab (JupyterLab是新一代的Juypter Notebook)的界面如下:
不過我還是比較習(xí)慣傳統(tǒng)的notebook界面。Lab的優(yōu)點(diǎn)是可以開Console,這個(gè)不錯(cuò)。(Lab也支持打開傳統(tǒng)的notebook界面)
Kubeflow在notebook鏡像中集成了Tensorboard,可以方便的對tensflow的程序進(jìn)行可視化和調(diào)試。
在jyputerlab的Console中,輸入下面的命令開啟Tensorboard:
tensorboard --logdir <logdir>
$ tensorboard --logdir /tmp/logs 2018-09-15 20:30:21.186275: I tensorflow/core/platform/cpu_feature_guard.cc:140] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA W0915 20:30:21.204606 Reloader tf_logging.py:121] Found more than one graph event per run, or there was a metagraph containing a graph_def, as well as one or more graph events. Overwriting the graph with the newest event. W0915 20:30:21.204929 Reloader tf_logging.py:121] Found more than one metagraph event per run. Overwriting the metagraph with the newest event. W0915 20:30:21.205569 Reloader tf_logging.py:121] Found more than one graph event per run, or there was a metagraph containing a graph_def, as well as one or more graph events. Overwriting the graph with the newest event. TensorBoard 1.8.0 at http://jupyter-admin:6006 (Press CTRL+C to quit)
訪問tensorboard也需要port-forward,這里user是創(chuàng)建notebook的用戶名,kubeflow為為一個(gè)實(shí)例創(chuàng)建一個(gè)Pod。缺省的tensorboard的端口是6006。
kubectl port-forward jupyter-<user> 6006:6006 -n <ns>
為了支持在Kubernete中進(jìn)行分布式的Tensorflow的訓(xùn)練,Kubeflow開發(fā)了K8s的CDR,TFJob (tf-operater)。
如上圖所示,分布式的Tensorflow支持0到多個(gè)以下的進(jìn)程:
Chief 負(fù)責(zé)協(xié)調(diào)訓(xùn)練任務(wù)
Ps Parameter servers,參數(shù)服務(wù)器,為模型提供分布式的數(shù)據(jù)存儲(chǔ)
Worker 負(fù)責(zé)實(shí)際訓(xùn)練模型的任務(wù). 在某些情況下 worker 0 可以充當(dāng)Chief的責(zé)任.
Evaluator負(fù)責(zé)在訓(xùn)練過程中進(jìn)行性能評(píng)估
下面的yaml配置是Kubeflow提供的一個(gè)CNN Benchmarks的例子。
--- apiVersion: kubeflow.org/v1alpha2 kind: TFJob metadata: labels: ksonnet.io/component: mycnnjob name: mycnnjob namespace: kubeflow spec: tfReplicaSpecs: Ps: template: spec: containers: - args: - python - tf_cnn_benchmarks.py - --batch_size=32 - --model=resnet50 - --variable_update=parameter_server - --flush_stdout=true - --num_gpus=1 - --local_parameter_device=cpu - --device=cpu - --data_format=NHWC image: gcr.io/kubeflow/tf-benchmarks-cpu:v20171202-bdab599-dirty-284af3 name: tensorflow workingDir: /opt/tf-benchmarks/scripts/tf_cnn_benchmarks restartPolicy: OnFailure tfReplicaType: PS Worker: replicas: 1 template: spec: containers: - args: - python - tf_cnn_benchmarks.py - --batch_size=32 - --model=resnet50 - --variable_update=parameter_server - --flush_stdout=true - --num_gpus=1 - --local_parameter_device=cpu - --device=cpu - --data_format=NHWC image: gcr.io/kubeflow/tf-benchmarks-cpu:v20171202-bdab599-dirty-284af3 name: tensorflow workingDir: /opt/tf-benchmarks/scripts/tf_cnn_benchmarks restartPolicy: OnFailure
在Kubeflow中運(yùn)行這個(gè)例子,會(huì)創(chuàng)建一個(gè)TFjob。可以使用Kubectl來管理,監(jiān)控這個(gè)Job的運(yùn)行。
# 監(jiān)控當(dāng)前狀態(tài) kubectl get -o yaml tfjobs <jobname> -n <ns> # 查看事件 kubectl describe tfjobs <jobname> -n <ns> # 查看運(yùn)行日志 kubectl logs mycnnjob-[ps|worker]-0 -n <ns>
Serving就是指當(dāng)模型訓(xùn)練好了以后,提供一個(gè)穩(wěn)定的接口,供用戶調(diào)用,來應(yīng)用該模型。
基于Tensorflow的Serving功能,Kubeflow提供一個(gè)Tensorflow模型服務(wù)器(model server)的Ksonnet模塊來提供模型服務(wù)的功能。
模型部署好了之后,通過API Gateway暴露的endpoint來訪問和使用模型。
http://<ambassadorEndpoint>/seldon/<deploymentName>/api/v0.1/predictions
機(jī)器學(xué)習(xí)同樣可以抽象為一個(gè)或者多個(gè)工作流。Kubeflow繼承了Argo來作為其機(jī)器學(xué)習(xí)的工作流引擎。
可以通過Kubectl proxy來訪問Kubeflow中的Argo UI。 http://localhost:8001/api/v1/namespaces/kubeflow/services/argo-ui/proxy/workflows
現(xiàn)階段,并沒有實(shí)際的Argo工作流來運(yùn)行機(jī)器學(xué)習(xí)的例子。但是Kubeflow在使用Argo來做自己的CICD系統(tǒng)。
Pychyderm是容器化的數(shù)據(jù)池,提供像git一樣的數(shù)據(jù)版本系統(tǒng)管理,并提供一個(gè)數(shù)據(jù)流水線,來構(gòu)建你的數(shù)據(jù)科學(xué)項(xiàng)目。
Kubeflow利用Google自家的兩大利器Kubernete和Tensorflow,強(qiáng)強(qiáng)聯(lián)手,來提供一個(gè)數(shù)據(jù)科學(xué)的工具箱和部署平臺(tái)。我們可以看到他有很多優(yōu)點(diǎn):
云優(yōu)化 - 基于K8s,可以說,所有功能都很容易的在云上擴(kuò)展。諸如多租戶功能,動(dòng)態(tài)擴(kuò)展,對AWS/GCP的支持等等
利用微服務(wù)架構(gòu),擴(kuò)展性強(qiáng),基于容器,加入心得組件非常容易
出色的DevOps和CICD支持,使用Ksonnet/argo,部署和管理組件和CICD都變得非常輕松
多核心支持,除了我們本文提到的深度學(xué)習(xí)引擎,Kubeflow很容易擴(kuò)展新的引擎,例如Caffe2正在開發(fā)中。
GPU支持
同時(shí)我們也可以看到Kubeflow的一些問題:
組件比較多,缺乏協(xié)調(diào),更像是一推工具集合。希望能有一個(gè)整合流暢的工作流,能統(tǒng)一各個(gè)步驟。
文檔還需改善
當(dāng)然,kubeflow的當(dāng)前版本是0.2.5,我相信,未來Kubeflow會(huì)有很好的發(fā)展。
上述內(nèi)容就是如何理解Kubeflow,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
網(wǎng)頁名稱:如何理解Kubeflow
本文來源:http://aaarwkj.com/article8/igdeip.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、手機(jī)網(wǎng)站建設(shè)、面包屑導(dǎo)航、網(wǎng)頁設(shè)計(jì)公司、App開發(fā)、域名注冊
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)