GDR: 再深一点
内容提要
在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机制确保数据在传输过程中的一致性和完整性,避免数据丢失或错误。