岗位分支 · Compute
定位:管理 GPU/NPU 资源池,让训练、推理、评测高效共享算力 对应主路线:Ch4(算力资源调度) 典型团队:智算平台团队、AI 集群运维、HPC 团队
核心能力领域#
1. GPU/NPU 资源池管理#
- 硬件知识:A100/H100/H200/B200(英伟达)、昇腾 910B/950PR(华为)、海光 DCU、昆仑芯片
- GPU Operator:自动化驱动安装、Device Plugin、DCGM Exporter、MIG Manager
- 节点管理:GPU 节点打标签(
nvidia.com/gpu.product)、污点(NoSchedule)、亲和性 - 拓扑感知:NVLink/NVSwitch 域识别,RDMA 网络拓扑
节点标签设计:
yaml
# GPU 节点标签
metadata:
labels:
nvidia.com/gpu.present: "true"
nvidia.com/gpu.product: "NVIDIA-H100-80GB-HBM3"
nvidia.com/gpu.count: "8"
nvidia.com/mig.capable: "true"
topology.kubernetes.io/zone: "us-east-1a"
node.kubernetes.io/instance-type: "p5.48xlarge"2. 批调度系统(核心)#
Volcano:
- Gang Scheduling:PodGroup,minMember,all-or-nothing 语义
- Queue 层级:capability / guarantee / weight / reclaimable
- Action 类型:enqueue / allocate / preempt / backfill / reclaim
- 份额算法:proportion / drf / fairshare
- 与 Kubeflow TrainingOperator 集成(schedulerName: volcano)
Volcano Job 定义:
yaml
apiVersion: batch.volcano.sh/v1alpha1
kind: Job
metadata:
name: llm-training
spec:
minAvailable: 4 # Gang Scheduling
schedulerName: volcano
queue: ai-team-1
policies:
- event: PodEvicted
action: RestartJob
tasks:
- replicas: 4
name: worker
template:
spec:
containers:
- name: pytorch
resources:
limits:
nvidia.com/gpu: 8Kueue:
- 四层模型:ResourceFlavor → ClusterQueue → LocalQueue → Workload
- cohort 借用机制:borrowingLimit + reclaimWithinCohort
- 集成框架:RayJob / PyTorchJob / JobSet / MPIJob
Volcano vs Kueue 选型:
- 纯 AI 训练、K8s 原生 → Volcano
- 想要 upstream 方案、API 贴近原生 → Kueue
- 已有大量原生 Job → Kueue(不引入新 CRD)
3. GPU 共享虚拟化#
- MIG(A100/H100):物理切分,规格固定(1g.10gb / 2g.20gb / 3g.40gb)
- Time-Slicing:时间片轮转,无显存隔离,适合开发测试
- MPS:CUDA Multi-Process Service,同租户多进程并发
- HAMi:国产 GPU 共享方案,vGPU 级别显存+算力隔离
GPU 共享选型:
| 场景 | 推荐 |
|---|---|
| 生产多租户强隔离 | MIG |
| 灵活切分 + 国产化 | HAMi |
| 同租户多进程 | MPS |
| 开发测试 | Time-Slicing |
4. 资源治理#
- 资源碎片治理:binpack 策略减少碎片,防止大作业凑不齐整节点
- 优先级与抢占:紧急作业可以驱逐低优先级作业(需配合 checkpoint)
- Topology-aware Scheduling:NVLink 拓扑感知,GPU 尽量调度到同一 NVSwitch 域
- 弹性节点池:Karpenter + Spot Instance 降成本
碎片治理手段:
text
分离调度:小任务走独立队列,大任务走专用队列
Binpack:优先把小任务塞满已占用的节点
Anti-affinity:小 Pod 分散到不同节点,保留整机可用性
Preemption:需要整机的大作业可以抢占碎片任务5. 监控与成本#
- DCGM Exporter:GPU 温度、功耗、SM 利用率、显存、ECC 错误
- NCCL 指标:跨节点通信带宽、错包数
- 成本归因:按团队/队列维度的 GPU 占用时长
关键监控指标:
| 指标 | 来源 | 告警阈值 |
|---|---|---|
| GPU SM 利用率 | DCGM | < 20% 持续 30min(闲置) |
| GPU 显存 | DCGM | > 95%(OOM 风险) |
| GPU 温度 | DCGM | > 85°C |
| ECC 错误 | DCGM | 不可修复错误 > 0 |
| NCCL 错包 | NCCL | > 0 立刻告警 |
| Queue pending | Volcano/Kueue | 持续增长 |
加分方向#
- RDMA / InfiniBand / RoCE 网络调优
- 裸金属自动化装机(GPU 节点初始化)
- 国产 NPU 调度(升腾 vllm-ascend)
- 跨集群 GPU 调度(MultiKueue)
- Karpenter GPU 节点弹性伸缩
技能树#
text
基础(必备)
├── K8s 深入(调度器原理、CRD、Operator)
├── Linux 系统(性能分析、网络)
├── Shell / Python(自动化脚本)
└── Prometheus / Grafana(监控)
GPU 管理
├── GPU Operator / Device Plugin
├── DCGM Exporter(GPU 监控)
├── MIG 配置
├── nvidia-smi / nvidia-debugdump
└── RDMA / InfiniBand 基础
批调度
├── Volcano(PodGroup / Queue / Gang Scheduling)
├── Kueue(ResourceFlavor / ClusterQueue / cohort)
├── HAMi(GPU 共享虚拟化)
└── Slurm(传统 HPC,加分)
资源治理
├── Topology-aware Scheduling
├── 资源碎片治理(binpack / anti-affinity)
├── Karpenter(弹性节点池)
└── 成本归因与优化学习路径建议#
text
1. 先掌握 K8s GPU 管理:GPU Operator、Device Plugin、DCGM
2. 再学批调度:Volcano 或 Kueue(选一个深入)
3. 然后学 GPU 共享:MIG / HAMi
4. 最后学资源治理:碎片治理、Topology-aware、弹性伸缩
5. 加分:RDMA 网络调优、国产 NPU 调度、MultiKueue项目经验建议#
简历表达参考:
text
管理 1000+ GPU 智算集群,支撑训练/推理/评测多业务共享:
- Volcano 批调度,Gang Scheduling 防死锁,层级队列多团队公平共享
- HAMi GPU 共享虚拟化,开发测试环境 GPU 利用率从 30% 提升到 80%
- DCGM + Prometheus + Grafana GPU 监控体系,闲置告警 + 成本归因
- Karpenter 弹性节点池,Spot Instance 降本 60%
- Topology-aware Scheduling,NVLink 域感知,训练性能提升 20%典型面试题方向#
为什么 AI 任务需要 Gang Scheduling?Volcano 的 PodGroup 怎么实现?
- 答题思路:All-or-Nothing 语义防止死锁;PodGroup minMember;Volcano 的 enqueue/allocate/preempt Action
Volcano vs Kueue 分别解决什么问题?如何选型?
- 答题思路:Volcano 是批调度器(替代 kube-scheduler),Kueue 是队列管理(admission gate);Kueue API 更贴近原生
GPU 资源碎片怎么产生?怎么治理?
- 答题思路:小 Pod 占角落导致大作业凑不齐整节点;治理用分离调度 + binpack + anti-affinity + 抢占
如何设计多团队共享 GPU 资源池?(Queue + Quota + Priority + Preemption)
- 答题思路:Volcano 层级队列(weight + guarantee + capability)+ PriorityClass + 借用机制 + 碎片治理
MIG vs HAMi vs Time-Slicing 怎么选?
- 答题思路:强隔离用 MIG(A100/H100),灵活+国产化用 HAMi,开发测试用 Time-Slicing
如何监控 GPU 集群健康度?
- 答题思路:DCGM Exporter(SM/显存/温度/ECC)+ NCCL 错包 + Volcano queue pending + 成本归因