distributed/device_communicators/npu_communicator.py
查看源码NPU 设备间通信器(58 行)。NPUCommunicator 适配 vLLM 的 DeviceCommunicator;_NpuAll2AllManager 是 NPU 上的 no-op all2all 管理器,实现容错接口(support_fault_tolerance/query_fault/query_active_mask)以兼容 vLLM 主线的容错逻辑但不实际执行 all2all。
D:\demo\202609\vllm-ascend\vllm-ascend-main\vllm_ascend\distributed\device_communicators\npu_communicator.py
support_fault_tolerance[2行] 代码量 2 行
query_fault[2行] 代码量 2 行
query_active_mask[2行] 代码量 2 行
__init__[18行] 代码量 18 行
distributed/device_communicators/pyhccl.py
查看源码PyHcclCommunicator(171 行):用 Python 直接驱动 HCCL 库的轻量通信器,提供 all_reduce 与 broadcast,绕过 torch.distributed 的 ProcessGroup 以降低开销,用于自定义通信组(如 MC2/OTP 组)。
D:\demo\202609\vllm-ascend\vllm-ascend-main\vllm_ascend\distributed\device_communicators\pyhccl.py
__init__[91行] Args:
all_reduce[24行] 代码量 24 行
broadcast[17行] 代码量 17 行
distributed/device_communicators/pyhccl_wrapper.py
查看源码HCCL C 库的 ctypes 封装(264 行)。HCCLLibrary 加载 HCCL so 并声明 C 接口:hcclGetUniqueId/hcclCommInitRank 建组、hcclAllReduce/hcclBroadcast 通信、hcclCommDestroy 销毁,HCCL_CHECK 错误检查与 hcclGetErrorString 错误信息;hcclDataTypeEnum/hcclRedOpTypeEnum 负责 torch dtype/归约操作到 HCCL 枚举的映射。
D:\demo\202609\vllm-ascend\vllm-ascend-main\vllm_ascend\distributed\device_communicators\pyhccl_wrapper.py
from_torch[10行] 代码量 10 行
__init__[32行] 代码量 32 行
hcclGetErrorString[2行] 代码量 2 行
HCCL_CHECK[4行] 代码量 4 行
hcclGetUniqueId[4行] 代码量 4 行
hcclCommInitRank[6行] 代码量 6 行
hcclAllReduce[16行] 代码量 16 行
hcclBroadcast[4行] 代码量 4 行
hcclCommDestroy[2行] 代码量 2 行
distributed/eplb/communicator.py
查看源码EPLB 异步模式的 Gloo CPU 中转通信器(56 行)。AscendGlooEplbCommunicator 在 Ascend 上用 Gloo(CPU 侧)传输专家负载信息:_to_global_peer_rank 换算对端全局 rank、add_send/add_recv 登记收发、needs_profile_buffer_reservation 声明 profile 缓冲预留。
D:\demo\202609\vllm-ascend\vllm-ascend-main\vllm_ascend\distributed\eplb\communicator.py
_to_global_peer_rank[14行] Translate an EPLB group-local peer rank to a global rank.
add_send[9行] 代码量 9 行
add_recv[9行] 代码量 9 行
needs_profile_buffer_reservation[2行] 代码量 2 行
distributed/eplb/state.py
查看源码EPLB 状态扩展(179 行)。AscendEplbLayerState 在上游 EPLB 层状态上维护图稳定的专家副本路由表(refresh_expert_replica_routing_table),保证 ACL graph 重放期路由表地址不变;AscendEplbState 包裹上游状态:rearrange 执行专家重排、from_mapping 按映射构建(兼容不同 vLLM 版本的 mapping 契约 _upstream_from_mapping_accepts_valid_expert_count)、_has_global_fresh_recorded_load 判断全局负载新鲜度;refresh_model_routing_tables 刷新全模型或单层的路由表(异步提交后刷单层)。
D:\demo\202609\vllm-ascend\vllm-ascend-main\vllm_ascend\distributed\eplb\state.py
_upstream_from_mapping_accepts_valid_expert_count[3行] Return whether the selected vLLM uses the release mapping contract.
refresh_model_routing_tables[11行] Refresh every routing table, or one table after an async commit.
__init__[5行] 代码量 5 行
from_upstream[8行] 代码量 8 行
set_layer_state[14行] 代码量 14 行
refresh_expert_replica_routing_table[21行] 代码量 21 行
_has_global_fresh_recorded_load[25行] Synchronize whether any EP rank recorded load since rearranging.
rearrange[24行] 代码量 24 行
from_mapping[24行] 代码量 24 行
distributed/kv_transfer/__init__.py
查看源码KV 传输子包注册入口(101 行)。register_connector 把 Ascend 实现的各 KV connector(MultiConnector、Mooncake 系列、AscendStore、CPU offload 系列等)按配置注册进 vLLM 的 connector 工厂。
D:\demo\202609\vllm-ascend\vllm-ascend-main\vllm_ascend\distributed\kv_transfer\__init__.py
register_connector[81行] 代码量 81 行
distributed/kv_transfer/ascend_multi_connector.py
查看源码多 connector 组合器(199 行)。AscendMultiConnector 把多个底层 KV connector 组合使用(如 Mooncake + 本地 offload):按层配置复用完成等待(_configure_layerwise_reuse_completion)、外部 slot 释放等待(_wait_for_external_slot_release)、Mamba 状态拷贝(prepare/finish_mamba_state_copy),并把 save/load/matched-tokens 等标准接口分发到子 connector。
D:\demo\202609\vllm-ascend\vllm-ascend-main\vllm_ascend\distributed\kv_transfer\ascend_multi_connector.py
__init__[21行] 代码量 21 行
_configure_layerwise_reuse_completion[23行] 代码量 23 行
_wait_for_external_slot_release[3行] 代码量 3 行
wait_for_layer_load[16行] 代码量 16 行
prepare_mamba_state_copy[6行] 代码量 6 行
finish_mamba_state_copy[7行] 代码量 7 行
save_kv_layer[13行] 代码量 13 行
on_kv_cache_written[11行] 代码量 11 行
update_state_after_alloc[12行] 代码量 12 行
get_num_new_matched_tokens[21行] 代码量 21 行
update_state_before_preempt[12行] 代码量 12 行
request_finished_all_groups[25行] 代码量 25 行
distributed/kv_transfer/kv_p2p/mooncake_connector.py
查看源码Mooncake KV P2P 传输 connector(4078 行,分布式最大文件)。实现 PD 分离下 prefill→decode 的 KV 传输:MooncakeConnectorScheduler 侧计算匹配 token 数、构建传输块 ID(含 SWA 特判 _get_swa_transfer_block_ids)、按握手元数据管理端口偏移;MooncakeConnectorWorker 侧管理 KV 组规格序列化(_serialize_kv_group_spec)、层到组映射(_build_kv_group2layeridx)、对齐张量基址恢复、全部组的传输(_transfer_kv_cache_all_groups);MooncakeConnector 协调双方:get_num_new_matched_tokens 查询远端命中、start_load_kv/wait_for_layer_load 加载、save_kv_layer/wait_for_save 保存;后台线程:KVCacheSendingThread/KVCacheRecvingThread 负责异步收发与失败标记;KVCacheTaskTracker 跟踪任务完成与超时回收;工具函数:连续块分组(group_concurrent_contiguous)、ZMQ 重试收发(ensure_zmq_send/recv)、SHA-256 哈希、PP 分层索引切分。
D:\demo\202609\vllm-ascend\vllm-ascend-main\vllm_ascend\distributed\kv_transfer\kv_p2p\mooncake_connector.py
zmq_ctx[13行] Context manager for a ZMQ socket
group_concurrent_contiguous[24行] Group block ids that are contiguous in both id space and memory.
split_if_not_byte_contiguous[19行] 代码量 19 行
string_to_int64_hash[8行] Hash the string using SHA-256 and convert it into an int64 integer.
ensure_zmq_send[19行] 代码量 19 行
ensure_zmq_recv[17行] 代码量 17 行
transfer_groups_need_independent_block_ids[22行] Whether split transfer groups need separately expanded block IDs.
build_layer_name_to_metadata_idx[9行] 代码量 9 行
resolve_remote_layer_idx[17行] Resolve a remote metadata index by the stable cache-layer name.
get_prefill_pp_indices[17行] 代码量 17 行
__init__[95行] 代码量 95 行
__setitem__[4行] 代码量 4 行
__getitem__[7行] 代码量 7 行
add_req_to_process[2行] 代码量 2 行
add_not_transfer_request[2行] 代码量 2 行
update_done_task_count[14行] 代码量 14 行
get_and_clear_finished_requests[7行] Get and clear the requests that have been completed.
add_delayed_request[2行] 代码量 2 行
_retrieve_expired_requests[22行] Retrieve all expired delayed requests.
run[13行] Run the thread to handle KV cache transfer requests.
run_busy_loop[85行] 代码量 85 行
add_request[40行] Add a new request to the queue for processing.
get_and_clear_invalid_block_ids[6行] Get and clear block ids that failed to load.
_is_failed_recv_request[3行] 代码量 3 行
_mark_failed_recv_request[4行] 代码量 4 行
_clear_failed_recv_request[3行] 代码量 3 行
_submit_request[12行] 代码量 12 行
_handle_peer_requests[32行] 代码量 32 行
_mark_request_task_submitted[6行] 代码量 6 行
_mark_request_task_done[15行] 代码量 15 行
_handle_request[51行] 代码量 51 行
_send_done_signal_to_free_remote_port[16行] 代码量 16 行
_transfer_kv_cache_all_groups[282行] Handle a KV cache transfer request.
_stash_pending_reformat[8行] 代码量 8 行
_reformat_pending_kv_caches[10行] 代码量 10 行
_apply_kv_cache_reformat[71行] 代码量 71 行
reformat_kv_cache_hybrid_linear_torch[27行] 代码量 27 行
_append_mamba_transfer_meta[93行] 代码量 93 行
_get_group_kv_caches[16行] 代码量 16 行
_get_kv_cache_dims_from_tensors[4行] Return (num_kv_heads, k_head_dim, v_head_dim) from registered KV cache tensors.
reformat_kv_cache_with_fused_op[25行] 代码量 25 行
reformat_kv_cache[76行] 代码量 76 行
_cat_kv_cache[30行] 代码量 30 行
_nz_kv_cache[19行] 代码量 19 行
_get_remote_metadata[35行] Get the metadata from the remote host.
_send_done_recv_signal[35行] 代码量 35 行
_get_remote_socket[23行] Get a socket to the remote host.
_return_remote_socket[10行] Return the remote socket to the pool.
add_new_req[26行] 代码量 26 行
get_num_new_matched_tokens[37行] For remote prefill, pull all prompt blocks from remote
update_state_after_alloc[28行] 代码量 28 行
build_connector_meta[28行] 代码量 28 行
request_finished[63行] Once a request is finished, determine whether request blocks
request_finished_all_groups[7行] 代码量 7 行
register_kv_caches[139行] Register the KV Cache data.
get_finished[21行] 代码量 21 行
get_block_ids_with_load_errors[4行] 代码量 4 行
start_load_kv[105行] Start loading KV blocks from remote engine.
wait_for_layer_load[3行] MooncakeConnector does not do layerwise saving.
save_kv_layer[5行] MooncakeConnector does not save explicitly.
wait_for_save[3行] MooncakeConnector does not save explicitly.
get_handshake_metadata[12行] Get the KVConnector handshake metadata for this connector.
set_xfer_handshake_metadata[5行] Legacy int-keyed entry point (port offset keys).
set_xfer_handshake_metadata_pp_aware[5行] 代码量 5 行
_model_uses_compress[4行] 代码量 4 行
_get_group_transfer_info[18行] 代码量 18 行
_get_group_unique_specs[10行] 代码量 10 行
_get_transfer_block_ids[41行] Return blocks that contain prompt KV, dropping MTP extra blocks.
_get_swa_transfer_block_ids[15行] Clip SWA groups to their window tail and drop placeholder block 0.
_state_prefill_token_count[6行] D-side only. Returns N-1 for Mamba models since the decoder
_truncate_request_for_prefill[25行] P-side only: drop the last prompt token so the prefiller computes
_port_offset_from_handshake_metadata[12行] 代码量 12 行
set_xfer_handshake_metadata_from_workers[25行] Build host mapping for one DP group that may span multiple nodes.
_get_prefill_decode_size[21行] 代码量 21 行
_serialize_kv_group_spec[53行] 代码量 53 行
_is_index_cache_layer[2行] 代码量 2 行
_build_layer_specs_from_kv_cache_config[14行] Return the real per-layer specs retained by the KV cache config.
_get_spec_num_key_value_heads[6行] 代码量 6 行
_get_kv_transfer_spec_key[13行] 代码量 13 行
_group_skip_kv_reformat[3行] 代码量 3 行
_get_spec_total_num_kv_heads[20行] 代码量 20 行
_build_kv_group2layeridx[62行] 代码量 62 行
_has_mamba_group[2行] 代码量 2 行
_requires_group_aware_attention_transfer[7行] 代码量 7 行
_as_kv_cache_tuple[4行] 代码量 4 行
_get_layer_spec[5行] 代码量 5 行
_recover_aligned_kv_tensor_base[22行] Recover the aligned raw buffer base behind hybrid cache views.
_get_registered_kv_tensor_buffers[26行] 代码量 26 行
_get_registered_kv_tensor_buffers_hybrid[21行] 代码量 21 行
_get_registered_layer_buffers[10行] 代码量 10 行
_expand_block_ids[4行] 代码量 4 行
_local_kernel_ids_for_shard[63行] Map this shard's pulled P-blocks straight to D-side kernel block ids.
_group_compress_ratio[10行] 代码量 10 行
_get_kv_cache_group_id[2行] 代码量 2 行
_is_m3_index_cache_group[6行] 代码量 6 行
_get_kernel_block_scale[5行] Kernel block scale for logical-to-tensor block expansion.
_get_kernel_block_ids[32行] No-CP per-group block ids at kernel granularity: (local, remote).
_get_group_kernel_params[16行] 代码量 16 行
_get_local_remote_cp_params[26行] Resolve CP geometry: (remote_block_size, local_cp_rank, local_cp_size,
_get_kv_split_metadata[409行] Build per-transfer port and block-id metadata for remote KV reads.
_get_cp_shard_pulls[50行] 代码量 50 行
_get_group_pulls_metadata[85行] Build per-port KV cache group pull descriptors.
_get_hybrid_remote_rank_group_pulls[76行] 代码量 76 行
_get_attention_group_num_need_pulls[2行] 代码量 2 行
_get_attention_group_num_need_pulls_for_decode_tp[10行] 代码量 10 行
_group_use_mla_rank_routing[9行] 代码量 9 行
_get_attention_group_num_key_value_heads[29行] 代码量 29 行
_get_attention_group_remote_rank[15行] 代码量 15 行
_get_sfa_replicate_k_block_ids[73行] 代码量 73 行
_get_tp_num_need_pulls[14行] 代码量 14 行
_get_remote_host_info_by_port[20行] 代码量 20 行
_prefill_get_remote_rank[8行] 代码量 8 行
_get_prefill_ranks_for_group[22行] 代码量 22 行
_get_remote_rank[2行] 代码量 2 行
_get_remote_tp_ranks[26行] 代码量 26 行
_get_remote_ranks_for_req[60行] 代码量 60 行
pp_layer_indices[13行] 代码量 13 行
get_remote_layer_idx[15行] 代码量 15 行
_transpose_cache_by_block[13行] 代码量 13 行
layer_in_group[4行] 代码量 4 行
_transpose_kv_cache_between_head[4行] 代码量 4 行
to_msgpackable[14行] 代码量 14 行
context_parallel_parameters_check[6行] 代码量 6 行
get_kv_head_groups[20行] 代码量 20 行
get_cp_group_meta[25行] 代码量 25 行
get_local_remote_block_port_mappings[40行] 代码量 40 行
get_remote_port_send_num[30行] 代码量 30 行
_set_hma_shared_port[43行] Rewrite remote attention ports for HMA load balancing and append Mamba ports.
make_group_pulls[11行] 代码量 11 行
add_group_pull[2行] 代码量 2 行
model_num_key_value_heads[5行] 代码量 5 行
in_partition[5行] 代码量 5 行
distributed/kv_transfer/kv_p2p/mooncake_hybrid_connector.py
查看源码Mooncake 混合架构(注意力+Mamba/SWA 混合 KV)传输 connector(2132 行)。在基础版之上处理混合缓存的传输:SWA 裁剪块表(get_sw_clipped_blocks)、传输块 ID 计算(_compute_transfer_block_ids)、KV 缓存重排(reformat_kv_cache_with_fused_op/reformat_kv_cache/_cat_kv_cache)、PP 感知握手元数据(set_xfer_handshake_metadata_pp_aware)、TP 拉取数计算(_get_tp_num_need_pulls)与远端 rank 映射(_prefill_get_remote_rank/_get_remote_ranks_for_req)。
D:\demo\202609\vllm-ascend\vllm-ascend-main\vllm_ascend\distributed\kv_transfer\kv_p2p\mooncake_hybrid_connector.py
zmq_ctx[13行] Context manager for a ZMQ socket
group_concurrent_contiguous[18行] Vectorised NumPy implementation.
string_to_int64_hash[8行] Hash the string using SHA-256 and convert it into an int64 integer.
ensure_zmq_send[19行] 代码量 19 行
ensure_zmq_recv[17行] 代码量 17 行
get_prefill_pp_indices[17行] 代码量 17 行
__init__[98行] 代码量 98 行
__setitem__[4行] 代码量 4 行
__getitem__[7行] 代码量 7 行
add_req_to_process[2行] 代码量 2 行
add_not_transfer_request[2行] 代码量 2 行
update_done_task_count[14行] 代码量 14 行
get_and_clear_finished_requests[7行] Get and clear the requests that have been completed.
add_delayed_request[2行] 代码量 2 行
_retrieve_expired_requests[22行] Retrieve all expired delayed requests.
run[13行] Run the thread to handle KV cache transfer requests.
run_busy_loop[84行] 代码量 84 行
add_request[33行] Add a new request to the queue for processing.
_submit_request[12行] 代码量 12 行
_handle_peer_requests[32行] 代码量 32 行
_mark_request_task_submitted[6行] 代码量 6 行
_mark_request_task_done[15行] 代码量 15 行
_handle_request[29行] 代码量 29 行
_send_done_signal_to_free_remote_port[16行] 代码量 16 行
_transfer_kv_cache_all_groups[115行] Handle a KV cache transfer request.
_transfer_kv_cache[120行] Handle a KV cache transfer request.
reformat_kv_cache_with_fused_op[20行] 代码量 20 行
reformat_kv_cache[64行] 代码量 64 行
_cat_kv_cache[21行] 代码量 21 行
_nz_kv_cache[9行] 代码量 9 行
_get_remote_metadata[24行] Get the metadata from the remote host.
_send_done_recv_signal[34行] 代码量 34 行
_get_remote_socket[23行] Get a socket to the remote host.
_return_remote_socket[10行] Return the remote socket to the pool.
add_new_req[19行] 代码量 19 行
get_num_new_matched_tokens[36行] For remote prefill, pull all prompt blocks from remote
update_state_after_alloc[22行] 代码量 22 行
build_connector_meta[27行] 代码量 27 行
request_finished_all_groups[47行] Once a request is finished, determine whether request blocks
register_kv_caches[144行] Register the KV Cache data.
get_finished[20行] 代码量 20 行
start_load_kv[89行] Start loading KV blocks from remote engine.
wait_for_layer_load[3行] MooncakeConnector does not do layerwise saving.
save_kv_layer[5行] MooncakeConnector does not save explicitly.
wait_for_save[3行] MooncakeConnector does not save explicitly.
get_handshake_metadata[12行] Get the KVConnector handshake metadata for this connector.
set_xfer_handshake_metadata[12行] Set the KV connector handshake metadata for this connector.
set_xfer_handshake_metadata_pp_aware[3行] 代码量 3 行
get_sw_clipped_blocks[19行] Clip the number of blocks to the sliding window size for each kv cache group
_state_prefill_token_count[6行] D-side only. Returns N-1 for Mamba models since the decoder
_truncate_request_for_prefill[25行] P-side only: drop the last prompt token so the prefiller computes
_compute_transfer_block_ids[10行] 代码量 10 行
_port_offset_from_handshake_metadata[11行] 代码量 11 行
set_xfer_handshake_metadata_from_workers[13行] Store worker metadata keyed by handshake port offset
_get_prefill_decode_size[21行] 代码量 21 行
_get_tp_num_need_pulls[17行] 代码量 17 行
_get_remote_host_info_by_port[13行] 代码量 13 行
_prefill_get_remote_rank[2行] 代码量 2 行
_get_remote_rank[2行] 代码量 2 行
_get_remote_tp_ranks[24行] 代码量 24 行
_get_remote_ranks_for_req[40行] 代码量 40 行
_transpose_kv_cache_between_head[4行] 代码量 4 行
distributed/kv_transfer/kv_p2p/mooncake_layerwise_connector.py
查看源码Mooncake 层级(layerwise)传输 connector(2259 行)。KV 按层流水传输以重叠计算与通信:MooncakeLayerwiseConnector 提供 wait_for_layer_load/wait_for_layer_reuse/on_kv_cache_written 等层级接口;Worker 侧层级复用状态管理(_init_layerwise_reuse_state/_mark_layer_reuse_pending/_complete_layer_reuse)、KV buffer 创建、块分裂元数据(_get_kv_split_metadata 及 Mamba 变体)、远端块对齐;Scheduler 侧混合缓存 prefill 计数与裁剪(_hybrid_prefill_token_count/_truncate_request_for_hybrid_prefill/_trim_hybrid_remote_block_ids)、metaserver 访问(_access_metaserver);收发线程按层组织任务(KVCacheSendingLayerThread/KVCacheRecvingLayerThread,SendTask/TransferMeta/LoadSpec 数据结构)。
D:\demo\202609\vllm-ascend\vllm-ascend-main\vllm_ascend\distributed\kv_transfer\kv_p2p\mooncake_layerwise_connector.py
zmq_ctx[13行] Context manager for a ZMQ socket
group_concurrent_contiguous[33行] Vectorised NumPy implementation.
string_to_int64_hash[8行] Hash the string using SHA-256 and convert it into an int64 integer.
ensure_zmq_send[19行] 代码量 19 行
ensure_zmq_recv[23行] 代码量 23 行
get_external_request_id[4行] 代码量 4 行
extend_local_block_ids[4行] extend local block ids for this step
update_computed_tokens[3行] update local computen tokens for this step
update_transferred_tokens[3行] update transferred tokens for this step
unpack[7行] 代码量 7 行
__init__[91行] 代码量 91 行
__setitem__[4行] 代码量 4 行
__getitem__[7行] 代码量 7 行
run[51行] Run the thread to handle KV cache transfer requests.
_handle_request[37行] 代码量 37 行
get_transfer_meta[174行] 代码量 174 行
_transfer_kv_cache[78行] 代码量 78 行
get_and_clear_done_requests[10行] Get and clear the requests that have been completed.
get_and_clear_failed_requests[10行] Get and clear the requests that have failed.
update_failed_task[11行] Handle a failed task by adding it to the failed_requests set and removing it from the task tracker.
update_done_task[13行] Handle a completed task by adding it to the done_requests set and removing it from the task tracker.
add_new_req[34行] 代码量 34 行
get_num_new_matched_tokens[34行] For remote prefill, pull all prompt blocks from remote
update_state_after_alloc[71行] 代码量 71 行
build_connector_meta[88行] 代码量 88 行
request_finished[11行] Once a request is finished, determine whether request blocks
request_finished_all_groups[11行] Once a request is finished, determine whether request blocks
register_kv_caches[172行] Register the KV Cache data.
get_finished[29行] 代码量 29 行
get_block_ids_with_load_errors[9行] Return and clear the set of block IDs that failed to load.
start_load_kv[87行] Start loading KV blocks from remote engine.
wait_for_layer_load[2行] 代码量 2 行
wait_for_layer_reuse[15行] 代码量 15 行
on_kv_cache_written[14行] 代码量 14 行
save_kv_layer[163行] MooncakeLayerwiseConnector does not save explicitly.
wait_for_save[3行] MooncakeLayerwiseConnector does not save explicitly.
_iter_kv_cache_specs[7行] 代码量 7 行
_has_attn_mamba_hybrid_cache[7行] 代码量 7 行
_hybrid_prefill_token_count[4行] 代码量 4 行
_truncate_request_for_hybrid_prefill[21行] 代码量 21 行
_trim_hybrid_remote_block_ids[11行] 代码量 11 行
_access_metaserver[12行] 代码量 12 行
_init_layerwise_reuse_state[17行] 代码量 17 行
_mark_layer_reuse_pending[9行] 代码量 9 行
_complete_layer_reuse[8行] 代码量 8 行
create_kv_buffer[29行] 代码量 29 行
_get_kv_split_metadata[110行] 代码量 110 行
_get_kv_split_metadata_for_mamba[17行] 代码量 17 行
_align_remote_block_ids[20行] 代码量 20 行
_get_kernel_block_ids[11行] 代码量 11 行
get_nz_cache[6行] 代码量 6 行
_get_remote_socket[20行] Get a socket to the remote host.
update_decoder_info[50行] 代码量 50 行
send_done_send_signal[55行] 代码量 55 行
handle_exception[3行] 代码量 3 行
add_transfer_task[32行] 代码量 32 行
distributed/kv_transfer/kv_p2p/sfa_pd_rd2h/connector.py
查看源码PD 分离 SFA Remote D2H connector 主入口(243 行)。SfaRemoteD2HConnector 按角色(producer/consumer)与 KV 角色分发到对应实现,实现标准 connector 接口:命中查询、分配后状态更新、加载/保存、完成查询与加载错误块上报(get_block_ids_with_load_errors)、CPU 块数查询。
D:\demo\202609\vllm-ascend\vllm-ascend-main\vllm_ascend\distributed\kv_transfer\kv_p2p\sfa_pd_rd2h\connector.py
__init__[58行] 代码量 58 行
get_num_new_matched_tokens[3行] 代码量 3 行
update_state_after_alloc[8行] 代码量 8 行
build_connector_meta[3行] 代码量 3 行
request_finished[3行] 代码量 3 行
request_finished_all_groups[7行] 代码量 7 行
register_kv_caches[3行] 代码量 3 行
get_finished[5行] 代码量 5 行
get_block_ids_with_load_errors[3行] 代码量 3 行
start_load_kv[3行] 代码量 3 行
wait_for_layer_load[18行] Per-layer gate called before each layer's attention computation.
save_kv_layer[14行] 代码量 14 行
on_kv_cache_written[10行] 代码量 10 行
wait_for_save[5行] 代码量 5 行
get_num_cpu_blocks[4行] 代码量 4 行
shutdown[5行] 代码量 5 行
close[2行] 代码量 2 行
wait_for_layer_send[5行] 代码量 5 行
wait_for_layer_reuse[2行] 代码量 2 行
distributed/kv_transfer/kv_p2p/sfa_pd_rd2h/protocol.py
查看源码SFA PD RD2H 线缆协议(178 行)。infer_sfa_component_group_ids 从层名推断(主缓存组, indexer 组)ID;SfaPDProducerReqMeta/ProducerMetadata 与 SfaPDConsumerReqMeta/ConsumerMetadata 定义两端请求级元数据(D 侧目的地由 vLLM 常规块管理器持有);SendTask 传输任务单元;get_external_request_id 生成外部请求 ID。
D:\demo\202609\vllm-ascend\vllm-ascend-main\vllm_ascend\distributed\kv_transfer\kv_p2p\sfa_pd_rd2h\protocol.py
infer_sfa_component_group_ids[27行] Return ``(main_group_id, indexer_group_id)`` from layer names.
get_external_request_id[5行] 代码量 5 行
__init__[2行] 代码量 2 行
add_new_req[34行] 代码量 34 行
add_request[13行] 代码量 13 行
distributed/kv_transfer/kv_p2p/sfa_pd_rd2h/read_thread.py
查看源码D 侧 memfabric pull 读线程(754 行)。MembPullReadThread 从远端内存fabric批量拉取 KV:_build_req_descriptors 构建请求读描述、_do_read_batch 批量读(_coalesce_desc 合并相邻段减少读次数、_tp_block_range 计算 TP 块范围)、_record_chunk_done 记录分块完成、discard_requests 丢弃失败请求、get_and_clear_done/failed 收割结果。
D:\demo\202609\vllm-ascend\vllm-ascend-main\vllm_ascend\distributed\kv_transfer\kv_p2p\sfa_pd_rd2h\read_thread.py
_coalesce_desc[16行] 代码量 16 行
_tp_block_range[13行] 代码量 13 行
__init__[29行] 代码量 29 行
_record_chunk_done[11行] Accumulate a contributor's last-layer arrival; complete only when the whole group reported.
discard_requests[6行] Drop partial contributor state for finished/cancelled requests.
get_and_clear_done[5行] 代码量 5 行
get_and_clear_failed[5行] 代码量 5 行
run[151行] 代码量 151 行
stop[6行] 代码量 6 行
_resolve_read_layer[124行] 代码量 124 行
_build_req_descriptors[211行] 代码量 211 行
_log_read_result[14行] 代码量 14 行
_do_read_batch[98行] 代码量 98 行
distributed/kv_transfer/kv_p2p/sfa_pd_rd2h/scheduler.py
查看源码SFA PD RD2H 调度器侧(509 行)。SFAPDRD2HScheduler 处理 D 侧调度:命中查询、metaserver 提交与回调(_submit_metaserver_request/_on_metaserver_done);SFAPDRD2HProducerScheduler 处理 P 侧:块 ID 规范化(_normalize_block_ids)、匹配 token 数与元数据构建。_SendReqInfo 维护已传 token 计数。
D:\demo\202609\vllm-ascend\vllm-ascend-main\vllm_ascend\distributed\kv_transfer\kv_p2p\sfa_pd_rd2h\scheduler.py
__init__[61行] 代码量 61 行
extend_local_block_ids[3行] 代码量 3 行
update_computed_tokens[2行] 代码量 2 行
update_transferred_tokens[2行] 代码量 2 行
_normalize_block_ids[8行] 代码量 8 行
get_num_new_matched_tokens[9行] 代码量 9 行
update_state_after_alloc[64行] 代码量 64 行
build_connector_meta[10行] 代码量 10 行
request_finished[2行] 代码量 2 行
request_finished_all_groups[17行] 代码量 17 行
_access_metaserver[28行] 代码量 28 行
_submit_metaserver_request[30行] 代码量 30 行
_on_metaserver_done[39行] 代码量 39 行
shutdown[12行] 代码量 12 行
distributed/kv_transfer/kv_p2p/sfa_pd_rd2h/send_thread.py
查看源码P 侧 memfabric pull 发送线程(366 行)。MembPullSendingThread 把 P 侧 KV 推给 D 侧:_ensure_dealer 维护 ZMQ DEALER 连接、_process_send_task 处理层发送任务、_send_mf_meta 发送 memfabric 元数据、_drain_read_replies 处理读回复、层完成信号(_signal_layer_done)与失败标记(_fail_layer/_record_layer_error),record_p_save_event/mark_layer_pending 跟踪保存进度。
D:\demo\202609\vllm-ascend\vllm-ascend-main\vllm_ascend\distributed\kv_transfer\kv_p2p\sfa_pd_rd2h\send_thread.py
__init__[34行] 代码量 34 行
_ensure_dealer[9行] 代码量 9 行
run[61行] 代码量 61 行
stop[6行] 代码量 6 行
record_p_save_event[4行] 代码量 4 行
mark_layer_pending[5行] Close all gates protecting storage written by ``layer_idx``.
_process_send_task[109行] 代码量 109 行
_send_mf_meta[25行] 代码量 25 行
_drain_read_replies[28行] 代码量 28 行
_signal_layer_done[10行] 代码量 10 行
_fail_layer[4行] 代码量 4 行
_record_layer_error[3行] 代码量 3 行
get_storage_send_event[4行] 代码量 4 行
get_storage_error[2行] 代码量 2 行
_blocks_for_chunk[21行] 代码量 21 行
distributed/kv_transfer/kv_p2p/sfa_pd_rd2h/worker.py
查看源码SFA PD RD2H worker 侧(855 行)。SFAPDRD2HConsumerWorker(D 侧):注册 KV 缓存、发起加载(start_load_kv)、构建消费读状态(_build_consumer_read_state)、注册 memfabric pull(_register_memfabric_pull)、TP 读状态汇聚(_gather_tp_read_status);SFAPDRD2HProducerWorker(P 侧):保存 KV(save_kv_layer/on_kv_cache_written)、层发送入队(_enqueue_layer_send)、prefill rank→decode rank 映射、层存储槽位推断(_infer_layer_storage_slots)、PD 读完成等待(_wait_for_pd_read_completion);_resolve_kv_transfer_backend 选择传输后端、npu_generate_uuid 生成物理芯片唯一标识。
D:\demo\202609\vllm-ascend\vllm-ascend-main\vllm_ascend\distributed\kv_transfer\kv_p2p\sfa_pd_rd2h\worker.py
_layer_idx[4行] 代码量 4 行
_resolve_kv_transfer_backend[14行] Pick the KV transfer backend.
_validate_tcp_port[3行] 代码量 3 行
__init__[42行] 代码量 42 行
_ensure_engine[13行] 代码量 13 行
register_kv_caches[81行] 代码量 81 行
start_load_kv[52行] Prepare P-side request metadata for memfabric pull mode.
save_kv_layer[49行] 代码量 49 行
wait_for_save[2行] 代码量 2 行
_cleanup_request_state[14行] 代码量 14 行
_gather_tp_read_status[15行] 代码量 15 行
get_finished[2行] 代码量 2 行
get_block_ids_with_load_errors[2行] 代码量 2 行
get_num_cpu_blocks[2行] 代码量 2 行
_build_consumer_read_state[15行] 代码量 15 行
_register_memfabric_pull[102行] Start D pull thread with manager CPU KV and rank-local indexer HBM.
shutdown[3行] 代码量 3 行
update_decoder_info[8行] Override: in memfabric pull mode, P does NOT need D's metadata
_map_prefill_rank_to_decode_rank[20行] 代码量 20 行
_build_producer_send_state[10行] 代码量 10 行
_infer_layer_storage_slots[17行] Map each layer to the physical component slots it may overwrite.
_has_memfabric_pull_target[19行] 代码量 19 行
on_kv_cache_written[25行] Record scatter completion and dispatch the PD send pre-attention.
_enqueue_layer_send[29行] Build and queue this layer's PD send task (READ_READY to D).
_wait_for_pd_read_completion[23行] 代码量 23 行
wait_for_layer_send[19行] Block until D has read layer ``layer_idx``'s KV (buffer-reuse gate).
_append_cache_tensors[15行] 代码量 15 行
distributed/kv_transfer/kv_pool/ascend_store/ascend_store_connector.py
查看源码AscendStore KV 连接器入口(369 行)。AscendStoreConnector 对接外部 KV 存储池:命中查询(get_num_new_matched_tokens)、PP 感知握手元数据(set_xfer_handshake_metadata_pp_aware)、层级加载等待、Mamba 状态拷贝、外部 slot 释放等待(set_external_slot_release_waiter);AscendStoreKVEvents 聚合多 worker 的 KV 事件;LookupKeyServer 提供 scheduler 侧键查询 RPC 服务。
D:\demo\202609\vllm-ascend\vllm-ascend-main\vllm_ascend\distributed\kv_transfer\kv_pool\ascend_store\ascend_store_connector.py
__init__[43行] 代码量 43 行
add_events[2行] 代码量 2 行
aggregate[9行] Aggregate KV events and retain only common events.
increment_workers[2行] 代码量 2 行
get_all_events[2行] 代码量 2 行
get_number_of_workers[2行] 代码量 2 行
clear_events[3行] 代码量 3 行
__repr__[2行] 代码量 2 行
requires_piecewise_for_cudagraph[6行] AscendStore requires PIECEWISE CUDA graph mode when layerwise
set_xfer_handshake_metadata_pp_aware[6行] Ignore P/D handshake metadata because AscendStore handles PP via pool keys.
get_num_new_matched_tokens[3行] 代码量 3 行
update_state_after_alloc[3行] 代码量 3 行
build_connector_meta[6行] 代码量 6 行
request_finished[7行] 代码量 7 行
request_finished_all_groups[7行] 代码量 7 行
update_connector_output[21行] Update KVConnector state from worker-side connectors output.
take_events[13行] Take the KV cache events from the connector.
set_external_slot_release_waiter[13行] Pure forwarder: the layerwise transfer gate is evaluated by the worker.
register_kv_caches[3行] 代码量 3 行
start_load_kv[19行] 代码量 19 行
wait_for_layer_load[9行] 代码量 9 行
prepare_mamba_state_copy[6行] 代码量 6 行
finish_mamba_state_copy[7行] 代码量 7 行
save_kv_layer[10行] 代码量 10 行
wait_for_save[9行] 代码量 9 行
get_finished[11行] Get the finished recving and sending requests.
get_block_ids_with_load_errors[4行] Return KV block IDs that failed to load on the worker.
get_kv_connector_kv_cache_events[11行] Get the KV connector kv cache events collected during the last interval.
bind_gpu_block_pool[3行] 代码量 3 行
build_connector_worker_meta[3行] 代码量 3 行
close[2行] 代码量 2 行
process_request[22行] 代码量 22 行
distributed/kv_transfer/kv_pool/ascend_store/attention_fence.py
查看源码注意力计算栅栏(91 行)。AttentionComputeStartGate 在计算流到达注意力处开门:record_attention_compute_start 在注意力前打点,MemCache 类异步工作 wait 该栅栏保证不早于注意力开始;reset/get_attention_compute_start_gate 管理每层栅栏实例。
D:\demo\202609\vllm-ascend\vllm-ascend-main\vllm_ascend\distributed\kv_transfer\kv_pool\ascend_store\attention_fence.py
reset_attention_compute_start_gate[12行] Create a new per-layer gate for MemCache work.
get_attention_compute_start_gate[6行] 代码量 6 行
record_attention_compute_start[6行] Record the compute-stream boundary immediately before attention.
__init__[3行] 代码量 3 行
record[11行] 代码量 11 行
wait[9行] 代码量 9 行
distributed/kv_transfer/kv_pool/ascend_store/backend/__init__.py
查看源码存储后端工厂(57 行)。get_layerwise_backend(backend_name) 按名字返回对应后端模块(memcache/mooncake/yuanrong),各模块实现统一的层级传输协议。
D:\demo\202609\vllm-ascend\vllm-ascend-main\vllm_ascend\distributed\kv_transfer\kv_pool\ascend_store\backend\__init__.py
get_layerwise_protocol[15行] Return the backend module carrying the layerwise transfer protocol
distributed/kv_transfer/kv_pool/ascend_store/backend/base.py
查看源码存储后端抽象基类(56 行)。Backend 定义统一接口:创建 scheduler 客户端、设备绑定、缓冲注册(register_buffer)、键存在性查询(exists/batch_is_exist/batch_get_key_info)、批量分配(batch_alloc)、租约管理(batch_add/remove_lease)、写完成标记(batch_write_finish)与 put/get。
D:\demo\202609\vllm-ascend\vllm-ascend-main\vllm_ascend\distributed\kv_transfer\kv_pool\ascend_store\backend\base.py
__init__[2行] 代码量 2 行
create_scheduler_client[2行] 代码量 2 行
set_device[2行] 代码量 2 行
register_buffer[2行] 代码量 2 行
exists[2行] 代码量 2 行
batch_is_exist[2行] 代码量 2 行
batch_get_key_info[2行] 代码量 2 行
batch_alloc[2行] 代码量 2 行
batch_add_lease[2行] 代码量 2 行
batch_remove_lease[2行] 代码量 2 行
batch_write_finish[2行] 代码量 2 行
put[2行] 代码量 2 行
get[2行] 代码量 2 行
distributed/kv_transfer/kv_pool/ascend_store/backend/memcache_backend.py
查看源码MemCache 存储后端(311 行)。MemcacheBackend 实现基类接口:按需初始化存储(_setup_store/ensure_initialized)、设备缓冲注册、批量键信息/分配/租约/写完成;键构造规则:make_full_key(整块键:模型/组/块哈希/rank)、make_partial_key(部分块键含 token 数)、make_hit_check_keys(全 rank 命中检查键);extract_layout_config 提取层级布局配置;_is_device_sdma 判断设备 SDMA 能力。
D:\demo\202609\vllm-ascend\vllm-ascend-main\vllm_ascend\distributed\kv_transfer\kv_pool\ascend_store\backend\memcache_backend.py
_is_device_sdma[13行] 代码量 13 行
extract_layout_config[11行] Return the connector's extra config when it opts into the layerwise
make_full_key[17行] Full-block key for the layerwise transfer.
make_partial_key[9行] 代码量 9 行
make_hit_check_keys[16行] All-rank keys for scheduler-side hit check.
__init__[19行] 代码量 19 行
ensure_initialized[12行] 代码量 12 行
_setup_store[24行] 代码量 24 行
create_scheduler_client[5行] 代码量 5 行
init_store[7行] 代码量 7 行
set_device[3行] 代码量 3 行
register_buffer[3行] 代码量 3 行
_register_buffers_if_needed[8行] 代码量 8 行
exists[9行] 代码量 9 行
batch_get_key_info[10行] 代码量 10 行
batch_alloc[4行] 代码量 4 行
batch_add_lease[3行] 代码量 3 行
batch_remove_lease[3行] 代码量 3 行
batch_write_finish[7行] 代码量 7 行
get[35行] 代码量 35 行
put[29行] 代码量 29 行
distributed/kv_transfer/kv_pool/ascend_store/backend/mooncake_backend.py
查看源码Mooncake 存储后端(411 行)。MooncakeBackend 对接 Mooncake Store:setup(_mooncake_setup_supports_ssd_offload 判断 v0.3.11+ 的 SSD 卸载参数)、缓冲注册、exists/put/get;MooncakeStoreConfig 支持文件与环境变量加载(from_file/load_from_env);工具:_normalize_tenant_id 租户 ID 规范化、_parse_global_segment_size/_convert_to_bytes 带单位(GB/MB/KB/B)的容量解析。
D:\demo\202609\vllm-ascend\vllm-ascend-main\vllm_ascend\distributed\kv_transfer\kv_pool\ascend_store\backend\mooncake_backend.py
_mooncake_setup_supports_ssd_offload[14行] True when installed Mooncake exposes SSD kwargs on setup() (v0.3.11+).
_ssd_setup_kwargs[16行] Keyword args for store.setup(); empty on old Mooncake or when SSD is off.
_normalize_tenant_id[7行] 代码量 7 行
_parse_global_segment_size[44行] Parse storage size strings with support for units: GB, MB, KB, B
_convert_to_bytes[25行] Convert numeric string to byte count
__init__[17行] 代码量 17 行
ensure_initialized[11行] 代码量 11 行
_setup_store[73行] 代码量 73 行
create_scheduler_client[3行] 代码量 3 行
set_device[4行] 代码量 4 行
register_buffer[5行] 代码量 5 行
exists[9行] 代码量 9 行
put[33行] 代码量 33 行
get[44行] 代码量 44 行
__post_init__[9行] 代码量 9 行
from_file[24行] 代码量 24 行
load_from_env[5行] 代码量 5 行
distributed/kv_transfer/kv_pool/ascend_store/backend/yuanrong_backend.py
查看源码元戎(Yuanrong)存储后端(162 行)。YuanrongBackend 对接元戎存储:设备绑定、缓冲注册、exists/get/put;YuanrongConfig 支持文件与环境变量两种配置加载方式。
D:\demo\202609\vllm-ascend\vllm-ascend-main\vllm_ascend\distributed\kv_transfer\kv_pool\ascend_store\backend\yuanrong_backend.py
from_file[15行] 代码量 15 行
load_from_env[5行] 代码量 5 行
__init__[40行] 代码量 40 行
set_device[4行] 代码量 4 行
register_buffer[3行] 代码量 3 行
_register_buffers_if_needed[9行] 代码量 9 行
exists[12行] 代码量 12 行
get[24行] 代码量 24 行
put[14行] 代码量 14 行
distributed/kv_transfer/kv_pool/ascend_store/coordinator.py
查看源码外部缓存协调器(390 行)。AscendStoreCoordinator 为外部 KV 池做混合缓存命中判定:ExternalCachedBlockPool 以键存在性为依据的 BlockPool 适配(get_cached_block)、find_longest_cache_hit 找最长命中(按 KV 组校验与拆分 _verify_and_split_kv_cache_groups)、load/store/lookup_mask 各方向掩码计算(_reachable_masks 可达掩码)、投机解码块哈希(block_hashes_for_spec);模块级 _find_longest_cache_hit/_reachable_block_mask 按管理器类缓存避免重复构建。
D:\demo\202609\vllm-ascend\vllm-ascend-main\vllm_ascend\distributed\kv_transfer\kv_pool\ascend_store\coordinator.py
_unwrap_spec[4行] 代码量 4 行
_copy_spec_with_block_size[7行] 代码量 7 行
_get_manager_class_cache[6行] 代码量 6 行
_get_manager_class[30行] 代码量 30 行
_find_longest_cache_hit[6行] 代码量 6 行
_reachable_block_mask[22行] 代码量 22 行
_uses_reachable_mask[2行] 代码量 2 行
__init__[35行] 代码量 35 行
get_cached_block[11行] 代码量 11 行
_verify_and_split_kv_cache_groups[32行] 代码量 32 行
find_longest_cache_hit[16行] 代码量 16 行
load_mask[12行] 代码量 12 行
_reachable_masks[28行] 代码量 28 行
store_mask[7行] 代码量 7 行
lookup_mask[9行] 代码量 9 行
block_hashes_for_spec[2行] 代码量 2 行
_find_hit_blocks[88行] 代码量 88 行
distributed/kv_transfer/kv_pool/ascend_store/kv_transfer.py
查看源码AscendStore 传输线程族(1621 行)。KVTransferThread 是基座:请求队列管理(add_request/discard_finished_requests)、失败上抛(raise_if_failed)、存储计数(add/dec_stored_request)、传输包切分(_split_transfer_packets)、限速批拷贝(_batch_copy_with_limits);派生线程按模式分工:KVCacheStoreSending/RecvingThread(整请求存取)、KVCacheStoreKeyLayerSending/RecvingThread(关键层优先存取)、KVCacheStoreLayerSending/RecvingThread(层级存取,含 H2D 提交错峰 _stagger_h2d_submit 避免带宽尖峰);LayerBatchBuilder 构建批量传输数组(去重传输块、共享/地址数组);record_failed_blocks 记录失败块。
D:\demo\202609\vllm-ascend\vllm-ascend-main\vllm_ascend\distributed\kv_transfer\kv_pool\ascend_store\kv_transfer.py
_circular_shift[4行] 代码量 4 行
record_failed_blocks[15行] 代码量 15 行
__init__[52行] 代码量 52 行
_ensure_buf[6行] 代码量 6 行
_dedupe_transfer_blocks[20行] 代码量 20 行
_build_transfer_arrays[47行] 代码量 47 行
_require_request_arrays[43行] 代码量 43 行
build_shared[89行] Pre-compute shared block data that is identical across all layers.
build_addrs[19行] Compute per-layer addresses from pre-computed shared block data.
build[6行] Full build: shared data + per-layer addresses (backward compat).
_get_block_size[6行] 代码量 6 行
add_request[2行] 代码量 2 行
get_and_clear_finished_requests[17行] Get and clear the requests that have been completed.
discard_finished_requests[3行] 代码量 3 行
raise_if_failed[3行] 代码量 3 行
set_finished_request[3行] 代码量 3 行
add_stored_request[3行] 代码量 3 行
dec_stored_request[6行] 代码量 6 行
try_finish_and_delete_stored_request[6行] 代码量 6 行
_split_transfer_packets[32行] 代码量 32 行
_batch_copy_with_limits[52行] 代码量 52 行
_set_os_thread_name[7行] 代码量 7 行
run[23行] Run the thread to handle KV cache transfer requests.
_handle_request[121行] 代码量 121 行
_handle_request_exception[8行] 代码量 8 行
lookup[21行] Check the existence of all keys from the cache engine.
update_kv_event[3行] 代码量 3 行
get_kv_events[5行] 代码量 5 行
_skip_null_blocks[5行] 代码量 5 行
_prepare_value[20行] 代码量 20 行
_decode_adaptor_prefill_pp[18行] 代码量 18 行
is_stored_request[3行] 代码量 3 行
get_stored_request_count[3行] 代码量 3 行
delete_finished_stored_request[4行] 代码量 4 行
get_completed_events[7行] 代码量 7 行
_handle_stored_request[174行] Store missing KV chunks for one request.
build_cached_process_tokens[30行] Pre-compute process_tokens results for all layers (Key path).
_wait_for_save[5行] 代码量 5 行
build_shared_data[7行] Pre-compute shared block data for all layers.
_get_h2d_stagger_delay_us[5行] 代码量 5 行
_stagger_h2d_submit[7行] 代码量 7 行
should_skip[2行] 代码量 2 行
chunk_filter[2行] 代码量 2 行
distributed/kv_transfer/kv_pool/ascend_store/layerwise_cache_layout.py
查看源码层级缓存布局(369 行)。LayerwiseCacheLayout/LayerwiseLayerCacheSpecs/NamedKVCacheSpec 描述逻辑层到物理层的映射与各层缓存规格;LayerwiseReuseLayout 按主缓存规格分组构建可复用物理层槽位(build_layerwise_reuse_layout);get_layerwise_kv_cache_specs 把组级规格展开为每逻辑层规格;apply_layerwise_kv_cache_plan 把逻辑层张量重写到共享物理 KV 缓冲(省显存);build_layerwise_cache_layout 解析 extra_config 构建布局。
D:\demo\202609\vllm-ascend\vllm-ascend-main\vllm_ascend\distributed\kv_transfer\kv_pool\ascend_store\layerwise_cache_layout.py
get_layerwise_physical_layer_index[12行] 代码量 12 行
get_layerwise_reuse_config[41行] Return the extra config of the layerwise-reuse connector, if any.
_parse_int_config[7行] 代码量 7 行
build_layerwise_cache_layout[65行] 代码量 65 行
get_layerwise_kv_cache_specs[13行] Expand group specs into a cache spec for every logical layer.
build_layerwise_reuse_layout[81行] Build reusable physical-layer slots by grouping layers on their main cache spec.
apply_layerwise_kv_cache_plan[79行] Rewrite logical layer tensors to use shared physical KV buffers.
_merge_specs[17行] 代码量 17 行
distributed/kv_transfer/kv_pool/ascend_store/metadata.py
查看源码AscendStore 元数据中心(1236 行)。键体系:KeyMetadata 汇总模型名/并行/块大小等键要素、PoolKey/LayerPoolKey 池键(可按层拆分)、infer_tp_mismatch_info 推断 TP 不匹配信息(TPMismatchInfo);缓存族:infer_cache_family_from_ratio 按压缩比推断缓存族、infer_group_cache_families 按组推断(区分 dense/SWA/compressed);块大小:infer_group_block_sizes/infer_cache_transfer_granularity 推断组块大小与传输粒度(LCM 对齐);ChunkedTokenDatabase 维护 token 块哈希数据库(store/load 掩码、_make_key_by_hash、部分块处理);传输任务结构:LoadSpec、RequestTracker/ReqMeta、AscendConnectorMetadata、LayerBatchReqMeta/LayerBlockRange/SharedBlockData/LayerTransferTask/LayerLoadTask/LayerMultiBlockReqMeta/AscendStoreKVConnectorWorkerMetadata;工具:normalize_block_ids_by_group、block_hash 与字符串/字节互转、_LazyGroupedBlockHashList 惰性分组哈希表。
D:\demo\202609\vllm-ascend\vllm-ascend-main\vllm_ascend\distributed\kv_transfer\kv_pool\ascend_store\metadata.py
_as_positive_int[6行] 代码量 6 行
infer_tp_mismatch_info[34行] 代码量 34 行
infer_cache_family_from_ratio[6行] 代码量 6 行
_get_layer_compress_ratio[14行] 代码量 14 行
_get_group_spec_ratios[8行] 代码量 8 行
infer_group_cache_families[34行] 代码量 34 行
uses_hybrid_kv_cache[7行] 代码量 7 行
infer_group_block_sizes[14行] 代码量 14 行
get_group_block_size[2行] 代码量 2 行
get_group_cache_family[2行] 代码量 2 行
infer_cache_transfer_granularity[9行] 代码量 9 行
normalize_block_ids_by_group[12行] 代码量 12 行
get_block_hashes[9行] 代码量 9 行
get_partial_block_index[19行] Index of the trailing partial block to transfer, if any.
block_hash_to_str[2行] 代码量 2 行
block_hash_to_bytes[9行] 代码量 9 行
__hash__[14行] 代码量 14 行
to_string[11行] 代码量 11 行
split_layers[12行] Split the key into multiple keys for each layer
__init__[30行] 代码量 30 行
_get_key_prefix[23行] 代码量 23 行
store_mask[8行] 代码量 8 行
load_mask[8行] 代码量 8 行
mask_allows_chunk[11行] 代码量 11 行
_make_key_by_hash[25行] 代码量 25 行
get_block_size[4行] 代码量 4 行
set_group_buffers[24行] 代码量 24 行
_get_group_buffers[10行] 代码量 10 行
prepare_value[29行] 代码量 29 行
prepare_value_layer[22行] 代码量 22 行
_iter_token_chunks[51行] 代码量 51 行
process_tokens[28行] Process the tokens and return the corresponding cache engine keys.
process_token_key_strings[18行] Yield cache key strings directly without materializing PoolKey objects.
process_token_key_strings_with_block_ids[27行] Yield cache key strings and resolved block ids without PoolKey allocation.
decode_adaptor_prefill_pp[23行] 代码量 23 行
__len__[2行] 代码量 2 行
__getitem__[11行] 代码量 11 行
allocated_block_ids[2行] 代码量 2 行
update[14行] Update the request tracker when a running request is scheduled again.
update_mamba_spec_blocks[27行] for mamba align groups, each step will:
block_ids[2行] 代码量 2 行
from_request_tracker[110行] Create the request metadata from a request tracker.
add_request[3行] Add a request to the metadata.
aggregate[12行] 代码量 12 行
distributed/kv_transfer/kv_pool/ascend_store/pool_scheduler.py
查看源码AscendStore 调度器侧(1073 行)。KVPoolScheduler 决定哪些前缀可从外部池加载:请求跟踪(_get_or_create_request_tracker)、存储查询键生成(_generate_store_query_keys)、命中 token 计算(_get_store_lookup_hit_tokens/_get_layerwise_hit_tokens,层级模式走 _make_layerwise_hit_check_keys)、传输粒度向下取整(_floor_to_cache_transfer_granularity)、Mamba 组与 SWA 块推断(_infer_mamba_groups/_infer_swa_blocks)、SWA 裁剪块表(get_sw_clipped_blocks);LookupKeyClient 通过 ZMQ RPC 远程查询键。
D:\demo\202609\vllm-ascend\vllm-ascend-main\vllm_ascend\distributed\kv_transfer\kv_pool\ascend_store\pool_scheduler.py
get_zmq_rpc_path_lookup[16行] 代码量 16 行
__init__[10行] 代码量 10 行
_get_or_create_request_tracker[10行] 代码量 10 行
_generate_store_query_keys[37行] 代码量 37 行
_get_store_lookup_hit_tokens[42行] 代码量 42 行
_make_layerwise_hit_check_keys[16行] All-rank keys for scheduler-side hit check, built by the
_get_layerwise_hit_tokens[67行] 代码量 67 行
_floor_to_cache_transfer_granularity[2行] 代码量 2 行
_infer_mamba_groups[11行] 代码量 11 行
_infer_swa_blocks[22行] 代码量 22 行
get_sw_clipped_blocks[12行] 代码量 12 行
get_num_new_matched_tokens[117行] Check for external KV cache hit.
update_state_after_alloc[60行] Update KVConnector state after temporary buffer alloc.
_get_last_chunk_tokens_num[4行] 代码量 4 行
_build_req_meta[22行] 代码量 22 行
_process_new_request[37行] 代码量 37 行
_process_preempted_cached_request[41行] 代码量 41 行
_process_running_cached_request[44行] 代码量 44 行
_process_async_load_request[39行] 代码量 39 行
build_connector_meta[73行] Attach the connector metadata to the request object.
get_sending_event_id[8行] get a unique event id for a kv store request
touch_sending_mamba_blocks[22行] keep the reference of all non-null mamba blocks that will send to external kv store
update_connector_output[23行] hand the connector_output, free non-null mamba blocks and so on.
request_finished[26行] Once a request is finished, determine whether request blocks
request_finished_all_groups[30行] HMA path for hybrid KV cache groups.
bind_gpu_block_pool[2行] 代码量 2 行
update_finished_sending[3行] 代码量 3 行
update_finished_recving[3行] 代码量 3 行
lookup[21行] 代码量 21 行
close[2行] 代码量 2 行
distributed/kv_transfer/kv_pool/ascend_store/pool_worker.py
查看源码AscendStore worker 侧(2475 行)。KVPoolWorker 是最大的单类,组装 worker 全部传输基础设施:并行信息/传输配置/键头配置初始化、元数据与后端初始化(_init_metadata/_init_backend)、KV 事件初始化、层级配置与组-层构建器(_init_layerwise_config/_build_group_layer_builders)、传输线程启动(_start_kv_transfer_threads)、缓存协调器构建(_build_cache_coordinator)、Mamba 缓存与对齐状态判定(_uses_mamba_kv_cache/_infer_group_uses_align_state)、外部 slot 释放等待。
D:\demo\202609\vllm-ascend\vllm-ascend-main\vllm_ascend\distributed\kv_transfer\kv_pool\ascend_store\pool_worker.py
__init__[28行] 代码量 28 行
_init_parallelism_info[18行] 代码量 18 行
_init_kv_transfer_config[51行] 代码量 51 行
_init_key_head_config[69行] 代码量 69 行
_init_metadata[44行] 代码量 44 行
_init_backend[18行] 代码量 18 行
_init_kv_events[5行] 代码量 5 行
_init_state_vars[11行] 代码量 11 行
_init_layerwise_config[95行] 代码量 95 行
_build_group_layer_builders[15行] 代码量 15 行
set_external_slot_release_waiter[16行] Accept the MultiConnector composite slot-release waiter.
_start_kv_transfer_threads[122行] 代码量 122 行
_build_cache_coordinator[18行] 代码量 18 行
_infer_group_uses_align_state[17行] 代码量 17 行
_uses_mamba_kv_cache[4行] 代码量 4 行
_as_cache_tuple[4行] 代码量 4 行
_get_cache_block_metadata[10行] 代码量 10 行
_get_storage_key[5行] 代码量 5 行
_extract_physical_layer_index[7行] 代码量 7 行
_infer_cache_group_metadata[27行] 代码量 27 行
_align_kv_ptrs[18行] In hybrid scenario, where a KVCacheTensor is shared by multiple layers,
register_kv_caches[112行] 代码量 112 行
start_load_kv[147行] 代码量 147 行
_process_save_for_layer_batch[63行] 代码量 63 行
_process_load_for_layer_batch[73行] 代码量 73 行
_make_layerwise_full_key[15行] Full-block key for the layerwise transfer, built by the
_make_layerwise_partial_key[15行] 代码量 15 行
_refresh_allocated_gvas[16行] Drop local GVA entries whose MemCache blobs were evicted.
_alloc_gvas_for_save[163行] Allocate per-group GVA on the worker side right before batch_copy.
_prepare_load_gvas[211行] Fetch per-rank GVA and acquire read lease for the load path.
_build_shared_save_data[53行] Build shared block data once and attach to all layer save tasks.
_build_shared_load_data[25行] Build shared block data once and attach to all layer load tasks.
process_layer_data[20行] 代码量 20 行
_submit_ready_layer_loads[28行] 代码量 28 行
wait_for_layer_load[18行] 代码量 18 行
get_block_ids_with_load_errors[5行] 代码量 5 行
save_kv_layer[28行] 代码量 28 行
wait_for_save[19行] 代码量 19 行
retrieve_layer[75行] Retrieve the KV cache in a layerwise manner.
store_layer[61行] Store the KV cache in a layerwise manner.
_make_sub_key_str[7行] Rewrite ``@head_or_tp_rank:`` in serialized ``base_key`` to ````.
_build_strided_addrs[25行] Build per-token (addr, size) pairs into local KV cache memory for one
_build_tp_mismatch_keys_and_addrs[32行] Walk chunks x sub-keys; emit (keys, addrs, sizes, block_ids) for backend put/get.
_load_kv_tp_mismatch[35行] 代码量 35 行
_store_kv_tp_mismatch[63行] 代码量 63 行
get_finished[30行] 代码量 30 行
ensure_store_initialized[4行] 代码量 4 行
_build_lookup_keys[25行] 代码量 25 行
lookup[64行] Checks the existence of KV cache of the tokens from the cache engine.
_get_group_num_kv_heads[6行] 代码量 6 行
get_group_tp_size[6行] 代码量 6 行
_replace_key_field[10行] 代码量 10 行
_expand_lookup_keys_by_rank[8行] 代码量 8 行
_expand_lookup_key_variants[4行] 代码量 4 行
_lookup_with_coordinator[89行] 代码量 89 行
lookup_scheduler[90行] Checks the existence of KV cache of the tokens from the cache engine.
_max_intersection_hit_position[10行] For all attention groups, treat the position of the maximum common hit as the final hit position
check_all_layers_exists[11行] 代码量 11 行
find_all_discontinuous_hit_positions[15行] For mamba attn, there will be some uncached null blocks, we just collect all hit positions,
find_all_continuous_hit_positions[13行] 代码量 13 行
get_kv_events[6行] 代码量 6 行
build_connector_worker_meta[5行] 代码量 5 行
submit_layer_load[16行] 代码量 16 行
chunk_filter[2行] 代码量 2 行
distributed/kv_transfer/kv_pool/kv_offload/native/cpu_npu.py
查看源码vLLM 原生 CPU KV 卸载的 Ascend worker(328 行)。SingleDirectionNPUOffloadingHandler 用有序 NPU DMA 流单向搬运块(transfer_async/get_finished/wait/shutdown);NPUOffloadingWorker 组装为原生 offloading 的 worker;_new_descriptor_buffers 分配 DMA 描述符缓冲。
D:\demo\202609\vllm-ascend\vllm-ascend-main\vllm_ascend\distributed\kv_transfer\kv_pool\kv_offload\native\cpu_npu.py
_new_descriptor_buffers[9行] 代码量 9 行
__init__[59行] 代码量 59 行
transfer_async[128行] 代码量 128 行
get_finished[24行] 代码量 24 行
wait[5行] 代码量 5 行
shutdown[10行] 代码量 10 行
distributed/kv_transfer/kv_pool/kv_offload/native/npu.py
查看源码原生 CPU offloading 规格适配(97 行)。NPUOffloadingSpec 使用 vLLM 的 CPU manager 但替换为 Ascend 传输 worker(create_worker/get_worker);_normalize_legacy_num_blocks 把旧版块容量配置按对齐换算(不改动 vLLM 配置对象)。
D:\demo\202609\vllm-ascend\vllm-ascend-main\vllm_ascend\distributed\kv_transfer\kv_pool\kv_offload\native\npu.py
_normalize_legacy_num_blocks[34行] Translate legacy block capacity without mutating vLLM's config.
__init__[8行] 代码量 8 行
create_worker[9行] 代码量 9 行
get_worker[10行] 代码量 10 行
distributed/kv_transfer/kv_pool/kv_offload/native/offloading_connector.py
查看源码原生 offloading connector 的 Ascend 布局适配(338 行)。Ascend 的 K/V(及可选 scale)分离存储与 vLLM 假设不同:_canonicalize_split_attention_cache 规范化分离张量、_make_int8_block_view 建零拷贝 [num_blocks, page_bytes] 视图;AscendOffloadingConnectorWorker/AscendOffloadingConnector 在边界层完成布局适配。
D:\demo\202609\vllm-ascend\vllm-ascend-main\vllm_ascend\distributed\kv_transfer\kv_pool\kv_offload\native\offloading_connector.py
_make_int8_block_view[48行] Build a zero-copy ``[num_blocks, page_bytes]`` view of a cache part.
_canonicalize_split_attention_cache[71行] Canonicalize Ascend's separate K/V (and optional scale) tensors.
register_kv_caches[153行] 代码量 153 行
__init__[14行] 代码量 14 行
add_view[22行] 代码量 22 行
distributed/kv_transfer/kv_pool/kv_offload/simple/copy_backend.py
查看源码NPU↔CPU 块拷贝 DMA 后端(124 行)。NPUDmaCopyBackend 基于 aclrtMemcpyBatchAsync 在工作线程执行拷贝:init 初始化、launch_copy 提交拷贝、_copy_loop 消费拷贝队列、shutdown 退出。
D:\demo\202609\vllm-ascend\vllm-ascend-main\vllm_ascend\distributed\kv_transfer\kv_pool\kv_offload\simple\copy_backend.py
__init__[9行] 代码量 9 行
init[22行] 代码量 22 行
launch_copy[12行] 代码量 12 行
shutdown[8行] 代码量 8 行
_copy_loop[33行] 代码量 33 行
distributed/kv_transfer/kv_pool/kv_offload/simple/npu_mem_ops.py
查看源码底层 NPU 内存操作(99 行)。BatchMemcpyParams 预计算每张量的指针/跨度描述符;build_params 为全部子张量构建缓存描述(src/dst + 方向);copy_blocks 在当前 NPU 流上发起批量异步 DMA(一次调用拷贝多组块)。
D:\demo\202609\vllm-ascend\vllm-ascend-main\vllm_ascend\distributed\kv_transfer\kv_pool\kv_offload\simple\npu_mem_ops.py
_ordered_tensors[3行] Return values in insertion order (kept as a function for clarity).
build_params[33行] Build cached pointer/stride descriptors for all sub-tensors.
copy_blocks[29行] Issue a batched async DMA on the *current* NPU stream.
distributed/kv_transfer/kv_pool/kv_offload/simple/simple_cpu_offload_connector.py
查看源码简单 CPU offload connector 适配(54 行)。AscendSimpleCPUOffloadConnector 复用 vLLM 的 connector 逻辑,仅把其 CUDA worker 替换为 NPU 版本。
D:\demo\202609\vllm-ascend\vllm-ascend-main\vllm_ascend\distributed\kv_transfer\kv_pool\kv_offload\simple\simple_cpu_offload_connector.py
__init__[22行] 代码量 22 行
distributed/kv_transfer/kv_pool/kv_offload/simple/worker.py
查看源码简单 CPU offload 的 NPU worker(286 行)。SimpleCPUOffloadNPUWorker:register_kv_caches 注册 KV 缓存、_build_block_views 按块构建 CPU/NPU 两侧视图(_flatten_kv_value 展开每层缓存的全部组成张量)、get_finished 收割完成传输。
D:\demo\202609\vllm-ascend\vllm-ascend-main\vllm_ascend\distributed\kv_transfer\kv_pool\kv_offload\simple\worker.py
_flatten_kv_value[14行] Yield every constituent tensor of a per-layer KV-cache entry.
__init__[12行] 代码量 12 行
register_kv_caches[84行] Register NPU KV caches and allocate pinned CPU mirrors.
get_finished[55行] Submit NPU transfers and report completed events.
_build_block_views[64行] Return ``{name: [num_blocks, block_bytes] int8 view}`` for one tensor.
distributed/kv_transfer/kv_pool/recompute_cpu_offload/manager.py
查看源码重计算 CPU 卸载调度器侧管理器(647 行)。RecomputeCPUOffloadScheduler 把被抢占请求的 KV 块保住到 CPU 内存,恢复时免重算:抢占状态管理(_create_preempt_state/PreemptedRequestState)、CPU 配置推导(_derive_cpu_config)、SWA/Mamba 组识别(_get_group_is_sliding_window/_get_group_is_mamba)、块 ID 对齐(_align_group_block_ids)、抢占前保存与分配后加载(_prepare_preempt_store_specs/_prepare_preempt_load_after_alloc)、GPU 块池绑定(bind_gpu_block_pool)、命中查询与元数据构建。
D:\demo\202609\vllm-ascend\vllm-ascend-main\vllm_ascend\distributed\kv_transfer\kv_pool\recompute_cpu_offload\manager.py
__init__[60行] 代码量 60 行
_get_group_is_sliding_window[10行] 代码量 10 行
_get_group_is_mamba[10行] 代码量 10 行
_derive_cpu_config[24行] 代码量 24 行
_align_group_block_ids[14行] 代码量 14 行
bind_gpu_block_pool[2行] 代码量 2 行
has_preempted_request[2行] 代码量 2 行
get_num_new_matched_tokens[22行] 代码量 22 行
update_state_after_alloc[19行] 代码量 19 行
update_state_before_preempt[13行] 代码量 13 行
_create_preempt_state[128行] 代码量 128 行
_prepare_preempt_store_specs[14行] 代码量 14 行
_prepare_preempt_load_after_alloc[93行] 代码量 93 行
build_connector_meta[43行] 代码量 43 行
update_connector_output[15行] 代码量 15 行
_process_preempt_store_event[21行] 代码量 21 行
has_pending_transfers[8行] 代码量 8 行
reset_cache[13行] 代码量 13 行
request_finished[12行] 代码量 12 行
request_finished_all_groups[6行] 代码量 6 行
_cleanup_preempt_load_request[19行] 代码量 19 行
_cleanup_preempt_cache_request[10行] 代码量 10 行
take_events[2行] 代码量 2 行
distributed/kv_transfer/kv_pool/recompute_cpu_offload/metadata.py
查看源码重计算 CPU 卸载元数据(52 行)。RecomputeCPUOffloadMetadata 承载调度器→worker 的传输指令;RecomputeCPUOffloadWorkerMetadata 聚合 worker→scheduler 的完成存储事件(aggregate)。
D:\demo\202609\vllm-ascend\vllm-ascend-main\vllm_ascend\distributed\kv_transfer\kv_pool\recompute_cpu_offload\metadata.py
aggregate[6行] 代码量 6 行
distributed/kv_transfer/kv_pool/recompute_cpu_offload/recompute_cpu_offload_connector.py
查看源码重计算 CPU 卸载连接器(246 行)。RecomputeCPUOffloadConnectorV1 实现最小 CPU KV 卸载闭环:抢占处理(handle_preemptions)、加载/保存(start_load_kv/wait_for_layer_load/save_kv_layer/wait_for_save)、元数据绑定与清理、GPU 块池绑定、命中查询与分配前后状态更新。
D:\demo\202609\vllm-ascend\vllm-ascend-main\vllm_ascend\distributed\kv_transfer\kv_pool\recompute_cpu_offload\recompute_cpu_offload_connector.py
__init__[50行] 代码量 50 行
register_kv_caches[3行] 代码量 3 行
bind_connector_metadata[8行] 代码量 8 行
clear_connector_metadata[4行] 代码量 4 行
handle_preemptions[4行] 代码量 4 行
start_load_kv[3行] 代码量 3 行
wait_for_layer_load[3行] 代码量 3 行
save_kv_layer[8行] 代码量 8 行
wait_for_save[2行] 代码量 2 行
get_finished[7行] 代码量 7 行
build_connector_worker_meta[4行] 代码量 4 行
bind_gpu_block_pool[3行] 代码量 3 行
get_num_new_matched_tokens[8行] 代码量 8 行
update_state_after_alloc[8行] 代码量 8 行
update_state_before_preempt[13行] 代码量 13 行
build_connector_meta[7行] 代码量 7 行
update_connector_output[6行] 代码量 6 行
request_finished[8行] 代码量 8 行
request_finished_all_groups[8行] 代码量 8 行
has_pending_transfers[4行] 代码量 4 行
has_preempted_request[4行] 代码量 4 行
take_events[4行] 代码量 4 行
reset_cache[4行] 代码量 4 行
distributed/kv_transfer/kv_pool/recompute_cpu_offload/worker.py
查看源码重计算 CPU 卸载 worker 侧(319 行)。RecomputeCPUOffloadWorker 执行实际 CPU/NPU 传输:传输提交(_submit_transfer)、事件轮询与全量刷同步(_poll_load_events/_flush_and_sync_all)、抢占处理、完成事件上报(get_finished/build_connector_worker_meta)。
D:\demo\202609\vllm-ascend\vllm-ascend-main\vllm_ascend\distributed\kv_transfer\kv_pool\recompute_cpu_offload\worker.py
__init__[26行] 代码量 26 行
register_kv_caches[73行] Register KV caches and initialize CPU/NPU transfer resources.
bind_connector_metadata[5行] 代码量 5 行
clear_connector_metadata[3行] Clear metadata after the model runner finishes the current step.
handle_preemptions[18行] Save preempted blocks before input preparation can overwrite them.
start_load_kv[13行] Submit pre-forward recompute H2D transfers.
wait_for_layer_load[9行] Make the current forward stream wait for the recompute H2D copy.
_flush_and_sync_all[7行] Synchronize all in-flight transfer events.
_poll_load_events[14行] Return the highest completed H2D event index.
_submit_transfer[85行] Submit a CPU<->NPU block copy and record a completion event.
get_finished[19行] Poll recompute transfers and report completed request restores.
build_connector_worker_meta[14行] Return completed store events since the previous call.
distributed/kv_transfer/kv_pool/ucm_connector/connector.py
查看源码UCM(统一缓存管理)连接器(324 行)。UCMConnectorV1 把 KV 卸载委托给 UCM 框架:按层取委托(_get_ucm_delegate_for)、预留钩子调用(_call_ucm_reserved_hook)、host 传输缓冲操作注入(set_host_xfer_buffer_ops)、抢占处理、加载/保存与加载错误块上报。
D:\demo\202609\vllm-ascend\vllm-ascend-main\vllm_ascend\distributed\kv_transfer\kv_pool\ucm_connector\connector.py
__init__[11行] 代码量 11 行
_get_ucm_delegate_for[14行] Return the UCM object that owns a reserved connector interface.
_call_ucm_reserved_hook[5行] 代码量 5 行
shutdown[2行] 代码量 2 行
has_connector_metadata[7行] Check whether the connector metadata is currently set.
register_kv_caches[8行] Initialize with the KV caches. Useful for pre-registering the
set_host_xfer_buffer_ops[2行] 代码量 2 行
handle_preemptions[2行] 代码量 2 行
start_load_kv[16行] Start loading the KV cache from the connector to vLLM's paged
wait_for_layer_load[12行] Block until the KV for a specific layer is loaded into vLLM's
save_kv_layer[20行] Start saving the a layer of KV cache from vLLM's paged buffer
wait_for_save[9行] Block until all the save operations is done. This is called
clear_connector_metadata[7行] Clear the connector metadata.
bind_connector_metadata[11行] Set the connector metadata from the scheduler.
get_block_ids_with_load_errors[9行] Get the set of block IDs that failed to load.
get_num_new_matched_tokens[19行] Get number of new tokens that can be loaded from the
update_state_after_alloc[5行] Update KVConnector state after block allocation.
build_connector_meta[11行] Build the connector metadata for this step.
request_finished[16行] Called when a request has finished, before its blocks are freed.
request_finished_all_groups[6行] 代码量 6 行
get_finished[5行] 代码量 5 行
build_connector_worker_meta[2行] 代码量 2 行
update_connector_output[2行] 代码量 2 行
take_events[3行] 代码量 3 行
get_kv_connector_stats[2行] 代码量 2 行
get_kv_connector_kv_cache_events[2行] 代码量 2 行
get_handshake_metadata[2行] 代码量 2 行
set_xfer_handshake_metadata[2行] 代码量 2 行
get_finished_count[2行] 代码量 2 行
reset_cache[2行] 代码量 2 行
build_kv_connector_stats[7行] KVConnectorStats resolution method. This method allows dynamically
build_prom_metrics[21行] Create a KVConnectorPromMetrics subclass which should register
distributed/kv_transfer/sparse_kv_offload/sparse_kv_offload_manager.py
查看源码稀疏 KV offload 管理器(1206 行)。SparseKVOffloadManager 管理稀疏注意力的 KV 分层驻留:全量 KV 在 CPU、topk 选中的块驻留 NPU——offload_new_kv 把新 KV 写入 CPU 池、onload_topk_kv 把 topk 块加载到 NPU(CPU 路径 _onload_topk_kv_cpu)、层注册与层 ID 管理;内存规划:plan_sparse_kv_offload_memory 按 NPU/DRAM/活跃需求三者上限决定卸载块数(SparseKVOffloadMemoryBudget)、get_sparse_kv_offload_cpu_pool_size_bytes 计算对齐 host 分配上界;张量准备:allocate_kv_cache_tensors_for_sparse_kv_offload(从对齐 int8 raw 分配 K/V)、reshape_kv_cache_tensors_for_sparse_kv_offload 重塑为 offload 布局;元数据:update_sparse_kv_offload_metadata 填充 LRU 请求身份张量、prepare_sparse_kv_offload_mtp_dummy_metadata MTP 哑元数据;缓冲:allocate_kv_offload_topk_buffer_pair/profile_buffers;init/get_sparse_kv_offload_manager 管理全局单例。
D:\demo\202609\vllm-ascend\vllm-ascend-main\vllm_ascend\distributed\kv_transfer\sparse_kv_offload\sparse_kv_offload_manager.py
get_subscribed_compute_streams[2行] 代码量 2 行
allocate_kv_offload_topk_buffer_pair[32行] 代码量 32 行
allocate_kv_offload_topk_profile_buffers[19行] 代码量 19 行
empty_aligned_int8_cpu_tensors[27行] Allocate multiple int8 tensors with specified sizes,
_split_host_device_kv_specs[20行] 代码量 20 行
plan_sparse_kv_offload_memory[61行] Bound sparse KV offload blocks by NPU, DRAM, and active demand.
get_sparse_kv_offload_cpu_pool_size_bytes[16行] Return a safe upper bound for aligned host KV allocations.
allocate_kv_cache_tensors_for_sparse_kv_offload[31行] 代码量 31 行
reshape_kv_cache_tensors_for_sparse_kv_offload[46行] 代码量 46 行
update_sparse_kv_offload_metadata[39行] Populate per-request identity tensors for the Sparse KV offload LRU.
prepare_sparse_kv_offload_mtp_dummy_metadata[25行] 代码量 25 行
init_sparse_kv_offload_manager[13行] 代码量 13 行
get_sparse_kv_offload_manager[3行] 代码量 3 行
__init__[75行] 代码量 75 行
_build_cpp[37行] 代码量 37 行
_infer_group_block_sizes[9行] 代码量 9 行
_as_cache_tuple[4行] 代码量 4 行
_register_offload_layers[21行] 代码量 21 行
_get_offload_layer_id[11行] 代码量 11 行
register_kv_caches[302行] 代码量 302 行
offload_new_kv[93行] 代码量 93 行
onload_topk_kv[122行] 代码量 122 行
_onload_topk_kv_cpu[78行] 代码量 78 行
distributed/kv_transfer/utils/memfabric_transfer_engine.py
查看源码MemFabric 传输引擎进程级初始化(165 行)。MemfabricBackend 规整 SFA PD connector 使用的 MemFabric API(get_rpc_port/register_memory/batch_transfer_sync_read);GlobalMemfabricTE 按角色惰性创建每进程一个引擎(configure/get_transfer_engine/register_buffer)。
D:\demo\202609\vllm-ascend\vllm-ascend-main\vllm_ascend\distributed\kv_transfer\utils\memfabric_transfer_engine.py
__init__[9行] 代码量 9 行
get_rpc_port[2行] 代码量 2 行
register_memory[2行] 代码量 2 行
batch_transfer_sync_read[21行] 代码量 21 行
unique_id[4行] 代码量 4 行
configure[17行] Bind this process singleton to one MemFabric role and device.
get_transfer_engine[12行] 代码量 12 行
_build_engine[41行] 代码量 41 行
register_buffer[13行] 代码量 13 行
distributed/kv_transfer/utils/mooncake_transfer_engine.py
查看源码Mooncake 传输引擎全局单例(43 行)。GlobalTE 惰性创建 TransferEngine 并提供缓冲注册(register_buffer),供各 Mooncake connector 共享同一引擎实例。
D:\demo\202609\vllm-ascend\vllm-ascend-main\vllm_ascend\distributed\kv_transfer\utils\mooncake_transfer_engine.py
__init__[5行] 代码量 5 行
get_transfer_engine[19行] 代码量 19 行
register_buffer[10行] 代码量 10 行
distributed/kv_transfer/utils/utils.py
查看源码KV 传输共享工具(445 行)。PD TP 变换:kv_alltoall_and_rearrange/alltoall_and_rearrange/rearrange_output 处理 P↔D 侧 TP 比例不同的 alltoall 与重排、get_tp_rank_head_mapping/get_head_group_mapping 计算 KV head 到 rank 的映射、context_parallel_parameters_check 校验 CP 参数一致性;传输映射:get_local_remote_block_port_mappings/get_transfer_mappings 计算块到远端 rank/端口的映射;内存注册:RegisterRange/RegisterRegions 管理注册区间、collect_storage_merged_register_regions 按共享存储合并注册区(减少 HCCL/Mooncake 注册条目)、validate_register_region_count 校验;其他:align_memory 内存对齐、get_transfer_timeout_value 读取超时配置、get_cp_group 构建 CP 通信组、iter_kv_cache_tensors 展平 KV 张量、tensor_storage_key 共享存储分组键。
D:\demo\202609\vllm-ascend\vllm-ascend-main\vllm_ascend\distributed\kv_transfer\utils\utils.py
kv_alltoall_and_rearrange[8行] 代码量 8 行
alltoall_and_rearrange[8行] 代码量 8 行
rearrange_output[8行] 代码量 8 行
align_memory[5行] 代码量 5 行
get_transfer_timeout_value[7行] 代码量 7 行
get_cp_group[13行] 代码量 13 行
context_parallel_parameters_check[13行] 代码量 13 行
get_tp_rank_head_mapping[21行] 代码量 21 行
get_head_group_mapping[19行] 代码量 19 行
get_local_remote_block_port_mappings[117行] 代码量 117 行
get_transfer_mappings[41行] 代码量 41 行
iter_kv_cache_tensors[18行] Flatten kv_caches into tensors without materializing new tensors.
tensor_storage_key[14行] Return a stable grouping key for tensors sharing the same storage.
collect_storage_merged_register_regions[63行] Collect HCCL/Mooncake register regions with storage-aware merging.
validate_register_region_count[18行] 代码量 18 行
registered_bytes[2行] 代码量 2 行
distributed/parallel_state.py
查看源码Ascend 并行组管理(243 行)。init_ascend_model_parallel 初始化模型并行并创建 Ascend 专属通信组:MC2 组(get_mc2_group,MoE 通信)、MLP TP 组、OTP 组(细粒度 o_proj TP)、LM head TP 组、embedding TP 组、P 组、动态 EPLB 组;get_global_rank 计算跨所有并行维度的全局唯一 rank;destroy_ascend_model_parallel 销毁全部组。
D:\demo\202609\vllm-ascend\vllm-ascend-main\vllm_ascend\distributed\parallel_state.py
init_ascend_model_parallel[114行] 代码量 114 行
model_parallel_initialized[2行] 代码量 2 行
get_mc2_group[3行] 代码量 3 行
get_mlp_tp_group[3行] 代码量 3 行
get_otp_group[3行] 代码量 3 行
get_lmhead_tp_group[3行] 代码量 3 行
get_embed_tp_group[3行] 代码量 3 行
get_p_tp_group[3行] 代码量 3 行
get_dynamic_eplb_group[3行] 代码量 3 行
destroy_ascend_model_parallel[35行] 代码量 35 行
get_global_rank[31行] Return a globally unique rank for the current worker across all parallel
_create_or_get_group[17行] 代码量 17 行
分布式小工具(55 行)。get_decode_context_model_parallel_world_size/rank 补回 vLLM main 已移除的 DCP 辅助函数;all_gather_async 异步 all-gather;split_tensor_along_first_dim 沿第一维切分张量(可选连续切片)。
D:\demo\202609\vllm-ascend\vllm-ascend-main\vllm_ascend\distributed\utils.py
get_decode_context_model_parallel_world_size[3行] Return DCP world size (v0.21.0 helper removed on vLLM main).
get_decode_context_model_parallel_rank[3行] Return DCP rank within group (v0.21.0 helper removed on vLLM main).
all_gather_async[10行] 代码量 10 行
split_tensor_along_first_dim[27行] Split a tensor along its first dimension.
distributed/weight_transfer/__init__.py
查看源码权重传输注册入口(40 行)。register_engine 把 Ascend 的权重传输引擎(HCCL/NPU IPC)注册为 vLLM 插件,供 RL 训练框架按后端名选择。
D:\demo\202609\vllm-ascend\vllm-ascend-main\vllm_ascend\distributed\weight_transfer\__init__.py
register_engine[17行] Register Ascend weight transfer engines as vLLM plugins.
distributed/weight_transfer/hccl_engine.py
查看源码HCCL 权重传输引擎(340 行)。HCCLWeightTransferEngine 用 HCCL 在训练器与推理 worker 间传权重:trainer_init/trainer_send_weights 训练侧初始化与发送(_stateless_init_process_group 无状态建组)、receive_weights worker 侧接收、start/finish_weight_update 包裹一次权重更新会话、shutdown 退出;配套数据类 InitInfo/UpdateInfo/TrainerSendWeightsArgs。
D:\demo\202609\vllm-ascend\vllm-ascend-main\vllm_ascend\distributed\weight_transfer\hccl_engine.py
__post_init__[12行] Validate that all lists have the same length.
__init__[9行] 代码量 9 行
start_weight_update[6行] 代码量 6 行
finish_weight_update[6行] 代码量 6 行
init_transfer_engine[27行] Initialize HCCL process group with the trainer.
receive_weights[41行] Receive weights from trainer via HCCL broadcast and load them incrementally.
shutdown[4行] 代码量 4 行
trainer_send_weights[56行] Broadcast weights from trainer to vLLM workers.
trainer_init[49行] Initialize HCCL process group for trainer-side weight transfer.
_stateless_init_process_group[15行] vLLM provides `StatelessProcessGroup` to create a process group
state_dict_info_iterator[4行] 代码量 4 行
distributed/weight_transfer/npu_ipc_engine.py
查看源码NPU IPC 权重传输引擎(426 行)。NPUIPCWeightTransferEngine 用 Ascend IPC 共享内存传权重(免拷贝、低开销):worker 侧 init_transfer_engine/receive_weights、start/finish_weight_update、shutdown;NPUIPCTrainerWeightTransferEngine 为训练侧:trainer_init、send_weights(_send_packed 打包发送/_send_unpacked 逐张量发送/_do_send 底层发送、_all_gather_and_merge_handles 聚合 IPC 句柄、_post_send_sync 后置同步);npu_generate_uuid 生成物理 NPU 芯片唯一标识;get_ip 取本机 IP;数据类 NPUIPCWeightTransferInitInfo/UpdateInfo/NPUIPCTrainerInitInfo。
D:\demo\202609\vllm-ascend\vllm-ascend-main\vllm_ascend\distributed\weight_transfer\npu_ipc_engine.py
get_ip[9行] 代码量 9 行
npu_generate_uuid[28行] Generate a unique identifier for the current process's physical NPU chip.
trainer_send_weights[8行] 代码量 8 行
__init__[19行] 代码量 19 行
init_transfer_engine[4行] Record the trainer-supplied wire params so the worker decodes
start_weight_update[3行] No-op for NPU IPC engine (no layerwise reloading).
finish_weight_update[3行] No-op for NPU IPC engine (no layerwise reloading).
receive_weights[57行] Receive weights from the trainer via NPU IPC handles.
shutdown[2行] 代码量 2 行
trainer_init[19行] 代码量 19 行
send_weights[9行] 代码量 9 行
_send[5行] 代码量 5 行
_all_gather_and_merge_handles[31行] All-gather and merge IPC handle dicts across ranks in one call.
_post_send_sync[5行] Barrier + synchronize after a send; no-op if single-NPU.
_send_unpacked[37行] Iterate the source, build one IPC handle per param, all-gather
_send_packed[24行] Send weights in bounded-memory chunks (packed mode).
_do_send[27行] Build one update payload and ship it via the client. Only the
distributed/weight_transfer/packed_tensor.py
查看源码打包张量工具(325 行)。为权重传输提供打包-解包:packed_broadcast_producer/consumer 把张量流打包进定长缓冲做 HCCL 广播(多缓冲流水)、packed_npu_ipc_producer/consumer 把张量打包进可复用 IPC 缓冲按块产出与按名解包(含形状/dtype/物理芯片 ID 元数据)。
D:\demo\202609\vllm-ascend\vllm-ascend-main\vllm_ascend\distributed\weight_transfer\packed_tensor.py
packed_broadcast_producer[72行] Broadcast tensors in a packed manner from trainer to workers.
packed_broadcast_consumer[104行] Consume packed tensors and unpack them into a list of tensors.
packed_npu_ipc_producer[68行] Pack tensors into a reusable NPU IPC buffer and yield chunks.
packed_npu_ipc_consumer[55行] Unpack a single packed IPC chunk into named tensors.
unpack_tensor[14行] Unpack a packed uint8 tensor into a list of typed tensors.