分布式并行策略

news2024/10/7 12:26:03

1.数据并行(DP)

将小批量分为n块,每个GPU拿到完整参数计算一块数据的梯度。(通常性能会更好)

       假如一个批量有128个样本,然后有2个GPU,那么每个GPU可以拿到64个样本。(每个GPU计算完这部分样本的梯度后,会将所i有的梯度加起来,就会完成小批量的梯度的计算。)

所有梯度相加其实是完整的梯度,模型本质只有一份,进行模型更新,每个gpu模型保存一致。

数据并行又包含:DDP、FSDP等。

2.模型并行(MP)

 将模型分成n块,每个GPU拿到一块模型计算他的前向和反向结果。

       例如:有一个100层的Resnet,有两个GPU,那么一个gpu拿50层,另外一个gpu拿另外50层。第0号gpu计算完成后,把结果给gpu1,gpu1接着在往下计算。算梯度时倒过计算。gpu0计算式gpu1可能会空着,gpu1计算式gpu0可能会空着性能难以优化。一般是用于单个gpu无法加载模型的情况。

从单机多卡拓展到分布式训练:

        ①数据存放的不同:数据可能放在一个分布式的文件系统上(而不是机器本地的硬盘上),所有的机器都可以去读取这个样本(分开存在不同的磁盘上)。收发参数,从一个网络跑到另一个网络。

        ②读取参数:通过网络读取。

        ③收发梯度:从一个gpu拷贝到另一个gpu。现在是通过网络从一台跑到另一台机器。

          ④性能方面的区别:

GPU机器架构:

(GPU与GPU之间通讯很快的,GPU到CPU之间通讯会降(5倍或10倍,通过PCIe通讯的),如果跨机器,通讯会降得更多。)尽量本地多通讯,实在不行可以取内存走一走,尽量避免多个机器通讯。

在做分布式时,尽量减少跨机器通讯。

        ⑤在做分布式训练时,怎么减少跨机器的通讯:

读入样本,假设有两台机器,每个机器有一张卡,一共有100个样本,则每台机器拿到50,每个卡拿到25(先复制到每个机器的内存,再复制到每个gpu的内存)。每个机器从参数服务器上拿到模型,模型是被复制到每个gpu上(每次从(假设有个server)server上拿到一个模型到主内存,之后在复制到gpu上),开始每个gpu计算自己的梯度,现在本地做all reduce(把每个gpu的梯度累加到主内存上),加完之后再把梯度发出去(梯度传回服务器)。

同步SGD:

所以就有当你的bs固定,lr固定,增加gpu的数量,是不会影响模型收敛的。

性能:

       如果计算时间>>通讯时间  那么主要就是计算时间,反之会导致gpu等待。增加样本数不会影响通讯时间,因为通讯时参数是批量发出去(增大b,t1会增大,t2不会)。一般t1比t2大20-30%左右。(但是增大b,训练有效性会降低,会导致收敛变慢,需要更多epoch达到需要精度;如果一个批量中有很多相似的冗余照片,每个样本计算出来的梯度都是相同的,对梯度贡献相同,所以最好小批量中数据多样性较大,bs大小取决于数据集的多样性和优化算法,一般不要超过10*类别数)。

性能的权衡:

做并行的建议:

  1. 使用一个大的数据集;
  2. 好的GPU-GPU和机器-机器带宽。好的主板,gpu和gpu之间的带宽、gpu和cpu之间的带宽很高;
  3. 高效的数据读取和预处理;
  4. 模型有较好的计算(FLOP)通讯(model size)比;
  5.           Inception>resnet>alexnet
  6. 使用足够大的批量大小获得好的系统性能;
  7. 使用高效的优化算法对应大批量大小。

模型并行又包含:张量并行(TP)和流水线并行(PP)。

3.通道并行(数据+模型并行)

当一个模型能够用单卡计算,通常使用数据并行拓展到多张卡。

模型并行则用于单张卡无法加载模型的情况。

分布式训练效果,时间并没有缩短有很多原因,有可能是data读起来比较慢、gpu增加但是batchsize没有增加(例如gpu从1变为2,但是batchsize仍然是256,原来一个gpu可以处理256个样本,现在换成2个GPU,每个只能处理128个样本,本来lr已经足够小,batchsize变小,计算性能会变低。)所以增加gpu,最好每个gpu仍然能拿到同样的batchsize,但是收敛可能会变慢,可以适当增加lr。

(损失函数抖动大的情况下,可以适当调小学习率,数据集多样性不够大的时候,batchsize不能设置的太大,同一批数据中样本重复或相似,计算梯度是浪费。)

batchsize越大,理论上数据稳定性会越好。(batchsize小的时候,lr不能太大)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【自记录】记一台i7四代老爷笔记本重装Win10 22H2

1 背景 手上有一台退役的老爷笔记本,清华同方锋锐 U430。因为比较轻便,最近重新翻出来用于临时抓个包和简单的脚本语言(比方说Python)编辑工作。但是现在像VSCode的新版本都要求Win10以上,像Continue这类的AI插件都跑…

为企业提供动力:用于大型组织的WordPress

可扩展且灵活的架构可通过主题、插件和集成进行定制内置 SEO 功能和营销功能内容管理和协作工具支持多站点安装托管解决方案和面向平台的提供商采用现代前端技术的 Headless CMS 功能 拥有强大、灵活且可扩展的内容管理系统 (CMS) 对于大型组织至关重要。作为最受欢迎和广泛使用…

(一篇Blog证明还在地球)论文精读:基于CLIP引导学习的多模态虚假新闻检测

摘要 假新闻检测在社会取证领域引起了广泛的研究兴趣。许多现有的方法引入了定制的注意机制来融合单峰特征。然而,它们忽略了模式之间的跨模式相似性的影响。同时,预训练的多模式特征学习模型在FND中的潜力还没有得到很好的开发。这篇论文提出了一种FND…

今年的618,似乎很平淡!

电商平台取消预售制度的第一个大促,快递业表现如何? 今年的618大促与往年有些不同,自4月起,天猫、京东、快手等主流平台相继官宣取消预售,打出“现货开卖”标签,这意味着消费者不用再被“烧脑”的优惠计算…

72-UDP协议工作原理及实战

#ifndef UDPCOMM_H #define UDPCOMM_H#include <QMainWindow> #include <QUdpSocket> // 用于发送和接收UDP数据报 #include <QtNetwork>QT_BEGIN_NAMESPACE namespace Ui { class udpComm; } QT_END_NAMESPACEclass udpComm : public QMainWindow {Q_OBJECT…

Qt 实战(5)布局管理器 | 5.2、深入解析Qt布局管理器

文章目录 一、深入解析Qt布局管理器1、为什么要使用布局管理器&#xff1f;2、布局管理器类型3、布局管理器用法详解3.1、QBoxLayout&#xff08;垂直与水平布局&#xff09;3.2、QGridLayout&#xff08;网格布局&#xff09;3.3、QFormLayout&#xff08;表单布局&#xff09…

制造业为什么需要ERP企业管理软件?

如今&#xff0c;传统的制造业管理方式逐渐变得力不从心~库存积压、生产效率低下、供应链混乱…想象一下&#xff0c;如果你的企业仍然依赖于手工记录订单、库存和财务数据&#xff0c;那么每当市场发生变动时&#xff0c;你就需要花费大量的时间和精力去重新调整生产计划、更新…

【漏洞复现】CRMEB开源电商系统 /api/products SQL注入漏洞(CVE-2024-36837)

0x01 产品简介 CRMEB开源电商系统是一款由西安众邦网络科技有限公司打造的全栈式电商解决方案&#xff0c;旨在为开发者和商家提供高性能、智能化的电商平台服务。该系统集成了CRM(客户关系管理)、ERP(企业资源规划)和EB(电子商务)的功能&#xff0c;通过深度结合这些功能&…

reverse-android-实战喜马拉雅-ollvm

资料 1. apk: com.ximalaya.ting.android.apk. 2020年8月 可以使用 2. 抓包分析 java层分析 so层分析 登录的算法so是在 liblogin_encrypt.so中。 32位的&#xff0c; 用 IDA打开&#xff0c;查看 静态的导出函数。 打开 一个 首先看到 IDA VIEW 是一个横向 比较多的分支&am…

算法金 | 一个强大的算法模型:t-SNE !!

大侠幸会&#xff0c;在下全网同名「算法金」 0 基础转 AI 上岸&#xff0c;多个算法赛 Top 「日更万日&#xff0c;让更多人享受智能乐趣」 t-SNE&#xff08;t-Distributed Stochastic Neighbor Embedding&#xff09;是一种用于降维和数据可视化的非线性算法。它被广泛应用于…

windows实现python串口编程

一、windows安装python Welcome to Python.org 根据windows是64位找到对应的版本下载 下载完后直接安装即可&#xff01; 打开cmd查看python版本 $ python --version #查看版本 二、串口编程 1、安装pyserial库 pyserial是Python中的一个库,用于处理串口通信。 cmd…

JavaScript-拓展简单和引用数据类型

学习目标&#xff1a; 掌握拓展简单和引用数据类型 学习内容&#xff1a; 拓展-术语解释拓展-基本数据类型和引用数据类型 拓展-术语解释&#xff1a; 拓展-基本数据类型和引用数据类型&#xff1a; 简单类型又叫做基本数据类型或者值类型&#xff0c;复杂类型又叫做引用类型…

C++使用教程

目录 一、软件使用 二、C基础规则补充 关键字 整型取值范围 浮点型取值范围 字符型使用规则 字符串型使用规则 布尔类型 常用的转义移字符 三、数组、函数、指针、结构体补充 1.数组 2.函数 声明&#xff1a; 分文件编写&#xff1a; 值传递&#xff1a; 3.指…

【Spring Cloud应用框架】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

RK3588/算能/Nvidia智能盒子:[AI智慧油站」,以安全为基,赋能精准经营

2021年9月&#xff0c;山东省应急管理厅印发了关于《全省危险化学品安全生产信息化建设与应用工作方案&#xff08;2021-2022 年&#xff09;》的通知&#xff0c;要求全省范围内加快推进危险化学品安全生产信息化、智能化建设与应用工作&#xff0c;建设完善全省危险化学品安全…

从老花眼开始

三年前&#xff0c;博主的的火眼金睛开始老花了&#xff0c;表现就是看近处看不清了。人眼对可视距离的标准可以定义为&#xff1a;看手机为近距离&#xff0c;看电脑为中距离&#xff0c;看电视为中距离&#xff0c;看红绿灯为远距离。老花眼就是戴近视眼镜直接看手机看不清了…

【ARM-Linux篇】POSIX消息队列

System V消息队列POSIX 消息队列主 要 函 数#include <sys/msg.h> int msgget(key_t key, int oflag) int msgsnd(int msqid, const void * ptr, size_t length, int flag) ssize_t msgrcv (int msqid, void *ptr, size_t length, long type, int flag) int msgctl(int m…

AI智能盒子助力中钢天源设备工厂升级安全防护

中钢集团安徽天源科技股份有限公司成立于2002年3月27日,是中央企业中国中钢股份有限公司控股的上市公司&#xff0c;主导产品为永磁铁氧体器件、钕铁硼器件、四氧化三锰、锶铁氧体预烧料及各类磁选机等。 在中钢天源智能化升级过程中&#xff0c;采用并定制开发一系列厂区安全…

聊聊系统架构之负载均衡优化实践

一、写在前面 最近在进行线上监控检查时&#xff0c;我遇到了两个超出预期的案例。首先&#xff0c;网关层的监控数据与应用实际监控数据存在不一致性&#xff0c;尤其是max有较大的差异&#xff0c;详见如下图。其次在某个应用中&#xff0c;通过httpclient请求某域名时发现只…

【Spine学习12】之 事件帧

1、新建事件帧&#xff1a; 2、选择第8s的攻击帧&#xff0c;点击第一步新建的attack事件帧前面的钥匙 这样每次动作到8s的时候会自动跳出事件帧提示 这个文字实际动画不会显示 事件是动画过程中所发生情况的触发器。 给程序员识别的