Skip to content

高性能网络与 AI 集群:RDMA / NCCL / Zero-copy(Infra 方向)

AI Infra 训练/推理平台常聊:分布式训练通信、跨机带宽。不必深到能裸写 RDMA,但要知道概念与为何快。

一、背景数量级

  • 单机内(核到核):很高带宽;机间 TCP over 10/25/100GbE 或 InfiniBand (HDR 200/400Gb/s)。
  • GPU 间用 NVLink(板上/nvswitch 高带宽),跨机走 PCIe→网卡(IB/RoCE)
  • 大模型训练 = 节点间 allreduce/都需高吞吐+低延迟 → NIC 直连 GPU(GPU Direct RDMA)避免内存往返。

二、为什么 TCP 对高性能不适合(RDMA 动机)

  1. 内核路径:数据 内核→用户 多次拷贝 + 系统调用。
  2. 协议开销/ack、中断处理耗 CPU。
  3. 每发送一次要 copy。高吞吐小消息被延迟/拷贝吞掉。

低延迟/高带宽方向RDMA(Remote Direct Memory Access)+ 内核旁路 + 零拷贝

  • 绕过内核协议栈,网卡直接 DMA 读写对端应用内存。
  • verbs API:IB(InfiniBand)或 RoCE(RDMA over Converged Ethernet)。
  • 典型:NCCL(NVIDIA Collective Communication Library)多 GPU 用 NVLink/RDMA 做 allreduce/allgather/ring 通信。

三、零拷贝相关概念

  • 避免多次 user↔kernel copy:mmap、sendfile、io_uring、RDMA、GPU Direct RDMA(网卡↔GPU 显存不经主机内存)。
  • 拷贝次数是面试最常量化题:“sendfile 减少几次拷贝” —— 循环里答少了内核态到用户态与用户态回内核态 2 次(实际还要结合设备)。回答“关键是多做 DMA 直达、少 copy”即够方向。

四、AI 集群高频词(能解释即加分)

  • NCCL:库把 k 卡建模成通信图,因拓扑做 ring/tree allreduce,自动选 NVLink/RDMA 路径。
  • ring-allreduce:各卡把数据分片沿环传平均分摊带宽(对比 naive 需要 total 2(n-1)/n 满载)。
  • AllReduce:所有 rank 结果=所有输入之和(训练权重同步)。AllGather/ReduceScatter 同理原语。
  • NVLink/GDS:GPU 直连带宽与 GPUDirect 存储。
  • 例:用 nvidia-smi topo -m 看拓扑/带宽;profiler 看 NCCL 等待。

五、宿主侧 C++ 相关点

  • high-perf 网络里,用户态库仍看到:内存注册(pinned memory for RDMA)、缓冲区池复用、消息组装/切分与并行。
  • 事件驱动并发常用 epoll/io_uring 与协程;可衔接 concurrency/coroutine。

六、常见问

  • “大模型数据并行哪块最花时间?”—— 每 step 都 allreduce 权重;带宽/延迟决定;分片+重叠通信计算 是老话题。
  • “RDMA 要不要进内核?”—— 是“绕过内核 CPU 参与拷贝”,仍是设备 DMA,只是免内核拷贝与协议过程。
  • “怎么压测/定位慢?”—— ping-pong/带宽 iperf、perf 看中断、NCCL 计时/调试、看拓扑。

七、自评一句

把它放到“了解级”:讲得清为什么 TCP 拷贝慢、RDMA/NVLink/NCCL four 词、训练权重同步 is allreduce。真要专门深挖可开专题(如 NCCL 算法),需时说一声。

C++ 面试八股 · VitePress 版