Megatron-LM: Training Multi-Billion Parameter Language Models Using
Model Parallelism

1. 技术设计原则

Megatron-LM 提出轻量级层内模型并行,无需定制编译器或修改框架,仅通过在 PyTorch 原生代码中插入少量通信操作(如all-reduce)实现,且与流水线模型并行正交互补,可灵活组合。

2.背景:矩阵分块计算

参考:https://www.bilibili.com/video/BV1HdXtY9EuF/?share_source=copy_web&vd_source=0f3d85b09673431159069a2a9a3da50c

在这里插入图片描述
矩阵XXXYYY相乘,即计算XYXYXY,有两种分块运算方式:

  1. YYY拆分为[Y1,Y2][Y_1,Y_2][Y1,Y2]XXX不变
    XmnYnk=Xmn[Y1nk2,Y2nk2]=[XY1,XY2]X^{mn}Y^{nk}=X^{mn}[Y_1^{n\frac{k}{2}},Y_2^{n\frac{k}{2}}]=[XY_1,XY_2]XmnYnk=Xmn[Y1n2k,Y2n2k]=[XY1,XY2]
  2. YYY拆分为 [Y1Y2]\begin{bmatrix} Y_1 \\ Y_2 \end{bmatrix}[Y1Y2],把XXX拆分为[X1,X2][X_1,X_2][X1,X2]
    XmnYnk=[X1mn2,X2mn2]×[Y1n2kY2n2k]=(X1Y1)mk+(X2Y2)mkX^{mn}Y^{nk}= \begin{bmatrix}X_1^{m \frac{n}{2}},X_2^{m \frac{n}{2}} \end{bmatrix} \times \begin{bmatrix} Y_1^{\frac{n}{2} k} \\ Y_2^{\frac{n}{2} k} \end{bmatrix} = (X_1Y_1)^{mk} + (X_2Y_2)^{m k}XmnYnk=[X1m2n,X2m2n]×[Y12nkY22nk]=(X1Y1)mk+(X2Y2)mk

3. 关键模块并行化实现

这一部分的图解为作者自己根据理解画的,如果有错误请指正

(1)前馈网络层(MLP)

公式:FFN(X)=σ(XA)BFFN(X)=\sigma(XA)BFFN(X)=σ(XA)B
设序列长度为lll,隐藏层维度为ddd,前馈网络的隐藏层维度为dFFNd_{FFN}dFFNA∈Rd×dFFN,B∈RdFFN×dA \in \mathbb{R}^{d \times d_{FFN}}, B \in \mathbb{R}^{d_{FFN} \times d}ARd×dFFN,BRdFFN×d
张量并行-前馈网络层

权重矩阵拆分策略:
第一层线性层的权重矩阵按列拆分(A=[A1,A2]A=[A_1,A_2]A=[A1,A2]

  • 使 GeLU 非线性激活可在各 GPU 上独立计算,避免中间同步;
  • 即使得GeLU(XA)=[GeLU(XA1),⋯,GeLU(XAn)]\text{GeLU}(XA)=[ \text{GeLU}(XA_1),\cdots ,\text{GeLU}(XA_n)]GeLU(XA)=[GeLU(XA1),,GeLU(XAn)]

第二层线性层的权重矩阵按行拆分,直接接收 GeLU 输出

  • 在前向传播时仅需对第二层的输出做一次 All-Reduce 聚合输出。
  • 在反向传播时仅需在返回到输入时做一次 All-Reduce 聚合梯度。

通信优化:整个 MLP 模块仅需 2 次 all-reduce 操作(前向1次、反向1次),无额外同步点。

(2)多头注意力(Multi-Head Attention)模块

在这里插入图片描述
注意力头拆分:

  • 将 Q、K、V 对应的权重矩阵按拆分,每个 GPU 负责部分注意力头的计算,无需中间通信;
    注意力输出层权重按拆分,直接接收并行计算结果,仅需在反向传播聚合梯度。

优势:充分利用注意力头的天然并行性,每个 GPU 仅处理部分头的计算,降低单设备内存压力。

(3)输入层与输出层优化

张量并行-输入层
输入嵌入:

  • 按词汇表维度列拆分嵌入矩阵(E=[E1,E2]E=[E_1,E_2]E=[E1,E2]
  • 通过 g 算子(前向 all-reduce)聚合结果,避免单 GPU 存储完整词汇表。

在这里插入图片描述

输出层与损失计算:

  • 融合最终线性层的输出与交叉熵损失计算,直接在各 GPU 上计算局部损失后聚合
  • 无需传输大规模 logits,减少通信量从b×s×vb×s×vb×s×vb×sb×sb×s
  • bbb 为批次大小、sss 为序列长度、vvv 为词汇表大小

4.混合并行策略(模型+数据并行)

混合并行策略
GPU分组:

  • 将 GPU 划分为模型并行组(如8个GPU一组,共同承载一个模型)和数据并行组(不同模型并行组中同位置 GPU 组成,负责梯度同步)
  • 总 GPU 数 = 模型并行度 × 数据并行度

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

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

相关文章

C/C++:AddressSanitizer内存检测工具

AddressSanitizer是gcc自带的内存检测工具&#xff0c;无需额外安装 常见问题 #include <stdlib.h>// 越界访问 void stack_buffer_overflow() {char buffer[1];int i 10;buffer[i] A; // 访问越界 }// 野指针 void use_after_free() {char *text (char *)malloc(size…

【源码】智慧工地系统:智能化施工现场的全新管理方案

智慧工地系统是一个综合利用物联网&#xff08;IoT&#xff09;、大数据、云计算、人工智能&#xff08;AI&#xff09;、移动互联网和BIM&#xff08;建筑信息模型&#xff09;等新一代信息技术&#xff0c;对施工现场的“人、机、料、法、环”等关键要素进行实时、全面、智能…

网络安全等级保护(等保2.0)

网络安全等级保护&#xff08;等保2.0&#xff09;工作全流程指南 等级保护&#xff08;全称“网络安全等级保护”&#xff09;是我国网络安全领域的核心制度&#xff0c;是《网络安全法》规定的法定义务&#xff0c;等保2.0相关国家标准于2019年5月10日正式发布。2019年12月1日…

【Docker】Docker初识

目录 容器技术发展史 Jail时代 1979年贝尔实验室发明chroot 2000年FreeBSD 4.0发行FreeBSD Jail 2001年Linux VServer发行 2004年Solaris Containers发行 云时代 2006年google推出Process Containers 2008年LXC推出 2011年CloudFoundry推出Warden 2013年LMCTFY启动 …

SNMPv3开发--snmptrapd

SNMPv3开发–snmptrapd REF:3min搞定snmpdtrap的配置与使用

机器学习时间序列算法进行随机划分数据是不合适的!

问题代码&#xff1a;数据集划分方式不适合时间序列&#xff0c;会导致评估结果不可靠。 代码在整体流程上是合理的&#xff0c;但针对时间序列数据&#xff0c;存在一个关键问题&#xff1a;使用train_test_split进行随机划分是不合适的。时间序列的特殊性风速数据属于时间序列…

逆向思维下,如何把基金投资做亏?

投资界常说“聪明的人学习别人赚钱的方式”&#xff0c;但如果我们刻意采用逆向思维&#xff0c;想要把基金投资做亏&#xff0c;其实也有科学依据。 今天&#xff0c;我们就从心理学和行为金融的角度&#xff0c;揭示那些真实的投资亏损方法。 ⚡️ 1. 总想追热点&#xff0c…

1-python 自定义模板导出文档-基础实现

使用 Python 根据自定义的 Word 模板和传入的 JSON 数据生成 Word 报告&#xff0c;是自动化文档生成的常见需求。最常用的方法是使用 python-docx 和 docxtpl 库。其中&#xff0c;docxtpl 是基于 python-docx 的模板引擎&#xff0c;支持 Jinja2 模板语法&#xff0c;非常适合…

LeetCode算法日记 - Day 24: 颜色分类、排序数组

目录 1. 颜色分类 1.1 题目分析 1.2 解法 1.3 代码实现 2. 排序数组 2.1 题目解析 2.2 解法 2.3 代码实现 1. 颜色分类 75. 颜色分类 - 力扣&#xff08;LeetCode&#xff09; 给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums &#xff0c;原地 对它们进行排序…

学习一下动调

[NSSCTF 2nd]MyBasedie查一下用ida64打开main函数里面没有什么信息&#xff0c;接着追一下函数&#xff0c;内容在test函数里面函数会对我们输入的内容进行base64加密&#xff0c;这段逻辑也很简单&#xff0c;就是将加密后的字符串和目标字符串依次进行比较&#xff0c;一样就…

Java试题-选择题(22)

Java试题-选择题&#xff08;22&#xff09; 题目以下对JDBC事务描述错误的是 &#xff1f; A) JDBC事务属于JAVA事务的一种 B) JDBC事务属于容器事务类型 C) JDBC事务可以保证操作的完整性和一致性 D) JDBC事务是由Connection发起的&#xff0c;并由Connection控制要通过可滚动…

蓝牙5.3核心技术架构解析:从控制器到主机的无线通信设计

蓝牙5.3核心技术架构解析&#xff1a;从控制器到主机的无线通信设计在无线通信领域&#xff0c;蓝牙技术如何通过精巧的架构设计实现设备间的高效互操作&#xff1f;答案在于其分层架构与标准化的接口定义。蓝牙5.3核心规范作为现代无线通信的重要标准&#xff0c;其系统架构设…

android View#performClick() 和 View#callOnClick() 的差异

文章目录performClick()callOnClick()关键区别对比总结在 Android 中&#xff0c;View.performClick() 和 View.callOnClick() 都是用于触发视图点击事件的方法&#xff0c;但它们的设计目的和执行逻辑存在细微差异&#xff0c;具体区别如下&#xff1a;performClick() 核心作…

PHP单独使用phinx使用数据库迁移

可以独立使用的迁移包对比后&#xff0c;感觉phinx更接近PHP的使用习惯。 为什么要单独用&#xff1f; 因为我不想数据库的迁移文件依赖于某种框架。本来是可以在框架里直接安装这个包的&#xff0c;但是发现这个包依赖cakephp&#xff0c;而cakephp的函数与thinkphp的env()函…

从零开始学习单片机18

使用STM32CubeMX创建工程选择对应芯片后创建工程&#xff0c;首先设置时钟源内部时钟源包括LSI&#xff08;低速时钟&#xff09;和HSI&#xff08;高速时钟&#xff09;&#xff0c;使用内部时钟源就需要将图中的一二处勾选HCLK是芯片运行时的评率&#xff0c;虽然下面标的最大…

如何使用 DeepSeek 帮助自己的工作?

技术文章大纲&#xff1a;利用 DeepSeek 提升工作效率 了解 DeepSeek 的基本功能 DeepSeek 的核心能力&#xff1a;文本生成、代码辅助、数据分析支持的平台与访问方式&#xff08;网页端/API/集成工具&#xff09;适用场景&#xff1a;技术文档撰写、自动化流程设计、数据处理…

计算机毕设javayit商城 基于SSM框架的校园二手交易全流程管理系统设计与实现 Java+MySQL的校园二手商品交易与供需对接平台开发

计算机毕设 javayit 商城uwd1i9 &#xff08;配套有源码 程序 mysql数据库 论文&#xff09;本套源码可以先看具体功能演示视频领取&#xff0c;文末有联xi 可分享随着校园二手物品流通需求增长&#xff0c;传统校园二手交易依赖线下摆摊、社群发布的模式&#xff0c;存在信息分…

Java函数式编程之【流(Stream)性能优化】

Java函数式编程之【流&#xff08;Stream&#xff09;性能优化一、流&#xff08;Stream&#xff09;性能优化的预备知识&#xff08;一&#xff09;并行与并发的区别&#xff08;二&#xff09;Stream操作特性分类&#xff08;三&#xff09;Stream流管道的相关知识二、流&…

Cybero: 1靶场渗透

Cybero: 1 来自 <Cybero: 1 ~ VulnHub> 1&#xff0c;将两台虚拟机网络连接都改为NAT模式 2&#xff0c;攻击机上做namp局域网扫描发现靶机 nmap -sn 192.168.23.0/24 那么攻击机IP为192.168.23.128&#xff0c;靶场IP192.168.23.139 3&#xff0c;对靶机进行端口服务探…

【学习笔记】非异步安全函数(禁止在信号处理中调用)

非异步安全函数&#xff08;禁止在信号处理中调用&#xff09; 一、测试 在信号处理函数&#xff08;Signal Handler&#xff09;中&#xff0c;只有异步信号安全函数&#xff08;async-signal-safe functions&#xff09; 可以安全调用。这类函数的特点是&#xff1a;不使用全…