NCCL (NVIDIA Collective Communications Library)

这篇具有很好参考价值的文章主要介绍了NCCL (NVIDIA Collective Communications Library)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Overview of NCCL

NCCL : NVIDIA Collective Communications Library 英伟达集体通信库
提供集合通信和点对点通信的 发送/接收原语。不是个成熟的并行编程框架;而是一个加速GPU内通信的库

NCCL 提供如下集体通信原语(collective communication primitives):

  • AllReduce
  • Broadcast
  • Reduce
  • AllGather
  • ReduceScatter

他也允许点到点的收发通信,包括:散播(scatter),聚集(gather),或者all-to-all 操作。

通信处理器间的紧密同步是集合通信的关键方面。 基于CUDA的集体的传统地实现是通过 CUDA 内存复制操作和CUDA内核来进行本地削减 (redection) 。NCCL, 实现了每个集合在单一内核上处理通信和计算操作。这样就允许实现快速同步和减少达到峰值带宽所需要的资源。

NCCL 方便地消除了开发人员在特定机器上优化他们的应用的需求。NCCL 提供了节点内或跨界节点的多GPU 的快速的集体(collectives)。它支持各种互联技术,包括PCIe, NVLINK, InfiniBand Verbs, and IP sockets.

除了性能,变成易用性也是NCCL设计的考虑因素,NCCL使用见到的C API 可以从多种编程语言轻松访问。

NCCL几乎兼容任何多GPU并行化模型,例如:

  • 单线程控制所有的GPU
  • 多线程的,例如每个GPU由一个线程控制
  • 多进程的,例如 MPI

NCCL 在深度学习框架有巨大的作用,AllReduce 集合大量应用于神经网络训练。 通过 NCCL 提供的多 GPU 和多节点通信,可以有效扩展神经网络训练。

集合操作 Collective Operations

集合操作需要被每个rank(rank 是指的CUDA设备) 待用来组成一个完整的集合操作。如果不这样做,将导致其他队伍无限期地等待。

AllRedeuce

AllReduce 操作对跨设备的数据执行规约操作,并将结果写入每个rank的接收缓冲区。

AllReduce 操作与rank的排序无关。

AllReduce 以 K个数组开始,这些数组含有各自独立的N个值。并以N个值相同的S数组结束。 对于每个rank,S[i] = V0[i] + V1[i] +…+Vk-1[i]

nccl,hard core system,深度学习,人工智能,python

Broadcast

将一个root rank的N的元素的buffer 复制到所有rank上

nccl,hard core system,深度学习,人工智能,python

Reduce

执行过程和allReduce相似,不过仅仅将结果写入特定的 root rank

nccl,hard core system,深度学习,人工智能,python
一个reduce 操作后,执行broadcast操作效果和 allreduce一样

AllGather

K个rank中,每个rank中N个值,聚集在一起。输出结果按照rank 标号排序。

nccl,hard core system,深度学习,人工智能,python

ReduceScatter

执行起来和reduce类似,不过结果会散布在各个rank的block中。每个rank 根据其标号获得一部分数据。
nccl,hard core system,深度学习,人工智能,python
ReduceScatter 会受rank布局的影响。

ring-allreduce

参考 : 知乎文章 CSDN文章
nccl,hard core system,深度学习,人工智能,python
GPU分布式计算,GPU1~4卡,负责网络参数的训练,每个卡上布置了相同的深度学习网络,每个卡都分配到不同的数据的minibatch。每张卡训练结束后将网络参数同步到GPU0,也就是Reducer这张卡上,然后再求参数变换的平均下发到每张计算卡,整个流程有点像mapreduce的原理。

涉及两个问题:

  • 每一轮训练迭代都需要所有的卡将数据同步完,做一次reduce才算结束。 如果卡数比较少的情况下,其实影响不大,但是如果并行的卡很多的时候,就涉及到计算快的卡需要去等待计算慢的卡的情况,造成计算资源的浪费。

  • 每次迭代所有的计算GPU卡都需要针对全部模型参数,跟Redcue卡进行通信。数据量大,通信开销大,随卡的数量增多开销会线性增长。

Ring Allredcue ,通过将GPU卡的通信模型拼接成一个环形,从而减少卡数增加带来的资源消耗。

nccl,hard core system,深度学习,人工智能,python
该算法的过程主要分成两步:1、scatter-reduce 2、allgather

1、 scatter-reduce
如果有n块GPU,将GPU上的数据划分成n块,并指定GPU的左右邻居
然后开始n-1次操作,在第 i 次操作时, GPU j会将自己的第 (j-i)%n 快数据发送给GPU j+1,并接受来自 GPU j-1的 (j-i-1)%n 的数据,如下图
nccl,hard core system,深度学习,人工智能,python
当n-1次操作完成后,ring-allreduce的第一大步scatter-reduce就已经完成了,此时,第i块gpu的第(i + 1) % n块数据已经收集到了所有n块gpu的第(i + 1) % n块数据,那么,再进行一次allgather就可以完成算法了。

第二部: allgather,通过n-1传递把第 i 块 GPU的第 (i+1)%n 块数据传递给其他GPU。
最后每个GPU就变成了如下所示:

nccl,hard core system,深度学习,人工智能,python
一下图来自 https://blog.csdn.net/dpppBR/article/details/80445569
举一个3gpu的例子:
首先是第一步,scatter-reduce:
nccl,hard core system,深度学习,人工智能,python
然后是allgather的例子:nccl,hard core system,深度学习,人工智能,python文章来源地址https://www.toymoban.com/news/detail-538181.html

到了这里,关于NCCL (NVIDIA Collective Communications Library)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Pytorch报错解决——(亲测有效)RuntimeError: Distributed package doesn‘t have NCCL built in

    在我跑SLADD模型的时候,出现了如下报错: 上网搜寻一番后,发现了解决方法 第一步:在本文件的开头机上这样两行代码: 第二步:在本文件代码中找到这样一部分代码: 把 dist.init_process_group(backend=\\\'nccl\\\', init_method=\\\'env://\\\', world_size=args.world_size, rank=rank) 这一行中的nccl换成gl

    2024年02月12日
    浏览(45)
  • AI算力芯片(ASIC/GPGPU/XPU)之以太网测试用例支持(400G 56G PAM4 & 800G 112G PAM4 SerDes、QP、RDMA、PFC、DCQCN、NCCL通信库)

    目录 AI专用算力芯片 ASIC/GPU/XPU形态 AI计算板卡/模组之间的机箱集群互联技术 NVLINK,Inifiband,Ethernet 有必要重新介绍一下XENA公司 原:Xena Networks/信雅纳网络 Valkyrie产品系列 Vulcan产品系列 Chimera产品系列 Vantage产品系列 Safire产品系列 Virtual产品系列 现:Teledyne Lecroy Xena Teledyne t

    2024年04月22日
    浏览(40)
  • JXI C# DSP-Core Library 下载安装编译

    Feb-6-2022 公开项目:https://github.com/JXISH/Seesharp-DSP-Core-Lib 或者聚星仪器®️ 提供的下载目录或git仓库同步,建立你的 DSP-Core目录作为整个库的根目录。 下载解压后最基本的目录如下: DSP-Core Development CSharp Core Library //solution file所在目录 Document //文档所在目录 你需要Microsoft®️

    2024年02月07日
    浏览(34)
  • Nvidia Tensor Core-WMMA API编程入门

    对于计算能力在7.0及以上的CUDA设备,可以使用CUDA C++ API调用Tensor Core,支持形如D = AB + C的混合精度的矩阵乘运算。 fragment:Tensor Core数据存储类,支持matrix_a、matrix_b和accumulator load_matrix_sync:Tensor Core数据加载API,支持将矩阵数据从global memory或shared memory加载到fragment store_mat

    2023年04月12日
    浏览(27)
  • 在docker里使用gpu的解决方案(镜像内安装驱动使用nvidia-smi后显示Failed to initialize NVML: Driver/library version mismatch)

    要么在docker环境内安装nvidia-driver 但容易和外面的版本不一致导致各种报错version mismatch之类的 不如使用nvidia-docker,这是一个nVidia官方为了方便在docker镜像容器内使用gpu做的包: 1. 保证docker环境内没有nvidia驱动程序,防止后续配置出现驱动版本不一致的情况         找到你要

    2024年01月21日
    浏览(47)
  • 如何解决“library load load opencv_core_parallel_tbb460_64d.dll =>FAILED”类的信息

    如何解决“library load load opencv_core_parallel_tbb460_64d.dll =FAILED”类的信息 对于这类信息不会影响release的发布版结果,但是debug会有错误信息输出,如果是强迫症患者可以考虑以下的两种方法: 1、直接将opencv的Log日志等级修改,比如:OPENCV_LOG_LEVEL=e,这样可以避免输出此类信息,

    2024年02月16日
    浏览(40)
  • Humanlike Decision Making through Collective Intelligen

    作者:禅与计算机程序设计艺术 :随着人类在人工智能领域的探索与积累,越来越多的人开始认识到人工智能带来的巨大变革,同时也越来越担心它的潜在风险。在推荐系统领域,特别是在个性化推荐系统中,人工智能(AI)技术可以给用户提供更加个性化、更具舒适感的服

    2024年02月07日
    浏览(24)
  • 【深度学习】【分布式训练】Collective通信操作及Pytorch示例

    相关博客 【Megatron-DeepSpeed】张量并行工具代码mpu详解(一):并行环境初始化 【Megatron-DeepSpeed】张量并行工具代码mpu详解(二):Collective通信操作的封装mappings 【深度学习】【分布式训练】DeepSpeed:AllReduce与ZeRO-DP 【深度学习】混合精度训练与显存分析 【深度学习】【分布式训练

    2023年04月13日
    浏览(36)
  • 【Megatron-DeepSpeed】张量并行工具代码mpu详解(二):Collective通信操作的封装mappings

    相关博客 【深度学习】【分布式训练】一文捋顺千亿模型训练技术:流水线并行、张量并行和3D并行 【Megatron-DeepSpeed】张量并行工具代码mpu详解(四):张量并行版Embedding层及交叉熵的实现及测试 【Megatron-DeepSpeed】张量并行工具代码mpu详解(三):张量并行层的实现及测试 【Me

    2024年02月16日
    浏览(40)
  • 解决——》CommunicationsException:Communications link failure

    推荐链接:     总结——》【Java】     总结——》【Mysql】     总结——》【Redis】     总结——》【Kafka】     总结——》【Spring】     总结——》【SpringBoot】     总结——》【MyBatis、MyBatis-Plus】     总结——》【Linux】     总结——》【MongoDB】    

    2024年02月09日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包