Skip to content

分层存储架构

5.6.1 GPU HBM (最快最昂贵)

GPU 是KV Cache的首选存储位置。

HBM 特性:

特性HBM2eHBM3HBM3e
带宽1.2 TB/s1.5 TB/s2.0 TB/s
容量/堆栈16 GB24 GB36 GB
典型GPU配置40-80 GB80 GB141 GB
延迟~100ns~100ns~100ns
成本/GB~$20~$15~$12

HBM 存储优化策略:

latex
GPU HBM 中的KV Cache布局:
┌─────────────────────────────────────────────────────────────┐
│   A100-80GB HBM   内存布局                                   │
├─────────────────────────────────────────────────────────────┤
│   ┌─────────────────────────────────────────────────────┐    │
│   │   模型权重 (FP16): ~35-40 GB                         │       │
│   ├─────────────────────────────────────────────────────┤                 │
│   │   KV Cache (FP16): ~20-30 GB                        │       │
│   │    - 活跃请求的KV Cache                                                            │       │
│   │    - 高频访问的缓存数据                                │       │
│   ├─────────────────────────────────────────────────────┤                 │
│   │   激活值: ~5-10 GB                                   │       │
│   ├─────────────────────────────────────────────────────┤                 │
│   │   预留/碎片: ~5-10 GB                                │       │
│   └─────────────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────────────┘

5.6.2 CPU DRAM (中等速度)

当GPU HBM不足时,可以将KV Cache卸载到CPU DRAM。

CPU DRAM特性

特性DDR4DDR5
带宽25-50 GB/s50-100 GB/s
单服务器容量1-2 TB2-4 TB
延迟~100ns~80ns
成本/GB~$3~$4

CPU DRAM vs GPU HBM 对比:

指标GPU HBMCPU DRAM差距
带宽1.5 TB/s50 GB/s30x
容量80 GB2 TB0.04x
延迟100 ns100 ns1x
成本/GB$15$43.75x

CPU卸载策略

python
class CPUOffloadKVCache:
     """将不活跃的KV Cache卸载到CPU DRAM"""
     def __init__(self, gpu_cache_size: int, cpu_cache_size: int):
           self.gpu_cache = {}  #活跃的KV Cache                                 
           self.cpu_cache = {} # 不活跃的KV Cache
           self.gpu_size_limit = gpu_cache_size
           self.current_gpu_size = 0


     def get(self, key: str) -> Optional[torch.Tensor]:
           if key in self.gpu_cache:
              return self.gpu_cache[key]
           elif key in self.cpu_cache:
              #   从CPU加载到GPU
              kv = self.cpu_cache.pop(key)
              self._evict_to_cpu_if_needed(kv.numel())
              self.gpu_cache[key] = kv.cuda()
              return self.gpu_cache[key]
           return None


     def put(self, key: str, kv: torch.Tensor):
           if self.current_gpu_size + kv.numel() > self.gpu_size_limit:
              self._evict_to_cpu_if_needed(kv.numel())
           self.gpu_cache[key] = kv.cuda()
           self.current_gpu_size += kv.numel()


     def _evict_to_cpu_if_needed(self, needed_space: int):
           """LRU 策略将KV Cache卸载到CPU"""
           while self.current_gpu_size + needed_space > self.gpu_size_limit:
              #   找到最久未使用的KV Cache
              lru_key = self._find_lru_key()
              kv = self.gpu_cache.pop(lru_key)
              self.cpu_cache[lru_key] = kv.cpu()
              self.current_gpu_size -= kv.numel()

5.6.3 SSD/NVMe (慢但容量大)

对于超大规模的KV Cache,可以使用SSD/NVMe存储。

SSD/NVMe特性

特性SATA SSDNVMe Gen3NVMe Gen4NVMe Gen5
顺序读500 MB/s3.5 GB/s7 GB/s14 GB/s
顺序写500 MB/s3 GB/s5 GB/s10 GB/s
随机读IOPS100K500K1M2M
容量1-8 TB1-8 TB1-16 TB1-32 TB
延迟100μs10μs10μs10μs
成本/GB$0.08$0.10$0.08$0.06

SSD 存储策略:

5.6.4 远程存储

在多节点部署中,可以使用远程存储共享KV Cache。

远程存储选项

存储类型带宽延迟适用场景
分布式内存 (RDMA)50-100 Gbps1-5 μs集群内共享
对象存储 (S3)10-100 Gbps10-100 ms长期归档
分布式文件系统10-50 Gbps1-10 ms中等规模共享

5.6.5 各层之间的数据传输

数据传输优化策略:

分层存储性能对比:

存储层容量带宽延迟成本/GB/月适用数据
GPU HBM80 GB1.5 TB/s100 ns$15活跃请求
CPU DRAM2 TB50 GB/s100 ns$4活跃会话
NVMe SSD16 TB7 GB/s10 μs$0.08近期会话
远程内存无限50 Gbps5 μs$2集群共享
对象存储无限10 Gbps50 ms$0.02长期归档

用心记录,持续成长