随着机器学习领域不断发展,对于处理机器学习的团队来讲,在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的步骤。