輕鬆擴展機器學習能力:如何在Rancher上安裝Kubeflow

隨着機器學習領域不斷髮展,對於處理機器學習的團隊來講,在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

在Kubeflow上設置GPU支持

假設你已經安裝了Docker 19.x。框架

一、 安裝NVIDIA 容器運行時

在全部帶有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

二、 安裝NVIDIA設備插件

在master節點上,建立NVIDIA設備插件:

% kubectl create -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/1.0.0-beta/nvidia-device-plugin.yml

接下來,正式開始安裝Kubeflow。

安裝Kubeflow

注意:在撰寫本文時,Kubeflow的最新版本是1.0。它與Kubernetes 1.14和1.15版本兼容。

Step0:設置動態Volume配置

在咱們安裝Kubeflow以前,咱們須要設置動態配置。

一種方法是使用Rancher的local-path-provisioner,其中使用了基於hostPath的節點持久卷。設置很是簡單:將其指向節點上的路徑並部署YAML文件。缺點是沒法控制volume容量限制。

另外一種方法是使用網絡文件系統(NFS),我將在下文展現具體步驟。

在Master節點上設置網絡文件系統

假設你將大部分數據存儲在本地,那麼你須要設置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

在worker節點上設置NFS

爲NFS安裝依賴項:

% sudo apt install -y nfs-common

安裝NFS Client Provisioner

如今,咱們能夠安裝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鏡像,並將一切設置完畢。全部操做都完成後,你將看到如下頁面:

我真的太喜歡應用商店這個功能了,它是我最喜歡的功能之一,由於它的存在,使得在集羣上安裝和監控應用程序變得簡單和方便。

Step1:下載並安裝kfctl

這是Kubeflow的控制工具,與kubectl相似。你能夠從Kubeflow的release頁面下載它。

而後,解壓文件並將二進制文件放入你的$PATH中。

Step2:安裝Kubeflow

首先,指定一個文件夾存儲全部的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-crdsistio-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}

你須要一些時間等待一切都設置完畢。

訪問Kubeflow UI

要訪問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的步驟。

相關文章
相關標籤/搜索