已合并
[feature] memcache KvEvent 适配:缓存感知调度全链路 #779
jason lyu创建于 18 天前
[feature] memcache KvEvent 适配:缓存感知调度全链路 #779
已合并
Pull Request已成功合入, 合并人@tobking
(感谢 jason lyu 的贡献)18 天前 关联了issue:[Feature-Request|需求反馈]: memcache KvEvent 适配:缓存感知调度全链路
atomgit-bot
18 天前 评论:
18 天前 评论:
变更摘要
本 PR 将 memcache 的 KvEvent 广播接入 kv-conductor 缓存感知调度,实现「memcache 池化 + kv-conductor 缓存感知调度」全链路:kv-conductor 新增 MemcacheEventBatch 解析({"events": [...]} wire 格式),按 msgpack 首字节(fixmap)快速分流并跳过无谓的 vLLM/Mooncake 试解析,配合 IpOnly 匹配(backend_id=Pod IP 经 hbm_ip_index 路由到节点全部 DP)与两阶段匹配(pool stored 事件先入 pending_pool 排队、引擎 offload 事件后补匹配,双向 + TTL 清理);FlexHash 支持 vLLM 默认 32 字节 sha256 块哈希(取低 64 位),修复引擎 offload 事件与池确认哈希无法匹配的问题。部署侧新增 kv_events 配置块、ock.mmc.local_service.backend_id 占位符(common.sh 部署时替换为 Pod IP)及 K8s Service 暴露 kv-events: 5557 端口;Coordinator 侧 pool_endpoint 支持 tcp://*:5557 通配符解析、store_backend 大小写不敏感;另提供 vLLM MultiConnector 各版本补丁并将事件日志统一为 kv_event <state> 状态机以提升可维测性。
主要改动
- kv-conductor 支持 memcache KvEvent 解析与两阶段匹配:
zmq_subscriber.rs按 msgpack 首字节将 fixmap 分流为 memcache 批次并解析MemcacheEventBatch,pool.rs中 memcache stored 事件(仅有哈希、无 token 信息)先进入pending_pool排队,待引擎 offload 事件到达后补匹配入树,indexer/mod.rs增加pending_poolTTL 清理与过期计数日志,events/tests.rs新增 wire 格式解析与 IpOnly 路由用例。 - FlexHash 支持 vLLM 32 字节 sha256 块哈希:
flex_hash.rs对超过 8 字节的二进制哈希改为取尾部 8 字节(低 64 位 big-endian),与 vLLM int 模式(& (1<<64)-1)和 memcacheBlockHashHexToU64对齐,原「bytes too long」报错改为兼容解析并补充对应单测。 - Coordinator 池注册增强:
conductor_api_client.py的pool_endpoint支持tcp://*:5557通配符,部署时以KVS_MASTER_SERVICE环境变量替换为 KVS master 域名(未设置则跳过池注册并告警);store_backend改为大小写不敏感并归一为规范名(Mooncake/Memcache/YuanRong),新增对应单测。 - memcache kv_events 部署配置:
memcache_meta_service.py新增默认关闭的 kv_events 配置块(kv_events_enable/endpoint/model_name/block_size,注释解除即开启);mmc-local-inprocess.conf与mmc-local-standalone.conf新增ock.mmc.local_service.backend_id = <POD_IP>占位符,common.sh部署时用$POD_IP替换;kv_cache_store_template.yaml与infer_service_template.yaml暴露kv-events: 5557端口,并新增tests/examples/deployer/test_kv_events.py覆盖上述配置行为。 - vLLM MultiConnector 补丁与日志状态机统一:为 v0.20.2/0.21.0/0.22.1/0.23.0/0.25.0/0.26.0 提供
MultiConnector.get_kv_connector_kv_cache_events补丁,合并子连接器事件避免顶层配置下引擎 offload 事件被静默丢弃;事件日志统一为kv_event <state>状态机(received/parsed/queued/offload_cached/matched/confirmed/applied/dropped/pending_expired),matched/confirmed 提升为 INFO,新增StorageMedium::log_str统一小写 medium(xpu/cpu/disk),query 日志输出 per-medium 命中块数(npu_blocks/cpu_blocks/disk_blocks)并修正耗时字段语义。


不准确?
atomgit-bot
18 天前 评论:
18 天前 评论:
18 天前 添加了label:stat/needs-squash
18 天前 添加了label:ascend-cla/yes
此处折叠了101条消息 查看更多
15 天前 添加了label:approved
tobking
15 天前 评论:
15 天前 评论:
/lgtm


15 天前 添加了label:lgtm
15 天前 关闭了关联的issue
15 天前 合入了pull request
1. 合入背景
Agentic AI 多轮对话场景下,请求间共享大量相同前缀,随机调度导致 KV Cache 无法命中、每轮重复 Prefill。本 PR 使能 MemCache 池化 + kv-conductor 缓存感知调度:kv-conductor 订阅 memcache MetaService 的 KvEvent 广播(memcache PR #334/#363),结合引擎 offload 事件做两阶段匹配,请求路由到已缓存前缀的节点,最大化 KV 复用、降低 TTFT。
关联 ISSUE:#508
2. 修改内容
memcache_meta_service.py新增 kv_events 配置块(enable/endpoint/model_name/block_size,默认关闭、解除注释即开启);mmc-local-*.conf新增ock.mmc.local_service.backend_id默认配置,common.sh部署时替换为 Pod IP;K8s Service 模板(kv_cache_store / infer_service)暴露kv-events: 5557端口。MemcacheEventBatch解析({"events": [...]}wire 格式),按 msgpack 首字节(fixmap)快速分流,跳过无谓的 vLLM/Mooncake 试解析;IpOnly 匹配(backend_id=Pod IP → hbm_ip_index → 节点所有 DP);两阶段匹配(pool stored 先到进 pending_pool 排队、engine offload 后到补匹配,双向 + TTL 清理)。& (1<<64)-1)、memcacheBlockHashHexToU64对齐——修复引擎 offload 事件(sha256 bytes)与池确认(u64)无法匹配的问题。pool_endpoint支持tcp://*:5557通配符(部署时解析为 KVS_MASTER_SERVICE);store_backend大小写不敏感(与 kv-conductor Rust 侧一致)。MultiConnector.get_kv_connector_kv_cache_events未实现(TODO),MultiConnector 顶层配置下引擎 offload 事件被静默丢弃。提供 v0.20.2/0.21.0/0.22.1/0.23.0/0.25.0/0.26.0 各版本补丁(examples/deployer/patch/),已建议上游合入。kv_event <state>状态机(received/parsed/queued/offload_cached/matched/confirmed/applied/dropped/pending_expired),matched/confirmed 提为 INFO;medium 统一小写(xpu/cpu/disk,StorageMedium::log_str);query 日志输出 per-medium 命中块数(npu_blocks/cpu_blocks/disk_blocks)、修正耗时字段语义。3. 资料变更
涉及:
docs/zh/user_guide/features/kv_cache_store/backend/memcache.md新增 KV events 广播小节(开启步骤、backend_id 自动注入、MultiConnector 补丁依赖说明)。4. 接口变更
不涉及跨代码仓接口变更(memcache 广播格式为 memcache 侧已定协议;kv-conductor HTTP 接口无变更)。
5. 测试结果
6. CheckList
[x] 代码注释完备
[x] 正确记录维测日志
[x] 是否有UT用例
[x] 若涉及多线程场景,考虑了并发场景,不存在死锁问题