October 26, 2025 前段时间给之前写的小玩具 TinyTorch 增加了多卡支持,主要参考 PyTorch c10d 实现了一些基础组件,如 Store、ProgressGroup、Work、Reducer 等,成功跑起来 MNIST 的 DDP 分布式训练,支持单机多卡以及多机多卡,当然对比 PyTorch 做了很多逻辑简化,Backend 也只实现了 NCCL,这里简单介绍一下: NCCL NCCL 是 NVIDIA 开源的多卡通信框架,抽象了一系列集群操作接口,比如 all reduce、broadcast 等等,更上层的分布式应用(DP\DDP\TP等)都可以基于这些标准接口来实现 NCCL 组件的使用流程如下(图片来源: NCCL通信C++示例(一): 基础用例解读与运行): 一些概念 communicator:每个GPU参与集群通信的handle,整体 NCCL API 都基于 communicator 展开,生命周期包括创建、通信、销毁等; uniqueId:生成一个唯一id,用于 communicator 的初始化,基于同一个 uniqueId 初始化的多个 communicator 组成了一个通信集群; rank:通信集群中每个GPU的序号,比如总共8卡的集群,则 rank 分别为 0~7,这里指 global rank,多机多卡的情况下,还有 local rank,指单台机器上 GPU 的本地序号;Continue reading “NCCL 多卡训练实践”