分布式集合通信--学习笔记

  • 分布式集合通信
  • 一 基础概念
    • 分布式系统模型
      • 节点与进程模型 多机多卡、多机多进程
      • 通信模式
        • 同步 、异步
    • 集合通信定义
      • 点对点通信 vs 集合通信
        • 点对点通信
          • 定义 :两个节点之间的直接数据传输,通常基于专用链路或网络路径
          • 通信范围:仅涉及两个节点(如A→B或B→A),支持双向数据传输 1 2
          • 示例 :电话呼叫、TCP/IP连接、MPI中的 MPI_Send 和 MPI_Recv
        • 定义:一组节点(通信子)共同参与的全局操作,所有节点协同完成数据交换
        • 通信范围:涉及多个节点(如广播、规约、全收集等),需所有节点同步调用函数
      • 常见操作: Broadcast \ Reduce \ Allgather \AllReduce
    • 性能指标
      • 延迟 Latency
      • 带宽 Bandwidth
      • 扩展性 Scalability
  • 二 核心算法
    • 广播算法
      • 洪泛算法(Simple Flooding)
      • 基于树的广播(Tree-based Broadcast)
      • 环形广播(Ring Algorithm)
    • 规约算法
      • 线性规约(Linear Reduce)
      • 二叉树规约(Binary Tree Reduce)
    • 全收集算法
      • 循环全收集(Recursive DOUBLING Algorithm)
      • 二叉树全收集(Binary Tree Allgather)
    • 全归约算法
      • 结合规约与广播的Allreduce
      • Ring-Allreduce算法(NVIDIA NCCL实现)
  • 三 应用场景
    • 分布式机器学习
      • 梯度同步(Allreduce)
      • 参数广播(Broadcast)
    • 科学计算
      • 矩阵乘法中的通信优化
      • 分布式FFT(快速傅里叶变换)
    • 分布式存储
      • 数据分片与合并(Allgather)
      • 一致性哈希与数据迁移
  • 四 优化策略
    • 通信与计算重叠
      • 隐藏通信延迟的技术(Pipeline)
    • 拓扑感知优化
      • Mesh网络与Ring网络的通信策略
      • 硬件拓扑映射(如GPU的NVLink)
    • 混合算法
      • 结合树状与环形结构的分层通信
      • 动态调整算法(小规模用Ring,大规模用Tree)
  • 五 实践工具与框架
    • MPI(Message Passing Interface)
      • MPI_Bcast、MPI_Reduce等函数
    • NCCL(NVIDIA Collective Communications Library)
      • GPU集合通信优化
    • HCCL(Huawei Collective Communication Library)
      • 华为Ascend芯片的集合通信实现
    • PyTorch/TensorFlow
      • 分布式训练中的通信API
    • HCCL与NCCL对比
      • 维度 HCCL NCCL
      • 适用硬件 华为昇腾AI处理器(NPU) NVIDIA GPU
      • 通信算法 Mesh、Ring、HD、NHR、NB(自动选择) Ring、Mesh、Bruck、Halving-Doubling等
      • 传输优化 全硬化调度,SDMA/RDMA链路 多通道并行(block-level),NVLink/PCIe优化
      • 流管理 主流+从流,Notify同步 CUDA Stream异步,多任务并发
      • 容错性 依赖硬件调度稳定性(需进一步扩展) 支持异步错误处理(ncclCommAbort)
      • 生态支持 适配TensorFlow、PyTorch(单算子模式) 集成主流框架(PyTorch、TensorFlow等)
      • 开源与定制 部分算法开源(Gitee),支持自定义开发 源代码闭源,部分厂商基于其扩展(如BCCL)
  • 六 学习步骤
    • 阶段1:基础入门
      • 理解分布式系统模型
        • 学习多机多卡(如GPU集群)的通信架构
        • 掌握同步与异步通信的区别(例如:阻塞vs非阻塞API)
      • 熟悉集合通信操作
        • 实现简单的点对点通信(如Send/Recv)
        • 动手实现Broadcast和Reduce的基础版本(例如:线性规约)
    • 阶段2:核心算法学习
      • 广播算法
        • 实现洪泛算法,分析其缺点(如冗余通信)
        • 学习树状广播(如二叉树广播),优化通信复杂度
      • 规约与全归约
        • 实现线性规约,理解其O(n)复杂度
        • 优化为二叉树规约,降低时间复杂度至O(logn)
        • 结合广播实现Allreduce(例如:先规约后广播)
      • 全收集算法
        • 实现循环全收集(Recursive Doubling),分析其通信模式
        • 对比树状全收集与环形全收集的性能差异
    • 阶段3:应用场景实践
      • 分布式机器学习案例
        • 使用Allreduce实现梯度同步(如MNIST分布式训练)
        • 优化通信:对比同步Allreduce与异步参数更新
      • 科学计算优化
        • 实现分布式矩阵乘法,优化通信与计算比例
        • 使用MPI_Alltoall实现数据分块交换
      • 性能调优
        • 测试不同算法(Ring vs Tree)在不同节点数下的表现
        • 使用NCCL或HCCL库优化GPU通信
    • 阶段4:高级优化与扩展
      • 通信与计算重叠
        • 实现Pipeline技术,在通信时进行计算
        • 使用异步API隐藏延迟(如Non-blocking MPI)
      • 拓扑感知优化
        • 分析服务器内Mesh网络的通信策略(如NVIDIA的NVLink)
        • 实现跨节点的Ring算法,减少网络跳数
      • 混合算法设计
        • 结合树状与环形结构,设计分层通信策略
        • 动态选择算法(如小规模用Ring,大规模用Tree)
    • 阶段5:工具与框架实战
      • MPI实践
        • 使用MPI实现Broadcast、Reduce和Allreduce
        • 分析MPI的性能瓶颈(如通信延迟、带宽限制)
      • NCCL与HCCL
        • 在GPU集群上使用NCCL优化Allreduce
        • 对比不同框架(如NCCL vs PyTorch DCP)的性能
      • 分布式框架集成
        • 在PyTorch中实现分布式训练,调用
      • torch.distributed
      • API
        • 使用TensorFlow的MirroredStrategy进行参数同步
  • 七 学习资源
    • 书籍
      • 《分布式系统:原理与范型》(原书第3版)
      • 《MPI并行程序设计》
      • 《深度学习系统优化》
  • 八 实践项目建议
    • 初级项目
      • 实现一个基于Socket的Broadcast算法
      • 使用MPI实现Allreduce并测试不同节点数的性能
    • 中级项目
      • 优化Allreduce算法,结合树状与环形结构
      • 在GPU集群上使用NCCL训练ResNet模型
    • 高级项目
      • 设计一个混合通信策略(如Ring+Tree)并测试扩展性
      • 实现分布式矩阵乘法,优化通信与计算比例
相关推荐
西岸行者5 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意5 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码5 天前
嵌入式学习路线
学习
毛小茛5 天前
计算机系统概论——校验码
学习
babe小鑫5 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms5 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下5 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。5 天前
2026.2.25监控学习
学习
im_AMBER5 天前
Leetcode 127 删除有序数组中的重复项 | 删除有序数组中的重复项 II
数据结构·学习·算法·leetcode
CodeJourney_J5 天前
从“Hello World“ 开始 C++
c语言·c++·学习