Kubernetes GPU 共享技术调研

kubernetes GPU共享技术调研

对于一个以内容分发为主的互联网公司来说,文章广告等的准确分发至关重要,而机器学习模型训练的效率和模型更新迭代的速度直接决定了内容分发效果的好坏。对于机器学习来说,算力是一切的根本,为了用海量数据训练更好的模型、加速整个内容分发流程,企业的 IT 系统需要具备快速、高效调用管理大规模 GPU 资源的能力。同时,由于算力资源十分昂贵,出于成本控制,企业也需要最大化 GPU 资源利用率。但是,对于一点资讯来说,GPU的利用率较低,资源使用比较紧张。一方面是处于非训练状态的实验占用GPU资源,没有及时释放;另外一方面是无法实现GPU共享,即使是再小的一个实验也要占用至少整块的GPU资源。对于第一个问题,可以通过监测训练任务状态,及时释放资源,但是对于第二个问题,目前还未做到GPU资源在多个Container之间共享。

GPU共享两个关键问题

1. 资源隔离

资源隔离主要采用的是虚拟化的解决思路,目前NVIDIA有两种 GPU 虚拟化的解决方案:

  1. GRID: 模式更多用于虚拟机场景,基于驱动,隔离型会做的比较强,但不开源,性能比较好。
  2. MPS: 应用到容器场景,基于软件的方式,隔离性比较弱,但也不开源。

2. 资源切分及调度

目前社区的GPU调度方案:
1.Nvidia 贡献的调度方案,只支持按较粗粒度的调度,按GPU块数调度。
Nvidia GPU Device Plugin
2.阿里云服务团队贡献的 GPU 共享的调度方案,其目的在于解决用户共享 GPU 调度的需求Kubernetes GPU共享实践
gpushare-scheduler-extender
gpushare-device-plugin

GPU共享技术实践

由于资源隔离主要采用的是虚拟化技术,并且NVIDIA提供的两种GPU虚拟化解决方案都没有开源,GPU共享在资源隔离方面的实践资料相对较少,大多关注GPU资源的调度。

1.阿里GPU共享实践

相关资料: Kubernetes的共享GPU集群调度

优点:

  • 能够让更多的预测服务共享同一个GPU卡上,能够让使用者通过API描述对于一个可共享资源的申请, 并能实现该种资源的调度

缺点:

  • 不支持该共享资源的隔离

前提条件:

  • 延用Kubernetes Extended Resource定义,但是衡量维度最小单位从1个GPU卡变为GPU显存的MiB
  • 用户申请的GPU资源上限不会超过一张卡,也就是申请的资源上限为单卡

实现思路:
依赖于Kubernetes的现有工作机制:

  • Extended Resource定义
  • Scheduler Extender机制
  • Device Plugin机制
  1. 利用 kubernetes Extended Resource机制,重新定义GPU资源,主要是对显存和GPU数量的定义。
  2. 利用Device Plugin机制,在节点上将GPU资源总量上报给kubelet,kubelet进一步上报给Kubernetes API Server。
  3. 利用k8s scheduler Extender机制,扩展调度器功能,负责在全局调度器Filter和Bind的时候判断节点上单个GPU卡是否能够提供足够的GPU显存,并且在Bind的时刻将GPU的分配结果通过annotation记录到Pod Spec以供后续Filter检查分配结果。
  4. 节点运行:当Pod和节点绑定的事件被Kubelet接收到后,Kubelet就会在节点上创建真正的Pod实体,在这个过程中, Kubelet会调用GPU Share Device Plugin的Allocate方法, Allocate方法的参数是Pod申请的gpu-mem。而在Allocate方法中,会根据GPU Share Scheduler Extender的调度决策运行对应的Pod。

2.腾讯GPU共享实践

相关资料:AI 在 K8S 中的实践:云智天枢 AI 中台架构揭秘
实现思路:

  1. 常规GPU使用,按块调度
  2. 使用Nvidia 提供的虚拟化技术
  3. 自研实现GPU半虚拟化: 基于驱动函数实现,改变了函数显存申请、释放和线程的发起函数。

3.才云科技GPU共享实践

相关资料:基于 Kubernetes 的 GPU 类型调度实现
实现思路:
利用kubernetes现有的工作机制:

  • Scheduler Extender 机制
  • Device Plugin 机制
  • API Server 扩展机制(CRD)
  • Admission 扩展机制(ResourceQuota)

优点:

  • 虽未明确解决GPU共享问题,但根据其设计和实现,可以支持GPU共享,方案与方案1类似。相比方案1,还支持GPU类型调度以及对资源的使用进行限制。

缺点:

  • 不支持该共享资源的隔离

1. 通过CRD(CustomResourceDefinition)定义两种资源:ExtendedResource 和 ResourceClass
ExtendedResource 描述了一种扩展资源,比如 NVIDIA GPU;
ResourceClass 定义了容器选择哪种扩展资源,它的使用方式和 Kubernetes 中的 Extended Resource类似,用户可以直接在容器中指定,就像使用 CPU 和 Memory 一样。

2. 利用 Scheduler 的扩展机制扩展Scheduler,负责调度容器中使用了ResourceClass资源对象的Pod
通过查询 ResourceClass 对象的定义过滤选择节点上的 ExtendedResource 资源,从而找到合适的节点并绑定,并将合适的 ExtendedResource 写到 Pod Annotation 中,供 Kubelet 组件使用。

3. 利用Nvidia Device Plugin插件,扩展NVIDIA GPU资源,负责与kubelet组件通信以及创建和维护 ExtendedResource 资源对象
ExtendedResource 资源中包含着 GPU 的频率、显存等信息,当多个容器想使用同一块 GPU 时,我们可以定义一个 ResourceClass 资源对象,在 ResourceClass 中声明使用多少显存(这里共享的是显存)。这样,应用部署时,我们只要在容器中声明使用该 ResourceClass 资源即可,之后 Scheduler Extender 会过滤符合条件的 ExtendedResource 对象,绑定到合适的节点上。
如果要实现资源共享,我们可能需要在 ExtendedResource 中记录显存的用量情况,供调度参考。

4.VMware GPU共享实践

相关资料:在 Kubernetes 中使用 vGPU 实现机器学习任务共享 GPU
实现思路:
利用GPU厂家、虚拟化厂商等提供的GPU虚拟化技术,对GPU进行虚拟化,把完整的GPU进行分割。然后按照调度物理GPU一样在k8s中调度GPU。

优点:

  • 不用对k8s等进行而外扩展,开发工作量小
  • 具备更好的隔离型

缺点:

  • 需要使用如vSphere等虚拟化厂商提供的专门的虚拟化软件对GPU做虚拟化,并且需要付费
  • 虚拟化对机器性能有损耗

5.其他相关资料

k8s官网对GPU调度的说明提供了Nvidia GPU容器调度能力,但是只能将一个GPU卡分配给一个容器
从零开始入门 K8s:GPU 管理和 Device Plugin 工作机制
如何在Kubernetes实现GPU调度及共享
Kubernetes GPU使用指南
Kubernetes如何通过Device Plugins来使用NVIDIA GPU

你真的了解多个docker容器如何共享GPU么?
Kubeflow 使用 Kubernetes 进行机器学习

总结

  1. 从社区、stackoverflow以及上述各公司的实践来看,目前GPU共享主要共享的是GPU的显存,资源隔离性差,存在资源抢占等情况,是否需要开展GPU共享相关的开发工作需要视公司机器学习对GPU的使用场景来决定;

  2. GPU共享存在一定的限制:用户申请的资源限制为单卡

  3. 从显存共享的角度来说,单GPU卡共享具有可行性,主要实现步骤包括:

    • 扩展资源定义,重新定义GPU资源,主要是对显存和GPU数量的定义
    • 扩展调度器,负责在全局调度器Filter和Bind的时候判断节点上单个GPU卡是否能够提供足够的GPU显存
    • 利用Nvidia Device Plugin插件机制,完成资源上报和分配
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,372评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,368评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,415评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,157评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,171评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,125评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,028评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,887评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,310评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,533评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,690评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,411评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,004评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,812评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,693评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,577评论 2 353

推荐阅读更多精彩内容