4

腾讯云徐蓓:通过云原生管理Kubernetes GPU资源

 2 years ago
source link: https://blog.csdn.net/m0_46700908/article/details/126499183
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
9f7ee4992bee88edc5826222b639a668.gif

​嘉宾 | 徐蓓

出品 | CSDN云原生

2022年8月4日,中国信通院、腾讯云、FinOps产业标准工作组联合发起的《原动力x云原生正发声 降本增效大讲堂》系列直播活动第5讲上,腾讯云容器技术专家徐蓓分享了如何通过云原生管理Kubernetes GPU资源。本文整理自徐蓓的分享。

c39833b6f00cd777733373c33551b026.png

当前Kubernetes GPU使用方式

6f7463a67edeadc146aff0252ae89f6e.png

K8s社区主要通过Extender Resource和Device Plugin方式给为用户提供GPU物理资源支持。

每个GPU厂商都会实现自己的Device Plugin Agent,Agent在底层节点层会将物理卡扫描上报到集群。用户用拓展资源方式在Pod创建时指定需要物理卡的数量,Device Plugin在每个Kubelet节点上做启动,并且调用各个GPU厂商的设备工具,将设备卡资源扫描上报。这是K8s提供的通用方式,但通用方案在支持专用芯片方案上略显不足:

  • 在GPU层面,用户在Pod里只能支持申请整卡的方式,不支持共享卡,这会导致单个物理卡资源层面浪费;

  • 在集群层面,缺少GPU分配信息,用户很难看到GPU和容器的关联关系;

  • 每个GPU的Provider都会实现各自的Device Plugin,在一个集群里面Device Plugin方案增多,从而会变得很复杂。

基于这些问题,我们提出了改进方案:

  • 支持整卡分配与GPU共享,以降低客户层面复杂度;

  • 用户在集群里面能以直观方式查看物理卡分配信息,增加GPU在K8s集群里的可见性;

  • 支持统一Device Plugin,降低管理员复杂度。

36bd7f48adfec39f4cc4c538e405ecc6.png

通过云原生方式管理GPU资源

25b2c5d75995e9bcc0f9a6cce6678a7b.png

在此背景下,我们根据业务需求支持用户通过云原生方式管理GPU资源。此方案分为四个模块:

  • 在前端资源层面有两个标准化资源定义GPU Core和GPU Memory;

  • 在GPU CRD里能看见物理卡与容器所用资源的关系,用户可获取到集群GPU资源分配情况,增加了物理卡在集群的可见性;

  • 自研GPU Extender Scheduler扩展调度器可以针对GPU资源做精细化调度,提升集群层面分配效率,感知单个物理卡资源。

  • Device Plugin Agent提供了一个通用化框架,支持任意基于Device Plugin的发现机制;在框架上实现了主流的GPU Provider支持,降低了用户管理成本。

统一GPU资源

fde5bcf2f30b221e746ea1c8d4c1720e.png

在资源层面,定义两个标准的GPU资源:

  • qgpu-core:将单卡算力分成一百份,每一份代表1%,用户可以做共享卡申请;

  • qgpu-memory:目前是GB为单位,用户可以在单卡内部申请部分显存。

使用层面来说,和原有整卡使用没有区别,只是资源由我们提供。方案也可以实现整卡的分配,如果算力小于一百就是共享卡模式,如果算力值是大于一百的整数倍,用户就可以做整卡的申请。

在K8s里有CRD实现,一个CRD对应单个节点层面的一个物理卡。

下图右侧是CRD里存在的信息,包括GPU物理卡本身所具有的资源。管理员也可根据我们提供的CRD查看集群层面GPU卡的分配情况,使集群层面GPU资源管理难易程度大大降低。

331bb6d03825e6a0a496245242ae6bb5.png

统一GPU框架

84fed818e63e6a09edbe4db87c4f830e.png

在底层的Unified GPU Device plugin Framework里,为用户层面提供了统一的入口,并且和主流Device Plugin做了融合,支持整卡分配以及和自己的GPU容器化方案做深度集成。最终可以通过一个Device Plugin在集群里面实现任意GPU技术,简化用户GPU使用及申请复杂度,GPU使用效率得到很大提升。

539517ab5522eb82d617ab009617006b.png

通过qGPU共享提升GPU使用率

通过GPU共享在底层提升资源利用率,我们用到了qGPU技术。qGPU技术本质是GPU容器化技术,它能够完成三大功能:

  • 多容器共享GPU;

  • 算力/显存强隔离;

  • 在离线混合部署。

它有以下特点:

  • 灵活性:精细配置GPU算力占比和显存大小;

  • 强隔离:支持显存和算力的严格隔离;

  • 在离线:支持业界唯一在离线混部能力,GPU利用率压榨到极致;

  • 覆盖度:支持覆盖主流卡T4、V100及Ampere架构A10、A100等;

  • 云原生:支持标准Kubernetes和NVIDIA Docker;

  • 兼容性:业务不重编、CUDA库不替换、业务无感;

  • 高性能:GPU设备底层虚拟化,高效收敛,吞吐接近0损耗。

qGPU技术框架

626d05b879699ac859d6fe78e92de9ba.png

在K8s层面围绕qGPU做了K8s扩展调度器以及Device Plugin,在底层的qGPU Container Runtime里做qGPU设备创建、申请以及管控。在英伟达方案里,基于英伟达UMD和KMD之间做接口层面的拦截,由于是在内核层面做隔离,因此层级越低颗粒度越高。

在一个K8s集群里,可以使用不同GPU的资源。在调度层面中可以支持单个GPU物理卡级别,节点和GPU可以实现双层binpack/spread调度。在节点层面中可以根据整个GPU卡使用情况支持binpack/spread不同的调度策略,在调度器中可以感知到物理卡以满足用户调度需求。

qGPU算力隔离策略

在底层算力隔离层面,除了强隔离方式以外还支持:

  • Best Effort(争抢模式):默认值。各个Pod不限制算力,只要卡上有剩余算力就可使用,如果一共启动N个Pod,每个Pod负载都很重,则最终结果就是1/N的算力;

  • Fixed Share(固定配额):每个Pod有固定的算力配额,无法超过该配额,即使GPU还有空闲算力;

  • Burst Share(弹性配额):调度器保证每个Pod有保底的算力配额,但只要GPU还有空闲算力,就可被Pod使用。例如,当GPU有空闲算力时(没有分配给其他Pod),Pod可以使用超过它的配额的算力。注意,当它所占用的这部分空闲算力再次被分配出去时,Pod会退掉它的算力配额。

qGPU在离线混部

在qGPU层面支持高优和低优两种Pod定义,比如在线推理一般是高优Pod,低优任务一般是离线训练。但低优任务GPU利用率占有较高,可以使用闲置资源。

有了在离线混部技术之后,可以将在线推理设置成高优Pod,将离线训练设置成低优Pod,把高优推理打散分布,能保证在线业务有需求时把GPU底层资源100%抢占,这样在线推理业务总能使用GPU资源,并且支持离线使用空闲资源,利用率可从50%提升到100%。

1c335e5a96e713b3a4f4f5bb4dbeff00.png

qGPU性能

要做共享就要先保证隔离,判断隔离的好坏在于:

  • 吞吐不能因为有共享之后降低;

  • 延迟不能因为有共享之后有很大抖动;

  • 单个Pod只占用申请部分资源。

最终我们做到了强隔离以及通过GPU共享方式做到提高资源利用率,降低成本。

fa1a7a2af542c30d6afa117782809758.png

qGPU实际收益

  • 已帮助上万GPU提升利用率;

  • 提升在线推理70%利用率;

  • 在离线混部提升100%;

  • 平均增加100%部署密度。

632aab460d4db6483d63f3c5f54eb6d2.png

总结

本次分享,介绍了如何使用云原生的方式管理GPU资源以及通过qGPU共享方式提高GPU使用率,降低了集群层面GPU资源的管理难易程度,使用效率得到提升。

【原动力×云原生正发声降本增效大讲堂】第一期聚焦在优秀实践方法论、资源与弹性、架构设计;第二期聚焦全场景在离线混部、K8s GPU资源效率提升、K8s资源拓扑感知调度主题,点击『此处』进入活动专题,带你体验云原生降本增效实践案例、了解如何解决企业用云痛点、掌握降本增效关键技能……


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK