Skip to content

feat: suport hybrid pool kvcache allocator#943

Open
SJTUGavinLiu wants to merge 8 commits intomainfrom
develop/chanyin/hybrid_pool
Open

feat: suport hybrid pool kvcache allocator#943
SJTUGavinLiu wants to merge 8 commits intomainfrom
develop/chanyin/hybrid_pool

Conversation

@SJTUGavinLiu
Copy link
Copy Markdown
Collaborator

for cr

@SJTUGavinLiu SJTUGavinLiu requested a review from LLLLKKKK as a code owner April 28, 2026 02:29
@SJTUGavinLiu SJTUGavinLiu force-pushed the develop/chanyin/hybrid_pool branch from ce065cc to e454000 Compare April 28, 2026 02:32
@LLLLKKKK
Copy link
Copy Markdown
Collaborator

AI Code Review - PR #943

Status: LGTM

Summary: P0/0 · P1/0 · P2/3 · P3/3

lgtm ready to ci

Non-blocking Suggestions

P2

  • HybridPoolKVCacheAllocator::popBlocksFromCache 始终返回 nullptr 导致分级缓存淘汰失效 @ rtp_llm/cpp/cache/HybridPoolKVCacheAllocator.cc:235
    • 建议:实现独立池下的 popBlocksFromCache(按 group 选择 victim group 或聚合 candidates),或在 init 时对 enable_tiered_memory_cache && enable_independent_pool 直接 fail-fast,避免静默丢失 eviction 能力。
  • PD LINEAR group 传输由 last 1 block 改为 last 2 blocks 是 wire-protocol breaking 变更 @ rtp_llm/models_py/bindings/core/ExecOps.cc:294
    • 建议:在 PR 描述/上线 checklist 中明确要求 PD 集群版本同步升级;或者通过 feature flag 控制(KVCacheConfig 增加 linear_transfer_block_count),按 PD 双方协商使用 1 或 2,避免滚动升级期间不兼容。
  • KVCacheConfig pickle tuple 大小由 44 改为 46,旧序列化状态加载会直接抛异常 @ rtp_llm/cpp/pybind/ConfigInit.cc:381
    • 建议:对 t.size() 做向后兼容(接受 44 和 46),缺失字段填默认值;或在 PR 描述/发布说明中提示需要清理旧 pickle 状态、不可与旧 worker 进程并存。

P3

  • parsePoolRatio 对非数字 token 直接抛 std::stod 异常,错误信息不友好 @ rtp_llm/cpp/cache/CacheConfigCreator.cc:14
    • 建议:用 try/catch 包住 std::stod,捕获异常后通过 RTP_LLM_FAIL/CHECK_WITH_INFO 给出 'pool_ratio token "%s" is not a valid positive number' 之类的明确诊断;同时拒绝空 token。
  • runtimeWriteCacheStore 的 mapped_group_id 在 typed mapping 返回 -1 时回退到 layer_to_group,可能掩盖 caller bug @ rtp_llm/models_py/bindings/core/ExecOps.cc:175
    • 建议:当 region_name 非 DEFAULT 且 typed mapping 返回 -1 时直接 RTP_LLM_FAIL 报错,仅 DEFAULT 路径走 layer_to_group fallback;与 KVCacheResource::initGroups / HybridPoolKVCacheAllocator::groupIdForLayerRegion 中已经存在的严格校验保持一致。
  • PyWrappedModel::layerRegionToGroupTensor 每层每请求都重建 tensor @ rtp_llm/cpp/models/PyWrappedModel.cc:28
    • 建议:将构建结果缓存到 PyWrappedModel 成员(按 kv_cache_layer_layout_ 内容做一次性构建),prepareWriteCacheParams 时直接复用缓存的 torch::Tensor。
Review Checklist: 6 pass / 6 fail

General Principles Checklist

Failed

  • [FAIL] 6.1 Architecture: 新增功能需在合适层次有清晰的扩展点,避免高层逻辑泄漏底层细节;新接口的失败/回退语义需明确 Linked issue: HybridPoolKVCacheAllocator::popBlocksFromCache 始终返回 nullptr 导致分级缓存淘汰失效
  • [FAIL] 6.1 Quality: 公共接口/序列化协议/线上协议变更需考虑兼容性与回退 Linked issue: KVCacheConfig pickle tuple 大小由 44 改为 46,旧序列化状态加载会直接抛异常

Passed

  • [PASS] 6.1 Software Engineering: 复杂逻辑应抽出为可独立测试的函数,避免内联到大方法中
  • [PASS] 6.1 Tests: 涉及关键路径与多种平台/模式的改动需要有覆盖典型与边界 case 的测试

RTP-LLM Checklist

Failed

  • [FAIL] A compatibility and config: KVCacheConfig 字段新增需保持 pickle/序列化向后兼容 Linked issue: KVCacheConfig pickle tuple 大小由 44 改为 46,旧序列化状态加载会直接抛异常
  • [FAIL] E distributed: PD/TP 跨节点协议变更需要保持双端语义对齐,并考虑滚动升级 Linked issue: PD LINEAR group 传输由 last 1 block 改为 last 2 blocks 是 wire-protocol breaking 变更
  • [FAIL] B correctness and logic: layer→group 解析等关键映射在缺值时应 fail-fast 而非静默 fallback Linked issue: runtimeWriteCacheStore 的 mapped_group_id 在 typed mapping 返回 -1 时回退到 layer_to_group,可能掩盖 caller bug
  • [FAIL] D performance: 热路径中避免每请求/每层重复构造大对象 Linked issue: PyWrappedModel::layerRegionToGroupTensor 每层每请求都重建 tensor

Passed

  • [PASS] H tests and CI: 新增 cc_library 需要在 BUILD 中正确暴露 visibility 与 deps

Python Static-First Checklist

Passed

  • [PASS] P.A server args: server arg 新增字段需提供 env_name、type、默认值与帮助说明
  • [PASS] P.B pyi stubs: .pyi 类型存根应与 pybind 暴露的属性/重载保持同步
  • [PASS] P.D naming: Python 字段重命名需在所有调用点同步更新

Strengths

  • 新增的 KVCacheLayerRegionUtils、DecodeCacheLoadPlanner 把原本散落在 connector 与 DecodeRpcServer.cc 的逻辑(layer→group/region 解析、PD block 位置选择、request_key 拼装)抽出为可单测的纯函数,并配套了独立 cc_test 覆盖典型 case。
  • HybridKVCacheAllocator 抽象基类把通用的 reuseCache / incrMalloc / initMallocForCommonLen / incrKVCacheRef / decrKVCacheRef 集中到一处,HybridType 与 HybridPool 之间通过 referenceBlocksInGroup/freeBlocksInGroup 这对虚函数解耦单池/多池差异,明显减少重复代码。
  • KVCacheResource::initGroups 和 BlockPoolConfigHelper::createConfigForGroup 都加了显式的 RTP_LLM_CHECK_WITH_INFO,对 group_types 缺失、layer_region_to_group_id 越界、bytes_per_block=0、pool_ratio 与 group 数不匹配等边界条件 fail-fast,便于上线问题定位。
  • 新增的 HybridTypeKVCacheAllocatorTest(reserve reject 回滚释放引用)、HybridPoolAllocatorRejectsMissingGroupTypes、ExecOpsTest 多 region 用例和 KVCacheMemoryConnectorTest typed slot 路径,对独立池和 typed region 的关键不变量做了端到端验证。

@LLLLKKKK
Copy link
Copy Markdown
Collaborator

AI Code Review - PR #943

Status: LGTM

Summary: P0/0 · P1/0 · P2/3 · P3/2

lgtm ready to ci

Non-blocking Suggestions

P2

  • getMainModelCacheLayerLayout 混用 layer_all_num 与 layer_num 导致数组尺寸不一致 @ rtp_llm/cpp/cache/KVCacheManager.cc:282
    • 建议:按 config_.layer_num 截取 layers_to_*buffer_ptrs_by_attn(与现有 layers_to_kv_buffer_ptrs.resize(config.layer_num) 对齐),或在注释中明确该字段始终是 layer_all_num 长度并要求消费者按 layer_id 索引。
  • useFullBlockRemoteLoad 对 hybrid 启用整块远端拉取会显著放大 TP peer 带宽 @ rtp_llm/cpp/model_rpc/DecodeCacheLoadPlanner.cc:7
    • 建议:如确属设计预期(各 group 布局不同导致无法整齐分片),请在 useFullBlockRemoteLoad / loadCache 处补一行 comment 说明带宽影响;否则需要按 group 区分:仅对“真正不能在 head 维度均分”的 group 走全块路径,其余仍走分片。
  • use_mla 现在被 is_sparse 覆盖,跳过了 kv head 字节对齐的安全检查 @ rtp_llm/cpp/model_rpc/DecodeRpcServer.cc:585
    • 建议:把 use_mla 拆成两个变量:use_full_block_load = useFullBlockRemoteLoad(cache_config) 用于走整块分支;is_mla = cache_config.use_mla 仍用于纯 MLA 语义(或显式确认 sparse 走整块路径后,补 comment 说明无需对齐校验)。

P3

  • loadCache 主路径与 MTP 路径 hybrid_full_from_begin 取值相反但缺乏注释 @ rtp_llm/cpp/model_rpc/DecodeRpcServer.cc:613
    • 建议:在 main / MTP 两处都加一行短注释说明 hybrid_full_from_begin 选择 true/false 的原因(main 历史上 FULL 全量传输而 MTP 复用 reuse_block_size 起点),或者干脆把这个 flag 抽成命名常量例如 kMainLoadHybridFullFromBegin / kMtpLoadHybridFullFromBegin。
  • KVCacheConfig pickle 协议版本无显式 schema 校验,新增字段易再次踩坑 @ rtp_llm/cpp/pybind/ConfigInit.cc:373
    • 建议:改为 if (t.size() < kKVCacheConfigPickleFields) throw ...; 并在 make_tuple 上方放一个 static_assert / 常量定义,把字段数量集中到一处;或给出更明确的错误信息(期望 vs 实际字段数)便于排错。
Review Checklist: 8 pass / 3 fail

General Principles Checklist

Failed

  • [FAIL] 6.1 Architecture: 公共接口/数据结构边界一致,字段长度语义清晰 Linked issue: getMainModelCacheLayerLayout 混用 layer_all_num 与 layer_num 导致数组尺寸不一致

Passed

  • [PASS] 6.1 Software Engineering: SRP / 重复代码: 公共逻辑应集中而不是散落多处
  • [PASS] 6.1 Tests: 新增 / 修改的核心逻辑要有针对性的单元测试,边界用例覆盖完整
  • [PASS] 6.1 Quality: 改动逻辑与无关格式/重命名分离,单一改动职责清晰

RTP-LLM Checklist

Failed

  • [FAIL] D 性能 / 远端传输路径: 改动 PD/load 路径的分片策略要权衡带宽影响 Linked issue: useFullBlockRemoteLoad 对 hybrid 启用整块远端拉取会显著放大 TP peer 带宽
  • [FAIL] I 代码质量: 重命名/类型变更需注释或文档说明动机,避免 reviewer 二次还原推理 Linked issue: loadCache 主路径与 MTP 路径 hybrid_full_from_begin 取值相反但缺乏注释

Passed

  • [PASS] A 兼容性与配置: 新增 KVCacheConfig 字段需要同步 Python pybind/server args 与 pickle 协议
  • [PASS] B 正确性 (cache / scheduler / kernel): PD / cache-store / remote load 的 LINEAR vs FULL 分支需保持各路径一致

Python Static-First Checklist

Passed

  • [PASS] P.A 静态结构与类型纪律: 重命名跨文件需同步全部引用,避免 AttributeError 漏改
  • [PASS] P.H 类型标注: C++ pybind 暴露的新枚举/字段需在 .pyi stub 中同步声明
  • [PASS] P.A 静态结构与类型纪律: 新增 server arg 的类型/默认值/帮助信息应清晰可用

Strengths

  • 提取 HybridKVCacheAllocator 基类成功复用了 reuseCache / initMallocForCommonLen / incrMalloc / 回滚逻辑,HybridType 与新增 HybridPool 的差异收敛到 doInit 与 group/pool 引用计数 hook,删除了约 270 行重复代码。
  • 新增 KVCacheLayerRegionUtils / KVCacheTransferPlanner 把“层-region-group 映射”和“PD/cache-store 取块位置”从分散的分支条件中抽出来,并配套 KVCacheLayerRegionUtilsTest / DecodeCacheLoadPlannerTest / KVCacheResourceTest 覆盖典型与异常路径。
  • InitMalloc / IncrMalloc / Reserve 拒绝 / popBlocksFromCache / updateKVBlock 等以前缺少回归用例的回滚分支,这次都补了端到端测试。
  • KVCacheConfig pickle 版本号同步上调,enable_independent_pool / pool_ratio 在 ConfigInit 与 server_args 两端均接出,避免 Python ↔ C++ schema 漂移。

@LLLLKKKK
Copy link
Copy Markdown
Collaborator

AI Code Review - PR #943

Status: LGTM

Summary: P0/0 · P1/0 · P2/2 · P3/3

lgtm ready to ci

Non-blocking Suggestions

P2

  • Main 模型 layout 中 by_attn 数组沿用 layer_all_num 长度,与 layer_num 字段错位 @ rtp_llm/cpp/cache/KVCacheManager.cc:288
    • 建议:将 layers_to_kv_buffer_ptrs_by_attn/layers_to_scale_buffer_ptrs_by_attn 显式 resize 到 config_.layer_num,并按 layer_id 范围只复制主模型部分,与 layers_to_kv_buffer_ptrs 保持一致。
  • useFullBlockRemoteLoad 把 hybrid 与 sparse 全部纳入整块远端拉取,跳过 peer_cnt 分片会放大带宽 @ rtp_llm/cpp/model_rpc/DecodeCacheLoadPlanner.cc:7
    • 建议:将 hybrid(groupNums>1)场景与 MLA 解耦:full group 仍走 peer_cnt 分片以避免 N 倍冗余拷贝,只让 LINEAR/SWA group 走整块路径(它们本身只 1-2 个 block,代价可接受);并补充注释说明 use_mla/is_sparse/hybrid 三种场景为何选择不同传输策略。

P3

  • 新引入的 hybrid_full_from_begin 参数缺少语义注释 @ rtp_llm/cpp/cache/KVCacheTransferPlanner.h:11
    • 建议:在 blockPositionsForCacheTransfer/blockPositionsForRpc 头部加一段注释:hybrid_full_from_begin=true 时 FULL 组从 0 开始拉取整段(prefill→decode 完整下发),false 时从 reuse_block_size 起跳过命中前缀;并简单说明主模型与 MTP 选择不同值的原因。
  • HybridConfigCreator::initializeConfig 中对 global_layer_ids/layer_ids 的初始 push_back 是死代码 @ rtp_llm/cpp/cache/HybridConfigCreator.cc:91
    • 建议:删除 initializeConfig 中对 global_layer_ids/layer_ids 的 push_back,把 vector 初始化职责完全交给 setupCacheConfigSpecs,以避免误读为有效初始化。
  • HybridPoolKVCacheAllocator::doInit 把 block_pool_ 设为 group 0 的池,语义脆弱 @ rtp_llm/cpp/cache/HybridPoolKVCacheAllocator.cc:60
    • 建议:将 block_pool_ 显式置 nullptr,并在文档/注释中说明 HybridPool 不再走单池路径;或在 HybridPoolKVCacheAllocator 中 override getBlockPool() 抛出异常以暴露误用。
Review Checklist: 5 pass / 4 fail

General Principles Checklist

Failed

  • [FAIL] 6.1 Architecture: 新概念落在合适的层、不向上层泄漏内部实现细节 Linked issue: Main 模型 layout 中 by_attn 数组沿用 layer_all_num 长度,与 layer_num 字段错位
  • [FAIL] 6.1 Quality: 无未死代码、命名/接口与改动语义匹配 Linked issue: HybridConfigCreator::initializeConfig 中对 global_layer_ids/layer_ids 的初始 push_back 是死代码

Passed

  • [PASS] 6.1 Software Engineering: SRP/DRY:重复非平凡逻辑应被抽取或被刻意保留
  • [PASS] 6.1 Tests: 新逻辑有聚焦的 UT,且边界与失败回滚路径有覆盖

RTP-LLM Checklist

Failed

  • [FAIL] D 性能: PD/远端 KV 传输路径分组策略避免冗余拷贝 Linked issue: useFullBlockRemoteLoad 把 hybrid 与 sparse 全部纳入整块远端拉取,跳过 peer_cnt 分片会放大带宽
  • [FAIL] I 代码质量: 新增 API/配置参数有充分注释说明语义 Linked issue: 新引入的 hybrid_full_from_begin 参数缺少语义注释

Passed

  • [PASS] A 兼容性与配置: pickle 状态序列化随字段增加保持版本化兼容
  • [PASS] B 正确性与逻辑: HybridKVCacheAllocator::reuseCache 在 SWA + Linear 混合下 tail 匹配语义正确

Python Static-First Checklist

Passed

  • [PASS] P.A Python 静态正确性: Python 端 enum/symbol 重命名保持一致

Strengths

  • 新增 SWAKVCacheGroup、HybridKVCacheAllocator(基类)/HybridPoolKVCacheAllocator/HybridTypeKVCacheAllocator(派生)层次清晰,共享 reuseCache/incrMalloc/initMalloc 公共骨架。
  • blockPositionsForCacheTransfer 与 layerRegionRequestKey 提取到独立可测工具,write/read 两端复用,并补了多场景单测。
  • rollbackInitMalloc/rollbackIncrMalloc/HybridPool 按组 reserve 校验等失败回滚路径实现完整,且配套 InitMalloc/IncrMalloc 回滚单测。
  • KVCacheRegionName 类型化区分了一层多 region(CSA/HCA/SWA/Indexer 等)的访问对象,与 CacheGroupType 的分配策略职责正交,为 DSV4 多池方案打下良好基础。

Add per-layer region name awareness to PD separation cache transfer.
Refactors DecodeRpcServer and ExecOps to use layer_region_to_group
mapping, and extends makeCacheKey to include region_name suffix.
Linear groups now transfer the last two blocks instead of one.
Extend KVCacheMemoryConnector to use layer+region_name slots for block
layout, copy plan building, and validation. This allows models with
multiple cache regions per layer to correctly transfer blocks through
the memory connector path.
@SJTUGavinLiu SJTUGavinLiu force-pushed the develop/chanyin/hybrid_pool branch from e799c16 to 23fae48 Compare April 29, 2026 08:49
@LLLLKKKK
Copy link
Copy Markdown
Collaborator

AI Code Review - PR #943

Status: LGTM

Summary: P0/0 · P1/0 · P2/1 · P3/3

lgtm ready to ci

Non-blocking Suggestions

P2

  • Hybrid PD 全块远端拉取放大带宽(未化解) @ rtp_llm/cpp/model_rpc/DecodeCacheLoadPlanner.cc:6
    • 建议:建议把 hybrid 触发条件再收窄:仅在“典型布局确实不能切分”(例如 MLA / 稀疏索引 / 非对齐的 region 排布)时才走整块路径,对常规 hybrid(FULL+LINEAR/SWA、stride 可均匀切分)保留 partition 拉取;或加配置/降级开关与日志,便于线上回退。

P3

  • Memory connector 静默关闭 split-KV SM copy 优化缺解释 @ rtp_llm/cpp/cache/connector/memory/KVCacheMemoryConnector.cc:577
    • 建议:在 can_use_split_kv_copy 处补一行注释说明 typed-region 场景下 split-KV scatter/gather 因布局假设不再成立而强制关闭;并考虑在首次落到该分支时打 INFO 日志,便于诊断为何 H2D/D2H 退化。
  • HybridPoolKVCacheAllocator::block_pool_ 仅指向第 0 组,易被误读 @ rtp_llm/cpp/cache/HybridPoolKVCacheAllocator.cc:1436
    • 建议:在该赋值处加注释强调 “for legacy callers only, do NOT read pool stats from this pointer in HybridPool mode”;或者在 HybridPoolKVCacheAllocator 中显式 override getBlockPool() 返回 nullptr/抛错以阻断误用。
  • BlockPoolConfigHelper::createConfig dtype 来源切换扩大隐式契约 @ rtp_llm/cpp/cache/BlockPoolConfigHelper.h:199
    • 建议:建议在切换前加 RTP_LLM_CHECK_WITH_INFO(spec->dtype == cache_config.dtype, ...),或显式注释说明 spec->dtype 必须由 ConfigCreator 主动填充。
Review Checklist: 7 pass / 4 fail

General Principles Checklist

Passed

  • [PASS] 6.1 Software Engineering: SRP/DRY: PD 传输块位选择是否复用同一抽象,避免重复分支逻辑
  • [PASS] 6.1 Architecture: 边界与封装:HybridPool 与 HybridType 通过共同基类正确拆分职责
  • [PASS] 6.1 Tests: 新增能力配套单测覆盖关键失败路径
  • [PASS] 6.1 Quality: 增量改动没有掺杂无关重排或风格变更

RTP-LLM Checklist

Failed

  • [FAIL] B Correctness: BlockPoolConfigHelper dtype 取值切换是否安全 Linked issue: BlockPoolConfigHelper::createConfig dtype 来源切换扩大隐式契约
  • [FAIL] D Performance: PD 远端 cache load 是否保留 TP 分区拉取以减少跨节点带宽 Linked issue: Hybrid PD 全块远端拉取放大带宽(未化解)
  • [FAIL] D Performance: memory connector copyCache 是否避免无声关闭 sm_copy 优化 Linked issue: Memory connector 静默关闭 split-KV SM copy 优化缺解释
  • [FAIL] I Code Quality: HybridPool 父类 block_pool_ 兼容字段是否避免被误用 Linked issue: HybridPoolKVCacheAllocator::block_pool_ 仅指向第 0 组,易被误读

Passed

  • [PASS] H Tests: Cache/Region 路径是否有失败/边界单测覆盖

Python Static-First Checklist

Passed

  • [PASS] P.A Naming/Compat: Python 端 KVCache 字段命名(layer_attn_types -> layer_group_types)调用点已同步
  • [PASS] P.D Server Args: 新增 server arg 是否有合理默认值并向后兼容

Strengths

  • 新增 HybridPoolKVCacheAllocator/SWAKVCacheGroup/KVCacheTransferPlanner 等单测覆盖完整(per-group reserve、init/incr rollback、popBlocks 去重、典型/非典型 region 组合),体现了对失败路径与边界场景的关注。
  • 把 PD 传输块位选择逻辑从 DecodeRpcServer/runtimeWriteCacheStore 抽到 KVCacheTransferPlanner,去除了三处重复的 hybrid 分支判断,main vs MTP 的差异通过 hybrid_full_from_begin 参数显式表达。
  • Hybrid allocator 的 init/incr malloc 失败路径都有 referenced_blocks/原始 size 双重回滚,配合新的 reserve_blocks 拒绝路径释放已 reference 的 reuse 块,避免了部分分配后块泄漏。

@LLLLKKKK
Copy link
Copy Markdown
Collaborator

AI Code Review - PR #943

Status: LGTM

Summary: P0/0 · P1/0 · P2/0 · P3/3

lgtm ready to ci

Non-blocking Suggestions

P3

  • parsePoolRatio 对非数值 token 直接抛 std::invalid_argument @ rtp_llm/cpp/cache/CacheConfigCreator.cc:18
    • 建议:用 try/catch 包裹 stod,捕获 std::invalid_argument/std::out_of_range 后用 RTP_LLM_FAIL 输出原始 ratio_str 与失败的 token;或在 Python 侧(kv_cache_group_args.py 解析时)提前校验格式。
  • useFullBlockRemoteLoad 把所有 hybrid 配置都拉成整块远端加载 @ rtp_llm/cpp/model_rpc/DecodeCacheLoadPlanner.cc:7
    • 建议:把 hybrid 判定收敛到 typed-region 真实需要全块的场景(例如 has_typed_layer_region_slots_ 或显式 region != DEFAULT),其他纯 group_type 分流场景仍保留 TP 分块路径,避免对 LINEAR/SWA hybrid 整体放大带宽。
  • typed layer-region 下 sm_copy 静默禁用,仅一次日志 @ rtp_llm/cpp/cache/connector/memory/KVCacheMemoryConnector.cc:577
    • 建议:至少配套上报 metrics(例如 split_kv_copy_disabled_count),或在 init 阶段一次性 WARNING 而非 copyCache 内部条件触发;理想做法是在配置加载时检测冲突直接拒绝或显式打印冲突原因。
Review Checklist: 7 pass / 2 fail

General Principles Checklist

Failed

  • [FAIL] 6.1 Quality: 错误信息可定位、避免静默降级 Linked issue: parsePoolRatio 对非数值 token 直接抛 std::invalid_argument

Passed

  • [PASS] 6.1 Software Engineering: SRP / KISS:新模块单一职责、避免重复非必要逻辑
  • [PASS] 6.1 Architecture: 兼容性 / 公共配置变更:序列化、pickle、env、Python 暴露同步迁移
  • [PASS] 6.1 Tests: 新增逻辑配套单测、覆盖边界与失败路径

RTP-LLM Checklist

Failed

  • [FAIL] D 性能: 热路径不应被默默降级或放大带宽 Linked issue: useFullBlockRemoteLoad 把所有 hybrid 配置都拉成整块远端加载

Passed

  • [PASS] A 兼容性与配置: pybind/proto/CLI 与运行时字段保持一致
  • [PASS] B 正确性与逻辑: Hybrid PD 传输按 group_type 选择正确 block 集合
  • [PASS] H 测试与 CI: 新模块/新算子需要可在 CI 上独立运行的最小用例

Python Static-First Checklist

Passed

  • [PASS] P.A Python 静态正确性: Python 端字段重命名/新枚举与 C++ 暴露保持一致

Strengths

  • 新增 KVCacheTransferPlanner / KVCacheLayerRegionUtils / DecodeCacheLoadPlanner 三个独立模块,把原本散落在 DecodeRpcServer 与 ExecOps 的 hybrid 选块逻辑收敛到统一函数,并配套独立 gtest(KVCacheTransferPlannerTest、DecodeCacheLoadPlannerTest),可读性与可测性显著提升。
  • BlockPoolConfigHelper 改为读取 KVCacheSpec 自身的 dtype/use_mla/is_sparse/seq_size_per_block,并新增 BlockPoolConfigUsesSpecDtypeWhenCacheConfigDtypeDiffers 测试,确保 hybrid pool 不再被全局 cache_config.dtype 错误覆盖。
  • 把 HybridTypeKVCacheAllocator 抽象出 HybridKVCacheAllocator 基类,并由其派生 HybridPoolKVCacheAllocator(per-group BlockPool),同时保留 referenceBlocksInGroup/freeBlocksInGroup 钩子,便于后续新增 allocator。SWA group + InitMallocRollbackReleasesReferencedReuseBlocksOnReserveReject 等回滚测试覆盖完整。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants