前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Improving GPU Utilization in Kubernetes

Improving GPU Utilization in Kubernetes

原创
作者头像
jimmyhzhang
修改2020-12-29 14:24:37
1.1K0
修改2020-12-29 14:24:37
举报

Introduction

Problem Statement

目前,Kubernetes通过Device Plugin和Extended Resource机制支持在集群中使用GPU等异构资源,但官方的实现限制了只能以独占的方式使用资源,即资源分配的最小粒度是一张卡。在深度学习领域模型推理等场景下,一个客观存在的事实是,上层应用往往无法跑满独占的整卡资源,这就导致了资源的闲置和浪费,考虑到GPU较高的使用成本,提升其利用率就成为了用户的刚需。

User stories

● 作为集群管理员,我想要提升集群的GPU利用率

● 作为开发者,我想让我的多个推理任务同时跑在一张GPU卡上

● 作为集群管理员,我想让多个用户基于同一张GPU卡共享开发和测试资源

Goals

相比于独占,让多个任务共享GPU资源显然能提升资源利用率,这也是当下一些第三方解决方案提供的能力,但比“共享”本身更重要的可能是“如何共享”,不同的业务场景对共享策略的需求不尽相同。比如在资源固定的集群中,均衡负载有助于保障更好的服务质量,而在成本敏感的自动扩缩容场景下,尽量将每张卡“填满”则是更优的策略。此外在混部的场景下,集群中可能需要同时部署独占GPU的应用和共享GPU的应用。本方案致力于解决这些需求,有如下目标:

  1. 提供多个应用共享GPU的能力
  2. 针对不同业务场景,提供对应的共享策略
  3. 支持混部需求,可以按需指定独占或共享

Non Goals

本方案不解决以下领域的问题:

  1. 资源隔离:共享GPU资源的应用,实际资源使用量可以超过配额,这也意味着共享同一张卡的应用之间可能存在资源竞争
  2. 超卖:共享GPU资源的应用,其配额总和不会超过资源总量

Design Overview

Principles

● 该方案基于Kubernetes原生的扩展机制实现

● 不侵入任何Kubernetes原生组件

● 使用云原生的方式部署

Architecture

Components

GPU Manager Pro

GPU Manager Pro负责管理GPU设备,为K8s屏蔽底层资源。其功能主要包括:

  1. 资源注册
  2. 虚拟化设备列表并上报
  3. 维护物理设备和虚拟设备的映射关系
  4. 生成容器运行所需的GPU设备参数
  5. 监测物理设备的健康状态,同步虚拟设备的健康状态

GPU Scheduler Pro

GPU Scheduler Pro负责完成GPU场景下的Pod调度。其功能主要包括:

  1. 感知并维护集群范围内所有GPU设备的剩余资源量
  2. 在GPU卡的维度作出预选
  3. 实现Spread, Random, Binpack三种优选策略
  4. 在GPU卡的维度作出优选
  5. 根据调度结果,上报卡号,完成Pod到Node的绑定
  6. 感知物理设备健康状态,更新GPU设备的剩余资源量

Implementation

Steps

Node Initializing

Scheduling

Allocating

Issues

Priority Strategies

本方案提供三种优选策略:

● Spread

目标:均衡集群内GPU卡上的资源占用

算法:score=available resource*10/total resource

● Random

目标:随机发放任务

算法:score=rand0,10

● Binpack

目标:优先“填满”已经占用了资源的GPU卡

算法:score=(total resource-available resource)*10/total resource

Colocation

针对混部的场景,比如离线训练任务和在线推理任务运行在一个集群,本方案从设计上天生支持了该特性,用户只需按需填写即可实现相互隔离的混合部署,比如:

  1. 独占两张卡的任务:tencent.com/gpu-percent: "200"
  2. 占用60%卡资源的任务:tencent.com/gpu-percent: "60"

High Availability

● 硬件资源GPU卡

GPU Manager Pro通过nvml库Watch底层GPU物理设备的事件,当监测到物理设备健康状态发生变化时,会通过映射关系转换为虚拟设备的健康状态(如果虚拟设备数量不足,需要补全),上报Kubelet,驱动其更新可用设备列表;同时将物理设备健康状态Patch到Node  Annotation上,以使得GPU Scheduler Pro能够感知,进而影响调度。

● GPU Manager Pro

该组件部署为Daemonset,由Kubernetes保证其高可用

● GPU Scheduler Pro

该组件部署为Deployment,由Kubernetes保证其高可用

Data Consistency

● GPU Manager Pro

该组件可以参考Kubelet对Cache做文件持久化,或者直接复用Kubelet的Cache持久化文件(待验证)

● GPU Scheduler Pro

该组件的Cache是可重建的,每次启动都通过ListAndWatch API Server来创建缓存

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Introduction
    • Problem Statement
      • User stories
        • Goals
          • Non Goals
          • Design Overview
            • Principles
              • Architecture
                • Components
                  • GPU Manager Pro
                  • GPU Scheduler Pro
              • Implementation
                • Steps
                  • Node Initializing
                  • Scheduling
                  • Allocating
                • Issues
                  • Priority Strategies
                  • Colocation
                  • High Availability
                  • Data Consistency
              相关产品与服务
              容器服务
              腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档