如何理解Kubeflow

本篇文章為大家展示了如何理解Kubeflow,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過這篇文章的詳細(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)勢(shì)、行業(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ì)對(duì)諸如Tensorflow,Pytorch,Caffee的工具耳熟能詳。但其實(shí)在實(shí)際的機(jī)器學(xué)習(xí)的生命周期中,訓(xùn)練模型(上述工具主要解決的問題)只是整個(gè)機(jī)器學(xué)習(xí)生命周期的很小一部分。

如何理解Kubeflow

數(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)中簡(jiǎn)單的大規(guī)模部署機(jī)器學(xué)習(xí)的模型的功能,利用Kubernetes,它可以做到:

  • 簡(jiǎn)單,可重復(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上對(duì)于機(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的配置管理

  • ... ...

如何理解Kubeflow

我們可以看出,基于K8s,Kubeflow利用已有的生態(tài)系統(tǒng)來構(gòu)微服務(wù),可以說充分體現(xiàn)了微服務(wù)的高度擴(kuò)展性。

我們下面就來看看Kubeflow是如何整合了這些組件,來提供機(jī)器學(xué)習(xí)模型部署的功能的。

JupyterHub

Jupyter Notebook是深受數(shù)據(jù)科學(xué)家喜愛的開發(fā)工具,它提供出色的交互和實(shí)時(shí)反饋。JupyterHub提供一個(gè)使用Juypter Notebook的多用戶使用環(huán)境,它包含以下組件:

  • 多用戶Hub

  • 可配置的HTTP代理

  • 多個(gè)但用戶Notebook server

如何理解Kubeflow

運(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)對(duì)GPU的支持。同時(shí)需要選擇配置資源的參數(shù)。

創(chuàng)建好的jupyterlab (JupyterLab是新一代的Juypter Notebook)的界面如下:

如何理解Kubeflow

不過我還是比較習(xí)慣傳統(tǒng)的notebook界面。Lab的優(yōu)點(diǎn)是可以開Console,這個(gè)不錯(cuò)。(Lab也支持打開傳統(tǒng)的notebook界面)

Kubeflow在notebook鏡像中集成了Tensorboard,可以方便的對(duì)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>

如何理解Kubeflow

Tensorflow 訓(xùn)練

為了支持在Kubernete中進(jìn)行分布式的Tensorflow的訓(xùn)練,Kubeflow開發(fā)了K8s的CDR,TFJob (tf-operater)。

如何理解Kubeflow

如上圖所示,分布式的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??梢允褂肒ubectl來管理,監(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>

Tensoflow 服務(wù)(Serving)

Serving就是指當(dāng)模型訓(xùn)練好了以后,提供一個(gè)穩(wěn)定的接口,供用戶調(diào)用,來應(yīng)用該模型。

基于Tensorflow的Serving功能,Kubeflow提供一個(gè)Tensorflow模型服務(wù)器(model server)的Ksonnet模塊來提供模型服務(wù)的功能。

如何理解Kubeflow

模型部署好了之后,通過API Gateway暴露的endpoint來訪問和使用模型。

http://<ambassadorEndpoint>/seldon/<deploymentName>/api/v0.1/predictions

如何理解Kubeflow

機(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)。

如何理解Kubeflow

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ò)展,對(duì)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://bm7419.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ā)、域名注冊(cè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)