ai-infra-course

模块 4:Kubernetes 入门与 GPU 工作负载调度 — 课后练习

题目:K8s GPU 调度实战与分析

截止时间

模块 5 课前


任务 1: K8s 基础练习 (必做)

在本地 minikube/k3s/kind 集群上完成以下操作,截图记录每一步:

  1. 创建 Namespace gpu-homework
  2. 在该 Namespace 中创建一个 Deployment(镜像 nginx:alpine,3 副本)
  3. 创建一个 Service(类型 ClusterIP)暴露该 Deployment
  4. 扩容到 5 副本 → 缩容到 2 副本
  5. 执行一次滚动更新(改镜像 tag 为 nginx:1.25-alpine
  6. kubectl describe 查看 Deployment 的 Events,解释你看到了什么

提交: 每一步的 kubectl 命令 + 关键输出截图。

任务 2: K8s GPU 设备管理机制分析 (必做)

阅读 AI-fundamentals,回答:

  1. Device Plugin 的 ListAndWatchAllocate 接口各自做什么?画出它们的调用时序图。
  2. 如果某个节点的 GPU 被所有 Pod 占满,新来的 Pod 声明 nvidia.com/gpu: 1 会发生什么?结合调度器流程解释。
  3. DRA 相比 Device Plugin 的核心改进是什么?从分配时机拓扑感知两个维度分析。
  4. 为什么说 ResourceClaim 之于 GPU 类似于 PVC 之于存储?找到共同点和差异点。

任务 3: GPU 调度策略设计 (必做)

假设你有以下 GPU 集群:

你需要运行以下工作负载:

请回答:

  1. 为 Job A/B/C 设计调度方案,说明每个 Job 应该调度到哪些节点、为什么。
  2. 如果使用 Kueue,如何配置 ResourceFlavor 和 ClusterQueue 来区分两个 NVSwitch 域?
  3. 如果 Job A 还在运行,Job B 和 C 先后到达,K8s 默认调度器会怎么放置它们?如果使用 Binpack 策略呢?

进阶任务 (选做)

任务 4: 部署 Kueue 并测试

在 K8s 集群中部署 Kueue,创建:

任务 5: DRA 实验

如果 K8s 版本 ≥ 1.31,尝试创建 ResourceClaim 并部署引用 Claim 的 Pod。记录 Claim 的状态变化过程。


提交要求

  1. 任务 1: 命令 + 截图
  2. 任务 2: 分析回答 (≤ 2 页)
  3. 任务 3: 调度方案设计 (≤ 1 页)
  4. (选做) 任务 4 或 5

评分标准

维度 权重 要求
任务 1 (K8s 基础) 30% 6 步操作正确完成
任务 2 (机制分析) 30% 4 题回答准确 + 时序图正确
任务 3 (调度设计) 25% 方案合理有依据
文档质量 10% 截图清晰、描述完整
进阶任务 5% 完成至少一项

参考资料