随着寰球各大企业开始宽泛采纳 Kubernetes,咱们看到 Kubernetes 正在向新的阶段倒退。一方面,Kubernetes 被边缘的工作负载所采纳并提供超过数据中心的价值。另一方面,Kubernetes 正在驱动机器学习(ML)和高质量、高速的数据分析性能的倒退。
咱们当初所理解到的将 Kubernetes 利用于机器学习的案例次要源于 Kubernetes 1.10 中一个的性能,过后图形处理单元(GPUs)成为一个可调度的资源——当初这一性能处于 beta 版本。独自来看,这两个都是 Kubernetes 中令人兴奋的倒退。更令人兴奋的是,能够应用 Kubernetes 在数据中心和边缘采纳 GPU。在数据中心,GPU 是一种构建 ML 库的形式。那些训练过的库将被迁徙到边缘 Kubernetes 集群作为机器学习的推理工具,在尽可能凑近数据收集的中央提供数据分析。
在早些时候,Kubernetes 还是为分布式应用程序提供一个 CPU 和 RAM 资源的池。如果咱们有 CPU 和 RAM 池,为什么不能有一个 GPU 池呢?这当然毫无问题,但不是所有的 server 都有 GPU。所以,如何让咱们的 server 在 Kubernetes 中能够拆卸 GPU 呢?
在本文中,我将论述在 Kubernetes 集群中应用 GPU 的简略办法。在将来的文章中,咱们还将 GPU 推向至边缘并向你展现如何实现这一步骤。为了真正地简化步骤,我将用 Rancher UI 来操作启用 GPU 的过程。Rancher UI 只是 Rancher RESTful APIs 的一个客户端。你能够在 GitOps、DevOps 和其余自动化解决方案中应用其余 API 的客户端,比方 Golang、Python 和 Terraform。不过,咱们不会在此文中深入探讨这些。
实质上看,步骤非常简略:
- 为 Kubernetes 集群构建基础架构
- 装置 Kubernetes
- 从 Helm 中装置 gpu-operator
应用 Rancher 和可用的 GPU 资源启动和运行
Rancher 是一个多集群治理解决方案并且是上述步骤的粘合剂。你能够在 NVIDIA 的博客中找到一个简化 GPU 治理的纯 NVIDIA 解决方案,以及一些对于 gpu-operator 与构建没有 operator 的 GPU 驱动堆栈有何区别的重要信息。
(https://developer.nvidia.com/blog/nvidia-gpu-operator-simplifying-gpu-management-in-kubernetes/)
后期筹备
以下是在 Rancher 中启动和运行 GPU 所需的资料清单(BOM):
- Rancher
- GPU Operator(https://nvidia.github.io/gpu-…)
- 基础架构——咱们将在 AWS 上应用 GPU 节点
在官网文档中,咱们有专门的章节论述如何高可用装置 Rancher,所以咱们假如你曾经将 Rancher 装置结束:
https://docs.rancher.cn/docs/rancher2/installation/k8s-install/_index/
流程步骤
应用 GPUs 装置 Kubernetes 集群
Rancher 装置之后,咱们首先将构建和配置一个 Kubernetes 集群(你能够应用任何带有 NVIDIA GPU 的集群)。
应用 Global 上下文,咱们抉择 Add Cluster
并在“来自云服务商提供的主机”局部,抉择 Amazon EC2。
咱们是通过节点驱动来实现的—— 一组预配置的基础设施模板,其中一些模板有 GPU 资源。
留神到这里有 3 个节点池:一个是为 master 筹备的,一个是为规范的 worker 节点筹备的,另一个是为带 GPU 的 worker 筹备的。GPU 的模板基于 p3.2xlarge 机器类型,应用 Ubuntu 18.04 亚马逊机器镜像或 AMI(ami-0ac80df6eff0e70b5)。当然,这些抉择是依据每个基础设施提供商和企业需要而变动的。另外,咱们将“Add Cluster”表单中的 Kubernetes 选项设置为默认值。
设置 GPU Operator
当初,咱们将应用 GPU Operator 库(https://nvidia.github.io/gpu-operator)在 Rancher 中设置一个 catalog。(也有其余的解决方案能够裸露 GPU,包含应用 Linux for Tegra [L4T] Linux 发行版或设施插件)在撰写本文时,GPU Operator 曾经通过 NVIDIA Tesla Driver 440 进行了测试和验证。
应用 Rancher Global 上下文菜单,咱们抉择要装置到的集群:
而后应用 Tools 菜单来查看 catalog 列表。
点击 Add Catalog 按钮并且给其命名,而后增加 url:https://nvidia.github.io/gpu-operator
咱们抉择了 Helm v3 和集群范畴。咱们点击 Create 以增加 Catalog 到 Rancher。当应用自动化时,咱们能够将这一步作为集群构建的一部分。依据企业策略,咱们能够增加这个 Catalog 到每个集群中,即便它还没有 GPU 节点或节点池。这一步为咱们提供了拜访 GPU Operator chart 的机会,咱们接下来将装置它。
当初咱们想要应用左上角的 Rancher 上下文菜单以进入集群的“System”我的项目,咱们在这里增加了 GPU Operator 性能。
在 System 我的项目中,抉择 Apps:
而后点击右上方的 Launch 按钮。
咱们能够搜寻“nvidia”或者向下滚动到咱们刚刚创立的 catalog。
点击 gpu-operator app,而后在页面底部点击 Launch。
在这种状况下,所有的默认值都应该没问题。同样,咱们能够通过 Rancher APIs 将这一步骤增加到自动化中。
利用 GPU
既然 GPU 曾经能够拜访,咱们当初能够部署一个 GPU-capable 工作负载。同时,咱们能够通过在 Rancher 中查看 Cluster -> Nodes 的页面验证装置是否胜利。咱们看到 GPU Operator 曾经装置了 Node Feature Discovery (NFD) 并且给咱们的节点贴上了 GPU 应用的标签。
总 结
之所以可能采纳如此简略的办法就可能让 Kubernetes 与 GPU 一起运行,离不开这 3 个重要局部:
- NVIDIA 的 GPU Operator
- 来自 Kubernetes 同名 SIG 的 Node Feature Discovery(NFD)。
- Rancher 的集群部署和 catalog app 集成
欢迎您依据本教程入手尝试,也请持续放弃关注,在之后的教程中咱们会尝试将 GPU 援用至边缘。