1.LM训练05 ZeRO系列
2.最像三猪的码分网站?
3.DeepSpeed源码笔记3优化器
4.二、软件安装
LM训练05 ZeRO系列
分布式训练的码分几个主题包括:
LLM训练 分布式通信,LLM训练 显存占用分析,码分LLM训练 高效训练方法,码分LLM训练 数据并行,码分LLM训练 ZeRO系列,码分qt windows 源码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等核心工具。