模块 4 课前
| 任务 | 需要硬件/软件 | 说明 |
|---|---|---|
| 任务 1 (必做) | GCC | 编译运行 malloc hook,观察输出后答题 |
| 任务 2 (必做) | 无 | 基于 PPT 完成方案分析和场景选型 |
| 任务 3 (选做) | HAMi 源码 | git clone https://github.com/Project-HAMi/HAMi |
| 任务 4 (选做) | Docker + GPU | 多阶段镜像构建,需要 nvidia/cuda:12.8.0 |
课堂的 01_mymalloc.c 演示了 LD_PRELOAD → hook malloc → 配额检查的基本原理。HAMi 把这个思路搬到了 CUDA API 上。
动手: 编译并运行课堂代码,观察 hook 输出和配额超限行为:
cd code/
gcc -shared -fPIC 01_mymalloc.c -o libmymalloc.so -ldl
gcc 02_test_malloc.c -o test_malloc
LD_PRELOAD=./libmymalloc.so ./test_malloc
基于你的运行结果和 PPT 内容,回答:
malloc 和 cuMemAlloc 的函数签名,课堂的 hook 需要哪些修改才能拦截 cuMemAlloc?列出至少 3 处差异。cuMemAlloc,HAMi 还可以拦截哪些 CUDA API 来实现 GPU 资源共享?(至少列出 2 个,说明各自的作用。提示: PPT 第 14-16 页)free(p1) 和 free(p2) 之后,hook 的 used 计数器有没有减少?为什么 free hook 不递减 used?如果要精确跟踪配额释放,需要增加什么机制?__thread in_hook 递归守卫的位置。基于课堂 PPT 第 4-9 页的内容,完成:
阅读 HAMi 的 libvgpu.so 相关源码,找到 cuMemAlloc 和 cuLaunchKernel 的拦截实现。画出拦截流程图。
构建两个版本的 vLLM 镜像:
对比两个版本的大小,记录优化效果。
| 维度 | 权重 | 要求 |
|---|---|---|
| 任务 1 (CUDA API 拦截分析) | 40% | 4 个问题回答准确 + 流程图正确 |
| 任务 2 (方案分析) | 35% | 象限图清晰 + 三个场景选型有理有据 |
| 文档质量 | 15% | 描述完整、逻辑清晰 |
| 进阶任务 | 10% | 完成至少一项 |
code/01_mymalloc.c、code/02_test_malloc.c