随着寰球各大企业开始宽泛采纳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):

  1. Rancher
  2. GPU Operator(https://nvidia.github.io/gpu-...)
  3. 基础架构——咱们将在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个重要局部:

  1. NVIDIA的GPU Operator
  2. 来自Kubernetes同名SIG的Node Feature Discovery(NFD)。
  3. Rancher的集群部署和catalog app集成

欢迎您依据本教程入手尝试,也请持续放弃关注,在之后的教程中咱们会尝试将GPU援用至边缘。