文献阅读《TOPOOPT: Co-optimizing Network Topology and Parallelization Strategy...》

WANG W, KHAZRAEE M, ZHONG Z, et al. TopoOpt: Co-optimizing Network Topology and Parallelization Strategy for Distributed Training Jobs \[Z\]. NSDI. 2023 https://www.usenix.org/conference/nsdi23/presentation/wang-weiyang 论文简介 1. 摘要 本文提出一种新的适用于DNN的直连结构网络$T_{OPO}O_{PT}$,它可以在计算、通信和网络拓扑三个维度上优化分布式训练的过程。我们演示了 AllReduce 流量的可变性,并利用此属性为 DNN 训练作业构建高效的网络拓扑。然后,$T_{OPO}O_{PT}$使用交替优化技术和名为TotientPerms的群论启发算法来找到最佳网络拓扑和路由计划以及并行化策略。我们构建了一个功能齐全的 12 节点直连原型,具有 100 Gbps 的远程直接内存访问 (RDMA) 转发。对真实分布式训练模型的大规模模拟表明,与类似成本的 Fat-tree 互连相比,TOPOOPT 将 DNN 训练时间减少了高达 3.4 倍。 2. 主要贡献 综合考虑了计算、通信和网络拓扑三个维度的优化策略 分析了MP与AllReduce的流量特征 利用AllReduce的流量可变性优化AllReduce路径 利用交替优化技术和TotientPerms算法来找到最佳网络拓扑 在12个节点的情况下,比传统的胖树网络降低了DNN的3.4倍训练时间 实现方法 1. $T_{OPO}O_{PT}$架构 假定有n个Server,每个Server有d个接口,每个接口连接一个Optical Seicth,共计需要d个Optical Switch。Optical Switch可以通过配置可以在内部视作直接连接任意两个端口,从而实现任意两个Server之间的直接连接。 论文中提到Server与Optical Switch之间的连接是使用RDMA网卡,并对其进行了修改:原生RDMA网卡会抛弃非本机的数据,修改后支持数据转发和数据中继。 TOPOOPT的网络连接方式 论文中称Server的端口数量d为Server的Degree,它决定着每个Server与其他Server的连接数量,也是 $T_{OPO}O_{PT}$ 算法的一个计算参数。 2. 交替优化策略 问题: 从计算、通信、网络拓扑三个维度对并行计算进行优化会产生一个非常大的搜索空间,导致该优化问题可能无法求得最优解。 ...

2024年5月16日 · 1 分钟

文献阅读《Adaptive and Hierarchical Large Message All-to-all Communication Algorithms...》

I. 前置内容 在了解集合通信(Collective Communication)之前要先了解点P2P对点通信(Point-to-Point)。P2P通信通常为两个不同进程间的通信,是1对1的; 在MPI规范中,既有同步阻塞的P2P接口:MPI_send和MPI_Recv接口,也定义了非阻塞的P2P接口如:MPI_Isend、MPI_Irecve。 集合通信和P2P通信是相对应的,集合通信则是1对多或是多对多的。在分布式系统中,各个节点间往往存在大量的集合通信需求,而我们可以用消息传递接口(Message Passing Interface,MPI)来定义一些比较底层的消息通信行为譬如Reduce、Allreduce、Scatter、Gather、Allgather等。 1.1 系统架构 集合通信算法的优化往往与其对应的网络拓扑和系统架构有直接关系,通常情况下,一个节点内的GPU-GPU或GPU-CPU之间的结构成为系统架构,节点之间的网络连接称为网络拓扑,一种确定的系统架构会有确定的网络拓扑架构。 在HPC领域有很多经典的系统架构和网络拓扑,例如:Summit system或者Lassen system等。本文主要由于发表于2021年,很多系统架构和指标数据与当先最新数据差异较大,但是为了方便后续的理解,本文后续还是以Summit system和Lassen system为例进行分析。 简化的Summit System和Lassen System(论文中的结构) 每个节点包含6个GPU和2个CPU,每3个GPU和1个CPU组成一个Group,使用NVLink进行连接,CPU与CPU之间使用X-Bus进行连接,同时与IB网卡使用PCIe进行连接,节点间使用IB协议进行组网。NVLink、NVSwitch、IB等硬件设备的概念将会在下一节中介绍。 1.2 相关组件 NVLink and NVSwitch NVLink和NVSwitch是一种可支持服务器内和服务器间实现高级多 GPU 通信的基础模组。第四代NVLink技术可为多 GPU 系统配置提供高于以往 1.5 倍的带宽,以及增强的可扩展性。第三代NVSwitch基于 NVLink 的高级通信能力构建,可为计算密集型工作负载提供更高带宽和更低延迟。 Mellanox InfiniBand InfiniBand(直译为“无限带宽”技术,缩写为IB)是一个用于高性能计算的计算机网络通信标准,它具有极高的吞吐量和极低的延迟,用于计算机与计算机之间的数据互连。InfiniBand也用作服务器与存储系统之间的直接或交换互连,以及存储系统之间的互连。常用的IB交换机/网卡带宽普遍为为400GB/s。 Remote Direct Memory Access (RDMA) RDMA是一种概念,在两个或者多个计算机进行通讯的时候使用DMA, 从一个主机的内存直接访问另一个主机的内存。 1.3 (Non-)Personalized All-to-All 1.3.1 Non-Personalized All-to-All Non-Personalized All-to-All(通常称为 MPI_Allgather)是一种 MPI 集体通信模式,是 MPI_Gather 和 MPI_Bcast 的结合。所有进程按等级顺序从其他进程收集数据。操作结束时,每个进程都将与所有其他进程交换数据。 1.3.2 Personalized All-to-All Personalized All-to-All称为 MPI_Alltoall,与 MPI_Allgather 类似,所有进程都相互共享数据。然而,每个进程都会向其他进程发送不同的数据,从而形成一种个性化的集体通信模式(即,每个进程都会向每个其他进程发送不同的数据块) 1.4 相关算法 1.4.1 Ring 每个进程i发送数据给(i+1) \ N并从(i-1) \ N接收数据,但是这种方法会带来过高的延迟。 ...

2024年5月7日 · 3 分钟

集合通信-通信原语

参考来源: 分布式训练常用的集合通信及其通信原语, 分布式训练常用的网络结构及集合通信拓扑算法 图片来源:volta-architecture-whitepaper 1 Broadcast Broadcast属于1对多的通信原语,一个数据发送者,多个数据接收者,可以在集群内把一个节点自身的数据广播到其他节点上。如下图所示,圈圈表示集群中的训练加速卡节点,相同的颜色的小方块则代表相同的数据。当主节点 0 执行Broadcast时,数据即从主节点0被广播至其他节点。 Broadcast是数据的1对多的同步,它将一张XPU卡上的数据同步到其他所有的XPU卡上,其应用场景有: 数据并行的参数初始化,确保每张卡上的初始参数是一致的; allReduce里的 broadcast + reduce组合里的broadcast操作; 分布式训练parameter server 参数服务器结构里的 master节点 broadcast 数据到worker节点,再从worker节点reduce数据回master节点里的broadcast操作; 2 Scatter 同Broadcast一样,Scatter也是一个1对多的通信原语,也是一个数据发送者,多个数据接收者,可以在集群内把一个节点自身的数据发散到其他节点上。与Broadcast不同的是Broadcast把主节点0的数据发送给所有节点,而Scatter则是将数据的进行切片再分发给集群内所有的节点,如下图所示,不相同的颜色的小方块代表不相同的数据,主节点 0 将数据分为四份分发到了节点0-3。 Scatter是数据的1对多的分发,它将一张XPU卡上的数据进行分片再分发到其他所有的XPU卡上,他的反向操作对应Gather,其应用场景有: ReduceScatter组合里的 Scatter操作; 模型并行里初始化时将模型scatter到不同的XPU上; 3 Gather Gather操作属于多对1的通信原语,具有多个数据发送者,一个数据接收者,可以在集群内把多个节点的数据收集到一个节点上,如下图所示,不相同的颜色的小方块代表不相同的数据。 Gather是数据的多对1的收集,它将多张XPU卡上的数据收集到1张XPU卡上,它的反向操作对应Scatter,其应用场景有: ReduceScatter组合里的 Scatter操作; 4 Reduce Reduce属于多对1的通信原语,具有多个数据发送者,一个数据接收者,可以在集群内把多个节点的数据规约运算到一个主节点上,常用的规约操作符有:求累加和SUM、求累乘积PROD、求最大值MAX、求最小值MIN、逻辑与 LAND、按位与BAND、逻辑或LOR、按位或BOR、逻辑异或LXOR、按位异或BOXR、求最大值和最小大的位置MAXLOC、求最小值和最小值的位置MINLOC等,这些规约运算也需要加速卡支持对应的算子才能生效。 Reuduce操作从集群内每个节点上获取一个输入数据,通过规约运算操作后,得到精简数据,如下图的SUM求累加和:节点0数值 5、节点1数值6、节点2数值7、节点3数值8,经过SUM运算后 累积和为 26,即得到更为精简的数值,在reduce原语里回会去调用 reduce SUM算子来完成这个求和累加。 Reduce是数据的多对1的规约运算,它将所有张XPU卡上的数据规约(比如SUM求和)到1张XPU卡上,其应用场景有: ...

2024年4月28日 · 1 分钟

HCCL集合通信测试环境设置

1. 快速使用 HCCL(Huawei Collective Communication Library)是基于昇腾AI处理器的高性能集合通信库,其主要功能与作用与Nvidia的NCCL库相似,主要用于集合通信,CANN库种自带一套测试工具用以分析集合通信性能。 1.1 编译环境配置 前置环境配置阶段请参考Llama2部署记录,后续的所有流程均需要在具备HCCL硬件的平台上实现,需要注意的是,建议使用的Ubuntu版本大于等于20.04LTS,否则可能会遇到VSCode不支持的情况。 A. CANN CANN的配置过程参考Llama2部署记录文档的4. 安装CANN章节,并记录安装位置,以备后续使用 完成CANN后,建议在~/.bashrc文件中添加对应的环境变量,例如: # 使用nano打开~/.bashrc文件 nano ~/.bashrc 在文件的最后添加export ASCEND_HOME=/usr/local/Ascend/ascend-toolkit/latest B. OpenMPI 在OpenMPI官网找到对应版本的安装包下载,然后解压缩安装包,以mpich-4.2.0版本为例: # mpich下载链接参考:https://www.mpich.org/static/downloads wget https://www.mpich.org/static/downloads/4.2.0/mpich-4.2.0.tar.gz # 解压缩mpich压缩包 tar -zxvf mpich-4.2.0.tar.gz 配置mpi的安装路径,以/root/mpich路径为例: # 新建文件夹 mkdir ~/mpich # 进入解压缩后的mpich文件夹 cd mpich-4.2.0 # 配置安装路径 ./configure -prefix=/root/mpich --disable-fortran 使用make命令构建mpich的可执行文件,该过程可能耗时比较长 make make install 完后后将mpich添加到环境变量种,并添加对应的链接库和帮助文件 # 修改~/.bashrc文件 nano ~/.bashrc 在最后一行添加以下内容: export MPI_HOME=/root/mpich export PATH=$MPI_HOME/bin:$PATH ...

2024年4月18日 · 2 分钟

Llama2部署记录

1. 创建docker 1.1 docker命令 显示全部的镜像:docker images 创建一个容器:docker run ...<查看1.2节内容> 显示全部的容器:docker ps -a 启动一个容器:docker start <id> 停止一个容器:docker stop <id> 进入一个正在运行的程序:docker exec -it <id> /bin/bash 删除一个容器:docker rm <id> 1.2 创建容器 创建一个docker容器的时候需要同时挂载本地工作目录和相关的程序驱动,因此创建docker容器的命令参数较多,以下为一个创建docker容器命令的基本格式: docker run -it --ipc=host --name <name> -v <local_path>:<docker_path> \ --workdir=<docker_path> \ --pids-limit 409600 \ --privileged --network=host \ --shm-size=128G \ --device=/dev/davinci0 \ --device=/dev/davinci1 \ --device=/dev/davinci2 \ --device=/dev/davinci3 \ --device=/dev/davinci4 \ --device=/dev/davinci5 \ --device=/dev/davinci6 \ --device=/dev/davinci7 \ --device=/dev/davinci_manager \ --device=/dev/devmm_svm \ --device=/dev/hisi_hdc \ -v /usr/local/Ascend/driver:/usr/local/Ascend/driver \ -v /usr/local/Ascend/firmware:/usr/local/Ascend/firmware \ -v /usr/local/Ascend/add-ons/:/usr/local/Ascend/add-ons/ \ -v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \ -v /usr/local/dcmi:/usr/local/dcmi \ -v /etc/ascend_install.info:/etc/ascend_install.info \ -v /etc/bashrc:/etc/bashrc \ -p 223:223 \ -p 224:6006 \ -p 225:8080 \ -p 226:8888 \ -u root \ <image_id> /bin/bash -it:已交互方式运行容器,并分配一个终端 ...

2024年4月9日 · 5 分钟