分布式并行计算:概述

顾名思义,分布式并行计算就是在单台机器多个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、付费专栏及课程。

余额充值