pytorch的并行分为模型并行、数据并行

左侧模型并行:是网络太大,一张卡存不了,那么拆分,然后进行模型并行训练。

右侧数据并行:多个显卡同时采用数据训练网络的副本。

一、模型并行

二、数据并行

数据并行的操作要求我们将数据划5分成多份,然后发送给多个 GPU 进行并行的计算。

注意:多卡训练要考虑通信开销的,是个trade off的过程,不见得四块卡一定比两块卡快多少,可能是训练到四块卡的时候通信开销已经占了大头

下面是一个简单的示例。要实现数据并行,第一个方法是采用 nn.parallel中的几个函数,分别实现的功能如下所示:

复制(Replicate):将模型拷贝到多个 GPU 上;

分发(Scatter):将输入数据根据其第一个维度(通常就是 batch 大小)划分多份,并传送到多个 GPU 上;

收集(Gather):从多个 GPU 上传送回来的数据,再次连接回一起;

并行的应用(parallel_apply):将第三步得到的分布式的输入数据应用到第一步中拷贝的多个模型上。

实现代码如下

#Replicate module to devices in device_ids

replicas =nn.parallel.replicate(module, device_ids)#Distribute input to devices in device_ids

inputs =nn.parallel.scatter(input, device_ids)#Apply the models to corresponding inputs

outputs =nn.parallel.parallel_apply(replicas, inputs)#Gather result from all devices to output_device

result = nn.parallel.gather(outputs, output_device)

6.事实上PyTorch也提供了简单的函数,只用几行代码可实现简单高效的并行GPU计算。

①nn.parallel.data_parallel(module, inputs, device_ids=None, output_device=None, dim=0, module_kwargs=None)

②class torch.nn.DataParallel(module, device_ids=None, output_device=None, dim=0)

可见二者的参数十分相似,通过device_ids参数可以指定在哪些GPU上进行优化,output_device指定输出到哪个GPU上。唯一的不同就在于前者直接利用多GPU并行计算得出结果,而后者则返回一个新的module,能够自动在多GPU上进行并行加速。

#method 1

new_net= nn.DataParallel(net, device_ids=[0, 1])

output=new_net(input)#method 2

output= nn.parallel.data_parallel(new_net, input, device_ids=[0, 1])

数据并行torch.nn.DataParallel

PyTorch 中实现数据并行的操作可以通过使用 torch.nn.DataParallel。

一、DataParallel的并行处理机制

DataParallel,是将输入一个 batch 的数据均分成多份,分别送到对应的 GPU 进行计算,各 个 GPU 得到的梯度累加。与 Module 相关的所有数据也都会以浅复制的方式复制多份。每个 GPU 将针对各自的输入数据独立进行 forward 计算,在 backward 时,每个卡上的梯度会汇总到原始的 module 上,再用反向传播更新单个 GPU 上的模型参数,再将更新后的模型参数复制到剩余指定的 GPU 中,以此来实现并行。

DataParallel会将定义的网络模型参数默认放在GPU 0上,所以dataparallel实质是可以看做把训练参数从GPU拷贝到其他的GPU同时训练,这样会导致内存和GPU使用率出现很严重的负载不均衡现象,即GPU 0的使用内存和使用率会大大超出其他显卡的使用内存,因为在这里GPU0作为master来进行梯度的汇总和模型的更新,再将计算任务下发给其他GPU,所以他的内存和使用率会比其他的高。

(图

pytorch 命令行运行_Pytorch使用分布式训练,单机多卡相关推荐

  1. pytorch 命令行运行_PyTorch简介与相关安装

    PyTorch简介 PyTorch的前身是Torch,Torch是一个有大量机器学习算法支持的科学计算框架,灵活度很高,是一个与NumPy类似的张量(Tensor)操作库.但是Torch采用的是小众的 ...

  2. [分布式训练] 单机多卡的正确打开方式:PyTorch

    [分布式训练] 单机多卡的正确打开方式:PyTorch 转自:https://fyubang.com/2019/07/23/distributed-training3/ PyTorch的数据并行相对于 ...

  3. [分布式训练] 单机多卡的正确打开方式:Horovod

    [分布式训练] 单机多卡的正确打开方式:Horovod 转自:https://fyubang.com/2019/07/26/distributed-training4/ 讲完了单机多卡的分布式训练的理 ...

  4. [分布式训练] 单机多卡的正确打开方式:理论基础

    [分布式训练] 单机多卡的正确打开方式:理论基础 转自:https://fyubang.com/2019/07/08/distributed-training/ 瓦砾由于最近bert-large用的比 ...

  5. pytorch GPU分布式训练 单机单卡、单机多卡

    可以用"watch -n 0.1 nvidia-smi"来查看gpu状态,我用的是3块12G的GPU进行实验 本实验将使用一个简单的瞎写的网络进行,网络训练一个分类任务,当然这个不 ...

  6. jmeter命令行运行-分布式测试

    秒秒开心 jmeter命令行运行-分布式测试 上一篇文章我们说到了jmeter命令行运行但是是单节点下的, jmeter底层用java开发,耗内存.cpu,如果项目要求大并发去压测服务端的话,jmet ...

  7. Selenium IDE使用指南二(命令行运行器)

    现在,您可以在任何浏览器上,并行和在Grid上运行所有Selenium IDE测试,而无需编写任何代码. 只需安装Selenium IDE命令行运行程序,获取必要的浏览器驱动程序(如果在本地运行测试) ...

  8. 命令行运行JMeter详解

    1.为什么要命令行执行脚本? 本文介绍如何从命令行运行JMeter,那么宏哥先来说说,为什么要命令行执行脚本,日常测试过程中发现,在大数量并发时,jmeterGUI界面时长宕机.卡死,在这种情况下我们 ...

  9. Jmeter命令行运行实例讲解

    一. 简介 1.1.应用场景 1.无需交互界面或受环境限制(linux text model) 2.远程或分布式执行 3.持续集成,通过shell脚本或批处理命令均可执行,生成的测试结果可被报表生成模 ...

最新文章

  1. Python Tesseract 图片识别-小操练
  2. LINQ To DataSet 几个常用示例
  3. modelsim读取文件中的数据_modelsim中的文件操作—— 大数据测试
  4. 66319d电源使用说明书_海尔洗衣机怎么用 海尔洗衣机使用说明【详细介绍】
  5. 用ABAP 生成二维码 QR Code
  6. 简单的C语言程序合集
  7. XSS挑战之旅平台通关练习(1-20)
  8. mysql5.7的客户端软件_mysql数据库管理客户端工具|mysql数据库管理软件 v5.7.22 64位官方版 - 软件下载 - 绿茶软件园|33LC.com...
  9. linux 环境变量和shell变量
  10. 让一个软件系统同时支持多个多种数据库灵活配置,让客户可以任意配置各个核心数据库部分...
  11. python使用什么关键字声明匿名函数_Python通过关键字____创造匿名函数。
  12. 堆栈宽度学习Stacked BLS的简单python代码实现
  13. 计算机组装需要注意什么东西,电脑DIY:电脑组装时应该注意的几个细节以及方法...
  14. cpplint中filter参数的每个可选项的含义
  15. 跑动大数据的笔记本配置_大数据专业用什么样的笔记本合适?
  16. 2021广东高考成绩位次排名查询,广东高考排名对应大学-广东高考位次查询(2021年文科参考)...
  17. 打游戏计算机内存不足,玩游戏内存不足? 教你轻松几步升级电脑内存
  18. 淘宝API接口,获取数据
  19. centos 6.5 编译安装了 Nginx1.6.0+MySQL5.6.19+PHP5.5.14
  20. 在已有项目中集成mars3d注意事项(vue3和vue2技术栈下)

热门文章

  1. linux测试主机的连通性,shell脚本测试某网段内主机连通性
  2. 用友NC任意文件读取
  3. 如何与职场“老油条”和谐的相处
  4. AI黑科技又来了,三个以假乱真的配音工具
  5. C#:实现24点游戏算法(附完整源码)
  6. STM32驱动OV7670(无FIFO)相关问题的解决
  7. Java 8 的一些新特性
  8. 硬币翻转问题(一个比较简单的题)
  9. Eclipse启动运行项目Debug弹窗:This kind of launch is configured to openthe debug perspective when it解决办法
  10. Android开发技巧!Android面试知识点总结宝典助你通关!终局之战