Zero Infinity原理

如上图,一次加载一个layer的一个weights分片(一层的1/DP的参数量),Broadcast至所有rank,计算各自的梯度,再Reduce至其中一个负责的rank,offload存放至CPU Memory,释放GPU里的weights和梯度;之后再对本layer的下一个weights分片,重复该操作;

Zero-Offload是和Zero-2一起用的;

Zero-Infinity适合Zero-3一起用的;

1. Infinity offload engine

用来在GPU Memory、CPU Memory、NVMe(SSD)之间搬运模型states的组件;

Pinned memory管理器:尽量复用同一块pinned memory,以减少内存碎片;直接在pinned memory里计算(例如optimizer更新),省得搬运的时候又要copy一遍;

-----------

2. activations的CPU offload

将用于backward的activations,offload至CPU memory;

-----------

3. Memory-centric tiling

遇到大的operator,显存放不下整个weights矩阵。则将其分片,每次一片的offload加载、计算、offload结果、释放,顺序执行每个分片;(可以理解为一种更加灵活的model并行)

-----------

4. Bandwidth-Centric partitioning

Zero Offload,每个layer的weights,是整个被一个rank所own的;在要用之前,从这个rank加载该层weights,从CPU memory至GPU memory,只有该rank的带宽是忙碌的,其他rank的带宽空闲;

Zero Infinity,每个layer的weights,划分为DP个分片,每个rank只own一个分片;在要用之前,所有rank同时传输并做AllGather,这样所有rank的PCIe都忙碌起来;(我:这样需要每个rank放得下一整个layer的weights,浪费显存;可以一个分片一个分片的broadcast,结合双buffer去overlap计算和传输,每个rank同时只保留2个分片在显存里)

-----------

5. Overlap-Centric design

提前得知道计算图,才能提前知道operator执行顺序;

Weights预取:GPU忙着计算第i层operator时,后端忙着搬运:GPU->GPU:第i+1层operator,CPU->GPU:第i+2层operator,NVMe->CPU:第i+3层operator; 注意:动态图可能根据数值条件,改变operator执行顺序,造成prefech白整了。

Gradients放回:同理,在传输第i+1、i+2、i+3层operator时,GPU在计算第i层的operator;

-----------

6.PyTorch实现

对PyTorch的哪些module类的forward、backward进行hook(加decorator),在hook里进行参数、梯度的搬运操作;

一上来并不把整个model加载至所有GPU(可能会撑爆显存);而是hook了module的__init__函数,将该module分片放至各个rank上;

这段输出展示了不同类型的敏感性分析结果,包括下界敏感性、目标函数敏感性、右手边界敏感性和上界敏感性。下面是每个部分的解释: 1. 下界敏感性(Lower Bound Sensitivity Ranges): - 变量x1的"Reduced Cost"列显示为5.0000,表示当x1的值增加1个单位时,目标函数的值会增加5.0000。 - 变量x2的"Reduced Cost"列显示为zero,表示该变量的值对目标函数没有影响。 - 变量x3的"Reduced Cost"列显示为zero,表示该变量的值对目标函数没有影响。 2. 目标函数敏感性(OBJ Sensitivity Ranges): - 变量x1的"Reduced Cost"列显示为5.0000,表示当x1的值增加1个单位时,目标函数的值会增加5.0000。 - 变量x2的"Reduced Cost"列显示为zero,表示该变量的值对目标函数没有影响。 - 变量x3的"Reduced Cost"列显示为zero,表示该变量的值对目标函数没有影响。 3. 右手边界敏感性(RHS Sensitivity Ranges): - 约束c1的"Dual Price"列显示为zero,表示该约束条件对目标函数没有影响。 - 约束c2的"Dual Price"列显示为zero,表示该约束条件对目标函数没有影响。 - 约束c3的"Dual Price"列显示为-1.0000,表示当约束c3的右手边界增加1个单位时,目标函数的值会减小1.0000。 4. 上界敏感性(Upper Bound Sensitivity Ranges): - 变量x1的"Reduced Cost"列显示为5.0000,表示当x1的值增加1个单位时,目标函数的值会增加5.0000。 - 变量x2的"Reduced Cost"列显示为zero,表示该变量的值对目标函数没有影响。 - 变量x3的"Reduced Cost"列显示为zero,表示该变量的值对目标函数没有影响。 这些结果描述了在敏感性分析中各个变量和约束条件对目标函数值的贡献程度以及它们的敏感性。这种分析可以帮助你了解在参数和约束条件变化时,模型最优解和约束条件的变化情况。 如果你有更多问题或需要更详细的解释,请随时提问!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值