隨着機器學習領域不斷髮展,對於處理機器學習的團隊來講,在1臺機器上訓練1個模型已經有些難覺得繼,而且如今業界的共識是機器學習已經不只僅是簡單的模型訓練。git
在模型訓練以前、過程當中和以後,須要進行許多活動,對於要生成本身的ML模型的團隊來講尤爲如此。下圖經常被引用來講明此類狀況:github
對於許多團隊來講,將機器學習的模型從研究環境應用到生產環境這一過程困難重重,揹負很大的壓力。糟糕的是,市面上處理每類問題的工具都數量驚人,而這些海量工具都有望解決你全部的機器學習難題。docker
可是整個團隊學習新工具一般很耗時,而且將這些工具集成到你當前的工做流程中也並不容易。這時,或許能夠考慮Kubeflow,這是爲須要創建機器學習流水線的團隊而打造的一個機器學習平臺,它包括許多其餘工具,能夠用於服務模型和調整超參數。Kubeflow嘗試作的是將同類最好用的ML工具整合在一塊兒,並將它們集成到一個平臺中。json
來源:https://www.kubeflow.org/docs/started/kubeflow-overview/vim
顧名思義,Kubeflow應該部署在Kubernetes上,既然你是經過Rancher的平臺閱讀到這篇文章,那麼你大機率已經在某個地方部署了Kubernetes集羣。服務器
值得注意的是,Kubeflow中的「flow」並非表示Tensorflow。Kubeflow也可以與PyTorch一塊兒使用,甚至能夠與任何ML框架一塊兒使用(不過支持得最好的框架仍是Tensorflow和PyTorch)。網絡
在本文中,我將向你展現如何儘量簡單地安裝Kubeflow。若是在你的集羣上已經有GPU設置,則過程將更爲簡單。若是還沒有設置,那麼你須要執行一些額外的設置步驟,由於許多機器學習須要運行在NVIDIA GPU上。app
假設你已經安裝了Docker 19.x。框架
在全部帶有GPU的節點上:curl
% distribution=$(. /etc/os-release;echo $ID$VERSION_ID) % curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - % curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list % sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit % sudo apt-get install nvidia-container-runtime
如今,修改Docker守護進程(Daemon)運行時字段:
% sudo vim /etc/docker/daemon.json
粘貼如下內容:
{ "default-runtime": "nvidia", "runtimes": { "nvidia": { "path": "/usr/bin/nvidia-container-runtime", "runtimeArgs": [] } } }
如今重啓Docker守護進程:
% sudo systemctl restart docker
在master節點上,建立NVIDIA設備插件:
% kubectl create -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/1.0.0-beta/nvidia-device-plugin.yml
接下來,正式開始安裝Kubeflow。
注意:在撰寫本文時,Kubeflow的最新版本是1.0。它與Kubernetes 1.14和1.15版本兼容。
在咱們安裝Kubeflow以前,咱們須要設置動態配置。
一種方法是使用Rancher的local-path-provisioner
,其中使用了基於hostPath
的節點持久卷。設置很是簡單:將其指向節點上的路徑並部署YAML文件。缺點是沒法控制volume容量限制。
另外一種方法是使用網絡文件系統(NFS),我將在下文展現具體步驟。
假設你將大部分數據存儲在本地,那麼你須要設置NFS。在這裏,我假設 NFS server位於master節點10.64.1.163
上。
首先,爲NFS安裝依賴項:
% sudo apt install -y nfs-common nfs-kernel-server
而後,建立一個根目錄:
% sudo mkdir /nfsroot
將如下條目添加到/etc/exports
:
/full/path/to/nfsroot 10.64.0.0/16(rw,no_root_squash,no_subtree_check)
請注意,10.64.0.0
是節點的CIDR,而不是Kubernetes Pod CIDR。
接下來,經過如下命令將共享目錄導出爲sudo:
% sudo exportfs -a
最後,要使全部配置生效,請按以下所示從新啓動NFS內核服務器:
% sudo systemctl restart nfs-kernel-server
另外,確保nfs-kernel-server
在服務器(從新)啓動時啓動:
% sudo update-rc.d nfs-kernel-server enable
爲NFS安裝依賴項:
% sudo apt install -y nfs-common
如今,咱們能夠安裝NFS Client Provisioner——而且終於能夠向大家安利我最愛的Rancher功能之一:應用商店!
默認狀況下,Rancher自帶了許多已經通過測試的應用程序。此外,咱們還能夠自行添加整個Helm Chart到應用商店裏。
點擊Apps,而後點擊【Manage Catalogs】
而後選擇【Add Catalog】:
填寫如下值:
點擊【Create】,回到【Apps】頁面。稍微等待一下子,你將看到helm部分有了許多應用程序。你能夠點擊【Refresh】來查看進程:
如今,在搜索框內輸入nfs,而後你將看到2個條目:
其中一個正是咱們要找的:nfs-client-provisioner
。點擊它,而後你將看到:
這是可用於nfs-client-provisioner
的chart的全部選項,你將須要使用它們來填寫如下內容:
填寫完畢後,你能夠點擊【Launch】按鈕。等待一下子,讓Kubernetes下載Docker鏡像,並將一切設置完畢。全部操做都完成後,你將看到如下頁面:
我真的太喜歡應用商店這個功能了,它是我最喜歡的功能之一,由於它的存在,使得在集羣上安裝和監控應用程序變得簡單和方便。
這是Kubeflow的控制工具,與kubectl相似。你能夠從Kubeflow的release頁面下載它。
而後,解壓文件並將二進制文件放入你的$PATH
中。
首先,指定一個文件夾存儲全部的Kubeflow YAML文件。
$ export KFAPP=~/kfapp
下載kfctl
配置文件:
wget https://raw.githubusercontent.com/kubeflow/manifests/v1.0-branch/kfdef/kfctl_k8s_istio.v1.0.2.yaml
請注意:若是你已經安裝了Istio,則須要編輯kfctl_k8s_istio.v1.0.2.yaml
並刪除istio-crds
和istio-install
應用程序條目。
而後,導出CONFIG_URI
:
$ export CONFIG_URI="/path/to/kfctl_k8s_istio.v1.0.2.yaml"
接下來,你須要指定一堆環境變量,這些環境變量將指示Kubeflow配置文件下載到的位置:
export KF_NAME=kubeflow-deployment export BASE_DIR=/opt export KF_DIR=${BASE_DIR}/${KF_NAME}
安裝Kubeflow:
% mkdir -p ${KF_DIR} % cd ${KF_DIR} % kfctl apply -V -f ${CONFIG_URI}
你須要一些時間等待一切都設置完畢。
要訪問UI,咱們須要知道Web UI所在的端口:
% kubectl -n istio-system get svc istio-ingressgateway
返回如下內容:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE istio-ingressgateway NodePort 10.43.197.63 <none> 15020:30585/TCP,**80:31380/TCP**,443:31390/TCP,31400:31400/TCP,15029:32613/TCP,15030:32445/TCP,15031:30765/TCP,15032:32496/TCP,15443:30576/TCP 61m
在本例中,它是80:31380
,這意味着你能夠經過http://localhost:31380
訪問Kubeflow UI:
若是你成功地看到了這個頁面,那麼恭喜你,你已經成功設置Kubeflow🎉
在本文中,咱們首先探討了爲何須要諸如Kubeflow這類工具——以控制機器學習自己的複雜性。接下來,咱們按照步驟爲集羣進行機器學習工做作好了準備,尤爲須要確保該集羣能夠利用可用的NVIDIA GPU。
在設置NFS時,咱們探索了Rancher的應用商店,並將Helm Chart添加到應用商店中。它爲咱們提供了在Kubernetes集羣上能夠安裝的全部Kubernetes應用程序。最後,咱們完成了在集羣上安裝Kubeflow的步驟。