深度学习中的分布式并行策略和内存优化技术

1、分布式并行策略

1、数据并行

2、模型并行

1、流水线并行

1F1B 非交错式调度模式

1F1B 交错式调度模式

2、张量并行

FNN 结构的张量并行示意图

多头自注意力机制的张量并行示意图

3、混合并行

混合并行将多种并行策略如数据并行、流水线并行和张量并行等混合使用

2、内存优化

1、混合精度

动态损失缩放(Dynamic Loss Scaling)和混合精度优化器(Mixed Precision Optimizer)

由于 FP16 的值区间比 FP32 的值区间小很多,所以在计算过程中很容易出现上溢出和下溢出。

BF16 相较于 FP16 以精度换取更大的值区间范围。

2、Adam 优化器

Adam 优化器状态包括采用 FP32 保存的模型参数备份,一阶动量和二阶动量也都采用 FP32 格式存储。假设模型参数量为 Φ,模型参数和梯度都是用 FP16格式存储,则共需要 2Φ + 2Φ + (4Φ + 4Φ + 4Φ) = 16Φ 字节存储。

一阶矩 mtm_tmt 的更新公式为

核心公式: mt=β1mt−1+(1−β1)gtm_t = \beta_1 m_{t-1} + (1 - \beta_1) g_tmt=β1mt−1+(1−β1)gt

• mtm_tmt: 当前的一阶矩(带有惯性的方向)。

• β1\beta_1β1: 遗忘因子,通常设为 0.9 。这意味着当前的方向 90% 取决于历史惯性,只有 10% 取决于当前脚下的真实梯度 gtg_tgt。

二阶矩 vtv_tvt 的更新公式为:

vt=β2vt−1+(1−β2)gt2v_t = \beta_2 v_{t-1} + (1 - \beta_2) g_t^2vt=β2vt−1+(1−β2)gt2

• vtv_tvt: 当前的二阶矩(梯度波动大小的度量)。

• gt2g_t^2gt2: 当前梯度的平方(逐元素平方,抹除了方向,只看大小)。

• β2\beta_2β2: 通常设为 0.999,说明二阶矩会参考非常久远的历史。

核心公式(完整的 Adam 更新公式):

θt=θt−1−αv^t+ϵm^t\theta_t = \theta_{t-1} - \frac{\alpha}{\sqrt{\hat{v}_t} + \epsilon} \hat{m}_tθt=θt−1−v^t +ϵαm^t
(注:m^t\hat{m}_tm^t 和 v^t\hat{v}_tv^t 是为了修正早期数据不足时的偏差,α\alphaα 是你设置的基础学习率,ϵ\epsilonϵ 是一个极小值,比如 10−810^{-8}10−8,防止分母为零。)

3、零冗余优化器(ZeRO)

ZeRO 使用分区的方法,即将模型状态量分割成多个分区,每个计算设备

只保存其中的一部分。这样整个训练系统内只需要维护一份模型状态,减少了内存消耗和通信开

销。

相关推荐
程序员cxuan7 分钟前
太顶了,ChatGPT 要和 Codex 搞一起了。
人工智能·后端·程序员
weixin_446260858 分钟前
ClinEnv:面向Agent的交互式多阶段电子健康记录(EHR)环境
人工智能
allein_STR9 分钟前
【Transformer拆解】-4. 残差连接(Residual Connection)与层归一化(LayerNorm)
人工智能·深度学习·transformer
Mike_66611 分钟前
RealESRGAN超分环境配置
人工智能·realesrgan
sali-tec15 分钟前
C# 基于OpenCv的视觉工作流-章81-弯脚检测
图像处理·人工智能·opencv·算法·计算机视觉
ar012315 分钟前
远程协助加持AR:构建工业智能化协同新格局
人工智能·ar
Caesar122416 分钟前
大模型 + UI 自动化踩坑实录:从 Midscene 到向量库 / MySQL 混合知识库
人工智能
昵称好难啊17 分钟前
4.OpenClaw源码解析_路由的概念
人工智能·算法
Coder小相18 分钟前
LangChain 1.0 第七篇 - Pydantic结构化输出
人工智能·agent·ai编程
无心水20 分钟前
【Harness:落地实战】16、从“只会说”到“能干活”:OpenClaw落地,手动Harness的架构与实现深度解析
人工智能·架构·设计规范·openclaw·养龙虾·hermes·honcho