溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何理解Kubeflow

發(fā)布時間:2021-10-12 10:34:40 來源:億速云 閱讀:219 作者:柒染 欄目:云計算

本篇文章為大家展示了如何理解Kubeflow,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

提起機(jī)器學(xué)習(xí),尤其是深度學(xué)習(xí),大家可能會對諸如Tensorflow,Pytorch,Caffee的工具耳熟能詳。但其實在實際的機(jī)器學(xué)習(xí)的生命周期中,訓(xùn)練模型(上述工具主要解決的問題)只是整個機(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ā)出的開源平臺,當(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的配置管理

  • ... ...

如何理解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ā)工具,它提供出色的交互和實時反饋。JupyterHub提供一個使用Juypter Notebook的多用戶使用環(huán)境,它包含以下組件:

  • 多用戶Hub

  • 可配置的HTTP代理

  • 多個但用戶Notebook server

如何理解Kubeflow

運行以下的命令通過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)的界面如下:

如何理解Kubeflow

不過我還是比較習(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>

如何理解Kubeflow

Tensorflow 訓(xùn)練

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

如何理解Kubeflow

如上圖所示,分布式的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>

Tensoflow 服務(wù)(Serving)

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

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

如何理解Kubeflow

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

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

如何理解Kubeflow

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

如何理解Kubeflow

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è)資訊頻道。

向AI問一下細(xì)節(jié)

免責(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)容。

AI