「如何实现流动式软件发布」线上课堂开课啦,快来报名参与课堂抽奖吧~ 了解详情
写点什么

无需手动输入命令,简单 3 步即可在 K8S 集群中启用 GPU

2021 年 1 月 07 日

无需手动输入命令,简单3步即可在K8S集群中启用GPU

随着全球各大企业开始广泛采用 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-operator/)

  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 集成


文章转载自: RancherLabs(ID:RancherLabs)

原文链接:无需手动输入命令,简单3步即可在K8S集群中启用GPU

2021 年 1 月 07 日 07:00959

评论

发布
暂无评论
发现更多内容

CSS07 - 伪类

桃夭十一里

html/css

杜绝标题党,好的标题是成功的99%

xcbeyond

方法论 28天写作 写作技巧

要想软件“一想之美”,UI测试少不了

华为云开发者社区

软件 测试 华为云

volatile 关键字精讲

伯阳

Java volatile 关键字 后端开发 多线程与高并发

在onelogin中使用OpenId Connect Implicit Flow

程序那些事

权限系统 程序那些事 openid 权限架构 onelogin

CSS08 - CSS特性

桃夭十一里

html/css

甲方日常 82

句子

随笔杂谈

还在手动写数据库文档吗?试试这个工具,划水干活儿两不误!

我爱娃哈哈😍

数据库 文档生成

如果你听说过 Elastic Certified Engineer

escray

七日更 28天写作 死磕Elasticsearch 60天通过Elastic认证考试

不愧是Alibaba技术官:程序员必会的架构知识清单,如何让你技术上的提升面试时的丰收

Java架构之路

Java 程序员 架构 面试 编程语言

LeetCode题解:111. 二叉树的最小深度,BFS,JavaScript,详细注释

Lee Chen

算法 LeetCode 前端进阶训练营

ETL都没弄懂,谈什么大数据 ?我用一分钟给你整明白

智分析

ETL

云算力矿机租赁挖矿APP系统开发|云算力矿机租赁挖矿软件开发

开發I852946OIIO

系统开发

甲方日常 81

句子

随笔杂谈

CSS09 - 文本&背景属性

桃夭十一里

html/css

数据中心“容灾”和“备份”的区别

如何使用Eclipse内存分析工具定位内存泄露

AI乔治

Java eclipse 架构

俯瞰Dubbo全局,阅读源码前必须掌握这些!!

冰河

架构 分布式 微服务 dubbo 服务治理

如何使用Eclipse内存分析工具定位内存泄露

Java老k

Java 内存泄露

【CSS】CSS对大小写敏感吗?

学习委员

28天写作

【Mysql-InnoDB系列】InnoDB架构

程序员架构进阶

MySQL 架构 innodb 28天写作

一个正确的编程思维

程序员吴师兄

28天写作

VUE项目性能优化实践——通过懒加载提升页面响应速度

Geek_Willie

Vue

Spark HistoryServer日志解析&清理异常

笨小康

大数据 spark hdfs

代码也能“杀”虫:此虫,真虫非Bug也

华为云开发者社区

代码 华为云 modelarts

一次系统调用时间过长追踪完整教程案例

AI乔治

Java Linux 架构

开始的开始-可能是最早提交的28天写作活动作品

石君

28天写作

文档驱动开发模式在 AIMS 中的应用与实践

华为云开发者社区

Web 代码 API 文档

边缘计算安全技术研究

华为云原生团队

云计算 大数据 云原生 边缘计算 华为云

数据库表数据量大读写缓慢如何优化(1)【冷热分离】

我爱娃哈哈😍

大数据 架构 海量数据库的设计与实践 优化 数据库优化

从七日更,到28天写作挑战,我无法拒绝的原因

梁龙先森

前端 编程语言 28天写作

无需手动输入命令,简单3步即可在K8S集群中启用GPU-InfoQ