ai-infra-course

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

一、概述

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

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

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

1.1 截止时间

课程结束后两周

1.2 提交要求

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

1.3 评分标准

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

二、方向 A: 容器化 GPU 推理服务 — 从隔离到拦截

难度: ★★★☆ (中等)     覆盖模块: 1, 3, 5     估计代码量: ~300 行 (Dockerfile ~20 + C ~100 + Python ~150)

难度说明: Dockerfile 部分较简单 (模块 1 已实践);LD_PRELOAD CUDA hook 是核心挑战,但 cudaMalloc 的拦截模式与模块 3 的 malloc 完全相同 (编译命令也相同: gcc -shared -fPIC -ldl),主要工作是理解 CUDA Runtime API 的返回值和配额逻辑;nano-vllm 集成有模块 5 的 tracing 脚本可直接参考。

2.1 目标

从零构建一个 GPU 推理容器,深入理解容器隔离机制和 GPU 虚拟化原理。通过 LD_PRELOAD 拦截 CUDA 调用,验证 GPU 资源隔离的有效性。

2.2 要求

2.2.1 容器化推理环境 (模块 1)

2.2.2 LD_PRELOAD CUDA 拦截 (模块 3)

2.2.3 nano-vllm 集成与分析 (模块 5)

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 交付物


五、参考资料