当前位置: 首页 > news >正文

【分布式】NCCL Split Tree kernel内实现情况 - 06

相关系列

【分布式】NCCL部署与测试 - 01
【分布式】入门级NCCL多机并行实践 - 02
【分布式】小白看Ring算法 - 03
【分布式】大模型分布式训练入门与实践 - 04

目录

    • 相关系列
    • 概述
      • 1.1 Tree
      • 1.2 double binary tree
    • 初始化和拓扑
      • 2.1 Tree的初始化与差异
      • 2.2 ncclGetBtree
    • Kernel内部实现
      • 初始化
      • 原语差异
      • 流程
        • RunTreeUpDown
        • RunTreeSplit

概述

先掠过Tree算法在拓扑方面以及树的生成方面是如何实现的,本期主要讲kernel内部的情况。
先放上2.11.4部分的tree,后续增添2.18版本中nccl的改动,以及rccl的处理。

如果你看过其他的一些文档,应该知道double binary tree的一些构造。
即我们可以将tree分为三类,朴素的tree、double binary tree和split tree、balanced tree。

1.1 Tree

首先最朴素的tree,存在浪费带宽的情况。

因为叶节点只接收数据,不发送,因此只利用了带宽的一半

1.2 double binary tree

因此引入double binary tree
把allreduce可以拆分为reduce和broadcast两个过程,reduce是自下而上(Tree1),broadcast自上而下(Tree2),这样构造两棵树,第一棵树的叶子节点在第二棵树中是中间节点,这样就能更好的做到流水并行。

1.3 SplitTree
但是这样又有个问题,根节点要向Tree2所有的中间节点发送消息,同时还要从Tree1的中间节点接收消息,Root会不会太忙碌了?因此又提出了SplitTree
再多出一个接收节点,用来平衡。通过切分的方式,把所有向上的父节点放到GPU0,向下的传输放到GPU1上,把上行和下行切分开来。
代价:例如broadcast的时候,多了一个GPU0到GPU1的传输操作。在代码中注释为,Spread NIC traffic between two GPUs。

1.4 balanced tree
所有的父节点放到同一张GPU0上,但子节点放到GPU0和GPU1两张显卡上。因此向上传递的时候具有一些不确定性。英伟达推荐CUDA sm>70所有的Tree更推荐Balanced Tree。不过nccl 2.11.4的版本这次先不提及balanced tree的细节。

初始化和拓扑

2.1 Tree的初始化与差异

初始化的部分,节点内要确定backToNIC是哪张卡。但节点内搜索Tree本质上和Ring没有区别。

Tree的代码出现差异的部分在:ncclTopoPreset

NCCLCHECK(ncclTopoPreset(comm, &treeGraph, &ringGraph, &allGather3Data[rank].topoRanks));

在connect.cc文件中:

 int parentIndex = 0;
int child0Index = treeGraph->pattern == NCCL_TOPO_PATTERN_TREE ? 0 : 1;
int child1Index =treeGraph->pattern == NCCL_TOPO_PATTERN_SPLIT_TREE ? 1 : 0;topoRanks->treeToParent[c] = treeIntra[parentIndex];
topoRanks->treeToChild0[c] = treeIntra[child0Index];
topoRanks->treeToChild1[c] = treeIntra[child1Index];
channel->tree.up = i == 0 ? -1 : treeIntra[i - 1];
channel->tree.down[0] = i == localRanks - 1 ? -1 : treeIntra[i + 1];

这一段是判断Tree的类型,然后判断哪个GPU来连接Child。然后进行赋值。

最后两行是完成在节点内的ring环,并确定出入节点。

2.2 ncclGetBtree

 * Illustration :* 0---------------8*          ______/ \______*         4               12*       /   \            /  \*     2       6       10     \*    / \     / \     /  \     \*   1   3   5   7   9   11    13

二进制化以后,根据从右往左位出现的第一个1的位数来判断是哪一层,例如没有1就是root,
叶子节点在最下层,所以1在第四位
第二层的节点,1在第二位
第三层的节点,1在第三位

相关文章:

【分布式】NCCL Split Tree kernel内实现情况 - 06

相关系列 【分布式】NCCL部署与测试 - 01 【分布式】入门级NCCL多机并行实践 - 02 【分布式】小白看Ring算法 - 03 【分布式】大模型分布式训练入门与实践 - 04 目录 相关系列概述1.1 Tree1.2 double binary tree初始化和拓扑2.1 Tree的初始化与差异2.2 ncclGetBtreeKernel内部…...

C语言深入学习 --- 4.自定义类型(结构体+枚举+联合)

第四章 自定义类型:结构体,枚举,联合 结构体 结构体类型的声明 结构的自引用 结构体变量的定义和初始化 结构体的内存对齐 结构体实现位段(位段的填充 和 可移植性) 枚举 枚举类型的定义 枚举的优点 枚举的使…...

AI自然语言中默认上下文长度4K 几K是什么意思?

环境: 4K 问题描述: AI自然语言中默认上下文长度4K 几K是什么意思? 解决方案: 在自然语言处理中,“k” 表示 “千”,是一种简写方式。当我们说 “4k” 时,实际上指的是 “4,000”。在上下文…...

vSphere 8考试认证题库 2024最新(VCP 8.0版本)

VMware VCP-DCV(2V0-21.23)认证考试题库,已全部更新,答案已经完成校对,完整题库请扫描上方二维码访问。正常考可以考到450分以上(满分500分,300分通过) An administrator is tasked …...

系统学习Python——装饰器:“私有“和“公有“属性案例-[装饰器参数、状态保持和外层作用域]

分类目录:《系统学习Python》总目录 文章《系统学习Python——装饰器:“私有“和“公有“属性案例-[实现私有属性]》中使用的类装饰器接受任意多个参数来命名私有属性。然而真正发生的情况是,参数传递给了Private函数,然后Private…...

星辰天合参与编制 国内首个可兼顾 AI 大模型训练的高性能计算存储标准正式发布

近日,在中国电子工业标准化技术协会高标委的支持和指导下,XSKY星辰天合作为核心成员参与编制的《高性能计算分布式存储系统技术要求》团体标准,在中国电子工业标准化技术协会网站正式发布。 该团体标准强调了分布式存储系统对包括传统高性能计…...

算法训练day38动态规划基础Leetcode509斐波纳切数70爬楼梯746使用最小花费爬楼梯

什么是动态规划 对于动态规划问题,我将拆解为如下五步曲,这五步都搞清楚了,才能说把动态规划真的掌握了! 确定dp数组(dp table)以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组&a…...

Leetcode 206. 反转链表

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例 1: 输入:head [1,2,3,4,5] 输出:[5,4,3,2,1] 示例 2: 输入:head [1,2] 输出:[2,1] 示例 3: 输…...

电子科技大学课程《计算机网络系统》(持续更新)

前言 本校的课程课时有所缩减,因此可能出现与你学习的课程有所减少的情况,因此对其他学校的同学更多的作为参考作用。本文章适合学生的期中期末考试,以及想要考研电子科技大学的同学,电子科技大学同学请先看附言。 第一章 计算…...

HBase介绍、特点、应用场景、生态圈

目录: 一、HBase简介 二、NoSQL和关系型数据库对比 三、HBase特点 四、应用场景 五、HBase生态圈技术 一、HBase简介 HBase是一个领先的NoSQL数据库 是一个面向列存储的NoSQL数据库 是一个分布式Hash Map,底层数据是Key-Value格式 基于Coogle Big Table论文 使用HD…...

蓝桥杯错误记录

今天在做 小蜜蜂的综合案例的时候&#xff0c;数码管显示&#xff0c;有重影。 #include <STC15F2K60S2.H> unsigned char num; unsigned char code Duan[22]{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x80, 0xc6,0xc0,0x86,0x8e,0xbf,0x7f,0XC1,0X8C,0…...

Spring-静态代理VS动态代理/实现代理ProxyFactory

文章目录 静态代理VS动态代理Spring实现代理ProxyFactory 工作中遇到问题整理动态代理异常com.sun.proxy.$Proxy0 cannot be cast to 静态代理VS动态代理 静态代理VS动态代理 参考URL: https://blog.csdn.net/qq_25881443/article/details/103245938 【java项目实战】代理模式…...

单片机精进之路-9ds18b20温度传感器

ds18b20复位时序图&#xff0c;先将b20的数据引脚拉低至少480us&#xff0c;然后再将数据引脚拉高15-60us&#xff0c;再去将测传感器的数据引脚是不是变低电平并保持60-240us&#xff0c;如果是&#xff0c;则说明检测到温度传感器&#xff0c;并正常工作。需要在240us后才能检…...

支部管理系统微信小程序(管理端+用户端)flask+vue+mysql+微信小程序

系统架构如图所示 高校D支部管理系统 由web端和微信小程序端组成&#xff0c;由web端负责管理&#xff0c;能够收缴费用、发布信息、发布问卷、发布通知等功能 部分功能页面如图所示 微信小程序端 包含所有源码和远程部署&#xff0c;可作为毕设课设...

4、Linux-常用命令(二)

目录 一、搜索命令 1、命令搜索命令 2、文件搜索命令find。格式&#xff1a;find [搜索范围] [搜索条件]。 3、字符串搜索命令grep 二、帮助命令 1、man【详细的帮助】 2、--help【简要的帮助】 三、压缩与解压命令 1、.zip格式 2、.gz格式 3、打包 四、关机和重启命…...

golang实现openssl自签名双向认证

第一步&#xff1a;生成CA、服务端、客户端证书 1. 生成CA根证书 生成CA证书私钥 openssl genrsa -out ca.key 4096创建ca.conf 文件 [ req ] default_bits 4096 distinguished_name req_distinguished_name[ req_distinguished_name ] countryName …...

【学习】torchvision.datasets.ImageFolder()

在分类任务中&#xff0c;数据集文件存储往往是如下形式&#xff1a; - train- class1- image1.jpg- image2.jpg...- class2- image1.jpg- image2.jpg......此时&#xff0c;我们想要获取图片和标签&#xff0c;标签即为文件名&#xff08;class1、class2…&#xff09; 可以使…...

pyinstaller打包的exe运行报错 No module named path

描述 用python开发了一个opc client应用&#xff0c;调试没有问题后&#xff0c;使用pyinstaller打包成exe&#xff0c;测试exe运行也没有问题&#xff0c;正常使用。 在某次重装win10系统后&#xff0c;在此运行exe就开始报错了&#xff0c;详细内容如下&#xff1a; ------…...

Vue3中Vuex状态管理库学习笔记

1.什么是状态管理 在开发中&#xff0c;我们会的应用程序需要处理各种各样的数据&#xff0c;这些数据需要保存在我们应用程序的某个位置&#xff0c;对于这些数据的管理我们就称之为状态管理。 在之前我们如何管理自己的状态呢&#xff1f; 在Vue开发中&#xff0c;我们使用…...

React富文本编辑器开发(二)

我们接着上一节的示例内容&#xff0c;现在有如下需求&#xff0c;我们希望当我们按下某个按键时编辑器有所反应。这就需要我们对编辑器添加事件功能onKeyDown, 我们给 Editor添加事件&#xff1a; SDocor.jsx import { useState } from react; import { createEditor } from…...

宽带卫星通信系统同步与大规模阵列波束成形技术【附程序】

✨ 长期致力于符号定时恢复、频率估计、可变分数延迟滤波器、时延估计、真时延阵列研究工作&#xff0c;擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流&#xff0c;点击《获取方式》 &#xff08;1&#xff09;基于迭代短卷积的多…...

独立开发者如何利用 Taotoken 模型广场低成本试错选型

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 独立开发者如何利用 Taotoken 模型广场低成本试错选型 对于资源有限的独立开发者或小型团队而言&#xff0c;在产品开发初期选择合…...

DLSS版本切换器:终极游戏性能优化指南

DLSS版本切换器&#xff1a;终极游戏性能优化指南 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper 你是否曾经遇到过这种情况&#xff1a;和朋友玩同一款游戏&#xff0c;你的帧率却总是比别人低&#xff1f;或者游戏画…...

Adobe-GenP 3.0终极指南:5分钟快速激活Adobe全系列专业软件

Adobe-GenP 3.0终极指南&#xff1a;5分钟快速激活Adobe全系列专业软件 【免费下载链接】Adobe-GenP Adobe CC 2019/2020/2021/2022/2023 GenP Universal Patch 3.0 项目地址: https://gitcode.com/gh_mirrors/ad/Adobe-GenP Adobe-GenP是一款专门为Adobe Creative Clou…...

零基础转行网安:3个月学习路线+就业方向(2026最新)

零基础转行网安&#xff1a;3 个月学习路线 就业方向&#xff08;2026 最新&#xff09; 最近刷到很多小白在问&#xff1a; “2026 年零基础还能转行网安吗&#xff1f;”“没有学历、没有基础、不会代码&#xff0c;多久能找到工作&#xff1f;”“网上教程杂乱&#xff0c…...

免费网盘直链下载助手:一站式解决九大平台文件下载难题

免费网盘直链下载助手&#xff1a;一站式解决九大平台文件下载难题 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼…...

HoRain云--Skills 基本结构

&#x1f3ac; HoRain 云小助手&#xff1a;个人主页 ⛺️生活的理想&#xff0c;就是为了理想的生活! ⛳️ 推荐 前些天发现了一个超棒的服务器购买网站&#xff0c;性价比超高&#xff0c;大内存超划算&#xff01;忍不住分享一下给大家。点击跳转到网站。 目录 ⛳️ 推荐 …...

PerimeterX PX3/PX2 按压验证码逆向:从初始化到WASM关键校验的完整流程剖析

1. PerimeterX按压验证码技术背景解析 第一次遇到PerimeterX的PX3/PX2按压验证码时&#xff0c;我正帮朋友调试一个电商爬虫。那会儿鼠标按下去死活过不了验证&#xff0c;控制台里全是看不懂的加密参数。这种验证码和传统图形验证码完全不同&#xff0c;它更像一个完整的安全防…...

VCS仿真总失败?手把手教你用TMAX的CPV功能快速定位ATPG Pattern问题

VCS仿真总失败&#xff1f;TMAX的CPV功能实战指南&#xff1a;精准定位ATPG Pattern问题 在数字芯片验证的战场上&#xff0c;ATPG&#xff08;自动测试模式生成&#xff09;仿真是确保芯片可测试性的关键环节。但当VCS仿真器抛出"cycle mis-match"错误时&#xff0c…...

为什么MASA全家桶汉化包能彻底改变你的Minecraft模组体验?

为什么MASA全家桶汉化包能彻底改变你的Minecraft模组体验&#xff1f; 【免费下载链接】masa-mods-chinese 一个masa mods的汉化资源包 项目地址: https://gitcode.com/gh_mirrors/ma/masa-mods-chinese 还在为MASA模组复杂的英文界面而头疼吗&#xff1f;作为中文Minec…...