如果刚开始接触训练大模型,首先一定会碰到DeepSpeed,ZeRO有三个阶段:ZeRO 1,ZeRO 2,ZeRO 3。如果想要理解这三个阶段的不同,需要明白下面两件事: 1.大模型训练过程中的显存占用都有哪些? 2.DeepSpeed ZeRO的三个阶段分别是如何节省显存的? 本篇文章希望用通俗易读的语言来介绍清楚这两件事,让你使用DeepSpeed更加...
ZeRO-2(P_os+g):分布式梯度、优化器状态: ZeRO-2 是 ZeRO(Zero Redundancy Optimizer) 优化的第二个阶段,它在 ZeRO-1 的基础上进一步优化了梯度的存储方式。在 ZeRO-2 中,除了优化器状态被分片存储之外,梯度也被分布式存储,每个 GPU 只存储部分梯度,而不是完整的梯度。这进一步减少了内存消耗,并在大规模模型...
ZeRO(Zero Redundancy Optimizer)是一种去除冗余的分布式数据并行(Data Parallel)方案,分为Stage 1, Stage 2, Stage 3,而Deepspeed就是论文中ZeRO方法的Microsoft官方的工程实现。 ZeRO-Offload为解决由于ZeRO而增加通信数据量的问题,提出将GPU转移到CPU ZeRO-Infinity同样是进行offload,ZeRO-Offload更侧重单卡场景,而ZeR...
为此,ZeRO-Infinity技术应运而生,它在ZeRO-Offload的基础上进一步探索优化,不仅充分利用了GPU显存和CPU内存,更创新地融入了NVMe磁盘空间。通过这些异构存储器的协同作用,ZeRO-Infinity成功突破了GPU内存的限制。具体而言,ZeRO-Infinity的卸载引擎巧妙地利用了CPU和NVMe内存,大幅增加了可用于存储模型参数和激活的内存容...
在Zero中,N越大,单张显卡节省的内存就越多,这两者呈现正比关系。当N远大于12时,单卡上的显存占用将趋近于仅包含模型参数和梯度,每参数占用仅4字节,即原占用的1/4。Zero2 Pos+g进一步将梯度加入到分拆行列,使得当N远大于14时,单卡上的显存占用降低至每参数仅2字节,即原占用的1/8。而Zero3 Pos+g+...
Reminder I have read the README and searched the existing issues. Reproduction deepspeed --include localhost:4,5,6,7 --master_port 14267 ../src/train_bash.py --deepspeed ../deepspeed/zero3.json --stage sft --do_predict --adapter_name_or_...
1. ZeRO的定义 ZeRO,即Zero Redundancy Optimizer,是一种专为大规模分布式深度学习设计的创新内存优化技术。在DeepSpeed框架中,该技术提供了全面的ZeRO阶段支持,包括Stages1、2和3。此外,它还允许将优化器状态、梯度以及模型参数从GPU显存中卸载至CPU内存或硬盘中,从而有效地节省显存资源,助力训练更大规模的模型。
Deepspeed的Zero策略通过Zero-2与Zero-3实现,配置示例与更详细的参数解析可参阅官方文档。在单节点训练场景下,即单机单卡或单机多卡,应避免使用CUDA_VISIBLE_DEVICES与Deepspeed冲突。正确的做法是在localhost后指定训练用GPU。与Trainer一起使用时,Deepspeed支持四种不同的混合方式。常见的组合是直接使用DS...
3、上述的DP和DDP,通过分布式增加了算力,但缺陷还是很明显的:并未节约显存!所以由此产生了ZeRO技术! (1)预训练时,optimizer占用8倍参数量的显存空间,是最耗费显存的,所以肯定先从这种“大户”下手啦!前面的DP和DDP,每块显卡都保存了完整的optimizer,互相都有冗余,能不能消除这个冗余了?比如集群有3块显卡,每块显卡...