您好,登錄后才能下訂單哦!
本篇文章為大家展示了如何理解Kubeflow,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。
提起機(jī)器學(xué)習(xí),尤其是深度學(xué)習(xí),大家可能會對諸如Tensorflow,Pytorch,Caffee的工具耳熟能詳。但其實在實際的機(jī)器學(xué)習(xí)的生命周期中,訓(xùn)練模型(上述工具主要解決的問題)只是整個機(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ā)出的開源平臺,當(dāng)然它同時也支持Pytorch和基于Python的SKlearn等其它機(jī)器學(xué)習(xí)的引擎。與其它的產(chǎ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ā)工具,它提供出色的交互和實時反饋。JupyterHub提供一個使用Juypter Notebook的多用戶使用環(huán)境,它包含以下組件:
多用戶Hub
可配置的HTTP代理
多個但用戶Notebook server
運行以下的命令通過port-forward訪問jyputer hub
kubectl port-forward tf-hub-0 8000:8000 -n <ns>
第一次訪問,可以創(chuàng)建一個notebook的實例。創(chuàng)建的實例可以選擇不同的鏡像,可以實現(xiàn)對GPU的支持。同時需要選擇配置資源的參數(shù)。
創(chuàng)建好的jupyterlab (JupyterLab是新一代的Juypter Notebook)的界面如下:
不過我還是比較習(xí)慣傳統(tǒng)的notebook界面。Lab的優(yōu)點是可以開Console,這個不錯。(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為為一個實例創(chuàng)建一個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到多個以下的進(jìn)程:
Chief 負(fù)責(zé)協(xié)調(diào)訓(xùn)練任務(wù)
Ps Parameter servers,參數(shù)服務(wù)器,為模型提供分布式的數(shù)據(jù)存儲
Worker 負(fù)責(zé)實際訓(xùn)練模型的任務(wù). 在某些情況下 worker 0 可以充當(dāng)Chief的責(zé)任.
Evaluator 負(fù)責(zé)在訓(xùn)練過程中進(jìn)行性能評估
下面的yaml配置是Kubeflow提供的一個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中運行這個例子,會創(chuàng)建一個TFjob??梢允褂肒ubectl來管理,監(jiān)控這個Job的運行。
# 監(jiān)控當(dāng)前狀態(tài) kubectl get -o yaml tfjobs <jobname> -n <ns> # 查看事件 kubectl describe tfjobs <jobname> -n <ns> # 查看運行日志 kubectl logs mycnnjob-[ps|worker]-0 -n <ns>
Serving就是指當(dāng)模型訓(xùn)練好了以后,提供一個穩(wěn)定的接口,供用戶調(diào)用,來應(yīng)用該模型。
基于Tensorflow的Serving功能,Kubeflow提供一個Tensorflow模型服務(wù)器(model server)的Ksonnet模塊來提供模型服務(wù)的功能。
模型部署好了之后,通過API Gateway暴露的endpoint來訪問和使用模型。
http://<ambassadorEndpoint>/seldon/<deploymentName>/api/v0.1/predictions
機(jī)器學(xué)習(xí)同樣可以抽象為一個或者多個工作流。Kubeflow繼承了Argo來作為其機(jī)器學(xué)習(xí)的工作流引擎。
可以通過Kubectl proxy來訪問Kubeflow中的Argo UI。 http://localhost:8001/api/v1/namespaces/kubeflow/services/argo-ui/proxy/workflows
現(xiàn)階段,并沒有實際的Argo工作流來運行機(jī)器學(xué)習(xí)的例子。但是Kubeflow在使用Argo來做自己的CICD系統(tǒng)。
Pychyderm是容器化的數(shù)據(jù)池,提供像git一樣的數(shù)據(jù)版本系統(tǒng)管理,并提供一個數(shù)據(jù)流水線,來構(gòu)建你的數(shù)據(jù)科學(xué)項目。
Kubeflow利用Google自家的兩大利器Kubernete和Tensorflow,強(qiáng)強(qiáng)聯(lián)手,來提供一個數(shù)據(jù)科學(xué)的工具箱和部署平臺。我們可以看到他有很多優(yōu)點:
云優(yōu)化 - 基于K8s,可以說,所有功能都很容易的在云上擴(kuò)展。諸如多租戶功能,動態(tài)擴(kuò)展,對AWS/GCP的支持等等
利用微服務(wù)架構(gòu),擴(kuò)展性強(qiáng),基于容器,加入心得組件非常容易
出色的DevOps和CICD支持,使用Ksonnet/argo,部署和管理組件和CICD都變得非常輕松
多核心支持,除了我們本文提到的深度學(xué)習(xí)引擎,Kubeflow很容易擴(kuò)展新的引擎,例如Caffe2正在開發(fā)中。
GPU支持
同時我們也可以看到Kubeflow的一些問題:
組件比較多,缺乏協(xié)調(diào),更像是一推工具集合。希望能有一個整合流暢的工作流,能統(tǒng)一各個步驟。
文檔還需改善
當(dāng)然,kubeflow的當(dāng)前版本是0.2.5,我相信,未來Kubeflow會有很好的發(fā)展。
上述內(nèi)容就是如何理解Kubeflow,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。