在 Kubernetes 中使用 vGPU 实现机器学习任务共享 GPU

栏目: 编程工具 · 发布时间: 4年前

内容简介:作者 | 张海宁(VMware 技术总监)

在 Kubernetes 中使用 vGPU 实现机器学习任务共享 GPU

文末可获得 KubeCon China 2019 PPT 大礼包

作者 | 张海宁(VMware 技术总监)

编辑 | bot(才云)

在这篇文章中,Harbor 项目创始人、VMware 中国研发先进技术中心技术总监张海宁介绍了如何在 Kubernetes 上使用虚拟化 GPU 技术,实现多个机器学习任务共享 GPU。

大家好,我是 VMware 中国研发先进技术中心的技术总监张海宁,早些时侯我做过一个开源项目 Harbor,它是一个容器镜像仓库,这里先感谢大家对 Harbor 的支持。

今天我给大家分享的是云原生领域另外一个项目,它有关 Kubernetes 和机器学习。 因为今天的分享主题是 AI 和 Kubernetes,所以我的演讲将 介绍 Kubernetes 中 vGPU 是怎么样使用的 ,这个问题是很多朋友做 AI on Kubernetes 的痛点。

在 Kubernetes 中使用 vGPU 实现机器学习任务共享 GPU

背景与现状

首先,我们来讲一讲 AI 的现状。 我们正处于人工智能的新纪元,这里的关键词不在“纪元”上,而是“新纪元”。 因为 20 年前我读大学的时候,我的教授就说那时是 AI 的时代,现在我们又一次进入了 AI 时代。

我们一直在讲 AI,但是当前我们正在进入的这个 AI 时代可能有些特别。 相信很多朋友,包括我本人,都亲身体验到了 AI 在我们生活中扮演的角色,如手机不用输密码,刷个脸就登录进去了,可以说现在生活的方方面面都用到了 AI,所以 AI 领域已经变成非常主流的一个方向。

机器学习是人工智能领域的一个子类,最近比较火的深度学习同样也是。 它们的共同点无非就三个要素: 第一个要素是数据 ,模型构建需要大量数据; 第二个要素是算法 ,机器学习领域还有很多学者在创新,包括 CNN、DNN 这些算法及其改进。

那么第三个要素是什么呢? 其实 第三个要素就是我们需要巨大的算力 ,这也是近几年我们在 GPU 等一些硬件上努力发掘进展的原因,让算力能够更好地发挥出算法和数据的作用。 也就是说,在人工智能进入千家万户的生活的过程中,这三个要素发挥着很重要的作用。

在 Kubernetes 中使用 vGPU 实现机器学习任务共享 GPU

算力如何进行共享

今天我给大家讲的是算力如何进行共享,就是 GPU 在 Kubernetes 里的使用。 很多机器学习任务可以用容器化来做,容器化之后就可很方便地部署和启动。

如今,Kubernetes 已经成为容器编排的事实标准,可以帮助我们做容器扩展、微服务架构等。 除此之外,Kubernetes 还有一个优势是在云端非常普遍,它可以在大多数云端跑起来,比如现在主流的阿里云、国外的 AWS 和 Azure,这意味着 Kubernetes 具有很大的便利性。

社区里面有个问题讨论叫做“Model Stuffing”,就是把多个机器学习应用跑在同一个容器里面,在容器里共享 GPU 资源。 这是一种不得已而为之的做法。 社区也有些朋友做了方案,想了一些方法解决共享问题,初步实现了 GPU 的共享能力。 但它们目前还没有实现应用的隔离,不同应用之间存在资源抢占和互相干扰的现象,同时 QOS 也不能保证。

由于 这些做法都不完美,我带来了一种新思路: 基于 vGPU 的解决方案

简单来说,vGPU 就是将 GPU 虚拟化的技术。 虚拟化大家都不陌生,CPU 虚拟化就是虚拟机,这个大家用得很多了,它依靠 CPU 的硬件指令来实现虚拟化环境。 经过这几年发展,GPU 现在也实现了虚拟化能力,允许每个用户隔离共享物理 GPU 资源。 主流的 GPU 厂家,如 NVIDIA、AMD、Intel 都支持虚拟化 GPU,提供隔离、QOS 的能力。 另外,虚拟化厂商,如 vSphere、KVM 和 XenServer 等,也支持 vGPU 的功能。 因此从硬件层面上讲,现在我们已经基本具备了虚拟化 GPU 的可行性。

接下来我们看看怎样在 Kubernetes 上使用虚拟化 GPU 技术。 首先,分割 vSphere 上的物理 GPU,我们把它分割成很多虚拟 GPU 并映射到虚机里面去。 虽然虚机看到是一个 GPU,但那实际上可能只是物理 GPU 的 n 分之一,每个 VM 是独立的,互相之间不会产生干扰。

在 Kubernetes 中使用 vGPU 实现机器学习任务共享 GPU

当我们在 vSphere 里面做配置的时候,我们可以划分 vGPU 的大小,像上面这个例子里面,我们按照 grid-p100-8q 的 profile 来划分 vGPU,这个虚拟 GPU 就具有 8GB 的显存,大约是物理 GPU 16GB 的二分之一。 在一定情况下,虚拟 GPU 的处理能力可以媲美整个物理 GPU 的性能。 虚拟 GPU 支持不同的调度算法,包括 Fixed Share、Equal Share 和 Best Effort。 用户对不同算法的使用需求在一定程度上都可以满足。

听到 GPU 转化为虚拟 GPU 使用的时候, 大家可能比较关注有没有性能上的损失 ,跑大型模型训练任务的效率会不会受到影响 我们做过一些测试,把 Native 模式(即没有虚拟化)作为系统性能参照标准 1,在使用了虚拟化的 vGPU 后,性能大概是 1.04 左右。 所以引入虚拟化的开销是非常小的,大约小于 4%。在实际运用中,这个开销基本可以忽略不计。

那么在 Kubernetes 中,我们怎么使用 vGPU 呢? 这里有个图。

在 Kubernetes 中使用 vGPU 实现机器学习任务共享 GPU

首先我们把一个物理 GPU 通过虚拟化的驱动程序,在虚拟机里面把它切割成 vGPU,每个 vGPU 看上去像是一个完整的 GPU。 采用这样的虚拟化技术之后,我们可以提高 GPU 的使用率,同时也有很好的共享能力。 除了共享之外,它还有额外的好处,例如动态迁移。 我们 vSphere 可以通过 vMotion,把虚拟机迁移到另外一个物理机器上去,不影响应用的运行,便于日常维护管理。 这也是虚拟化给我们带来的一些优势。

在 Kubernetes 中使用 GPU 的时候,我们也要注意一些细节。 我们需要把每一个 worker Node 打上一个 label,并按照每个 GPU 的实际能力加以标注。 比如这里我把 label 打成了 4GB,也就是说它虽然看上去是 1 个 GPU,但实际能力只有 4GB 显存(1/4 个 16GB 的 GPU)。

标注的目的是为了后续做调度的时候更方便些。

在 Kubernetes 中使用 vGPU 实现机器学习任务共享 GPU

虚拟化 GPU 的作用

接下来给大家介绍几个场景,介绍虚拟化 GPU 能够解决什么问题。

业界的朋友都知道,模型推理(inference)的服务和训练其实不一样,推理一般只占到很少的 GPU 使用,但是并发量可能很大。在没有共享 GPU 的情况下,它需要较多的 GPU 来满足并发需求。

在 Kubernetes 中使用 vGPU 实现机器学习任务共享 GPU

举个例子,在北京,机动车每周限行一天。 路上有很多摄像头监控车辆的行驶,当有车辆违反限行规则时,摄像头会把车辆照下来,然后发通知给车主交罚款,这个过程是全自动的。

在车朝着摄像头开过来的时候,摄像头需要先识别到车这个物体,再把车的图像方块截取出来,然后做更细化的车牌识别处理,这时就需要后台的模型推理。

如果这只是一辆车,那很简单。 但如果是很多车同时出现在摄像范围内,情况就变得复杂了。 在这一瞬间,大量车辆需要同时识别处理,这导致请求被压到同一个服务实例上,造成性能瓶颈 如果我们使用虚拟 GPU,那一个物理 GPU 就可以支持多个推理服务,提高整个物理 GPU 的使用率。 所以说推理场景非常适合使用虚拟 GPU。

在 Kubernetes 中使用 vGPU 实现机器学习任务共享 GPU

第二个场景是在混合机器学习的任务里面。 举个典型的例子,在学校等大型组织里,不同用户会做不同的事,如研究、教学、开发、练习等,他们对 GPU 有不同的要求。 但 GPU 资源往往是有限的,需要我们尽可能大的去增加利用率。

我们给某个学校设计了一个切换方案,当白天运行一些比较简单的任务时,比如学生开发练习、简单的教学任务,我们把一个物理 GPU 分成 4 份来使用,这样就有 4 个用户可以同时使用一个 GPU。 到了晚上,学校要做模型训练,需要大量的算力。 这时我们就切换一下,把虚拟 GPU 切换成 1:1 的虚拟 GPU,这时虚机里的 GPU 拥有 100% 的算力。

第二天白天,vGPU 按需又可以切换回 1:4 的模式,这相当于我们可以动态地在固定数量的机器里去使用不同的配置,既可满足小场景需求,也可满足大场景需要。

在 Kubernetes 中使用 vGPU 实现机器学习任务共享 GPU

小结

最后,我来做个小结。 我们可以用 Kubernetes 运行机器学习 workload,通过 vGPU 的 sharing 来实现 GPU 资源的共享和隔离,它有较多的优点,这是我们推荐这个方案的原因。

在 Kubernetes 中使用 vGPU 实现机器学习任务共享 GPU

讲师简介

张海宁,Harbor 企业级容器镜像仓库开源项目创建人和架构师,VMware 中国研发先进技术中心技术总监。Cloud Foundry 中国社区最早的技术布道师之一,《区块链技术指南》作者之一。目前着重关注区块链、容器和云计算等领域的研究和开发工作。

社区福利

KubeCon China 2019 PPT 回顾资料已经为大家整理好啦!在公众号后台回复“ 201902 ”,即可获取 KubeCon China 2019   资料大礼包。

推荐阅读:

在 Kubernetes 中使用 vGPU 实现机器学习任务共享 GPU

在 Kubernetes 中使用 vGPU 实现机器学习任务共享 GPU

在 Kubernetes 中使用 vGPU 实现机器学习任务共享 GPU

写留言


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

编程真好玩

编程真好玩

[英] 乔恩·伍德科克 / 余宙华 / 南海出版公司 / 2017-8-1 / 88.00元

在美国,编程已进入幼儿园和中小学课堂,是备受欢迎的课程之一。 在英国,编程被列入国家教学大纲,成为6~15岁孩子的必修课。 在芬兰,编程理念融入了小学的各门课程,孩子们可以随时随地学编程。 编程已经成为世界的通用语言,和听、说、读、写、算一样,是孩子必须掌握的技能。 Scratch是美国麻省理工学院设计开发的可视化少儿编程工具,全球1500多万孩子正在学习使用。它把枯燥乏味......一起来看看 《编程真好玩》 这本书的介绍吧!

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具