GDR: 再深一点
💡
原文中文,约4900字,阅读约需12分钟。
📝
内容提要
在PD分离中,Prefill实例通过RDMA Write和GDR将数据写入Decode实例,使用阿里云的Barex库实现异步批量写入以确保数据完整性。讨论了GDR的细节及NCCL实现,强调内存顺序和ACK机制的重要性,并提出通过RDMA read确认数据写入完成的解决方案。
🎯
关键要点
- 在PD分离中,Prefill实例通过RDMA Write和GDR将数据写入Decode实例。
- 使用阿里云的Barex库实现异步批量写入以确保数据完整性。
- 讨论了GDR的细节及NCCL实现,强调内存顺序和ACK机制的重要性。
- 提出通过RDMA read确认数据写入完成的解决方案。
- Prefill端在RDMA Write完成后可以释放对kvcache block的引用。
- Decode端成功写入kvcache到显存,后续计算可以从显存中读取。
- NCCL实现中,sender和receiver通过socket交换信息以完成数据写入与接收。
- 通过ncclIbSendFifo结构,sender可以确定数据写入是否完成。
- 使用rdma write with imm将数据写入receiver端显存,receiver通过cqe确认数据写入成功。
- Barex的解决方案是在收到rdma write ack后发起rdma read 1byte以确认数据写入完成。
❓
延伸问答
GDR在PD分离中有什么作用?
GDR通过RDMA Write将数据直接写入Decode实例,确保数据的高效传输。
阿里云的Barex库如何确保数据完整性?
Barex库通过异步批量写入和ACK机制来确保数据完整性。
NCCL实现中sender和receiver是如何交换信息的?
sender和receiver通过socket交换qpn、mr等信息,以完成数据的写入与接收。
如何确认RDMA Write的数据写入完成?
可以通过RDMA read确认数据写入完成,接收方在收到ACK后发起1字节的RDMA read。
Prefill实例在数据写入后会做什么?
Prefill实例在RDMA Write完成后可以释放对kvcache block的引用。
GDR的内存顺序和ACK机制有什么重要性?
内存顺序和ACK机制确保数据在传输过程中的一致性和完整性,避免数据丢失或错误。
➡️