想象你是一栋“算力大厦”的物业经理,大厦里每一层都有一间装满顶级GPU的“算力房”。Kubernetes是你的智能物业管理系统,各路AI团队则是形形色色的租户:有的要跑千亿参数大模型训练,有的做在线推理服务,还有的只是临时跑个实验。问题来了——一间算力房,怎么分配给需求天差地别的租户?业内给出了三条主流路径:时间分片像共享会议室的轮班制,MIG分区像砌了实体墙的独立单间,vGPU则像用活动隔断灵活划分的开放办公区。这三套方案各有代价:轮班制切换繁琐、实体墙格局固定、活动隔断要花钱买还要忍受隔音差。本文带你看懂三种方案的原理、优劣,以及如何像资深物业经理一样做选型决策。

岗位关联

掌握GPU调度方案对比,你就能在AI集群建设中做出科学的资源分配决策,避免“一卡难求”与“算力过剩”并存的尴尬,这是云原生AI平台工程师的核心竞争力之一。

目录
  1. 可视化演示
  2. 调度基础:物业管家如何给GPU记账
  3. 时间分片:共享会议室的轮班制
  4. MIG分区:实体隔断的独立单间
  5. vGPU方案:活动隔断的灵活套房
  6. 选型决策:给大厦挑一套房间模式
  7. 落地实践:从图纸到入住验收
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

从隔离强度、性能开销与兼容性三个维度,对比时间分片、MIG分区与vGPU三种GPU调度方案。

本节配有交互动效(进入视口后自动加载,约 3KB)。

三方案对比 时间分片 MIG vGPU 隔离×开销×兼容 三方案权衡不同

调度基础:物业管家如何给GPU记账

你是“算力大厦”的物业经理,3层的算力房装满了顶级GPU。租户想用房,第一步不是直接冲进去,而是先看物业前台的账本——这间房现在还能用几张卡?Kubernetes就是这套智能账本系统。但GPU不是K8s原生认识的资源,它需要一群“话事人”替它发声。这群话事人就是设备插件(Device Plugin),它们像楼层管家一样,每张卡的分配和回收都要经手。

设备插件定时向Kubelet汇报:“我这里还有4张A100可用。”Kubelet再把GPU注册成一种特殊的扩展资源(Extended Resource),比如 nvidia.com/gpu。调度器看到某个Pod声明要1张GPU,就翻账本找有空闲的节点。调度器干活分两步:Filter(过滤)和Score(打分)。Filter阶段先把GPU已分配完的节点踢出候选名单;Score阶段再根据资源富余程度、节点亲和性打分,选出最优节点。整个过程的记账逻辑很简单:

物业管家的账本是一切分房方案的起点。只有先把“哪层楼有几张卡、谁占了几张”记清楚,后面无论用时间分片、MIG还是vGPU,才不会乱套。

Navailable=Ntotal−Nallocated\displaystyle N_{\text{available}} = N_{\text{total}} - N_{\text{allocated}}
当前可调度的GPU数量等于设备插件上报的总量减去已被Pod占用的数量,这是调度器Filter阶段的核心判断。
  1. 资源总量(N_total)节点上所有GPU的总数,由设备插件上报给Kubelet,相当于账本的“期初余额”。
    NtotalN_{\text{total}}
  2. 已分配量(N_allocated)已经绑定给现有Pod的GPU数量,每分配走一张卡,账本就要扣减一次。
    NallocatedN_{\text{allocated}}
  3. 可调度量(N_available)Filter阶段实际使用的数值,只有大于等于Pod需求的节点才有资格进入下一轮打分。
    Navailable=Ntotal−NallocatedN_{\text{available}} = N_{\text{total}} - N_{\text{allocated}}

时间分片:共享会议室的轮班制

物业把3层算力房装修成了“共享会议室”。A团队9点到10点用,B团队10点到11点用……大家都用同一个房间、同一套设备,但谁也不能独占。这就是时间分片:GPU还是那张GPU,多个Pod按时间片轮流占用,底层硬件自动做纳秒级的轮转切换。每个Pod看到的是“整张卡”,显存可以被隔离,但计算核心是共享的——你跑一个重任务,可能把邻居的推理延时瞬间拖高。

时间分片最大的代价是切换开销。就像轮班制里每人交班时都要收拾桌面、交接进度,GPU在Pod之间切换也要保存和恢复上下文(缓存、寄存器状态等)。任务切得越细,切换越频繁,浪费在“交班”上的时间就越多。这个效率可以用公式衡量:

共享会议室适合临时开短会(开发调试、低优先级批处理任务),但若让重要客户做路演(生产推理),没人受得了每小时被“清场换班”。时间分片给了你灵活,也给不了你安稳。

η=TsliceTslice+Tswitch\displaystyle \eta = \frac{T_{\text{slice}}}{T_{\text{slice}} + T_{\text{switch}}}
GPU“真正干活”的时间占比等于单个时间片除以时间片加切换开销之和。切换越频繁,有效利用率越低。
  1. 时间片(T_slice)每个Pod一次连续占用GPU执行计算的时间段,这是“干活”的时间。
    TsliceT_{\text{slice}}
  2. 切换开销(T_switch)从一个Pod切换到另一个Pod时,保存和恢复上下文所花费的时间,这是“交班”的损耗。
    TswitchT_{\text{switch}}
  3. 有效占比(η)GPU真正用于计算的时间占总时间的比例,反映时间分片方案的实际利用效率。
    η=TsliceTslice+Tswitch\eta = \frac{T_{\text{slice}}}{T_{\text{slice}} + T_{\text{switch}}}

MIG分区:实体隔断的独立单间

物业觉得轮班制太闹腾,决定把算力房改成三个“实体隔断的独立单间”。隔断是实打实的墙,房间里的人互不干扰:你砸你的代码,我跑我的训练,隔壁就算把墙敲得咚咚响,你也听不见。这就是MIG(Multi-Instance GPU)分区。MIG是NVIDIA A100、H100等高端卡上的硬件特性,能在物理层面把一块GPU分割成多个独立的GPU实例。

每个MIG实例拥有独立的流式多处理器(SM)和显存通道,相当于真正的独立单间。Pod通过指定实例标识(如 nvidia.com/mig-1g.5gb)入住对应房间,实例之间共享L2缓存和显存带宽的部分也被硬件隔离。硬件级隔离带来了三个好处:显存隔离、算力隔离、故障域隔离——一个实例崩了不会殃及邻居。但代价是“格局固定”:墙砌好就改不了,分区只能在GPU初始化时确定,不能运行时热调整。单个实例的算力可以这样估算:

独立单间让租户住得安稳,但想临时把两个单间打通开大会?不行,墙是承重墙。MIG适合对隔离和稳定性要求极高的生产任务,但如果你要的是“今天2个房间、明天4个房间”的弹性,它就不太灵活了。

Cinstance≈NSMK×fclock×μ\displaystyle C_{\text{instance}} \approx \frac{N_{\text{SM}}}{K} \times f_{\text{clock}} \times \mu
单个MIG实例的算力约等于整卡流处理器总数除以分区数,再乘以主频和利用效率,反映“按墙切分”的硬性约束。
  1. 流处理器总数(N_SM)整块GPU上的流式多处理器总数,是所有算力的来源。
    NSMN_{\text{SM}}
  2. 分区数(K)MIG把GPU切成的实例数量,分区越多,每份分到的SM越少。
    KK
  3. 时钟频率(f_clock)SM运行的主频,频率越高算力越强。
    fclockf_{\text{clock}}
  4. 实例算力(C_instance)估算出的单个实例算力,等于平均分到的SM数乘以频率和平均利用率。
    Cinstance≈NSMK×fclock×μC_{\text{instance}} \approx \frac{N_{\text{SM}}}{K} \times f_{\text{clock}} \times \mu

vGPU方案:活动隔断的灵活套房

有些租户嫌实体墙太死板:今天团队3个人要个大间,明天走了俩要个小间。物业于是引入“活动隔断”——用可移动板材随时把大空间隔成小空间。这就是vGPU方案:通过软件虚拟化层,把一块物理GPU按需切成任意大小的“虚拟GPU”。技术栈很丰富:NVIDIA官方vGPU需要License授权,阿里云有cGPU,腾讯云有qGPU,还有开源方案等。

它们的共同点是都有一层软件虚拟化层,拦截驱动调用,把整卡按显存和算力比例切成多个vGPU实例。在Kubernetes里,通常配合虚拟化设备插件把切分能力暴露给调度器。vGPU最大的优势是粒度极细:可以1GB、2GB地切,完全按租户需求动态调整。不像MIG只能选固定几档规格,vGPU能做到“今天隔成三间,明天隔成五间”。但软件层也有代价:虚拟化层打包解包指令需要额外开销,通常造成5%~10%的性能损失,损耗率定义为:

活动隔断的套房想怎么隔就怎么隔,弹性极佳,但隔音一般——软件虚拟化免不了性能损耗,而且买隔断还得花钱(License按卡的规格收费)。vGPU特别适合租户多、需求杂、追求资源利用率的平台型场景。

δ=(1−PvirtualPphysical)×100%\displaystyle \delta = \left( 1 - \frac{P_{\text{virtual}}}{P_{\text{physical}}} \right) \times 100\%
性能损耗率等于1减去虚拟化后单实例性能与物理整卡性能之比,再乘100%。典型值在5%~10%之间。
  1. 物理性能(P_physical)整块GPU不经过虚拟化、直接跑任务的吞吐量,比如每秒处理的推理图片数。
    PphysicalP_{\text{physical}}
  2. 虚拟化性能(P_virtual)经过虚拟化切分后,单个vGPU实例的吞吐量,通常略低于同比例的物理性能。
    PvirtualP_{\text{virtual}}
  3. 损耗率(δ)两者差值占物理性能的百分比,损耗越小,虚拟化方案越接近裸卡性能。
    δ=(1−PvirtualPphysical)×100%\delta = \left( 1 - \frac{P_{\text{virtual}}}{P_{\text{physical}}} \right) \times 100\%

选型决策:给大厦挑一套房间模式

看完三种装修方案,物业经理要拍板了:算力房到底用哪种?答案不是“越贵越好”,而是“看租户是谁”。研发小哥想省钱跑个实验,金融客户要求硬隔离保证SLA,互联网客户要求弹性和高利用率。不同租户,需求天差地别,所以要把三套方案的“体检报告”摊开对比。

先看隔离强度:MIG最强(硬件级),vGPU次之(软件级),时间分片最弱(算力几乎裸奔)。再看性能开销:MIG最接近原生,vGPU有约5%~10%损耗,时间分片则看任务切换频率。兼容性上,vGPU对上层应用最友好(驱动层虚拟化对应用透明),MIG要求应用适配实例规格,时间分片最省心。成本维度:时间分片零成本,MIG依靠硬件特性免费但只有高端卡才有,vGPU常要License。把这些维度量化打分,选型就变成一道加权平均题:

物业的终极智慧不是选“最好的隔断”,而是为不同楼层配不同装修。同一栋大厦里,底层做实体单间(MIG)给核心生产,中层做灵活套房(vGPU)给多租户平台,顶层做共享会议室(时间分片)给研发调试——混合调度往往是集群的最佳实践。

Sscore=w1Siso+w2Sperf+w3Scost+w4Scomp\displaystyle S_{\text{score}} = w_1 S_{\text{iso}} + w_2 S_{\text{perf}} + w_3 S_{\text{cost}} + w_4 S_{\text{comp}}
综合评分等于各维度得分乘以对应权重后求和。权重反映业务侧重点:要硬隔离就把w1调大,要省钱就把w3调大。
  1. 隔离评分(S_iso)对租户间干扰的隔离能力打分,MIG最高,时间分片最低。
    SisoS_{\text{iso}}
  2. 性能评分(S_perf)方案接近原生GPU性能的程度,性能损耗越小分越高。
    SperfS_{\text{perf}}
  3. 成本评分(S_cost)包含License、运维和改造成本的打分,成本越高分越低。
    ScostS_{\text{cost}}
  4. 权重(w_i)各维度的相对重要程度,所有权重之和为1,由业务场景决定。
    ∑iwi=1\sum_{i} w_i = 1

落地实践:从图纸到入住验收

方案定了,接下来是施工和验收。物业要先搞“试住”:让每套房间跑一遍标准测试,看实际隔音效果(隔离性)和空调效率(性能),再装上水电表(监控)看入住后的真实数据。AI集群也一样,上线前必须做基准测试和监控布防。基准测试要贴近真实负载:跑一遍你的模型训练和推理服务,记录吞吐量、延时、显存占用。用NVIDIA的DCGM配合Prometheus和Grafana,可以采集GPU利用率、温度、显存带宽、SM占用等指标。

监控要特别注意“GPU利用率”的定义。太多人只看显存占用率就以为GPU很忙,其实显存大不代表计算核心在干活——数据放进去没人算,核心照样空转。真正该看的是SM(流式多处理器)的忙闲时间占比:

入住后,物业还要定期巡逻:检查MIG分区状态是否漂移、设备插件是否假死、时间分片下有没有租户“霸占会议室”(单个Pod吃满算力拖垮邻居)。有了监控和应急预案,这栋算力大厦才能真正平稳运转。

UGPU=TbusyTbusy+Tidle\displaystyle U_{\text{GPU}} = \frac{T_{\text{busy}}}{T_{\text{busy}} + T_{\text{idle}}}
GPU利用率是计算单元SM的忙闲时间占比,而不是显存占用率。显存大不代表算力在跑。
  1. 忙时(T_busy)SM上有实际计算指令在执行的累计时间,这才是“真干活”的时长。
    TbusyT_{\text{busy}}
  2. 闲时(T_idle)SM空闲等待、没有任务可算的累计时间,对应“开小差”的时长。
    TidleT_{\text{idle}}
  3. 利用率(U_GPU)忙时占忙闲总时间的比例,这个数值才能真正反映GPU算力是否被充分利用。
    UGPU=TbusyTbusy+TidleU_{\text{GPU}} = \frac{T_{\text{busy}}}{T_{\text{busy}} + T_{\text{idle}}}

AI 应用场景

训练与推理混部的资源池化

阶段:资源调度与平台工程

解决的问题:训练任务和推理服务混部在同一批GPU上时,训练任务经常吃满算力,把推理服务的尾延时瞬间拉高,SLA无法保证。传统做法是物理隔离集群,GPU利用率只有30%左右,资源严重浪费。

具体案例:某自动驾驶公司用MIG把A100切成3个实例,推理服务独占一个实例,两个训练任务共享另外两个实例。MIG的硬件隔离保证推理延时稳定在10ms以内,同时训练资源利用率提升到70%以上。

多租户GPU云平台的弹性售卖

阶段:资源管理与计费

解决的问题:GPU云平台上有大量中小租户,需求从1GB到16GB不等,MIG固定档位太粗,整卡独占又太贵。传统整卡租用模式下,小租户要么买不起、要么浪费严重。

具体案例:某MaaS平台用vGPU方案把每张A100切成8份,按1GB粒度动态售卖,租户可以在控制台自助调整。配合定制设备插件,K8s调度器能感知到千级vGPU实例,平台整体GPU利用率从35%提升到85%。

开发调试环境的低成本供给

阶段:开发测试与CI/CD

解决的问题:大模型团队几十个研究员、算法工程师天天要跑实验,每人独占一张卡利用率不到5%。传统排队等卡的方式严重拖慢迭代节奏,而买新卡成本又太高。

具体案例:某大模型团队用时间分片方案,让30个开发Pod共享4张A100,每人随时可以提交实验,平均等待时间从2小时降到10分钟。虽然性能隔离弱,但开发调试任务本身对性能抖动不敏感,完美匹配。

Python 演示

python93 行
"""GPU调度方案对比模拟器模拟时间分片、MIG分区、vGPU三种方案处理一批任务的表现"""import randomfrom dataclasses import dataclassfrom typing import List  @dataclassclass Task:    """一个GPU任务的抽象表示"""    name: str       # 任务名    mem: float      # 显存需求(GB)    time: float     # 期望执行时长(秒)  def gen_tasks(n: int = 24, seed: int = 42) -> List[Task]:    """生成随机任务负载,模拟真实集群中的混合负载"""    random.seed(seed)    tasks = []    for i in range(n):        tasks.append(Task(            name=f"job-{i}",            mem=round(random.uniform(2, 10), 1),            time=round(random.uniform(1, 8), 1)        ))    return tasks  def time_slice(tasks: List[Task], total_mem: float = 32.0,               slice_s: float = 0.5) -> dict:    """时间分片:所有任务轮流复用整卡,每次切换固定开销"""    queue = [t for t in tasks if t.mem <= total_mem]    remain = {t.name: t.time for t in queue}    clock = 0.0    total_work = sum(remain.values())    switch_cost = 0.05    while any(remain.values()):        for t in queue:            if remain[t.name] <= 0:                continue            run = min(slice_s, remain[t.name])            remain[t.name] -= run            clock += run + switch_cost  # 切换开销    return {        "mode": "time-slice",        "total_time": round(clock, 2),        "utilization": round(total_work / clock, 3)    }  def mig_partition(tasks: List[Task], total_mem: float = 32.0,                  parts: int = 4) -> dict:    """MIG静态分区:整卡切成parts个独立分区,任务按显存就近分配"""    part_mem = total_mem / parts    slots: List[List[Task]] = [[] for _ in range(parts)]    for t in tasks:        idx = min(int(t.mem // part_mem), parts - 1)        slots[idx].append(t)    total_work = 0.0    max_clock = 0.0    for slot in slots:        slot_work = sum(t.time for t in slot)        total_work += slot_work        max_clock = max(max_clock, slot_work)    return {        "mode": "mig",        "total_time": round(max_clock, 2),        "utilization": round(total_work / (max_clock * parts), 3)    }  def vgpu_slice(tasks: List[Task], total_mem: float = 32.0,               overhead: float = 0.06) -> dict:    """vGPU:按需动态切分,每任务有overhead比例的虚拟化损耗"""    total_work = sum(t.time for t in tasks if t.mem <= total_mem)    clock = total_work / (1 - overhead)  # 损耗等效为时间膨胀    return {        "mode": "vgpu",        "total_time": round(clock, 2),        "utilization": round(total_work / clock, 3)    }  if __name__ == "__main__":    tasks = gen_tasks()    print(f"模拟任务数: {len(tasks)}")    for fn in (time_slice, mig_partition, vgpu_slice):        result = fn(tasks)        print(f"{result['mode']:>11s} | "              f"完成时间: {result['total_time']:6.2f}s | "              f"利用率: {result['utilization']:.1%}")
目的:用一个小型离散事件模拟器对比三种GPU调度方案在相同任务负载下的完成时间与利用率,帮助理解方案的性能特征。
  1. random.seed(seed)固定随机种子,保证三组对比实验的输入完全一致,结果才可比。
  2. if t.mem <= total_mem显存超限的任务无法分配,好比物业拒绝“超员入住”的申请。
  3. clock += run + switch_cost每次切换都记一笔账,时间分片的核心代价就藏在这一行。
  4. idx = min(int(t.mem // part_mem), parts - 1)按显存需求就近归入某个MIG分区,体现“按墙归位”的静态分配逻辑。
  5. total_work / (max_clock * parts)MIG利用率要除以并行分区数,因为多个分区是同时干活的。
  6. total_work / (1 - overhead)vGPU的虚拟化损耗被等效为执行时间膨胀,损耗越大完成越慢。

常见误区

误区时间分片不用买License、不用改架构,加个配置就能让多个Pod共享一张卡,性价比这么高,生产环境直接上呗。

正解时间分片确实零额外硬件成本,但代价是几乎没有算力隔离。一个Pod跑满算力会严重拖慢邻居,每次切换还有上下文开销。生产环境讲SLA,推理服务被训练任务拖到超时,省的钱不够赔的。它适合开发调试、批处理等对延时不敏感的任务,不适合承载核心生产。

为何常见:新手只看到“共享=省钱”的表面,没意识到算力是争抢式资源,不像显存那样切好就各用各的。

误区MIG就是把显存平均切成几块,每块一个实例,显存大的分区性能就强,跟内存条分区差不多。

正解MIG的隔离同时作用于显存和计算核心(SM),分区规格由GPU厂商定义(如1g.5gb、2g.10gb),是对SM数量与显存容量的组合限制。比如2g实例的算力约是1g的两倍,但显存也按规格绑定,不能只切显存不动算力。理解这一点,才能正确估算实例能力。

为何常见:显存是用户最容易感知的资源,容易忽略SM才是算力本体,于是把“切显存”误当成“切GPU”。

误区网上开源vGPU方案一大把,用K8s包装一下就能免费切分GPU,NVIDIA官方vGPU要花钱,开源的不花钱。

正解NVIDIA官方vGPU需要购买License并按卡授权,费用不低。开源方案(如阿里cGPU、腾讯qGPU)要么绑定特定云厂商,要么功能受限、兼容性差,维护成本很高。任何“免费vGPU”都要把开发、调优和故障排查的人力成本算进去,综合成本未必比官方方案低。

为何常见:开源软件让人误以为零成本,忽略了工程化落地需要的持续投入,这是“开源免费”最常见的心智误区。

误区Grafana面板上显存显示80%,GPU一定很忙,利用率没问题,不需要加资源了。

正解显存占用只说明数据已经放进显存,SM(计算核心)完全可能一直在空转。模型小但推理频繁时,显存低但利用率高;模型大且批处理慢时,显存高但利用率低。判断GPU是否繁忙要看SM的busy时间占比,而不是显存占用率。

为何常见:监控面板默认展示显存曲线,SM利用率的采集配置更繁琐,最先看到的数字容易让人形成错误判断。

误区只要给节点装上NVIDIA驱动,K8s就能自动发现并调度GPU,Pod声明一下就能用上。

正解K8s对GPU一无所知,必须部署NVIDIA Device Plugin把GPU注册成扩展资源(nvidia.com/gpu),调度器才能感知和分配。设备插件一旦挂掉,节点上的GPU就“凭空消失”,所有调度请求都会Pending。这也是平台巡检时要重点监控设备插件健康状态的原因。

为何常见:装完驱动后 nvidia-smi 能看到卡,就误以为K8s也能看到,忽略了设备插件这道关键的“翻译桥”。

面试题

Q1. Kubernetes中GPU资源如何被调度器感知?

单选题 · easy

  • A.通过 Device Plugin 将 GPU 上报为扩展资源← 正确答案
  • B.通过 CPU Manager 静态绑定 CPU 核心
  • C.通过 HPA 自动扩缩容器副本来扩容
  • D.通过 CNI 网络插件上报虚拟网卡

答案:A。GPU属于扩展资源,必须由Device Plugin向Kubelet上报,调度器才能感知并分配。CPU Manager管CPU绑核,HPA管副本伸缩,CNI管网络,都和GPU资源感知无关。

Q2. 时间分片方案最大的技术代价是什么?

单选题 · mid

  • A.显存被物理分割成独立分区
  • B.切换开销和性能隔离变弱← 正确答案
  • C.GPU 无法同时运行多个任务
  • D.必须为每个任务购买许可

答案:B。时间分片让多个Pod轮流复用GPU,切换时存在上下文保存与恢复开销,且算力是争抢式的,隔离性弱。显存物理分割是MIG的特性,时间分片下GPU是能多任务并发轮转的,也不涉及License。

Q3. MIG分区提供哪些隔离能力?

多选题 · mid

  • A.显存硬件级隔离← 正确答案
  • B.计算核心独立分配← 正确答案
  • C.故障域之间相互隔离← 正确答案
  • D.分区可动态无损调整

答案:ABC。MIG在物理层面隔离显存、独立分配计算核心(SM),且故障域隔离——一个实例崩了不影响邻居。但MIG是静态划分,分区创建后固定,无法动态无损调整,所以D错误。

Q4. vGPU相比MIG的核心优势是什么?

单选题 · hard

  • A.可以实现零性能损耗
  • B.更细粒度的灵活切分← 正确答案
  • C.不需要额外的虚拟化层
  • D.原生支持容器热迁移

答案:B。vGPU通过软件虚拟化层按需切分,粒度可以做到1GB级且动态可调,这是相比MIG固定档位的核心优势。它恰恰需要虚拟化层且有性能损耗,也不可能零损耗;同时它并不原生支持容器热迁移。

Q5. 显存可隔离但算力共享的调度方式属于哪种方案?

单选题 · mid

  • A.MIG 静态物理分区模式
  • B.时间分片共享轮转模式← 正确答案
  • C.整卡独占直通分配模式
  • D.CPU 绑核优化调度模式

答案:B。时间分片下每个Pod看到整张卡,显存可以按需切分隔离,但计算核心是共享抢用的。MIG是显存与算力双重物理隔离,整卡独占则无共享,CPU绑核与GPU调度无关。

Q6. Kubernetes调度GPU需要哪些组件配合?

多选题 · easy

  • A.Device Plugin 上报资源← 正确答案
  • B.Extended Resource 注册← 正确答案
  • C.调度器 Filter 与 Score← 正确答案
  • D.CoreDNS 服务发现组件

答案:ABC。Device Plugin把GPU上报给Kubelet并注册为扩展资源,调度器通过Filter筛选有卡节点、Score选择最优节点。CoreDNS负责集群内域名解析,与GPU调度无直接关系。

Q7. 下列关于MIG“静态划分”的描述正确的是?

单选题 · hard

  • A.启动时可任意调分区大小
  • B.创建后固定需重建实例← 正确答案
  • C.软件动态扩展显存容量
  • D.分区共享 L2 缓存提速

答案:B。MIG分区在GPU初始化时确定,创建后规格固定,要改变必须销毁实例重建,这就是“静态划分”。启动时不可任意调整,也不能动态扩展显存;L2缓存虽然共享但这是隔离机制的细节,不是“静态划分”的含义。

Q8. 判断GPU算力是否繁忙最可靠的指标是?

单选题 · mid

  • A.显存占用率高代表 GPU 忙
  • B.SM 忙闲占比才是利用率← 正确答案
  • C.利用率越高越好到 100%
  • D.利用率与调度方案无关

答案:B。GPU利用率应看SM(流式多处理器)的忙闲时间占比。显存占用高只说明数据放进了显存,核心可能空转;利用率也不是越高越好(如推理服务需预留冗余);调度方案直接影响利用率表现,D错误。

Q9. 生产环境选择GPU调度方案时应优先考虑哪些因素?

多选题 · mid

  • A.隔离强度要满足租户 SLA← 正确答案
  • B.性能损失在可接受范围← 正确答案
  • C.兼容性与维护成本可控← 正确答案
  • D.只看单一指标最大化选型

答案:ABC。选型需要综合考虑隔离强度(满足租户SLA)、性能接受度、兼容性和长期维护成本,用加权评分决策。只看单一指标(比如只图便宜)会忽略其他维度的风险,D是典型错误思路。

Q10. 设备插件(Device Plugin)的主要职责是什么?

单选题 · easy

  • A.给容器注入 GPU 驱动文件
  • B.将 GPU 上报 Kubelet 并管理← 正确答案
  • C.替代调度器分配 GPU 实例
  • D.负责 GPU 驱动升级与补丁

答案:B。Device Plugin负责向Kubelet上报GPU资源并管理其生命周期(分配、回收、健康检查),让调度器能感知GPU。驱动注入和升级是节点初始化与运维的工作,插件也不替代调度器做决策。