资源隔离主要采用的是虚拟化的解决思路,目前NVIDIA有两种 GPU 虚拟化的解决方案:
目前社区的GPU调度方案:
1.Nvidia 贡献的调度方案,只支持按较粗粒度的调度,按GPU块数调度。
Nvidia GPU Device Plugin
2.阿里云服务团队贡献的 GPU 共享的调度方案,其目的在于解决用户共享 GPU 调度的需求Kubernetes GPU共享实践
gpushare-scheduler-extender
gpushare-device-plugin
相关资料: Kubernetes的共享GPU集群调度
前提条件:
实现思路:
依赖于Kubernetes的现有工作机制:
相关资料: AI 在 K8S 中的实践:云智天枢 AI 中台架构揭秘
实现思路:
相关资料: 基于 Kubernetes 的 GPU 类型调度实现
实现思路:
利用kubernetes现有的工作机制:
1. 通过CRD(CustomResourceDefinition)定义两种资源:ExtendedResource 和 ResourceClass
ExtendedResource 描述了一种扩展资源,比如 NVIDIA GPU;
ResourceClass 定义了容器选择哪种扩展资源,它的使用方式和 Kubernetes 中的 Extended Resource类似,用户可以直接在容器中指定,就像使用 CPU 和 Memory 一样。