02|分布式训练:数据并行与张量并行

研究定位

并行主要解决两个不同问题:模型能放进单卡但训练太慢,或者模型本身已经放不进单卡。前者优先想到数据并行,后者才需要切模型。

张量并行

并行策略与代价

数据并行:复制模型,切分 batch

GPU0: 模型 M + batch₀ → grad₀ ┐
GPU1: 模型 M + batch₁ → grad₁ ├→ All-Reduce → 参数保持一致
GPU2: 模型 M + batch₂ → grad₂ ┘

若单卡 batch 为 b,卡数为 n,全局 batch 通常为 B = nb。它提高吞吐,但会增加梯度通信;全局 batch 变化还可能要求调整学习率。

张量并行:切分一层的矩阵

Y = XW,   W = [W1, W2, …, Wn]

列并行让各卡计算 Yi = XWi 后拼接;行并行则让各卡计算部分和,再归约。它适合单层权重就很大的模型,但层内通信更频繁。

继续扩展

  • 流水线并行:不同 GPU 放不同层或阶段。
  • ZeRO/FSDP:分片参数、梯度与优化器状态。
  • 混合并行:数据、张量、流水线往往组合使用。

资料里的 KMP_DUPLICATE_LIB_OK=TRUE 只是 OpenMP 重复加载的临时绕过,不是修复。更可靠的方法是统一 Python 解释器与包来源,并在最小新环境中复现;不要随意删除 DLL。

研究小结

  • 模型放得下,只缺吞吐:数据并行。
  • 模型或单层放不下:张量/流水线并行。
  • 优化器状态也放不下:参数与状态分片。
  • 多卡不等于线性加速,通信和负载均衡决定实际收益。

研究延伸

并行策略的研究重点不是“能不能切”,而是通信、显存和计算之间的交换。后续可以补一个小表:数据并行、张量并行、流水线并行、ZeRO/FSDP 分别切分什么,通信发生在什么时刻,瓶颈随 batch size 和模型规模如何变化。

实验上可记录单卡、DDP、多卡梯度累积的吞吐和显存曲线。只看是否跑通不够,应该把利用率、通信等待和收敛差异一起写下来。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇