【机器学习】并行计算(parallel computation)Part1

        为什么我们在机器学习中需要用到并行计算呢,因为现在最流行的机器学习算法都是神经网络,神经网络模型的计算量、参数量都很大,比如ResNet-50参数量为25M。而我们在训练的时候使用的数据集也很大,比如ImageNet数据集含有14M张图片。用大数据来训练大模型会产生很大的计算成本,比如用一个NVIDIA M40 GPU在ImageNet数据集上训练ResNet-50需要耗费14天的时间,如果我们采用的是并行计算,便可以使用多个GPU进行计算加快钟表时间(wall-clock time),但并不会计算总GPU时间,因为总计算量并没有减少。

Parallel Gradient Descent 并行梯度下降

        线性回归(linear regression)的输入是一个向量x,输出是f(x)=W^{T}X,那我们如何确定W呢,就需要用到最小二乘法(Least squares regression):

W^{*}=\underset{W}{min}L(W)=\underset{W}{min}\sum_{i=1}^{n}\frac{1}{2}(w^{T}x_{i}-y_{i})^{2}

        在求最优解的时候,我们需要用到并行梯度下降法(Parallel Gradient Descent)。正常情况下,我们需要求出损失函数来,并计算它的梯度,然后利用学习率(步长stride)得到下一个梯度值。而并行梯度下降需要将梯度在不同处理器上进行计算,每块处理器只做了部分计算,相加之后就得到总梯度。

Communication 处理器之间的通信

        做并行梯度下降要对数据作划分,需要将参数w和梯度g进行传递。因为要使用多个处理器,所以要考虑处理器之间的通信问题。有两种通信方式,一种是Share memory,另一种是Message passing。在Share memory中,一个处理器可以看到其他处理器得到的结果 ,但是共享内存的通信没有办法做到大规模的并行。

        而Message passing有多个节点,每个节点都有多个处理器,每个节点内的处理器共享内存,但是节点1看不到节点2的内存。节点之间通信需要用到message passing,比如用到TCP、IP协议将共享文档打包为package。

        那我们如何进行节点之间的协调呢,有两种方法—— Client-Server架构和Peer-to-Peer架构。Client-Server架构,把一个节点作为Server用来协调其他的节点,把其他的节点都作为Worker,用来做计算。

        Peer-to-Peer架构,这种架构没有Server,所有节点都被拿来计算。每个节点都有几个邻居,邻居之间可以进行通信。

Synchronous Parallel Gradient Descent Using MapReduce 用MapReduce实现同步并行梯度下降

        MapReduce是由Google开发的一个软件系统,用来做大规模的数据分析和机器学习。有系统设计,但无开源代码,后来大家把这种分布式的变成模型都叫做MapReduce。它的架构采用的是Client-Server,通信方式是Message-passing,并行是同步的bulk synchronous parallel,每一轮需要等到所有的worker全都完成工作,才能进行下一轮。

        Apache Hadoop是MapReduce的开源实现,Apache Spark是MapReduce更好的开源实现,相比之前的将所有内容写入内存而非磁盘,有很好的容错机制,速度快很多。MapReduce编程模型很适合用来做大数据处理,但做机器学习并不是很高效。

        MapReduce的架构Server和Worker之间可以进行通信,Server可以将信息广播到Worker节点上,这叫做Broadcast。比如作平行梯度下降的时候,Server需要将模型参数广播出去,每个Worker节点都可以做计算。

        如果我们要实现算法,需要自己定义一个函数,然后所有的Worker都会运行这个函数,这一步叫做Map,Map操作是由所有Worker并行做的。做并行梯度下降的时候,每一个Worker都用自己的数据做部分计算。 

        Reduce操作也需要进行通信,Worker会把他们的计算结果传回Server,然后Server将结果进行整合(sum,collect,mean等)。

           用MapReduce作并行梯度下降,数据并发(Data parallelism)意思是数据划分到Worker节点上,每个Worker都有部分数据样本,这个例子中,我们采用了m个节点,每个节点上存了3个数据样本。

        用MapReduce实现并行梯度下降会有以下几个步骤:

  • BroadCast:Server首先将最新的参数w_{t} 广播到所有Worker节点上
  • Map:Worker作本地操作,将 (x_{i},y_{i},w_{t}) 映射为 g_{i} = (w_{i}^{T}x_{i}-y_{i})x_{i},然后得到n个向量g_{1},g_{2},....,g_{n}
  • Reduce:计算最终的梯度 g=\sum_{i=1}^{n}g_{i}。每个Worker计算存在本地内存中的所有 {g_{i}}得到一个向量,然后Server将m个向量进行求和。
  • Server更新参数:w_{t+1}=w_{t}-\alpha g

        每个Worker只存储 \frac{1}{m} 的数据,只进行 \frac{1}{m} 的运算。因此,运行时间在理论上就会减少到 \frac{1}{m},但是并行计算还有通信(communication)和同步(synchronization)的代价。如果将通信和同步时间算上,肯定不是 \frac{1}{m}。在做并行计算的时候,通常考虑speedup ratio,调整节点数量得到图像,理想情况下不考虑通信和同步代价的话m个节点的时钟时间与1个节点的时钟时间成正比。

        通信代价由两部分组成,通信复杂度(Communication complexity)和 时延(Latency)。通信复杂度指的是多少个words或者是bits在Server和Worker之间传输,它与模型参数量成正比,并且会随着Worker节点数增多而增长。时延指的是数据包从一个节点发送到另一个节点所花费的时间,这是由计算网络决定的。总通信时间可以表示为 \frac{complexity}{bandwidth}+lantency

        而同步(Bulk Synchronous)代价是指的如果m个节点在做计算(Map),其中有一个节点计算很慢,那么其他节点则需要等待这一个节点完成计算;比如正常情况下节点的任务量应该是差不太多的,但是如果一个节点挂掉了则需要进行重启,这个节点就会比其他正常的节点慢很多,这个节点也被称为straggler,而随着节点数量的增多,出现straggler的可能性也会增大。Straggler effect指的是所有的Worker需要等最慢的Worker,时钟时间是取决于最慢的Worker,这是由同步问题产生的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/446930.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FileInputStream类

目录 1.案例代码: 2.注意细节 3.FileInputStream循环读取 1.案例代码: 准备的txt文件 结果: 如果需要输出原本的字母,强制转换为char即可: 结果: 2.注意细节 (1)如果文件不存在…

Qt和c++面试集合

目录 Qt面试 什么是信号(Signal)和槽(Slot)? 什么是Meta-Object系统? 什么是Qt的MVC模式? 1. QT中connect函数的第五个参数是什么?有什么作用? 3. 在QT中&#xff…

【NestJS入门到精通】装饰器

目录 方法装饰器通过prototype添加属性、方法 属性装饰器拓展 方法装饰器参数装饰器 方法装饰器 ClassDecorator 定义了一个类装饰器 a,并将其应用于类 A。装饰器 a 会在类 A 被定义时执行。 const a:ClassDecorator (target:any)>{console.log(target,targe…

概率 多维随机变量与分布

一、二维 1、二维随机变量及其分布 假设E是随机试验,Ω是样本空间,X、Y是Ω的两个变量;(X,Y)就叫做二维随机变量或二维随机向量。X、Y来自同一个样本空间。 联合分布函数 F(x,y)P(X≤x,Y≤y),即F(x,y)表示求(x,y)左下方的面积。 …

Struct Streaming

spark进行实时数据流计算时有两个工具 Spark Streaming:编写rdd代码处理数据流,可以解决非结构化的流式数据 Structured Streaming:编写df代码处理数据流,可以解决结构化和半结构化的流式数据 实时计算 实时计算,通常也称为“实时流计算”、“流式计算” 流数据处…

Unity3d使用JsonUtility.FromJson读取json文件

使用JsonUtility.FromJson方法不需要额外引用第三方库。该方法只能读取json对象,而不能读取json数组。 假如我们有如下的json数组: [ {"id":1, "name":"first2021", "level":5, "score":100, "…

vue3 对 vue2 有什么优势

1、diff算法的优化--静态标记(PatchFlag) vue2中的虚拟dom是全量的对比(每个节点不论写死的还是动态的都会一层一层比较,这就浪费了大部分事件在对比静态节点上) vue3编译模板时,动态节点做标记 标记分为不…

仿函数(函数对象)

0.含义 仿函数和函数对象在C中含义一致。官方解释是: ()就是函数调用运算符,也就是说一个类重载了小括号,它实例化的对象就可以像函数一样使用。 “仿”函数,意味着它和函数使用有相同点: …

盘点双十一四款不错的品牌好物!2024学生党高颜值平价好物推荐!

在双十一这个购物狂欢节,不少学生党都希望以最实惠的价格买到心仪的商品。今天,我们就来盘点四款双十一期间值得入手的高颜值平价好物,让同学们在享受优惠的同时,也能拥有品质生活! 品牌好物一、希亦CG超声波清洗机 双…

数据中心物理安全的历史和演变

在当今的数字时代,数据中心托管已成为我们互联世界的支柱。这些设施在存储、管理和处理我们日常生活所需的大量信息方面发挥着至关重要的作用。从社交媒体平台和电子商务网站到流媒体服务和云计算,数据中心为我们依赖的数字服务提供支持。 随着企业越来…

Swarm 框架登场:OpenAI 第 3 阶段「敲门砖」;马斯克的 Teslabot 实际有人远程操控丨 RTE 开发者日报

开发者朋友们大家好: 这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文…

音视频开发:FFmpeg库的使用

文章目录 一、FFmpeg的介绍二、FFmpeg的安装三、FFmpeg的使用1.ffplay:播放音视频2.ffprobe:查看视频信息3.ffmpeg:处理视频(1)格式转换(2)帮助 四、参考资料 一、FFmpeg的介绍 FFmpeg 是使用广泛的多媒体框架,是一个强大的音视频…

element el-tree 自定义图标

除了自定义以外,下方代码还包含 tree自动展开 点击节点后节点聚焦 节点的click事件 节点查询 <template><el-inputplaceholder"请输入要查询的节点"v-model"filterText"clearable></el-input><el-treehighlight-currentclass&quo…

Flink05 Windows 操作轻松应对复杂的场景

Flink Windows 操作 上篇文章介绍了Flink 几种类型 Windows 本文介绍窗口操作相关API&#xff0c;以及各自使用场景 。 本期Flink Windows 相关操作apply/union/join/collect/CoMap/CoFlatMap Windows apply 通过实现WindowFunction或AllWindowFunction接口来完成的&#x…

考研C语言程序设计_编程题相关(持续更新)

目录 零、说明一、程序设计经典编程题(C语言实现)T1 求1~100的奇数T2 求n!T3 求1!2!3!...10!T4 在一个有序数组中查找具体的某个数字n(二分查找)T5 编写代码&#xff0c;演示多个字符从两端移动&#xff0c;向中间汇聚T6 模拟用户登录(三次机会)T7 输入三个数 并从大到小输出T8…

大一计算机课程之线性代数

《大一计算机课程之线性代数》 在大一的计算机课程中&#xff0c;线性代数是一门极为重要的基础学科&#xff0c;它就像一把神奇的钥匙&#xff0c;为计算机科学领域的诸多方面开启了智慧之门。 线性代数主要研究线性方程组、向量空间、线性变换等内容。对于计算机专业的学生…

【星汇极客】STM32 HAL库各种模块开发之DHT11模块

前言 本人是一名嵌入式学习者&#xff0c;在大学期间也参加了不少的竞赛并获奖&#xff0c;包括&#xff1a;江苏省电子设计竞赛省一、睿抗机器人国二、中国高校智能机器人国二、嵌入式设计竞赛国三、光电设计竞赛国三、节能减排竞赛国三等。 暑假的时候参加了太多的比赛&#…

从加载到对话:使用 Transformers 本地运行量化 LLM 大模型(GPTQ AWQ)

&#xff08;无需显卡&#xff09;使用 Transformers 在本地加载具有 70 亿参数的 LLM 大语言模型&#xff0c;通过这篇文章你将学会用代码创建属于自己的 GPT。 LLM 的加载、微调和应用涉及多个方面&#xff0c;今天我们先聚焦于加载&#xff0c;本文的难点仅在于正确安装和知…

护理陪护系统|护理陪护小程序|护理陪护软件定制

护理陪护系统是针对需要长期照护的患者和老年人开发的一套系统&#xff0c;旨在帮助用户更加方便地获取医疗、护理等服务。用户端功能是系统的重要组成部分&#xff0c;通过用户端功能的设计和开发&#xff0c;可以让用户更加方便快捷地使用系统。首先&#xff0c;用户端功能应…

中兴通讯举办AI“兴”视野沙龙:求真务实 推动AI健康、向善、普惠发展

近日&#xff0c;由中兴通讯主办的“AI‘兴’视野沙龙”在北京举行&#xff0c;中兴通讯首席发展官崔丽与多名业界大咖聚焦人工智能技术发展的前世今生、最新进展、应用趋势、产业融合新路径等热点话题展开深入交流。 数智经济大势所趋 机遇与挑战并存 崔丽谈到&#xff0c;当…