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. OSPF协议介绍及配置 (下)
  2. ASP.NET学习笔记
  3. 阿里云部署Docker(5)----管理和公布您的镜像
  4. 循环获取另一个php变量,通过引用将多个变量传递给foreach循环(php)
  5. Android系统 (150)---Android 开发者工具
  6. c++访问私有(private)成员变量的常用方法
  7. 设计模式之责任链模式(Java实现)
  8. 新买的电脑 Windows10/Windows11即将过期怎么办
  9. Stencil计算GPU性能建模
  10. 谈谈对CNN在NLP中可行性的理解
  11. MATLAB模拟布丰投针实验
  12. Android之MediaPlayer(两种)基本使用方式
  13. w7桌面计算机图标打不开了,桌面图标打不开,教您桌面图标打不开怎么办
  14. dom4j将word转pdf详细介绍(亲测可用)
  15. oracle 授予 sequence,Oracle中的角色和权限授予
  16. 【echarts 中国地图射线版本】vue实现中国地图航线动画效果,地图上添加散点效果【详细注释,通俗易懂】
  17. 实时获取用户所在城市(管理设备位置信息)
  18. c语言malloc作用,c语言中malloc是什么?怎么用?
  19. node.js css文件已经被加载但是无法渲染页面的问题和解决方法
  20. 10个SEO 写作的必读小技巧!包你读完写更好创作

热门文章

  1. ttl一会255一会64_什么ping ip地址返回的ttl值会自己变,一会是255,一会是64 使用ping命令 以前T...
  2. Android开发11年,分享一下我眼中程序员的三六九等,阿里Android岗面试百题
  3. 零基础小白如何学会Java?
  4. 黑提文案:卖黑提的水果文案,黑提水果发圈文案
  5. 成都敏之澳:拼多多做好标题首先认识词?
  6. MAB建模规范-Matlab建模规范
  7. 电脑文件夹无法重命名怎么办?
  8. linux当前内核版本是多少钱,Linux查看版本当前操作系统内核信息
  9. 2021到啦!“锦鲤揭晓”,送您一份专属的新年祝福...
  10. 使用javac编译Java项目