-
Notifications
You must be signed in to change notification settings - Fork 50
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
底层跨group的kv cache传输用的是什么库呢? #22
Comments
请问下大佬 为什么代码里看kv cache需要swap到cpu上呢?所以传输kv cache还是会过CPU内存?为什么不能走nvlink直连呢 |
不会 swap 到 cpu 上,走的 nvlink |
请问如果prefill和decoding instance不在同一个node的情况是怎么传kv cache的呢? |
因为我们的testbed没有infiniband,所以如果把PD分离在不同的node上的话kv cache transfer的延迟会很大。如果你们有跨机高带宽网络的话欢迎PR!实现方式可以参考 Splitwise (vLLM prototype)。 当前DistServe的版本会通过调整GPU Placement strategy使得集群整体满足optimal Prefill/Decode placement,从而只需要PD在相同的stage里面传KV。具体细节可以参考我们paper里面low-affinity placement的算法。 |
我看现在是通过CUDA的IPC handle来跨进程传递kv_cache指针 这里可以直接用CUDA的统一虚拟内存寻址吗? 这个方案大佬当时有研究过嘛 |
@GindaChen Gi 大佬,我想尝试下 |
我希望利用 NCCL 的点对点通讯协议(P2P)将 VLLM 的 KVCACHE 从预填充(prefill)节点传输到解码(decode)节点,以实现分离式推理。由于 VLLM 的 KVCACHE 存储为张量列表,每次传输 128 个块时,我需要发送大约 16,384 个块切片。由于这些切片在显存中的分布是非连续的,循环发送的效率非常低,导致通信带宽未能得到充分利用。 |
看起来现在是基于cuda ipc和memcpy实现的传输?我记得似乎这种方式没法实现跨节点的通信?... |
Yes, we are currently using CUDA IPC memory handler with cudaMemcpy now, and this blocks us from performing inter-node KV-cache transmission. If you want to send the KV cache to another node, you may need to use nvshmem |
(1)应该是prefill instance和decoding instance间的kv cache传输直接走NVlink,对应代码中的migrate_blocks;然后decoding阶段会触发swap到cpu上的卸载操作,以提供更大的kv cache容量,对应代码中的swap_blocks,请问这样理解对吗? |
这一块可以简单介绍一下嘛
The text was updated successfully, but these errors were encountered: