李波,腾讯云高级工程师,Kubernetes 社区积极贡献者,多年 PaaS 平台及 Kubernetes 研发经验,目前负责 TKE qGPU 产品研发。
TKE qGPU 是腾讯云推出的 GPU 容器共享技术,支持在多个容器间共享 GPU 卡并提供容器间显存、算力强隔离的能力,在保证业务稳定的基础上,达到提高 GPU 使用率、降低成本的目的。
TKE qGPU 支持单个容器的百分比算力及显存 MB 级调度,同时支持分配单卡或者多卡,满足业务同时使用 GPU 共享及整卡独占的场景。该统一调度方案帮助客户提升了资源分配效率,但也同时带来了因切卡产生碎片导致无法分配整卡资源的挑战。这会在集群层面造成一定的资源浪费。
为了解决该资源碎片问题,为用户提供更好、更细粒度的调度能力,TKE qGPU 设计了两层调度方案,用户可以在节点和 GPU 卡两个维度灵活配置不同调度策略,从而进一步提升资源分配效率。
TKE qGPU Scheduler 支持节点和 GPU 卡两个层面的调度,每个调度层级均支持 binpack 或者 spread 策略,通过不同层的调度策略组合,更好的贴合用户场景。
TKE qGPU 定义了算力和显存两种 GPU 资源。TKE qGPU 调度器将每张卡算力切分成 100 份,每个算力单位代表 1% 整卡算力。显存为 MB 级切分。这些资源会在节点 TKE qGPU device plugin 启动时自动发现和上报。TKE qGPU Scheduler 会在内存 cache 中维护节点与 GPU 卡的分配信息。
用户在创建 Pod 时,可为每个容器申请共享卡资源:
apiVersion: v1
kind: Pod
metadata: test-qgpu
spec:
containers:
- name: test1
image: nginx
resources:
limits:
tke.cloud.tencent.com/qgpu-core: 20 // 20% 算力
tke.cloud.tencent.com/qgpu-memory: 256 // 256MB 显存
或者通过 100 倍数申请整卡资源。
apiVersion: v1
kind: Pod
metadata: test-qgpu
spec:
containers:
- name: test1
image: nginx
resources:
limits:
tke.cloud.tencent.com/qgpu-core: <100|200|300|...> // 整卡
TKE qGPU Scheduler 通过实现 Kubernetes extender scheduler 和 scheduler framework 接口与 Kubernetes 集成。在预选阶段,qGPU Scheduler 会遍历每个节点找到最合适的 GPU 卡进行调度,具体由 GPU 卡调度器决策。在优选阶段,qGPU Scheduler 会根据两个资源分配率的加权平均打分。考虑到显存绝对隔离,而算力可以共享,我们把显存权重设为 0.8,算力权重设为 0.2,并提供以下两种策略:
GPU 卡调度是指在选定节点后进行卡维度的分配决策,为 Pod 中每个容器选择和分配节点上的 GPU 卡。GPU 卡的调度策略与节点类似,通过计算每张 GPU 卡的算力和显存加权平均的资源装箱率,来选择最优的卡进行分配。在满足容器资源需求的前提下,通过不同的策略来选择 GPU 卡:
为了解决共享 GPU 场景下的碎片问题,更好的帮助用户提升 GPU 资源分配效率,TKE qGPU 设计开发了节点和 GPU 卡两个层次的调度和装箱策略,用户可以根据自身业务场景选择合适的调度策略,在提高 GPU 利用率的同时提升 GPU 分配效率,最终帮助用户最大程度降低用卡成本。
目前 TKE qGPU 已全量上线,详情请戳:https://cloud.tencent.com/document/product/457/61448
往期精选推荐