01
显存池基础概念
什么是显存池,为什么需要显存池,显存池与普通内存分配的区别。
基础概念
02
GPU架构与显存层次
NVIDIA GPU架构概览,显存层次结构(HBM、L2 Cache、L1 Cache),显存带宽与延迟。
架构显存
03
CUDA编程基础回顾
CUDA编程模型,Kernel Launch,Grid-Block-Thread层次,内存管理API(cudaMalloc, cudaFree)。
CUDA编程
04
显存分配的性能瓶颈
cudaMalloc/cudaFree的同步开销,显存碎片化问题,频繁分配释放对吞吐的影响。
性能瓶颈
05
显存池核心设计思想
预分配策略,复用机制,池化思想在AI训练/推理中的应用。
设计池化
06
显存池数据结构设计
空闲链表(Free List),哈希表(Hash Table),伙伴系统(Buddy System)原理。
数据结构算法
07
显存池分配算法
First Fit, Best Fit, Worst Fit 对比,伙伴系统分配与合并。
算法分配
08
显存池回收与碎片整理
延迟回收机制,内存规整(Compaction),碎片率计算。
回收碎片
09
多线程安全与锁优化
互斥锁(Mutex),读写锁(RWLock),无锁队列(Lock-Free Queue)在显存池中的应用。
并发锁
10
显存池的线程亲和性
CPU线程与GPU Stream绑定,NUMA感知的显存分配。
亲和性NUMA
11
显存池的容量动态调整
水位线策略,扩容与缩容机制,OOM处理。
动态容量
12
显存池的统计与监控
分配次数、释放次数、命中率、碎片率、峰值使用量等指标。
监控指标
13
吞吐压测基础
什么是吞吐量,QPS/TPS概念,延迟与吞吐的关系,P99延迟。
压测吞吐
14
压测工具选型
Locust, wrk, hey, ghz(gRPC),以及自定义压测脚本。
工具选型
15
GPU压测场景设计
纯计算压测,显存分配压测,混合负载压测。
场景GPU
16
压测指标采集
使用nvidia-smi, DCGM, CUDA Events, Nsight Systems采集GPU指标。
采集指标
17
显存池压测方案设计
对比实验(有池 vs 无池),不同分配大小,不同并发线程数。
方案对比
18
压测结果分析
吞吐量对比图,延迟分布图,显存碎片率变化曲线。
分析可视化
19
显存池在深度学习训练中的应用
PyTorch Dataloader中的显存池,TensorFlow显存管理。
训练DL
20
显存池在大模型推理中的应用
KV Cache显存池,Continuous Batching中的显存复用。
推理大模型
21
显存池在实时推理系统中的应用
低延迟要求下的显存池优化,预分配与预热。
实时低延迟
22
显存池与CUDA Graph的结合
CUDA Graph捕获与重放,显存池在Graph中的角色。
CUDA Graph
23
显存池与MPS
MPS下的显存共享与隔离,显存池的适配。
MPS多进程
24
显存池与统一内存
UM的页错误与迁移,显存池与UM的对比。
统一内存UM
25
显存池的跨进程通信
使用IPC(Inter-Process Communication)共享显存池,cudaIpcOpenMemHandle。
IPC共享
26
显存池的持久化与序列化
将显存池状态保存到磁盘,恢复场景。
持久化序列化
27
显存池的测试与验证
单元测试,压力测试,内存泄漏检测(cuda-memcheck, valgrind)。
测试验证
28
显存池的常见陷阱与避坑指南
内存泄漏,死锁,ABA问题,虚假共享。
陷阱避坑
29
开源显存池实现分析
NVIDIA CUDA Memory Pool (cudaMemPool),RAPIDS Memory Manager (RMM),CUB。
开源分析
30
从零实现一个迷你显存池
需求分析,接口设计,核心代码实现,性能调优。
实战实现