皮皮网
皮皮网

【detectandcompute源码】【虎吃羊源码】【爆单助手源码】grads源码分析

来源:寻底风险源码 发表时间:2024-11-30 04:52:05

1.LM训练05 ZeRO系列
2.最像三猪的码分网站?
3.DeepSpeed源码笔记3优化器
4.二、软件安装

grads源码分析

LM训练05 ZeRO系列

       分布式训练的码分几个主题包括:

       LLM训练 分布式通信,LLM训练 显存占用分析,码分LLM训练 高效训练方法,码分LLM训练 数据并行,码分LLM训练 ZeRO系列,码分detectandcompute源码LLM训练 流水线并行,码分LLM训练 张量并行,码分LLM训练 Megatron-LM 源码分析。码分

       微软发布了四篇论文:

       ZeRO: Memory optimizations Toward Training Trillion Parameter Models (/) - 提出了ZeRO-DP和 ZeRO-R

       ZeRO-Offload: Democratizing Billion-Scale Model Training (/) - 微软

       ZeRO-Infinity: Breaking the GPU Memory Wall for Extreme Scale Deep Learning (/) - 微软

       ZeRO++: Extremely Efficient Collective Communication for Giant Model Training (/) - 微软

       ZeRO1.1 概览

       ZeRO包含两组优化:

       (1)ZeRO-DP:减少模型状态PGO的码分显存占用

       (2)ZeRO-R:减少剩余显存的消耗。

       1.2 ZeRO-DP

       目标是码分优化数据并行,减少显存冗余,码分最小化通信量。码分

       原理是码分使用动态通信策略来分区优化器状态、梯度和参数。码分

       实现是对模型参数进行分区,梯度也相应分区,优化器只优化本分区的参数。

       两个原则:类型:

       1.2.1 ZeRO-Stage 1

       原理是对优化器状态进行分区,每个rank更新相应参数后,收集构成完整模型。

       流程:通信分析:单个GPU总通信量为2*ψ。

       1.2.2 ZeRO-Stage 2

       在Stage1基础上,对梯度进行分区。虎吃羊源码

       ZeRO-2分割Optimizer States与Gradients。

       用完即删原则:每个rank只对自己负责的参数Pi的梯度进行规约。

       通信分析:同ZeRO-Stage1,单个GPU总通信量为2*ψ。

       1.2.3 ZeRO-Stage 3

       在Stage1/Stage2基础上,对模型参数进行分区。

       ZeRO-3分割Optimizer States、Gradients和Parameters。

       需要用时去取原则:计算特定layer时,对参数进行all-gather。

       通信分析:单个GPU总通信量为3*ψ。

       1.2.4 动画视频

       The video below shows how ZeRO (with all three stages) performs a training step including forward pass, backward pass, and parameter update.

       1.2.5 实验效果

       实验配置:G 8*A、全参训练,bs=1,checkpointing=True。

       实验全参训练,最多只能跑B模型,B模型跑不起来。

       1.2.6 ZeRO-DP VS DDP

       1.3 ZeRO-R

       1.3.1 中间激活值

       认为checkpoint方法虽然有用,但在大型LLM中激活值仍然占用大量显存。

       eg:B的LLM,bs=,激活值显存占用GB。爆单助手源码

       方法:Offload到CPU中。

       1.3.2 临时缓存区

       在梯度reduce操作中,用于存储中间结果的临时缓冲区会消耗大量显存。

       方法:申请固定大小的缓存区 constant size buffers 。

       1.3.3 内存碎片

       原因:内存碎片是tensor生命周期错配的结果。

       问题:即使有足够的显存,可能会因为缺少连续内存而使得内存分配失败。

       方法:ZeRO为激活检查点和梯度预先分配连续内存块,并在初始化时将它们复制到预先分配的连续内存中。

       2、ZeRO-Offload

       利用CPU内存来解决GPU显存不足的问题。

       CPU:参数更新在CPU完成。

       GPU:前向和后向的计算在GPU上完成。

       3、ZeRO-Infinity

       利用外接存储设备来解决GPU显存不足的问题。

       4、ZeRO++

       to do...

       5、Deepspeed ZeRO源码

       5.1 入口

       5.1.1 总入口initialize()

       源码地址:deepspeed.__init__

       简介:选择不同的engin引擎。

       5.1.2 ZeRO引擎DeepSpeedEngine

       源码地址:deepspeed.runtime.engine

       整体流程及关键方法如下所示:

       (1)DeepSpeedEngine.init

       核心内容:最重要的就是对优化器(Optimizer)的初始化。

       ZeRO 的核心特性的实现都在优化器(Optimizer)中,核心方法_configure_zero_optimizer() 。

       stage1/2 优化器:DeepSpeedZeroOptimizer

       stage3 优化器:DeepSpeedZeRoOffload

       (2)DeepSpeedEngine.forward

       核心内容:在模型model进行前向传播,返回loss,网页场所码源码ZeRO不需要进行特殊处理

       (3)DeepSpeedEngine.backward

       核心内容:获得各个rank上对应分片参数Pi的梯度Gi。

       self.optimizer.backward()

       Zero stage1:self.optimizer.reduce_gradients()

       Zero stage2:self.overlapping_partition_gradients_reduce_epilogue

       (4)DeepSpeedEngine.step

       核心内容:基于梯度Gi更新对应的分片参数Pi,各rank收集最新的、完整的模型参数P

       self.optimizer.step()

       self.optimizer.zero_grad()

       5.2 DeepSpeedZeroOptimizer

       源码地址:deepspeed.runtime.zero.stage_1_and_2

       简介:stage1/2 优化器,对参数的Optimizer States与Gradients进行分割。

       5.2.1 init

       核心思路:ZeRO初始化时候会对参数进行均匀切分给各个rank。通过参数分区,进而实现梯度、优化器的分区。

       除此之外,注册梯度钩子函数reduce_partition_and_remove_grads(当梯度计算完成时自动调用该函数)

       5.2.2 forward

       在模型model进行前向传播,返回loss,ZeRO不需要进行特殊处理。

       5.2.3 backward

       5.2.4 reduce_ipg_grads()

       ipg:Independent Parallel Gradient

       简介:对连续的ipg梯度进行reduce。

最像三猪的网站?

       收藏改版公告巧用家园收藏,让你在社区慧眼识“珍...

       --

       易网仿三猪程序 - 易网仿三猪程序 下载 OpenGrADS2.1.a2-气象家园整合版.7z - OpenGrADS2.1.a2-气象家园整合版.7z,可用于画图,读取文件...

       华众6.5仿美橙CNdns橙色模板-DNS文档类资源

       --

       风格名称: 华众6.5仿美橙CNdns橙色模板适用版本: ...星外主控模板-蓝色易网模板-简单商业模板免费放。 安装...下载 猪::rocket:最好的rbac网络框架。 基于Spring...

       仿三猪mssql版.rar

       仿三猪mssql版.rar WAP建站系统

       三猪回帖源码

       手机腾讯网回帖软件源码。单号刷论坛盖楼回帖。源码为易语言的源码啊啊啊

       微猪演示猪场(3)--小程序仿写

       先看一下今天要模仿的页面: 我们把这个页面分为三部分。 这三个容器Y轴上分为四部分,然后向左浮动。大概的样子参照之前的博客,这里就不画了。山海经 源码 样式也和前两个页面类似就不再做说明~ 接下来看一下我的成果图,还不完善,后面还要作修改: ...

       易网源码下载系统7.0

       易网源码下载系统7.0,是易网源码下载系统7.0版本的

       易网防伪防串货和代理授权查询系统 v2.1

       易网防伪防串货和代理授权查询系统是以php+MySQL进行开发的防伪码查询系统。本系统完全开源,免费全功能版本。完全免费。安装步骤:1.上传所有文件至网站根目录2.将备份的数据库 yun_fwdl.s

       易网会员管理系统 v2.0.zip

       易网会员管理系统简介 易网会员管理系统采用B/S架构,全新界面设计,简单易用,会用电脑就会使用,真正易用好用的会员管理系统。 易网会员管理系统功能特色: 基于SAAS模式的会员管理系统,有网络就能随时

       易网自助建站系统 5.0

       易网自助建站系统 5.0 功能说明: 1.精美的企业MOBAN个性化选择 2.系统带二级域名绑定系统 3.财务管理 4.多级代理权限管理 5.生成站点拥有独立的管理后台 6.客户上传资源管理 7.上传

       易网防伪防串货和代理授权查询系统 v2.1.zip

       易网防伪防串货和代理授权查询系统简介 易网防伪防串货和代理授权查询系统是以php MySQL进行开发的防伪码查询系统。 易网防伪防串货和代理授权查询系统安装步骤:

DeepSpeed源码笔记3优化器

       DeepSpeedZeroOptimizer_Stage3 是一个用于训练大模型的优化器,专门针对zero stage 3的策略。它通过将参数W划分为多份,每个GPU各自维护优化器状态、梯度和参数,以实现高效并行计算。具体实现过程如下:

       在进行前向计算时,每个GPU负责其部分数据,所有GPU的数据被分成了三份,每块GPU读取一份。完成前向计算后,GPU之间执行all-gather操作,合并所有GPU的参数W,得到完整的W。

       在执行反向传播时,同样进行all-gather操作,收集所有GPU的完整W,然后执行梯度计算。完成反向传播后,立即释放不属于当前GPU管理的W。

       在计算梯度后,通过reduce-scatter操作聚合所有GPU的梯度G,得到完整的梯度。接着,释放非当前GPU管理的梯度G。最后,使用当前GPU维护的部分优化器状态O和聚合后的梯度G来更新参数W,无需额外的allreduce操作。

       初始化阶段包括设置参数和配置,如optimizer、flatten、unflatten、dtype、gradient_accumulation_dtype等。这些配置决定了优化器的运行方式和性能。初始化还包括创建参数分组和设置特定的分片操作。

       分配模型参数到各个GPU上,通过多种方法如创建参数分组、创建参数子分组等进行细致的划分和管理。这些分组和子分组的创建和管理,是为了更有效地进行梯度聚合和参数更新。

       在执行反向传播后,调用LossScaler进行梯度计算,随后通过特定的钩子函数(如reduce_partition_and_remove_grads)进行梯度聚合和释放。

       执行优化器的step方法时,进行归一化梯度计算、更新参数和优化器状态,并在完成后清理和更新模型参数。此过程包括执行反向梯度聚合、更新模型参数权重、清理优化器状态和参数。

       DeepSpeedZeRoOffload模块则负责模型参数的划分和管理工作,包括初始化、参数划分和状态更新等。初始化阶段会根据配置将参数分配到不同GPU上,并进行状态更新和参数访问的优化。

       在进行参数划分时,首先将模型参数划分为非划分和划分的参数,并根据划分状态进一步处理。初始化外部参数后,会更新模块的状态,包括所有参数的存储位置和管理策略。

       在执行partition_all_parameters方法时,根据GPU数量和参数大小计算每个GPU需要处理的部分,从模型参数中提取并分割到对应的GPU上,释放原参数并更新参数状态。

       Init过程涉及到初始化配置、实现特定方法(如all_gather、partition等)和状态更新,确保模型参数能被正确地在不同GPU间共享和管理。对于特定的GPU(如主GPU),还会使用广播操作将参数分发给其他GPU。

二、软件安装

       安装WRF建模系统的软件在移植平台上相对简单,主要由独立的模型组件构成。WRF包包含ESMF的Fortran接口和FFTPACK源代码,但需要用户安装外部库,如支持观测类型和线性代数求解器。同样,WPS包的其他外部库(如Grib2处理支持)也是必需的,且所有系统均需netCDF库,可以从Unidata官网下载。WRF已被移植到多种Unix系统,支持多种硬件和软件配置。

       构建WRF和WPS需要特定的编译器和脚本语言,如Fortran 、C语言以及perl、Cshell和Bourne shell等。大部分代码使用Fortran,WPS利用MPI库进行分布式内存通信,辅助程序如文件解析和构建也需在构建过程中使用。WRF构建过程需要netCDF 3.6.1或更高版本,以及可能的HDF5以支持压缩功能。WRF和WPS的详细构建指南可在相关网站获取。

       安装过程中,必须下载Unidata的netCDF库,通常还需添加其bin目录到路径中。对于使用多个编译器的Linux或Darwin系统,需要确保外部库的兼容性。WRF后处理工具包括NCAR命令语言、NCL脚本、WRF-Python和GrADS等,每种都有特定的用途和定制选项。

       在UNIX环境设置中,仅需配置模型核心和数据同化相关路径,以及指定WRF组件的库和include目录。如果使用OpenMP,需设置线程数并注意可能的堆栈大小问题。WRF代码构建机制会根据系统结构自动选择构建选项,如单处理器、共享内存并行或分布式内存并行。编译WRF代码时,推荐获取最新版本并选择合适的构建标志。

       最后,构建WPS在WRF已构建后进行,需注意Grib2数据的额外库,如zlib、png和jasper。WPS配置时需选择合适的Grib解码选项,并设置必要的压缩库路径。WPS编译完成后,会生成geogrid.exe、ungrib.exe和metgrid.exe等核心工具。

相关栏目:知识