顾名思义,分布式并行计算就是在单台机器多个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,以及它们之间的异同。

分布式并行计算:概述相关推荐

  1. #研发解决方案#分布式并行计算调度和管理系统Summoner

    郑昀 创建于2015/11/10 最后更新于2015/11/12 关键词:佣金计算.定时任务.数据抽取.数据清洗.数据计算.Java.Redis.MySQL.Zookeeper.azkaban2.oo ...

  2. 深度神经网络的分布式训练概述:常用方法和技巧全面总结

    论文地址:https://arxiv.org/abs/1810.11787 深度学习已经为人工智能领域带来了巨大的发展进步.但是,必须说明训练深度学习模型需要显著大量的计算.在一台具有一个现代 GPU ...

  3. python并行计算numpy_【Nature文章摘录】NumPy: 从单机到分布式并行计算

    原标题:[Nature文章摘录]NumPy: 从单机到分布式并行计算 点击上图,查看详情 本公众号的推送以互联网大数据技术为主,是<互联网大数据处理技术与应用><Python爬虫大数 ...

  4. Actor 分布式并行计算模型: The Actor Model for Concurrent Computation

    分布式计算技术之Actor计算模式 The Actor Model for Concurrent Computation 背景介绍 计算机CPU的计算速度提高(频率的提高)是有限度的,我们能做的是放入 ...

  5. 分布式事务概述 (资料)

    2019独角兽企业重金招聘Python工程师标准>>> 什么是分布式系统 分布式系统是由一组通过网络进行通信.为了完成共同的任务而协调工作的计算机节点组成的系统.分布式系统的出现是为 ...

  6. python dask_《使用Python和Dask实现分布式并行计算》2. Introducing Dask(介绍Dask)

    楔子 现在相信你已经对DAG的工作原理有了基本的理解,那么下面来看看Dask如何使用DAG来创建健壮的.可扩展的workload(控制器). 下面我们要完成两件事:使用Dask的DataFrame A ...

  7. 分布式并行计算MapReduce

    作业要求来源:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3319 1.用自己的话阐明Hadoop平台上HDFS和MapReduce ...

  8. 史上最全分布式数据库概述

    墨墨导读:在集中式数据库系统不能完全符合实际需要的形势下,集中式DB的"集中计算"概念向"分布计算"概念发展.分布计算主要体现在客户机/服务器模式的分布式数据库 ...

  9. hadoop基础----hadoop理论(四)-----hadoop分布式并行计算模型MapReduce详解

    我们在前一章已经学习了HDFS: hadoop基础----hadoop理论(三)-----hadoop分布式文件系统HDFS详解 我们已经知道Hadoop=HDFS(文件系统,数据存储技术相关)+ M ...

最新文章

  1. javascript删除,添加元素
  2. 对比MySQL表数据内容方式汇总
  3. unity3d优化IOS
  4. Android被逼学习例子2
  5. 浅谈mysql数据库引擎
  6. linux中如何在文件中查找文件,linux下find(文件查找)命令的用法总结
  7. java中asl_带你认识绕不开的ASLR
  8. Python中的一些小语法
  9. 1.5 编程基础之循环控制 09 奇数求和
  10. 在家办公怎么弄?华为云DevCloud宝典一看就懂——项目管理篇
  11. windows下通过adb shell进入data目录
  12. 理解location对象
  13. vue 中使用axios的总结
  14. python程序设计基础教程答案山东联盟答案_知到Python程序设计基础(山东联盟)测试答案-查询...
  15. 解决electron打包的程序报错 A JavaScript error occurred in the main问题
  16. J-link 固件版本问题
  17. 中国人民大学信息学院夏令营经验贴
  18. 海豚浏览器显示连接服务器失败,海豚浏览器常见问题解答
  19. 写了一个svg七巧板拼图的小东西
  20. Amazon电商黑科技, 看黑五能否干过双十一?

热门文章

  1. Python | 人脸识别系统 — 活体检测
  2. Linux下C语言串口应用编程
  3. 字节跳动智力题-分金块问题
  4. cocos Uncaught Download text failed 错误解决
  5. BT1004低电压升压IC
  6. 安防集成商的出路在哪里?
  7. 如何下载 International Conference on Machine Learning(ICML)顶会的论文?从哪找ICML顶会论文?如何判断会议和期刊级别?
  8. 介绍一下ROS常用的命令<rosnode和rostopic实操>(一)
  9. DIY M328晶体管测试仪 挖坑 填坑
  10. IC卡是什么意思?ID卡区别是?