分布式并行计算:概述

顾名思义,分布式并行计算就是在单台机器多个GPU(单机多卡) 上,或者多台机器多个GPU(多机多卡) 上进行并行计算。

分布式计算带来了两个好处:

  1. 降低了 GPU 的显存压力。一块普通的 GPU 显存只有16个G,好一点的 3090Ti, 4090Ti 也就24个G。再计算下参数占的内存:如果以32位浮点数存储参数的话,一个参数占 4 Bytes;一百万参数大约占 4 MB。实际运行模型时,不光需要存储参数,还有梯度、中间值、优化器的状态需要存储,一百万参数的模型实际需要占用约 12 MB。现在的神经网络参数动辄上亿。根据以上的计算,一个10亿参数的模型大约需要 12G 显存,这还没有算数据占的空间
  2. 利用多个 GPU 的算力,加速计算。以 CLIP 模型举例,训练包含最大 Vision Transformer 的模型需要在 256 块 V100 GPU 上跑 12 天。如果要在单块 GPU 上跑,就算显存允许,也要跑到地老天荒了。

ps: 为了节约显存,还可以使用 Pytorch AMP:Pytorch AMP——自动混合精度训练


可以把分布式计算分为数据并行和模型并行。模型并行又可以分为张量并行和流水线并行

  • 数据并行(Data Parallelism):在不同 GPU 上运行不同的 batch data
  • 张量并行(Tensor Parallelism):将单个数学运算(如矩阵乘法)拆分到不同的 GPU 上运行
  • 流水线并行(Pipeline Parallelism):在不同 GPU 上运行模型的不同层

以数据并行为例。以现在庞大的训练数据,单张 GPU 的显存大概率放不下,那么 GPU 要经常与 CPU 进行数据交换(CPU 进一步要与硬盘进行数据交换),数据传输成本很高。
如果把数据切分成 1000 份部署在 1000 张 GPU 上,假设此时的数据量允许在单张 GPU 上训练模型。那么这将大大加速模型训练——不止是 GPU 并行计算带来的加速,还有节省的数据传输所需的时间——很有可能带来一万倍的加速。

Pytorch 中,数据并行可以通过 DataParallelDistributedDataParallel 两种方式实现。前者是单进程、多线程的并行训练方式,多个 GPU 共享同一个 Python 进程,会受到 Python 解释器的 GIL 的限制。后者属于多进程,每一个 GPU 上都运行一个 Python 进程,不受 GIL 的限制。

关于多线程、多进程,可以看看我在知乎的一篇文章:聊聊多线程、多进程与GPU

并且单进程的方式,限制了 DataParallel 在多台机器上的运行,因此它只能在单台机器上运行。但即使在单机情况下,Pytorch 官方依然推荐使用 DistributedDataParallel 进行多 GPU 训练。

It is recommended to use DistributedDataParallel, instead of DataParallel to do multi-GPU training, even if there is only a single node.
The difference between DistributedDataParallel and DataParallel is: DistributedDataParallel uses multiprocessing where a process is created for each GPU, while DataParallel uses multithreading. By using multiprocessing, each GPU has its dedicated process, this avoids the performance overhead caused by GIL of Python interpreter.

在之后的文章里,会进一步详细讲讲 DataParallelDistributedDataParallel,以及它们之间的异同。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
并行计算导论》是由雷向东教授撰写的一本介绍并行计算的入门教材。本书主要分为六个部分:并行计算概述并行计算理论、并行计算体系结构、并行计算技术、并行计算应用以及并行计算的未来发展。 在概述部分,作者通过举例引出并行计算的基本概念,包括串行计算和并行计算的区别以及并行计算的发展历程。他指出,由于串行计算无法满足大规模计算的需求,因此并行计算成为重要的解决方案。 在并行计算理论部分,作者介绍了并行计算的基本理论,包括并行计算的计算模型、调度问题、通信问题等。作者还展示了一些经典的并行计算理论模型,如多处理机模型、消息传递模型等。 在并行计算体系结构部分,作者详细介绍了各种并行计算体系结构,如共享内存结构、分布式内存结构等。他分析了这些体系结构的特点和应用场景,并展示了一些并行计算体系结构的实际应用。 在并行计算技术部分,作者介绍了一些常用的并行计算技术,如并行算法、并行编程模型等。他通过具体的案例分析了这些技术的实际应用,帮助读者理解并行计算的算法和编程思想。 在并行计算应用部分,作者列举了一些并行计算的典型应用领域,如科学计算、数据挖掘等。他深入分析了这些应用领域的需求和挑战,并介绍了一些成功的案例,激发读者对并行计算应用的兴趣。 在最后一部分中,作者展望了并行计算的未来发展。他指出,并行计算在人工智能、大数据等领域的重要性将越来越突出,提出了一些未来研究方向和挑战,鼓励读者积极参与并行计算的研究与实践。 总的来说,《并行计算导论》全面介绍了并行计算的基本概念、理论模型、体系结构、技术和应用。它适合作为大学本科生、研究生以及相关专业人员的入门教材,对于理解并行计算的原理和应用具有较高的参考价值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值