Megatron 和 deepspeed 大模型训练框架

文章目录

    • 相同点
    • 不同点
      • 开发团队:
      • 专长领域:
      • 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是用一部分内存来补充显存的不足。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/486382.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32进阶 定时器3 通用定时器 案例1:LED呼吸灯——PWM脉冲

功能 它有基本定时器所有功能,还增加以下功能 TIM2、TIM3、TIM4、TIM5 多种时钟源: 外部时钟源模式1: 每个定时器有四个输入通道 只有通道1和通道2的信号可以作为时钟信号源 通道1 和通道2 的信号经过输入滤液和边缘检测器 外部时钟源…

详解Vue设计模式

详解 vue 设计模式 ​ Vue.js 作为一个流行的前端框架,拥有许多设计模式,这些设计模式帮助开发者更好地组织和管理代码,提升代码的可维护性、可扩展性和可读性。Vue 设计模式主要体现在以下几个方面: 1. 组件化设计模式 (Compon…

Tomcat使用教程

下载地址:https://tomcat.apache.org/ 配置环境变量 变量名: CATALINA_HOME 变量值: D:\tools\apache-tomcat-9.0.97 Path: %CATALINA_HOME%\bin 启动Tomcat(打开命令提示符) startup.bat 解决乱码问题(打开conf\logging.properties) java.util.logging.Conso…

免押租赁系统助力资源共享新模式开创便捷租赁体验

内容概要 免押租赁系统,听起来是不是很酷?这个新模式不仅仅是为了让你少花点钱,它的到来简直就是个革命!以前,租东西时首先想到的就是那个令人心痛的押金,对吧?但现在,免押租赁系统…

17. Threejs案例-Three.js创建多个立方体

17. Threejs案例-Three.js创建多个立方体 实现效果 知识点 WebGLRenderer (WebGL渲染器) WebGLRenderer 是 Three.js 中用于渲染 WebGL 场景的核心类。它负责将场景中的对象渲染到画布上。 构造器 new THREE.WebGLRenderer(parameters) 参数类型描述parametersObject可选…

【kettle】mysql数据抽取至kafka/消费kafka数据存入mysql

目录 一、mysql数据抽取至kafka1、表输入2、json output3、kafka producer4、启动转换,查看是否可以消费 二、消费kafka数据存入mysql1、Kafka consumer2、Get records from stream3、字段选择4、JSON input5、表输出 一、mysql数据抽取至kafka 1、表输入 点击新建…

如何让谷歌外链看起来更真实?

在SEO优化过程中,外链的自然性往往会被忽视,尤其是在一些急于见效的策略中,外链往往集中在高权重的少数几个网站上,导致外链结构单一且缺乏多样性。这样的外链网络容易让搜索引擎怀疑其真实性,进而影响网站排名。如何才…

【Qt移植LVGL】QWidget手搓LVGL软件仿真模拟器(非直接运行图形库)

【Qt移植LVGL】QWidget手搓LVGL软件仿真模拟器(非直接运行图形库) 打包开源地址: Qt函数库gitee地址 更新以gitee为准 移植后的demo工程: gitee 有些没实现的 后续我会继续优化 文章目录 别碰瓷看清楚:是移植&#…

Spring Data Elasticsearch

简介说明 spring-data-elasticsearch是比较好用的一个elasticsearch客户端,本文介绍如何使用它来操作ES。本文使用spring-boot-starter-data-elasticsearch,它内部会引入spring-data-elasticsearch。 Spring Data ElasticSearch有下边这几种方法操作El…

JavaWeb学习(3)(Servlet详细、Servlet的三种实现方式(面试)、Servlet的生命周期、传统web.xml配置Servlet(了解))

目录 一、Servlet详细。 (1)基本介绍。 (2)基本作用。 1、接收客户端请求数据。 2、处理请求。 3、完成响应结果。 二、Servlet的三种实现方式。 (1)实现javax.servlet.Servlet接口。 1、基本介绍。 2、代码…

如何利用内链策略提升网站的整体权重?

内链是谷歌SEO中常常被低估的部分,实际上,合理的内链策略不仅能帮助提升页面间的关联性,还可以增强网站的整体权重。通过正确的内链布局,用户可以更流畅地浏览你的网站,谷歌爬虫也能更快地抓取到更多页面,有…

jeecg-uniapp 跨域问题解决方法记录

今天折腾这个很恶心的问题,工作需要经验才行,根本没有什么技术难点,都是经验而已 问题在此 发现没有替换掉前缀 :8085/#/pages/login/login:1 Access to XMLHttpRequest at http://192.168.152.32:8194/h5api/api/user/login from origin http://localhost:8085 has been bloc…

解决Jupyter Notebook无法转化为Pdf的问题(基于Typora非常实用)

笔者在完成各项作业和做笔记时,经常用到jupyter notebook;其因为可以同时运行python并提供格式化的数字公式的输入方式,得到了广大用户的喜爱。 当我们想要将.ipynb文件导出为pdf时,有两种常用方法。 1.Ctrlp 2.通过File ->…

69 mysql 中 is null 的实现

前言 Mysql 中我们偶尔会用到 字段为 NULL 的情况 这时候 我们只能使用查询 “select * from tz_test_02 where field1 is null;” 来进行 field1 字段为 null 的行的查询 然后如果是使用 “select * from tz_test_02 where field1 null;” 你会发现查询 不出数据 但是如…

Java进阶(注解,设计模式,对象克隆)

Java进阶(注解,设计模式,对象克隆) 一. 注解 1.1 什么是注解 java中注解(Annotation),又称java标注,是一种特殊的注释 可以添加在包,类,成员变量,方法,参数等内容上 注解会随同…

数据结构考研考点(持续更新)

一、绪论 1、数据元素是数据的基本单位,一个数据元素可以由若干数据项组成,数据项是构成数据元素的不可分割的最小单位。 2、数据结构是数据元素与数据元素之间的关系。 3、数据结构三要素:逻辑结构:独立于计算机(线…

C# Dapper在项目中的使用(mvvm)

Dapper 简介 Dapper 是一个轻量级的对象关系映射(Object - Relational Mapping,ORM)工具,它在.NET 应用程序中用于简化数据库访问操作。它提供了高性能、简单易用的方式来执行 SQL 查询和命令,并且与ADO.NET紧密集成。…

如何抽象策略模式

策略模式是什么 策略设计模式(Strategy Pattern)是一种面向对象设计模式,它定义了一系列算法,并将每个算法封装起来,使它们可以相互替换。这种模式使得算法可以独立于使用它们的客户端而变化。 策略设计模式包含三个主…

算法-字符串-5.最长回文子串

一、题目: 二、思路解析 1.思路: 最长子串——动态数组 2.常用方法: a.字符串的截断 ress.substring(start,end1); 3.核心逻辑: 1.特殊情况:字符串为空或字符串的长度为0 if(snull||s.length())return ""…

【3D AIGC】Img-to-3D、Text-to-3D、稀疏重建(2024年文章汇总)

文章目录 1. Wonderworld:拓展图片边界,生成3D场景2. 3DTopia-XL:扩散模型辅助生成3. 3DGS-Enhancer: 通过视图一致2D Diffusion,提升无界3D Gaussian Splatting (NlPs2024 Spotlight)4. L3DG:Latent 3D Gaussian Diff…