ai-infra-course

模块 8:课程大作业 — 云原生 AI 推理系统设计与实现

一、概述

从以下三个方向中任选一个完成大作业。每个方向都聚焦 AI 基础设施 (而非 AI 应用),覆盖课程的多个核心模块。

实验环境: 课程结束后一周内提供包含 GPU 服务器和 K8s 集群的实验环境,用于方向 A (LD_PRELOAD CUDA hook) 和方向 B (K8s 调度 + vLLM 推理)。方向 C 零硬件依赖,纯 Python 标准库即可完成。

骨架代码: 每个方向在 code/ 目录下提供了可运行的骨架框架,关键位置标注 # TODO:。搜索 TODO 即可找到需要完成的代码位置。详见 code/README.md

1.1 截止时间

2026年7月31日

1.2 提交要求

  1. 代码: GitHub 仓库 (或 zip 包),含 README (如何运行、环境要求、预期结果)
  2. 技术报告: Markdown/PDF, 3000-5000 字,包含架构图、关键设计决策、实验数据和分析。使用 code/REPORT_TEMPLATE.md 模板
  3. 打包提交,命名为 学号_姓名_大作业.zip
  4. 提交地址:wang.tianqing.cn@outlook.com

1.3 评分标准

维度 权重 要求
技术深度 35% 正确应用课程知识,设计有依据,代码实现完整
实验与分析 25% 有实验数据 (性能/对比/分析),结论有理有据
工程完整性 20% 代码可运行、有 README、有错误处理、结构清晰
报告质量 20% 架构图清晰、逻辑连贯、有自己的思考

二、方向 A: GPU 资源拦截 — 从显存到算力

难度: ★★★☆ (中等)     覆盖模块: 3     估计代码量: ~250 行 (C ~200 + Python ~50)

难度说明: 核心挑战是 LD_PRELOAD 拦截两个 CUDA API。但 cudaMalloc 的拦截模式与模块 3 01_mymalloc.c 完全相同 (dlsym + __thread + 配额),cudaLaunchKernel 的令牌桶逻辑与模块 3 03_token_bucket.py 完全对应——两样课上都已经手写过,大作业只是把它们搬到 CUDA Runtime API 上。骨架代码已提供完整的函数框架(递归守卫 + 变量声明),学生只需填充配额检查和转发逻辑。

2.1 目标

使用 LD_PRELOAD 拦截 CUDA Runtime API,实现对单个进程的显存配额算力限速——这正是 HAMi libvgpu.so 的核心原理。提供一个统一的 CUDA 测试程序 (test_hook.cu) 验证拦截效果,无需运行推理框架。

2.2 要求

2.2.1 显存拦截: cudaMalloc (模块 3 — malloc hook 模式)

2.2.2 算力拦截: cudaLaunchKernel (模块 3 — 令牌桶模式)

2.2.3 测试程序验证

2.2.4 实验与分析

2.3 交付物


三、方向 B: K8s GPU 调度与推理网关部署

难度: ★★★☆ (中等)     覆盖模块: 1, 4, 7     估计代码量: ~350 行     可 2 人协作 (YAML ~120 + 网关 ~180 + 压测脚本 ~50)

难度说明: K8s YAML 部分较简单 (模块 4 已实践);网关可直接复用模块 7 code/ai_gateway.py 并增强;GPU 调度追踪本质是 kubectl describe/events + 画时序图。使用 Qwen2.5-0.5B (~1GB) 等小模型部署 vLLM 实例,同时满足 GPU 调度追踪和网关真实后端的需求,将两条主线串起来。

3.1 目标

围绕 K8s GPU 调度全链路和推理网关部署两条主线:深入追踪 GPU Pod 从 YAML 到运行的完整过程,同时将 AI 网关部署到 K8s 并验证弹性伸缩与故障恢复。

协作说明: 本方向最多可由两人协作完成 — 一人负责网关实现 (Flask + LB 策略 + 健康检查),一人负责 K8s 部署 (YAML + HPA + GPU 调度追踪)。合并后联调压测。提交时需注明分工。

3.2 要求

3.2.1 GPU 调度全链路追踪 (模块 4)

3.2.2 AI 网关的 K8s 部署 (模块 7)

3.2.3 弹性伸缩与故障恢复 (模块 4)

3.2.4 实验与分析

3.3 交付物


四、方向 C: KV Cache 显存管理 — 从公式到系统

难度: ★★★★ (较难)     覆盖模块: 2, 5, 6     估计代码量: ~500 行 Python (计算工具 ~150 + 碎片模拟器 ~200 + Cache 模拟器 ~100 + 可视化 ~50)

难度说明: 三个独立模块,每个都有清晰边界。显存计算工具是模块 6 calculate_qwen3_memory.py 的独立重实现,有现成参考;PagedAttention 碎片模拟器是最具挑战的部分 — 需要设计 Block 分配/回收算法和处理请求随机到达的离散事件模拟,但纯 Python 无外部依赖;Prefix Cache LRU 模拟器较简单。每个模块可独立完成和测试。最大优势: 零硬件依赖,纯 Python 标准库 + matplotlib,任何笔记本都能完成。

4.1 目标

深入理解 KV Cache 显存管理的核心问题: 碎片从何而来?PagedAttention 如何解决?量化能省多少?通过理论计算 + 模拟实验 + (有 GPU 时) 实际测量,形成完整的量化理解。

4.2 要求

4.2.1 显存计算工具 (模块 6)

4.2.2 PagedAttention 碎片模拟器 (模块 5)

4.2.3 Prefix Caching 命中率模拟 (模块 5 + 6)

4.2.4 可选: GPU 实测验证

如果有 GPU (4090), 增加以下实验:

4.2.5 实验与分析

4.3 交付物


五、参考资料