Files
markbaseengine/KV_CACHE_ANALYSIS.md
MarkBase Admin ac75faa0cc
CI / build-and-test (push) Has been cancelled
Initial commit: E4B-MarkBase model integration with passing tests
- E4B-MarkBase model (42 layers, 4.4GB) loaded successfully
- All Phase 1-6 tests passed (model loading, forward pass, vision/audio towers, token generation, performance)
- All stress tests passed (5/5 in 127.6s)
  - Concurrent inference
  - Memory stress (67.5 tok/s, 0 NaN)
  - Continuous generation
  - Batch processing
  - Long-running stability
- Swift Metal inference engine with multimodal support
2026-06-23 18:12:35 +08:00

4.0 KiB
Raw Permalink Blame History

KV Cache优化分析

当前实现分析

KVCache.swift实现

public final class KVCache {
    let buffer: MTLBuffer  // [2 * maxLength * nKvHeads * headDim]
    
    func store(key: MTLBuffer, value: MTLBuffer, position: Int, cmdBuf: MTLCommandBuffer) {
        let blit = cmdBuf.makeBlitCommandEncoder()
        blit.copy(from: key, to: buffer, offset: keyOffset(for: position))
        blit.copy(from: value, to: buffer, offset: valueOffset(for: position))
        blit.endEncoding()
    }
}

Layer.swift使用

// Sliding attention with SIMD kernel
func slidingAttention(q: MTLBuffer, cache: KVCache, position: Int) {
    let pso = engine.pipeline(named: "sliding_attention_simd")
    enc.setBuffer(cache.buffer, offset: cache.keyBaseOffset, index: 1)
    enc.setBuffer(cache.buffer, offset: cache.valueBaseOffset, index: 2)
    // Use threadgroup memory for KV cache (cache efficiency)
    enc.setThreadgroupMemoryLength(kvCacheSize, index: 0)
}

优化机会分析

1. Blit Encoder开销

问题: 每次KV store使用blit encoder 影响: 中等(每层每token一次) 优化: 用compute kernel代替blit ROI: 低-中等(已有SIMD kernel

2. Sliding Window SIMD

状态: 已实现(sliding_attention_simd 性能: 3.31x faster ✓✓✓ 优化: 已完成,无需改进

3. Full Attention

问题: 无SIMD优化 影响: 中等(full attention层) 优化: 实现SIMD version ROI: 中等(full层占比30%

4. KV Cache压缩

问题: 长序列内存占用大 影响: 高(长对话场景) 优化: 实现cache压缩 ROI: 高(内存敏感场景) 时间: ~4-6小时(复杂)

5. Multi-Query Attention (MQA)

问题: 多query共享KV 影响: 高(内存和速度) 优化: 实现MQA kernel ROI: 高(内存敏感) 时间: ~3-4小时

6. Flash Attention

问题: 减少内存访问 影响: 高(长序列) 优化: 实现flash attention ROI: 高(长序列场景) 时间: ~6-8小时(复杂)

ROI排序

高ROI优化

  1. Full Attention SIMD: ~2-3小时,预期2-3x faster
  2. MQA/MGA: ~3-4小时,内存节省50-70%

中等ROI优化

  1. KV store kernel: ~1-2小时,预期10-20% faster
  2. Paged Attention: ~3-4小时,内存优化

低ROI优化(复杂)

  1. KV Cache压缩: ~4-6小时,复杂度高
  2. Flash Attention: ~6-8小时,复杂度高

当前状态评估

已优化 ✓✓✓

  1. Sliding attention SIMD kernel
  2. KV cache预分配
  3. Cache buffer管理

待优化

  1. Full attention SIMD
  2. MQA/MGA
  3. KV store kernel

建议策略

立即可实施(~2-3小时)

Full Attention SIMD优化:

  • 实现full_attention_simd kernel
  • 类似sliding的SIMD实现
  • 预期2-3x faster for full layers

可选继续(~3-4小时)

MQA/MGA实现:

  • 如果模型支持多query attention
  • 减少KV cache内存50-70%
  • 提升长序列性能

复杂优化(暂缓)

KV Cache压缩:

  • 需要复杂的压缩/解压缩逻辑
  • 时间投入大(4-6小时)
  • ROI中等

Flash Attention:

  • 需要大量kernel重写
  • 时间投入大(6-8小时)
  • 复杂度高

性能预期

Full Attention SIMD

当前: ~80-120ms for full attention
预期: ~30-40ms (2-3x faster)
ROI: 中等-高
时间: ~2-3小时

MQA/MGA

当前: 100% KV memory
预期: 30-50% KV memory
ROI: 高(内存敏感场景)
时间: ~3-4小时

实施建议

推荐顺序

  1. Full Attention SIMD(推荐优先)
  2. KV store kernel优化
  3. MQA/MGA(如果模型支持)
  4. Flash Attention(可选)

时间投入

  • Phase 1: Full Attention SIMD (~2-3小时)
  • Phase 2: KV store优化 (~1-2小时)
  • Phase 3: MQA/MGA (~3-4小时)

下一步

建议: 先实施Full Attention SIMD优化

  • ROI中等-高
  • 时间投入合理(2-3小时)
  • 实现难度中等
  • 预期性能提升明显

准备实施: Full Attention SIMD kernel