2026-03-30(周一) 至 2026-04-05(周日)
🧠 本周记录
- 确定 batch_transfer_sync_write 的完整逻辑,mooncake 先找多个request内的连续地址 重分配出来 mooncake 格式的 task,再每个 task 切成更小的 slice 给 ibv_post_send,同理再 ibv_poll_cq所有 slice,都是complete 状态后结束。 ✅ 2026-04-03
- 机内 mooncake 传输逻辑?
- mooncake实例化engine 和 engine initialize怎么做的?是实例化一个
TransferEngineImpl实例 ✅ 2026-04-03 - get_rpc_port 应该怎么做?返回的是 RPC 服务的 TCP 端口,这是每个 engine 用来传输网卡注册后的 MR 索引,rkey 的 ✅ 2026-04-02
- 怎么 batch 粒度的去 register?还需要确定使用 flagcx 现在的一堆接口中单边还是双边的 register?这里是一下注册一大块 kv cache,在通过 RPC 去交换 NIC 需要的 metadata。flagcx 内单边把自己这一块大的给注册了。✅ 2026-04-02
- 补充开发 flagcx的注册可以拿到 Mr 的索引映射
- 要补充开发 flagcx的注册可以拿到 Mr 的索引映射
- 整体代码结构重构完成 ✅ 2026-04-03
🚀 本周TODO
- 确定 mooncake 传 kv cache 的 put 操作从 python 接口
batch_transfer_sync_write传到 c++ 接口batchTransferSync。 ✅ 2026-04-03 - 完成 mooncake/nixl/nccl 三类后端在推理场景下性能的分析,输出文档Vllm PD baseline-qwen3-30B ,并输入到智源整个 flagos 当前推理场景的开发方案,确定了后续 flagcx/vllm-plugin-fl 的开发方案 ✅ 2026-04-03
- nixl 整体架构详细梳理并形成文档和@张铭俊 讨论后 输入到内部统一通信库的调研中 ✅ 2026-04-03
- 分析vllm pd 分离 nsys 后初步确定(推理可能可做的方向有二: 一,手搓 last kernel,直接把 deepep 的通信 kernel 写到前一个 kernel 内,从 device 侧直接下机内机间通讯完成 dispatch(可能是 cuda / trition)。二,目前 P 到 D 的 kv cache 流量如果抢了大 ep alltoall 用的双口网卡其中一个网口的流量就会造成 alltoall 性能下降,咱们可做前后串行调度这些 ibv send) ✅ 2026-04-03
- mooncake connector/ engine 源码学习 2/10
- 完成 mooncake 传输流程梳理(task 重组与 slice 发送/完成机制),理清 engine 初始化路径及 RPC 端口在 MR 索引与 rkey 交换中的作用;同时确定 flagcx 当前采用单边大块内存注册并通过 RPC 交换元数据的实现方案。
- 修复 flagcxOneSideRegister 的 bug,提 PR ✅ 2026-04-08
- flagcx connector实现,放在vllm-plugin-fl;Nccl engine→flagcx engine,和mooncake性能对齐; 5. flagcx connector design&&dev&&test
2026-03-23(周一) 至 2026-03-29(周日)
🧠 本周记录
- FP32:4 bytes = 32 bits,BF16:2 bytes = 16 bits,INT8:1 byte = 8 bits,FP4:0.5 byte = 4 bits
🚀 本周TODO
- vllm官方基线是啥 ✅ 2026-03-26
- plugin+flaggem(开或关)+flagcx(开或关)情况。形成对比 ✅ 2026-03-26
- 在文档上面给个对比表格和结论,包括测试环境 ✅ 2026-03-26
- 看一下 nccl4py的路径上可能存在的 fopen/fcloase 调用 ✅ 2026-03-24
- vllm官方基线是啥 ✅ 2026-03-26 这个咋定
- plugin+flaggem(开或关)+flagcx(开或关)情况。形成对比 ✅ 2026-03-26 。。。。
- 在文档上面给个对比表格和结论,包括测试环境 ✅ 2026-03-26
2026-03-16(周一) 至 2026-03-22(周日)
🧠 本周记录
- self.nccl = NCCLLibrary(library_path) 就是 python 侧创建一个NCCLLibrary对象,并把这个对象给 self.nccl
- @dataclass来修饰某个 class,就可以不用写这个类的构造函数
restype/argtypes“贴”到这个可调用对象上,让 ctypes 知道怎么传参/怎么解返回值
- flagcx_wrapper 会去把上层的 cudaStream 转发成 flagcxStream_t
🚀 本周TODO
- 梳理完了 nccl 在 vllm 传输 kvcache,从 so 到最后传输的流程。 ✅ 2026-03-18 0. vllm 如何使用 nccl 传输 kv cache
- vccl alltoallv b300 机内机间数据 + h200 数据,发现机间性能问题,在 H200 上 nsys 看到机间的 proxyPut 一直低于 25GB/s 尝试了在 gin.cc内的ncclGinIbProxyIPutSignal选择 QP 的时候从只选 0 变成选择多个:
原来:
struct ncclIbQp *qp = &comm->base.qps[0];
改后:
int qpIdx = cComm->qpRRCounter++ % comm->base.nqps;
struct ncclIbQp *qp = &comm->base.qps[qpIdx];性能无变化。❌
- 解决 flagcx 侧报错
NCCL_DEV_COMM_REQUIREMENTS_INITIALIZER问题