文章目录
- 相同点
- 不同点
- 开发团队:
- 专长领域:
- GPU优化:
- 功能特性:
- 框架支持:
- 优势比较
- Megatron优势:
- DeepSpeed优势:
- Megatron训练框架最主要的特点、优缺点
- 优点:
- 缺点:
- 扩展对比深入探究
- 其他训练框架
- 各种混合精度训练的优劣
- 各个zero stage都有什么用:
Megatron和DeepSpeed是两个用于大规模深度学习模型训练的框架,它们各有特点,但也存在一些共同之处。以下是它们的主要异同和优劣比较:
相同点
大规模模型支持:两个框架都专注于支持大规模模型的训练,特别是Transformer架构的语言模型.
并行训练技术:两者都实现了多种并行训练技术,包括数据并行、模型并行和流水线并行.
框架兼容性:两个框架都可以与PyTorch等主流深度学习框架集成使用.
不同点
开发团队:
Megatron:由NVIDIA开发
DeepSpeed:由微软开发
专长领域:
Megatron:更专注于模型并行,特别是张量并行(Tensor Parallelism)技术
DeepSpeed:在数据并行方面更为出色,尤其是其Zero系列的分布式数据并行方案
GPU优化:
Megatron:作为NVIDIA的产品,对NVIDIA GPU有更深入的底层优化
DeepSpeed:虽然也进行了GPU优化,但不如Megatron针对NVIDIA GPU的优化深入
功能特性:
Megatron:提供核心构建模块,如注意力机制、转换器模块等
DeepSpeed:提供更多的优化功能,如梯度累积、激活检查点等
框架支持:
Megatron-LM:主要支持PyTorch
DeepSpeed:支持多个深度学习框架,包括PyTorch、TensorFlow和Horovod
优势比较
Megatron优势:
在模型并行,特别是张量并行方面表现出色
对NVIDIA GPU的底层优化更为深入,可能在某些情况下性能更佳
DeepSpeed优势:
在数据并行方面更为出色,特别是其Zero系列技术
提供更多的内存优化技术,如ZeRO (Zero Redundancy Optimizer)
支持更多的深度学习框架,适用性更广
结论
实际上,Megatron和DeepSpeed并不是完全竞争的关系,它们更多地是互补的。许多大规模模型训练项目,如BLOOM,都选择同时使用Megatron-DeepSpeed,结合两者的优势来实现最佳的训练效果。Megatron-DeepSpeed结合了Megatron的模型并行和DeepSpeed的数据并行技术,为大规模模型训练提供了更全面和高效的解决方案.
Megatron训练框架最主要的特点、优缺点
Answer
Megatron训练框架的主要特点和优缺点如下:主要特点:
专注于大规模Transformer模型训练,特别是语言模型。
实现了多种并行训练技术,包括数据并行、模型并行(张量并行)和流水线并行。
对NVIDIA GPU进行了深度优化,特别是在张量并行方面表现出色。
提供了核心构建模块,如注意力机制、转换器模块等。
主要基于PyTorch框架开发。
优点:
在模型并行,特别是张量并行方面表现优异,能有效处理超大规模模型。
对NVIDIA GPU的底层优化深入,在某些情况下性能更佳。
提供了灵活的模型并行策略,可以根据需求进行调整。
支持混合精度训练,可以减少内存消耗并提高计算性能。
缺点:
主要支持PyTorch,对其他深度学习框架的支持较为有限。
相比DeepSpeed,在数据并行和内存优化方面的功能较少。
学习曲线较陡,对新用户可能不太友好。
主要针对NVIDIA GPU优化,在其他硬件平台上的性能可能不如预期。
总的来说,Megatron在处理大规模Transformer模型,特别是在模型并行和NVIDIA GPU优化方面表现出色。但它在框架支持和功能多样性上不如DeepSpeed全面。实际应用中,许多项目选择将Megatron和DeepSpeed结合使用,以充分发挥两者的优势。
扩展对比深入探究
1.Megatron以及deepspeed实现原理,各种参数以及优化策略的作用
大模型训练分为两种方式:ZeRO系列,3D并行(TP+PP+DP)
ZeRO(零冗余优化器)
微软提出的一种数据并行(DP)方案,所以DeepSpeed支持最好。
DeepSpeed系列有ZeRO1/ZeRO2/ZerO3,以及+offload,
最近还推出了ZeRO++
比较好的讲解参考,可以关注一下ZeRO1/ZeRO2/ZerO3的训练时的显存:
basicv8vc:DeepSpeed之ZeRO系列:将显存优化进行到底
具体参数和优化策略,参考JOYWIN大佬的说明。
JOYWIN:deepspeed入门教程
3D并行(TP+PP+DP)
有兴趣的同学具体参考。
白强伟:【深度学习】【分布式训练】一文捋顺千亿模型训练技术:流水线并行、张量并行和3D并行
公开的千亿大模型BLOOM是基于megatron-deepspeed
说明:这个部分本来应该大书特书,但是因为写清楚这2种方式篇幅实在太长。假设上面的文章链接大概读懂的情况下,下面写几个细节小点。
megatron是NV家的,张量并行(TP)是最专业的,尽管通信速度限制TP应用在有NVLINK的节点内。
zero1和3d并行不矛盾,现在训练时一般都是tp+pp+zero1。
早期megatron和deepspeed都不够完善,megatron-deepspeed里megatron做TP,deepspeed做PP和ZeRO1,当然现在megatron自己应该都可以了。
新版本的pytorch自己也支持ZeRO,参考FSDP
有条件的同学建议去跑一跑megatron和megatron-deepspeed上gpt2的示例训练流程,
其他训练框架
megatron
colossal-ai
NVIDIA的NeMo
alpa
2.模型训练以及推理中的显存占用,各种混合精度训练的优劣
模型训练以及推理中的显存占用
现在都是fp16或者bf16训练和推理,那么如果是1个100亿参数量的模型(也就是储存了100亿个参数),它其实是一个10B大小的模型。(1Billion等于10的9次方,也就是10亿)
1个字节占8bits,那么fp16就是占2个字节(Byte),那么10B模型的模型大小是20GB,是*2的关系。
所以 n B 模型,推理时显存的下限是 2n GB ,至少要把模型加载完全。
训练时,如果用Adam优化器,有个2+2+12的公式,训练时显存下限是16n GB,需要把模型参数、梯度和优化器状态(4+4+4),保持在显存中。具体细节请看ZeRO论文。
再次祭出大佬的文章:
回旋托马斯x:分析transformer模型的参数量、计算量、中间激活、KV cache
各种混合精度训练的优劣
主要参考大佬的文章:
Alex不在成都:大模型训练中的 fp32/fp16/bf16、混合精度、训练溢出
简单梳理下逻辑,混合精度是因为显卡fp32计算单元少,比如A100 fp16计算能力为312tflops,而fp32只有156tflops,也就是fp16的1/2。
使用混合精度fp16后,训练速度变快,但容易溢出。在计算softmax时切回fp32,大模型的必备做法。
但是还是有风险,所以用bf16训练,对于大型 transformer,bf16 损失的精度被证明不怎么影响收敛。当然,只有A100及以后的显卡支持bf16,V100不行。
3.deepspeed的特点是什么?各个zero stage都有什么用?
特点:
简单易用,ZeRO系列基本不需要改模型相关的代码,支持多机多卡。
大部分配置都在config文件中直接配置,比如最重要的,ZeRO策略选择,以及用fp16还是bf16,是否测试flops等。
多机上相互设置ssh免密登陆,配置1个hostfile文件,即可多机训练。
deepspeed也支持pipeline并行,但是需要做一些修改,参考:
刘聪NLP:大模型流水线并行(Pipeline)实战
各个zero stage都有什么用:
这个问题其实不好,不应该叫有什么用,就是一个显存不太够的穷鬼,不断的降低显存占用,当然通信量上升,而且训练速度越来越慢。
主要还是因为现在的模型太大。ZeRO1是优化器切分到各卡,ZeRO2是梯度切分到各卡,ZeRO3是模型参数切分到各卡。OFFLOAD是用一部分内存来补充显存的不足。