当前位置: 首页 > 科技观察

轻松扩展机器学习能力:如何在Rancher上安装Kubeflow

时间:2023-03-22 10:09:02 科技观察

随着机器学习领域的不断发展,处理机器学习的团队在一台机器上训练一个模型已经变得难以为继,现在业界达成共识是机器学习已经超越了简单的模型训练。在模型训练之前、期间和之后需要进行许多活动,尤其是对于生成自己的ML模型的团队而言。经常引用下图来说明这种情况:对于许多团队来说,将机器学习模型从研究环境应用到生产环境的过程是困难且压力很大的。不幸的是,针对每种类型的问题都有数量惊人的工具,而这些大量的工具有望解决您所有的机器学习挑战。但整个团队学习新工具通常很耗时,而且将它们集成到您当前的工作流程中也并非易事。此时,您可能需要考虑Kubeflow,这是一个机器学习平台,适用于需要构建机器学习管道的团队,包括许多其他用于服务模型和调整超参数的工具。Kubeflow试图做的是汇集同类最佳的ML工具并将它们集成到一个平台中。来源:https://www.kubeflow.org/docs/started/kubeflow-overview/顾名思义,Kubeflow应该部署在Kubernetes上。由于你是通过Rancher平台阅读本文的,所以你很有可能在一个本地部署了一个Kubernetes集群。值得注意的是,Kubeflow中的“流”并不是指Tensorflow。Kubeflow也可以与PyTorch一起使用,甚至可以与任何ML框架一起使用(尽管最受支持的框架是Tensorflow和PyTorch)。在本文中,我将向您展示如何尽可能简单地安装Kubeflow。如果您的集群上已经设置了GPU,则该过程会更加简单。如果您还没有这样做,那么您将需要执行一些额外的设置步骤,因为许多机器学习需要在NVIDIAGPU上运行。在Kubeflow上设置GPU支持假设您已安装Docker19.x。1.在所有带GPU的节点上安装NVIDIA容器运行时:%distribution=$(./etc/os-release;echo$ID$VERSION_ID)%curl-s-Lhttps://nvidia.github.io/nvidia-docker/gpgkey|sudoapt-keyadd-%curl-s-Lhttps://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list|sudotee/etc/apt/sources.list.d/nvidia-docker。list%sudoapt-getupdate&&sudoapt-getinstall-ynvidia-container-toolkit%sudoapt-getinstallnvidia-container-runtime现在,修改Docker守护进程(Daemon)runtime字段:%sudovim/etc/docker/daemon.json粘贴以下内容:{"default-runtime":"nvidia","runtimes":{"nvidia":{"path":"/usr/bin/nvidia-container-runtime","runtimeArgs":[]}}}现在重启Docker守护进程:%sudosystemctlrestartdocker2,在主节点上安装NVIDIA设备插件,创建NVIDIA设备插件:%kubectlcreate-fhttps://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文件。缺点是体积容量限制无法控制。另一种方法是使用网络文件系统(NFS),我将在下面展示。在主节点上设置网络文件系统假设您将大部分数据存储在本地,您需要设置NFS。在这里,我假设NFS服务器位于主节点10.64.1.163上。首先,安装NFS的依赖项:%sudoaptinstall-ynfs-commonnfs-kernel-server然后,创建一个根目录:%sudomkdir/nfsroot将以下条目添加到/etc/exports:/full/path/to/nfsroot10.64.0。0/16(rw,no_root_squash,no_subtree_check)请注意,10.64.0.0是节点的CIDR,而不是KubernetesPod的CIDR。接下来,使用以下命令将共享目录导出为sudo:%sudoexportfs-a最后,要使所有配置生效,请按如下方式重新启动NFS内核服务器:%sudosystemctlrestartnfs-kernel-server此外,确保nfs-kernel-server在服务器上启动(重新)启动:%sudoupdate-rc.dnfs-kernel-serverenable在工作节点上为NFS安装依赖项设置NFS:%sudoaptinstall-ynfs-common安装NFSClientProvisioner现在,我们可以安装NFSClientProvisioner--和我终于可以与您分享我最喜欢的Rancher功能之一:应用商店!默认情况下,Rancher附带许多经过测试的应用程序。另外,我们也可以自己将整个HelmChart添加到应用商店。单击Apps,然后单击[ManageCatalogs]并选择[AddCatalog]:填写以下值:单击[Create]返回到[Apps]页面。稍等片刻,你会在helm部分看到很多应用。您可以点击【刷新】查看进程:现在,在搜索框中输入nfs,您将看到2个条目:其中一个正是我们要找的:nfs-client-provisioner。点击它,然后你会看到:这是nfs-client-provisionerchart可用的所有选项,你需要用到它们来填写以下内容:填写完成后,你可以点击[Launch]按钮。等待Kubernetes下载Docker镜像并设置所有内容。当一切都完成后,您将看到以下页面:我非常喜欢应用商店功能,它是我最喜欢的功能之一,因为它使在集群上安装和监控应用程序变得简单和方便。Step1:下载并安装kfctl,它是Kubeflow的控制工具,类似于kubectl。您可以从Kubeflow的发布页面下载它:https://github.com/kubeflow/kfctl/releases/tag/v1.0.2然后,解压缩文件并将二进制文件放入您的$PATH中。Step2:安装Kubeflow首先,指定一个文件夹来存放所有的KubeflowYAML文件。$exportKFAPP=~/kfapp下载kfctl配置文件:wgethttps://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:$exportCONFIG_URI="/path/to/kfctl_k8s_istio.v1.0.2.yaml"接下来,您需要指定一组环境变量,这些变量将指示Kubeflow配置文件下载到的位置:exportKF_NAME=kubeflow-deploymentexportBASE_DIR=/optexportKF_DIR=${BASE_DIR}/${KF_NAME}安装Kubeflow:%mkdir-p${KF_DIR}%cd${KF_DIR}%kfctlapply-V-f${CONFIG_URI}您需要一些时间来等待所有设置.访问KubeflowUI要访问UI,我们需要知道WebUI所在的端口:%kubectl-nistio-systemgetsvcistio-ingressgateway返回以下内容:NAMETYPECLUSTER-IPEXTERNAL-IPPORT(S)AGEistio-ingressgatewayNodePort10.43.197.6315020: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/TCP61m本例中为80:31380,表示可以通过http://localhost:31380访问KubeflowUI:如果成功看到这个页面,那么恭喜你已经成功设置Kubeflow🎉;结论在这篇文章中,我们首先探讨了为什么需要像Kubeflow这样的工具——来控制机器学习本身的复杂性。接下来,我们按照步骤为机器学习工作准备集群,特别是确保集群可以利用可用的NVIDIAGPU。在设置NFS时,我们探索了Rancher的应用商店并将HelmChart添加到应用商店。它为我们提供了所有可以安装在Kubernetes集群上的Kubernetes应用程序。最后,我们将完成在集群上安装Kubeflow的步骤。