数据 并行

article/2025/9/13 16:40:49

first

含义是计算机内包含一组处理单元(PE),每一个处理单元存储一个(或多个)数据元素。当机器执行顺序程序时,可对应于全部或部分的内部处理单元所存的数据同时操作。
将并行处理技术引入信息检索领域
把数据划分成若干块分别映像到不同的处理机上,每一台处理机运行同样的处理程序对所分派的数据进行处理。
数据级并行依赖于并行处理机,它属于SIMD系统内的并行。
特点是重复设置许多个同样的处理单元

在这里插入图片描述
在这种并行模式中,被划分的是数据,所以这种并行方式叫数据并行。

数据并行的实例运用(PyTorch)

有两种主要方法
使用mscorlib.dll 下的System.Threading.Parallel 类
使用 System.Core.dll下的 System.Linq.ParallelEnumerable 类
.NET 4.0
from 数据并行(Data Parallelism)

深度学习中

任务切分

数据并行的模型训练中,训练任务被切分到多个进程(设备)上,每个进程维护相同的模型参数和相同的计算任务,但是处理不同的数据(batch data)。
数据并行可通过增加并行训练设备来提高训练吞吐量

输入数据切分整个训练数据集:

  1. 根据并行进程数划分,每个进程只读取自身切分的数据
  2. 读取仅由具体某个进程负责, 根据并行进程数划分,再将不同数据块发送到对应进程上

  1. 划分 -> 读取
  2. 读取(rank0) -> 划分 -> 发送

1相对2不需要进行数据通信,训练效率更高
飞桨框架中默认为1

参数同步

之后让模型参数同步
梯度更新过程
每个进程处理不同的数据会得到不同的Loss
由Loss计算反向梯度并更新模型参数后,要保证进程间模型参数正确同步
初始相同的实现方法:

  1. 相同的随机种子+相同的顺序 初始化所有参数
  2. 具体进程初始化全部模型参数 + 广播

前/反向计算

每个进程根据自身得到的输入数据独立前向计算

每个进程根据自身的前向计算独立进行反向计算
反向中会计算出不同的梯度,
所以更新前对所有进程上的梯度进行同步
使用相同的全局梯度
(可通过Allreduce sum同步通信操作实现的

Allreduce sum操作后每个进程上得到的梯度是相同的,这时候的梯度值等于所有进程上梯度对应位置相加的和,然后每个进程用Allreduce后的梯度和除以数据并行中的进程数,这样得到的梯度是同步之前所有进程上梯度的平均值。

参数更新
得到相同全局梯度,后独立地完成参数更新

注意问题

使用Allreduce同步通信操作来实现所有进程间梯度同步,要求数据在各进程间的切分要做到尽量均匀

  1. 要求所有进程每个训练step 输入的local batch size 大小相同。
  2. 要保证所有进程上分配到相同的batch 数量。

优化

优化技巧

通信融合
通过减少通信频率来实现减少总的通信消耗
通信融合是,通过将N个梯度的Allreduce 通信合并成一次Allreduce 通信,可以减少N-1 次通信延迟时间。

通信前将多个梯度tensors 拼接成一个内存地址连续的大tensor,梯度同步时仅对拼接后的大tensor 做一次Allreduce 操作。
参数更新时将大tensor切分还原回之前的多个小tensors, 完成每个梯度对应参数的更新。

在这里插入图片描述通信计算重叠
通信和计算可以并行,让两者的耗时相互重叠掩盖,减少反向的耗时。调度到不同的流(stream)上实现的.

ps. more LARS 和 LAMB 等 layer-wise-lr-adaptive 优化算法。

pytorch数据并行

PyTorch数据并行

单gpu

os.environ["CUDA_VISIBLE_DEVICES"] = "0"

多gpu,DataParallel使用

#device_ids = [0,1,2,3]
os.environ['CUDA_VISIBLE_DEVICES'] == '0,5'
或者
CUDA_VISIBLE_DEVICES=1,2,3 python

more

.cuda()函数
返回一个存储在CUDA内存中的复制,其中device可以指定cuda设备。
ps.
os.environ[“CUDA_VISIBLE_DEVICES”]的使用

程序开头多加一条语句 os.environ[“CUDA_VISIBLE_DEVICES”] = “1,2”,作用是只允许gpu1和gpu2可用
Model = nn.DataParallel(Model, device_ids=[0,1]),作用是从可用的两个gpu中搜索第0和第1个位置的gpu

资料:

数据并行:提升训练吞吐的高效方法|深度学习分布式训练专题

pytorch(分布式)数据并行个人实践总结——DataParallel/DistributedDataParallel


http://chatgpt.dhexx.cn/article/Ac5KOaSx.shtml

相关文章

并行的常见问题和注意事项

关于Oracle中的并行,可以说是一把双刃剑,用得好,可以充分利用系统资源,提升数据库的处理能力,用得不好,可能会适得其反。 并行的基本使用方法,对于大部分SQL开发者和DBA来说,并行的一…

并发和串行、并行的概念

先抛开语言不管,只聊概念,说起并发,就很容易想到它和串行、并行的区别。 串行:一次只能取得一个任务并执行这个任务,这个任务执行完后面的任务才能继续; 并发:指的是在同一个时间段内&#xf…

牛腩新闻发布--过程或函数 'news_selectByCaId' 需要参数 '@caid',但未提供该参数(二)

发现问题 之前有一篇博客是因为存储过程中没有添加相应的函数,导致出现了“过程或函数 ‘news_selectByCaId’ 需要参数 ‘caid’,但未提供该参数”,这次继续出现了这样一个问题,但是出现的错误就不再过程函数中了,而…

牛腩新闻发布--过程或函数 'news_selectByCaId' 需要参数 '@caid',但未提供该参数(三)

发现问题 这篇博客是建立在“牛腩新闻发布–过程或函数 ‘news_selectByCaId’ 需要参数 ‘caid’,但未提供该参数(二)”,因为在那篇博客中说出了我当时遇到的“过程或函数 ‘news_selectByCaId’ 需要参数 ‘caid’,…

【牛腩】-'T_news_selectByCaId' 需要参数 '@caid',但未提供该参数。”

问题截图 解决方案: 改动存储过程 BEGINselect n.id,n.title,n.createTime,c.[name],n.caId from T_news ninner join T_category c on n.caIdc.id and n.caIdcaidorder by n.createTime desc END检查传参是或否正确如果以上都没有错误,那就看一下是否…

【重要补充】关于第三方潜在SDK导致的5.1.2Data use sharing

接上一篇《关于IDFA、CAID和「5. 1.2 - Data use & sharing」》后,我们发现,苹果在14.5出来前,对于IDFA替代方案之数据收集的审核打击力度越来越大。 因5.1.2条款被拒,目前可以确认的原因有以下两大: 一、如果你…

spring笔记⑬——spring事务

事务的四个特征 CAID是事务的四个特征,所有事务都必须满足以下特性。 原子性(Atomicity):一个事务要么全部执行,要么不执行一致性(Consistency):事务的运行并不改变数据库中数据的一致性隔离性&#xff0…

SQL查询语句(内联,as,in,通配符)

最近在学习牛腩新闻发布系统,正如牛老师所说,作为一个优秀的.NET开发人员,对SQL语句不熟怎么能行呢,接下来就总结下牛老师写的存储过程中SQL语句,挺经典,举一反三 首先先展示出来适用于系统的三张表 新闻类…

【微信小程序 | 实战开发】配置微信小程序APPID并快速接入

写在前面: 你是否想要掌握人工智能的最新技术和应用?你是否想要成为未来社会的创新者和领导者?你是否想要和全球的优秀导师和同学一起学习和交流?如果你的答案是肯定的,那么欢迎来到床长人工智能教程网站,这里是你实现梦想的起点! 个人名片: 🐼作者简介:一名大一在校…

获取苹果收集设备ID的方法

目录 问题 解决 问题 如果我们想要通过工具获取苹果手机 iPhone 或者 iPad 的设备 ID,也就是 UDID。这个时候,很多人可能会问 UDID 是什么,UDID 是 iOS 设备的一个唯一识别码,每台 iOS 设备都有一个独一无二的编码,…

浅谈大数据广告下个人隐私保护,开发者视角的广告原理

本文已收录于 Github CodeClass 和 Gitee CodeClass 致力于打造高质量编程学习课堂,内含百篇原创技术文章,千本计算机开源电子书,谷歌、阿里大神开源 LeetCode 题解,各类编程学习资源,欢迎 star ,一起学习&…

简单理解MySQL的存储引擎

1、什么是存储引擎? 在说明存储引擎之前,首先你需要简单了解MqSQL的整体架构。 从上图可知,存储引擎位于整体架构的最底层。 存储引擎真正负责了MySQL中数据的存储和提取。 可以这样理解: 其实我们平时写的各种SQL语句相当于指…

iOS隐私新规如何破局?盗版SKAdnetwork可行吗?

背景:   在2020年的开发者大会上,苹果宣布iOS14设备将会在App首次打开时主动弹窗请求是否选择允许广告追踪,即被获取设备的IDFA。这也就意味着新系统需要用户手动选择允许,而旧系统是手动选择关闭,这一关键改变无异…

牛腩新闻发布--过程或函数 'news_selectByCaId' 需要参数 '@caid',但未提供该参数(一)

发现问题 今天敲击牛腩,在敲击Web页面的List.aspx之后,点击Ctrl+F5运行,发现运行不了,首先是数据库中调取数据有问题,因为这个数据是用存储过程调取的,所以需要修改存储过程,这时候只需要改成如下代码就行: 将这个更改完之后就可以在数据库中调取到应需要的数据了,但是…

【牛腩】DELETE 语句与 REFERENCE 约束“FK_news_category“冲突。该冲突发生于数据库“newssystem“,表“dbo.news“, column ‘caId‘

【前言】 牛腩中删除类别的时候会提示受到主外键的约束,导致无法删除这个类别。 【问题描述】 DELETE 语句与 REFERENCE 约束"FK_news_category"冲突。该冲突发生于数据库"newssystem",表"dbo.news", column ‘caId’。…

【牛腩】过程或函数 ‘news_selectByCaId‘ 需要参数 ‘@caid‘,但未提供该参数

【前言】 在运行牛腩的时候会有提示过程或者函数缺少参数。这个是因为存储过程中写的缺少参数,添加相应的参数就可以了。 【问题描述】 过程或函数 ‘news_selectByCaId’ 需要参数 ‘caid’,但未提供该参数 过程或函数 ‘news_selectByContent’ 需要…

关于IDFA、CAID和「5. 1.2 - Data use sharing」

今天,2021年3月18日,突然收到了之前从未遇到过的拒审邮件,邮件原文如下: 发件人 Apple 5. 1.2 - Data use & sharing Please review this information carefully as it impacts your app’s availability on the App Store a…

中国广告协会的CAID方案

前些时间看到一个消息,腾讯、百度和字节跳动测试工具绕开苹果的ATT(AppTrackingTransparency,简称 ATT,旨在保护用户隐私的应用追踪透明度框架),估计这个应该是在测试CAID。 过一两天又出现一个消息&#x…

微信H5链接包装

最近看到好多人问一个问题,就是在微信中发游戏链接给好友,让链接显示成一个抖音的样式,如下: 这种链接包装,做起来说难不难,说简单也不简单。网上很多服务商都可以做,不过靠谱程度就参差不齐了…

微信内 H5 页面自定义分享

起源: 最近公司在做一个活动的h5页面,在微信内打开时需要进行微信授权,然后后端会重定向到这个页面并且携带了一些参数(openid等)。问题是点击微信的原生分享时,会把携带的这些参数一起分享出去&#xff0…