笔记-分布式计算基础

Distributed Computing

划分

  • 数据并行(DataParallelism)

    image-20250602212512685

    将数据分为n份,发送到n个GPU上,每个GPU上都存在一个完整的大模型

    缺点: 模型太大

  • Pipeline Parallelism(串行的)

    image-20250602212607260

    将模型做split,每个GPU负责一部分,GPU1运行完后将结果发送给GPU2

    缺点:

    1. 不好分割
    2. 分割成差不多的计算量是个大的问题
    3. 速度受限于最慢的GPU模块
    4. 可能会出现许多空闲状态的GPU
  • Tensor Parallelism

    更细化的,在tensor维度上

    image-20250602213308606

    会造成额外的通信

Data Parallelism

parameter server

  • Parameter server

    image-20250602213807371

    分为两个部分

    1. Parameter Server : recieive gradients from workers and send back the aggregated results
    2. workers: compute gradients using splitted dataset and send to parameter server

    这种方式不太适合大模型

  • 步骤

    1. replicate models to workers

      image-20250602214308099

    2. split data to workers

      image-20250602214356800

    3. compute gradient

      image-20250602214427915

    4. Aggregate and synchronize gradient

      image-20250602214541708

    5. Gradient update and update model parameters

      image-20250602214605315

  • All in one picture

    image-20250602214638138

  • Parameter server:代码

    image-20250602214858669

parameter server 通信-Communication:reduce and broadcast

  • one-to-many communication: a type of operations performed across all workers

    image-20250602215147152

    1. Reduce : 类似聚合,但是在聚合过程中进行平均或求和
    2. Broadcast: 向所有的workers发送相同的复制
  • Parameter server 的bottle neck(瓶颈)image-20250602215723394

    parameter server主要起的作用就是同步信息的作用,不希望有类似server的节点:All-Reduce

  • Naive All reduce implementation

    image-20250602220114316

    需要循环,每次传输所有的数据

  • Better All reduce implementation

    image-20250602220225305每个节点只和旁边的节点做交互,也需要循环三次,但每次只传输旁边的一部分

  • 更聪明的方式: Recursive Halving reduce(递归减半规约)

    image-20250602221008971

    同上面的类似,也是临近的workers交换,对于8个worker来说,做了3次的iteration,然后交换间隔是20,21,232^0,2^1,2^320,21,23,这样可以将时间复杂度从O(N)降到O(log⁡N)O(N)降到O(\log N)O(N)降到O(logN)


Zero-1/2/3 and FADP

  • 如果我们训练一个非常大的大模型,那么即使是最好的GPU也没法完全将模型权重完全加载到内存中,然而,训练需要存储梯度和优化器

    image-20250608093818287

    在fp32精度下,如果模型的weight占2bytes,那么其gradients大概也占2bytes左右,如果优化器使用Adam,其optimizer states因为要存储parameters, momentum 和variance,所以大概需要6倍(这个倍数取决于配置,再怎么配置一般也都是weight的三到四倍),即使是使用A100或者H100显卡(80G)来训练,最多也只能训练5.0B的模型

    image-20250608094812014

  • 第一种方式 ZERO-1

    没个GPU存放完整的额weight和gradients,分割optimizer states 到N个不同的GPU卡上,假设N=64,则这时候用80G的显卡,大概能训练19B参数量的模型

    image-20250608095500614

  • 第二种方式ZERO-2

    相比zero-1,除了optimizer states,我们还将gradients也分布在不同的GPU上,假设N=64, 则这时候用80G的显卡,大概能训36B参数量的模型

    image-20250608095720011

  • 第三种方式ZERO-3

    将optimizer states,gradients and weights都分布在不同的GPU上,假设N=64, 则这时候用80G的显卡,大概能训320B参数量的模型

    image-20250608095751984

  • 在pytorch中,ZERO-3等价于FSDP (FullyShardedDataParallel),即所有的参数都做parallelism

    难点在于GPU之间的通信,如何将GPU前后向传播联合起来计算

    image-20250608100006519


Pipeline Parallelism

  • 与数据并行不同,Pipeline直接对模型进行分割

    image-20250608100444827

Naive Implementation

  • 下图表示的是4层网络在训练的时候,使用F代表Forward,B代表Backward,下面图中的(b)Training timeline,其横轴为时间轴,假设这4层网络分别存放在4个GPU上

    image-20250608101502157

    所以计算的顺序为GPU0->GPU1->GPU2->GPU3->GPU3->GPU2->GPU1->GPU0,那么这四个GPU没个都使用了两个时间单元,占有率都是 28=0.25\frac{2}{8}=0.2582=0.25,这意味着其他75%的时间都是空闲的,而且这25%还是在假设没个pipeline的执行时间是一样的情况下,否则这个占有率还可能更低,这个是pipeline并行的一大问题,没有办法很好的利用到GPU的资源

    image-20250608102014445

    同一时间点只有一个设备在计算,其他的都在等待。

Micro-batch

  • 让它多跑一跑不断地将计算给到流水线,如下图,将batch为16的分为4个batch为4的(Micro-batch技术),下图下面的部分,这时候T=14, 那么每个GPU的使用率就是4∗84∗14=47\frac{4*8}{4*14}=\frac{4}{7}41448=74,这样空闲的时间实际上就下降了很多,当然如果再将任务拆解的更小,还可以提升使用

    image-20250608103629478

    注意,红色为空闲时间

    image-20250608103705415

  • 如何提高Pipeline Paralisem的效率?尽量将任务拆解的更小,然后做micro-batch


Tensor Parallelism

  • 在pipeline Parallelism中再做tensor Parallelism,还可以提高pipeline Parallelism的效率

  • tensor并行的核心关键点:如何把运算拆解

    注意,这里后续还需要进行一个类似reduce的操作

    image-20250608104351334

MLP

  • MLP和Self-Attention的tensor并行

    image-20250608104717468

  • partition in First FFN Layer,注意这里用两个GPU设备来举例

    image-20250608104913542

  • partition in Second FFN Layer,注意这里用两个GPU设备来举例

    image-20250608105010845


self-attention

  • 假设这里是用三个GPU来举例 ,每个GPU分别来存储QKV,先在各GPU上分别计算QKV

    image-20250608105337896

    softmax计算

    image-20250608105623292

    计算Z

    image-20250608105705016

    所以tensor parallelism核心是怎么将这些操作设计出来


不同并行方法的总结

  • 总结image-20250608105903210

    Data Oarallelism

    1. 分割数据
    2. copy数据到N的设备上
    3. 高利用率,高内存开销,设备间低通信
    4. 优化:ZeRO 1/2/3,FSDP

    Pipeline Parallelism

    1. 按层分割模型
    2. 低利用率,低内存开销,适中的通信要求

    Tensor Parallelism

    1. 按tensor维度分割模型
    2. 高利用率,低内存开销,高通信要求(有许多all-reduce操作)

3D并行

  • 将上面的三种并行方法都混在一起

    下面的相同的颜色表示同一个server里面的GPU(Model Parallel是Tensor Parallelism)

    image-20250608110829348

    需要注意的是:

    为什么同一个server中用 ModelParallel(Tensor Parallelism)

    因为tensor并行是高通信的,GPU之间需要经常交互,同一个server中交互更快

  • 如何设计并行?

    当模型太大,无法加载到一个GPU上:使用pipeline parallelism来拆分模型

    当layer太大,无法加载到一个GOU上:使用tensor parallelism来拆分layer


带宽:bandwith

  • 通信的时间可能比计算的时间更长,所以我们需要降低通信的开销

    在同一个数据中心,数据通信网络延迟可能是1毫秒到10毫秒,无线wifi连接数据通信延迟是100ms,地球间的通信网络延迟大概是500毫秒到1秒,但是在同一个机架内(同一个GPU集群上)那么延迟1纳秒,非常小

    image-20250608113058999

  • 减小传输的数据大小

    在worker之间,或者在GPU之间,减小传输的数据(gradient,parameters)大小

    1. 梯度剪枝
    2. 量化(会损失精度和信息)

    image-20250608113157955

  • 压缩通信:梯度剪枝

    注意梯度剪枝是一种基于梯度信息的剪枝方法。它通过分析梯度的大小来决定哪些神经元或连接是重要的,哪些可以被移除,区别于梯度裁剪

    image-20250608114020010


KV Cache

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

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

相关文章

Android Studio 2024,小白入门喂饭级教程

一、下载Android Studio 1、从安卓官网安卓官网下载Android Studio。 ​ ​ 二、安装Android Studio 1、双击android-studio-2024.3.2.15-windows.exe。 ​ ​​ ​ ​ ​ ​ 三、新建工程 1、双击桌面图标​ 打开Android Studio。 ​ 选“Empty Views Activity…

AI智能体 | 使用Coze制作一键生成单词洗脑循环视频,一天批量生成100条视频不是梦!(附保姆级教程)

目录 一、整体工作流设计 二、制作工作流 2.1 开始节点 2.2 大模型-单词 2.3 大模型_图像生成 2.4 输出 2.5 图像生成_1 2.6 输出_2 2.7 画板_2 2.8 文本处理 2.9 输出_3 2.10 speech_synthesis_1x5 2.11 get_audio_duration_1 2.12 代码 2.13 get_audio_durati…

质量属性场景(Quality Attribute Scenario)深度解析

本质定义:质量属性场景(Quality Attribute Scenario)是精确描述软件系统质量要求的结构化方法,通过标准化的场景模板将抽象的质量属性转化为可测量、可验证的具体行为描述,为架构设计提供客观评估基准。 一、质量属性场景核心结构 1. 六元组标准模板 #mermaid-svg-AGbvPVRu…

Java_Springboot技术框架讲解部分(一)

首先讲解一下:Java技术栈中,目前Spring Boot在国内的关注趋势也日渐超过Spring。Spring Boot是Spring家族中的一个全新的框架,它用来简化Spring应用程序的创建和开发过程。采用Spring Boot可以非常容易和快速的构建基于Spring框架的应用程序&…

从OpenMV到执行器:当PID算法开始“调教”舵机

如果到现在还不会驱动舵机——朋友,电赛的元器件清单每年都在对你“明示”,二维云台都快成祖传考题了!补课?现在!立刻!(当然,如果你脸皮够厚,也可以私信骚扰作者&#xf…

xml映射文件的方式操作mybatis

映射文件 在Java spring中使用mybatis有两种方式,一种是注释的方式,一种是xml映射文件的方式。在简单的功能需求可以使用注释,方便简洁。而在大的功能逻辑上,更推荐使用xml映射文件,方便管理且结构清晰。 首先xml文件结…

Carla自动驾驶仿真_快速安装与运行Carla

大家好,我是橙子,今天给大家介绍Carla的基础安装和使用 目录 1.Carla介绍 2.Carla的安装与使用 3.Carla0.9.15安装包下载: ​编辑 4.运行Demo 5.运行一个简单场景: 6.相关资源 1.Carla介绍 Carla 是一个开源的自动驾驶仿…

远程登录docker执行shell报错input is not a terminal问题

背景 最近要远程去k8s docker里面获取信息,于是,写了一个如下的命令,执行完之后,报错了。 ssh 192.168.100.2 sudo crictl exec -it xxx.docker /usr/bin/lscpu --online --extended错误信息如下: time“2025-07-11T21…

使用FastAdmin框架开发二

继上一篇使用FastAdmin框架开发-CSDN博客教程 部署完项目后我们就可以边开发边调试了 在开发前我们可以先做一些基本设置 安装成功后会生成一个项目后台的地址http://域名/VrHGtzlfMB.php/index/login,后台入口文件是随机生成的,当然我们也可以根据我…

【DB2】load报错SQL3501W、SQL3109N、SQL2036N

最近老遇到迁移测试LOAD时报错,如图所示但是换成import又可以看描述是说load的内容将不会进入备份暂挂状态balbala… 下面的错误是说ixf文件无效 这里一直以为是SQL3501W的问题,去各种研究load参数和db2set里面的load参数,各种调整都不行 又以…

YOLO家族内战!v5/v8/v10谁才是你的真命天子?(附保姆级选择指南)

在目标检测领域,YOLO系列始终是工业部署与学术研究的焦点。从风靡全网的YOLOv5,到全面升级的YOLOv8,再到突破性能瓶颈的YOLOv10——每一次迭代都带来全新可能。作为开发者,究竟该选哪一代?本文用千字长文对比表格为你彻…

Claude Code是什么?国内如何使用到Claude Code?附国内最新使用教程

2025年已过大半,相信你也听说过 Claude——它是近年最受关注的 AI 模型之一,而 Claude Code 则是它面向编程场景的特别版本,专为代码理解、生成与重构而生,尤其擅长处理大项目、长上下文,和开发者对话更自然。 但对于一…

双轮驱动:政策激励与外部制约下的国产服务器市场演进

2025年6月,科智咨询正式发布《中国国产服务器市场研究报告(2025)》,报告从国产服务器产业概述、政策环境分析、市场现状与竞争格局、面临挑战与市场机遇等维度,深入剖析国产服务器市场现状及未来发展趋势。2022年10月&…

【工具变量】全国省市区县土地出让结果公告数据(2000-2024年)

土地出让结果公告数据是指政府主管部门在完成国有土地使用权出让后,依法依规对外公开的结果信息,涵盖土地出让时间、出让方式、竞得人、成交价、用地性质、面积等关键信息。土地出让数据是研究中国土地市场供需变化、城市发展轨迹以及地方财政收入结构的…

前端面试专栏-算法篇:22.树结构(二叉树、B树、红黑树)

🔥 欢迎来到前端面试通关指南专栏!从js精讲到框架到实战,渐进系统化学习,坚持解锁新技能,祝你轻松拿下心仪offer。 前端面试通关指南专栏主页 前端面试专栏规划详情 树结构(二叉树、B树、红黑树&#xff09…

爬虫-数据解析

1.解析概述特性re (正则表达式)bs4 (BeautifulSoup)xpath (lxml)pyquery本质文本模式匹配HTML/XML 解析器 (DOM树操作)XML路径语言 (节点导航)jQuery 式 CSS 选择器 (封装lxml)学习曲线陡峭中等中等简单 (熟悉jQuery/CSS)灵活性极高 (处理任意文本)高 (容错好,DOM操…

MySQL8.0基于GTID的组复制分布式集群的环境部署

前言: 需要清楚知道:MySQL 复制组能够以一种自动优先选择的单主模式运行,在某个时间只有一个服务器接受更新 。但是对于更高优先级的用户,组能够以多主模式部署,所有的服务器都能够接受更新,即使它们是同时…

中国国际会议会展中心模块化解决方案的技术经济分析报告

——以模块化、可持续材料与ESG为核心的运营效益提升路径研究-----中国会展经济研究会原副会长,学术委员会副主任 姚望一、报告概述1.1报告目的本报告深入探讨了一种经济视角下的综合评估,针对某国际会议会展中心采用的一种模块化、多功能、可持续升级的…

模拟开关、可编程增益仪表放大器电路

一、模拟开关1.CD4052CD4052是一种模拟多路开关,也可以称作是一个模拟多路复用器,输入引脚可以提供可变电压,可以通过输出引脚获得相同电压,常见的封装有DIP16、SOP16、TSSOP16。 CD4052的引脚功能如下图,可以用于控制…

时序数据库 TDengine × SSRS:专为工业、能源场景打造的报表解决方案

每当听到“做报表”三个字,是不是内心都会先叹口气?尤其在工业、能源、制造等场景,面对那些结构固定、字段繁多、格式要求严苛的报表任务,用 Excel 手动拼,真的是既费时又容易出错。 现在解决方案来了——时序数据库 …