10 KiB
Task Plan: XAttention BSA 模块化集成
Goal
将 XAttention BSA 策略按照统一接口集成到 nano-vllm 的 sparse policy 框架中,实现模块化设计。
最终验证目标: 运行 tests/test_ruler.py 测试 32K 数据的 10 个以内的 sample,得到合理结果(不一定全部 PASS,但结果应在预期精度范围内)。
强制要求:使用 Hive-Mind 集群思考
必须使用 Claude Flow MCP 的 hive-mind 集群进行深度推理,提高实现精度。
启动 Hive-Mind 的方式
在每个复杂阶段开始前,必须执行以下步骤:
-
初始化 Hive-Mind 集群:
# 通过 MCP 调用 mcp__claude-flow_alpha__hive-mind_init( topology="mesh", # 或 "hierarchical", "ring", "star" maxAgents=5, # 集群大小 ) -
生成专业代理(Spawning Specialists):
# 为不同任务类型创建代理 mcp__claude-flow_alpha__hive-mind_spawn( count=3, type="specialist", # researcher, coder, analyst ) -
广播思考任务:
mcp__claude-flow_alpha__hive-mind_broadcast( message="分析当前架构设计的潜在问题...", priority="high" ) -
获取集群状态和共识:
mcp__claude-flow_alpha__hive-mind_status(verbose=True) mcp__claude-flow_alpha__hive-mind_consensus( action="propose", type="design", value="模块化接口设计方案" )
适用阶段
以下阶段必须使用 Hive-Mind 集群思考:
- ✅ Phase 1: SparsePolicy 基类接口确认
- ✅ Phase 2: XAttentionBSAPolicy 接口对齐
- ✅ Phase 3: OffloadEngine 辅助方法模块化
- ✅ Phase 5: attention.py 集成点验证
其他阶段(Phase 4, 6, 7)可以使用标准思考模式。
集群配置建议
# 推荐配置
topology: mesh # 网状拓扑,适合并行推理
maxAgents: 5 # 5个专业代理
agentTypes:
- researcher # 架构分析
- coder # 代码实现
- analyst # 接口验证
- optimizer # 性能优化
- validator # 正确性验证
输出要求
使用 Hive-Mind 后,必须在计划中记录:
- 集群产生的关键洞察
- 多代理共识达成的决策
- 发现的潜在问题和解决方案
当前架构分析
SparsePolicy 基类接口
从 nanovllm/kvcache/sparse/policy.py 需要确认基类定义:
class SparsePolicy:
# 能力标记
supports_prefill: bool
supports_decode: bool
requires_block_selection: bool
# 核心方法
def select_blocks(self, available_blocks: List[int], ctx: PolicyContext) -> List[int]
# 可选方法(prefill 专用)
def sparse_prefill_attention(self, q, k, v, layer_id) -> torch.Tensor
# 初始化
def initialize(self, num_layers, num_kv_heads, head_dim, num_cpu_blocks, dtype, device)
def reset(self)
当前 XAttentionBSAPolicy 实现
已实现但需要确认模块化集成的部分:
xattn_bsa.py- 策略类实现config.py- 枚举和参数sparse/__init__.py- 策略工厂offload_engine.py- 辅助方法attention.py- 集成点
详细实现计划
Phase 1: 确保 SparsePolicy 基类接口统一
任务: 验证 SparsePolicy 基类定义是否包含所有必需的方法
步骤:
- 读取
nanovllm/kvcache/sparse/policy.py - 确认基类定义包含:
supports_prefill,supports_decode,requires_block_selection类属性select_blocks()方法sparse_prefill_attention()方法(可选)initialize(),reset()方法
- 如果缺失,补充到基类定义中
预期结果: 基类定义完整,所有策略类可以遵循统一接口
Phase 2: XAttentionBSAPolicy 接口对齐
任务: 确保 XAttentionBSAPolicy 完全符合 SparsePolicy 接口
步骤:
-
确认
xattn_bsa.py中的类属性正确:class XAttentionBSAPolicy(SparsePolicy): supports_prefill = True supports_decode = False requires_block_selection = False # 注意:BSA 内部处理选择 -
确保方法签名与基类一致:
select_blocks(available_blocks, ctx) -> List[int]sparse_prefill_attention(q, k, v, layer_id) -> Tensorinitialize(...)reset()
-
添加文档说明:BSA 在 prefill 阶段内部处理 block 选择,因此
select_blocks返回所有可用块
预期结果: XAttentionBSAPolicy 完全符合 SparsePolicy 统一接口
Phase 3: OffloadEngine 辅助方法模块化
任务: 确保 OffloadEngine 的辅助方法正确定义且模块化
步骤:
-
确认
offload_engine.py中的辅助方法位置:# 在 OffloadEngine 类中添加这两个方法 def load_block_sample_from_cpu(self, cpu_block_id, layer_id, num_samples): """加载采样 tokens 用于估算阶段""" ... def load_block_full_from_cpu(self, cpu_block_id, layer_id): """加载完整 block 用于计算阶段""" ... -
确保方法签名与
xattn_bsa.py中的调用一致 -
添加适当的文档说明这两个方法的用途和使用场景
预期结果: OffloadEngine 提供统一的 block 加载接口
Phase 4: 模块化集成到工厂模式
任务: 确保策略创建通过统一的工厂模式
步骤:
-
检查
nanovllm/kvcache/__init__.py中的create_kvcache_manager函数 -
确认策略创建逻辑清晰:
# 根据策略类型构建相应的 kwargs if sparse_policy_type == SparsePolicyType.XATTN_BSA: policy_kwargs = { 'block_size': getattr(config, 'sparse_block_size', 128), 'samples_per_chunk': getattr(config, 'sparse_samples_per_chunk', 128), 'threshold': getattr(config, 'sparse_threshold', 0.9), 'use_triton': getattr(config, 'sparse_use_triton', True), 'stride': getattr(config, sparse_stride', 8), } -
确认所有策略类型都有相应的 kwargs 构建逻辑
预期结果: 通过 create_sparse_policy() 创建所有策略
Phase 5: attention.py 集成点验证
任务: 确保 attention.py 中的集成点正确调用策略接口
步骤:
-
检查
nanovllm/layers/attention.py中的_chunked_prefill_attention方法 -
确认集成逻辑:
# 检测策略是否有 sparse_prefill_attention 方法 if sparse_policy is not None and hasattr(sparse_policy, 'sparse_prefill_attention'): if sparse_policy.supports_prefill: # 使用策略的 sparse_prefill_attention 方法 o = sparse_policy.sparse_prefill_attention(q, k, v, self.layer_id) # 处理异步 offload return o # 否则使用标准流程(Quest, etc.) # ... -
确保没有绕过策略接口直接调用其他逻辑
预期结果: attention.py 通过统一的策略接口调用 BSA
Phase 6: 配置参数模块化
任务: 确保配置参数结构清晰,易于使用
步骤:
-
检查
nanovllm/config.py中的配置结构 -
确认 XAttention BSA 参数组织清晰:
# 通用 sparse 参数 sparse_policy: SparsePolicyType = SparsePolicyType.FULL sparse_topk_blocks: int = 8 # Quest sparse_threshold_blocks: int = 4 # Quest # XATTN_BSA 专用参数 sparse_block_size: int = 128 sparse_samples_per_chunk: int = 128 sparse_threshold: float = 0.9 sparse_use_triton: bool = True sparse_stride: int = 8 -
考虑是否需要参数分组或嵌套配置
预期结果: 配置参数清晰,易于理解和使用
Phase 7: 模块化验证测试
任务: 创建简单的验证脚本确保模块化集成正确
步骤:
-
创建
tests/test_xattn_bsa_integration.py测试脚本 -
验证以下功能:
- XAttentionBSAPolicy 可以通过
create_sparse_policy()创建 - 策略正确响应
supports_prefill,supports_decode查询 select_blocks()方法返回正确结果- OffloadEngine 辅助方法可以正常调用
- 在模拟环境中策略可以被正确调用
- XAttentionBSAPolicy 可以通过
-
测试用例:
# Test 1: 策略创建 from nanovllm.config import Config, SparsePolicyType from nanovllm.kvcache.sparse import create_sparse_policy policy = create_sparse_policy(SparsePolicyType.XATTN_BSA) assert hasattr(policy, 'sparse_prefill_attention') assert policy.supports_prefill == True assert policy.supports_decode == False # Test 2: 接口一致性 # 验证方法签名 # ... # Test 3: OffloadEngine 辅助方法 # ...
预期结果: 所有测试通过,模块化集成验证成功
关键设计原则
1. 接口统一性
- 所有策略通过
SparsePolicy基类提供统一接口 - 工厂模式创建策略实例
- 策略切换透明,不影响其他模块
2. 模块化独立性
- 每个策略类独立实现
- OffloadEngine 提供通用辅助方法
- attention.py 通过策略接口调用,不依赖具体实现
3. 可扩展性
- 添加新策略只需:
- 创建新的策略类继承
SparsePolicy - 添加到
SparsePolicyType枚举 - 在工厂函数中添加创建逻辑
- 添加相应的配置参数
- 创建新的策略类继承
文件修改清单
必须修改的文件
nanovllm/kvcache/sparse/policy.py- 确保基类定义完整nanovllm/kvcache/sparse/xattn_bsa.py- 确保接口对齐nanovllm/kvcache/offload_engine.py- 添加辅助方法nanovllm/layers/attention.py- 验证集成点nanovllm/config.py- 确认参数结构nanovllm/kvcache/__init__.py- 确认工厂模式nanovllm/kvcache/sparse/__init__.py- 确认注册逻辑
可选创建的文件
tests/test_xattn_bsa_integration.py- 集成验证测试
实现状态
- Phase 1: SparsePolicy 基类接口确认
- Phase 2: XAttentionBSAPolicy 接口对齐
- Phase 3: OffloadEngine 辅助方法模块化
- Phase 4: 工厂模式集成验证
- Phase 5: attention.py 集成点验证
- Phase 6: 配置参数模块化
- Phase 7: 模块化验证测试
备注
- 此计划专注于模块化集成,不涉及算法优化
- 所有修改都遵循现有框架的设计模式
- 重点在于接口统一和模块解耦
- 测试阶段使用简单脚本验证即可,不需要完整的端到端测试