Skip to content

[Feature] 单机八卡高性能 KV Cache 管理模块开发 #2530

Description

@lvyufeng

【任务领取】MindNLP:单机八卡高性能 KV Cache 管理模块开发

1. 任务背景

在 LLM(大模型)推理过程中,KV Cache 的大小随序列长度线性增长。传统的静态显存分配方式会导致严重的显存碎片化(Fragmentation),限制了长文本处理能力和系统并发吞吐量。为了让 MindNLP 在 Atlas 800 A2 昇腾算力平台上实现工业级推理性能,本项目需要参考业界 PagedAttention 技术,实现一套针对 MindSpore 框架优化的分布式 KV Cache 管理系统。


2. 任务目标

基于 MindSpore 框架,开发一套支持单机八卡环境的 KV Cache 管理组件,能够适配 Llama/Qwen 等主流模型进行长序列(如 32K 及以上)的高效推理。


3. 详细任务分解

第一阶段:技术调研与方案设计

  • 调研分析: 深入研究 vLLM (PagedAttention) 和 LightLLM 的实现原理。
  • 设计文档: 在 MindNLP 仓库提交 Issue,详细描述以下内容:
    • BlockManager 设计: 如何管理物理块(Physical Blocks)的分配、引用计数与回收。
    • 映射机制: 逻辑 Token 序列如何通过 slot_mapping 映射到非连续的物理显存块。
    • 架构图: 绘制单机八卡环境下,显存分布、多流协同及数据流向图。

第二阶段:分布式管理模块开发

  • KV 显存池初始化: 预先申请 8 张 NPU 上的静态显存(Global Tensor Pool),格式通常为 (num_blocks, num_heads, block_size, head_dim)
  • 核心类实现:
    • BlockAllocator: 实现物理块的申请、释放逻辑。
    • MetadataEngine: 维护每个 Request 的 block_table,记录请求与物理块的映射关系。
  • 多卡同步: 确保在分布式推理模式下,各 Rank 间的 Block 分配状态保持同步(逻辑一致性)。

第三阶段:模型集成与算子适配

  • PagedAttention 逻辑实现:
    • 在 MindSpore 中通过 ops.Gatherops.ScatterNdUpdate 等算子实现非连续内存的 KV Cache 读写。
    • 适配 Prefill(预填充,一次写入多个 Block)和 Decode(增量生成,逐个 Slot 写入)阶段。
  • 模型改造: 选取 MindNLP 中的 LlamaForCausalLMQwen2ForCausalLM,将其标准的 Attention 层替换为支持 Paged 管理的自定义层。

第四阶段:性能压测与长序列验证

  • 正确性验证: 验证开启 KV Cache 管理后,模型输出的 Logits 与原始静态实现的一致性(误差控制在合理范围内)。
  • 长序列测试: 在 Atlas 800 A2 上完成长文本(如 32K)推理,证明系统不会因显存碎片化而提前触发 Out of Memory (OOM)。
  • 性能指标报告: 统计并对比不同 Batch Size 下的吞吐量(Tokens/s)和首字延迟(TTFT)。

4. 验收标准

  1. 设计 Issue: 提交至 MindNLP 仓,包含清晰的设计思路和架构图,并通过社区 Maintainer 评审。
  2. 核心代码: 提交至 mindnlp/engine 或相关推理目录下,符合 MindSpore 代码规范。
  3. 测试脚本: 提供 test_kv_cache.py,支持在单机八卡环境下一键拉起 Llama/Qwen 的长序列推理测试。
  4. 技术报告: 提交包含测试数据、显存占用对比及 Atlas A2 适配经验的 Markdown 总结。

5. 技术要求与参考

  • 硬件平台: Atlas 800I A2 / Atlas 800T A2 (Ascend NPU)
  • 软件环境: MindSpore >= 2.3, Python 3.9+, MindNLP
  • 关键算子: 建议优先使用 ops.ScatterNdUpdate 进行缓存更新,利用 ops.Gather 或自定义 PagedAttention 算子加速读取过程。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions