Navigate to WaytoAGI Wiki →
Home/Question List/Question Detail

分布式预训练里的流水线并行

Answer

分布式预训练中的流水线并行是一种在模型参数量太大一张卡不能完全放下时采用的切分方法。具体而言,沿着模型的拓扑序将其切分成 p 段,每段为一个 stage。将大小为 N 的 mini-batch 进一步切分为 m 个大小为 M 的 micro-batch(N = m·M),这些 micro-batch 依次进入上述 p 个 stage。

在流水线并行切分后,每个 stage 的耗时会发生变化。假设 1 指出:算力为 1 的节点,处理完整模型的 1 个 micro-batch,前向和反向耗时分别是 t_f 和 t_b。基于此有推论 1:算力为 1/p 的节点,处理完整模型的 1 个 micro-batch,前向和反向耗时分别是 p·t_f 和 p·t_b;推论 2:算力为 1 的节点,处理 1/p 模型的 1 个 micro-batch,前向和反向耗时分别是 t_f/p 和 t_b/p;推论 3:算力为 1/p 的节点,处理 1/p 模型的 1 个 micro-batch,前向和反向耗时分别是 t_f 和 t_b。

从耗时情况来看,理论上界是显存无限大,不需要 pipeline 并行,一把梭直接对 mini-batch 的样本做前向和反向,耗时正比于样本数量,b_best 耗时为 t_best = m·(t_f + t_b)。而最朴素的串行方式,每个 micro-batch 串行逐个做前向和反向,一个 micro-batch 的耗时是 p·(t_f + t_b),那么 1 个 mini-batch 的耗时 t_sequential 是 t_sequential = mp·(t_f + t_b),可见耗时是理论上界的 p 倍,存在大量计算资源闲置空载,硬件利率用很低。

最后小结,3D 并行包括数据并行(DP)、流水线并行(PP)和模型并行(TP)。DP 计算和通信效率友好,但权重显存不友好;PP 要求 mini-batch 里 batch size 足够大以掩盖流水线带来的 overhead,batch size 过大则会增大激活显存占用;TP 权重显存友好,但计算和通信效率不友好,通信量要求大。ZeRO 针对数据并行显存占用大的问题提出优化,Alpa 借鉴 AI 编译器思路对 3D 并行建模并用自动化搜索方式得到并行策略。

Content generated by AI large model, please carefully verify (powered by aily)

References

(7)LLM分布式训练面面观

因此根据推论3可知,所有算力处理整个模型的耗时,跟$$1/p$$的算力处理$$1/p$$段模型的耗时,是一致的。下面开始讨论各种策略下的耗时情况。[heading2]理论上界[content]我们先考虑理想最优情况。此时显存无限大,不需要pipeline并行,一把梭直接对mini-batch的样本做前向和反向,耗时正比于样本数量。由假设1不难算出$$b_\text{best}$$耗时为$$t_{\text{best}}=m\cdot(t_f+t_b)$$[heading2]朴素串行[content]下面考虑最朴素的串行方式,类似于CPU的单周期处理器时代。每个micro-batch串行逐个做前向和反向,如下所示这里蓝色是前向过程,绿色是反向过程,粗略认为反向过程是前向的2倍耗时。此时由推论3知道一个micro-batch的耗时是$$p\cdot(t_f+t_b)$$,那么1个mini-batch的耗时$$t_\text{sequential}$$是$$t_\text{sequential}=mp\cdot(t_f+t_b)$$可见耗时是理论上界的$p$倍,其中有大量的计算资源在闲置空载,硬件利率用很低

(7)LLM分布式训练面面观

当模型参数量太大,一张卡不能完全放下的情况下,就必须对模型进行切分了,流水线并行(Pipeline Parallel)就是一种切分方法。具体来说沿着模型的拓扑序,切分成$$p$$段,每一段为一个stage,因此可以形成逻辑上相互串联的$$p$$个stage将大小为$$N$$的mini-batch进一步切分为$$m$$个大小为$$M$$的micro-batch,因此$$N=m\cdot M$$这些micro-batch依次进入上述$$p$$个stage我们首先研究一下流水线并行切分之后,每个stage的耗时跟原来相比会有什么变化,如下所示假设1:算力为$$1$$的节点,处理完整模型的1个micro-batch,前向和反向耗时分别是$$t_f$$和$$t_b$$推论1:算力为$$1/p$$的节点,处理完整模型的1个micro-batch,前向和反向耗时分别是$$p\cdot t_f$$和$$p\cdot t_b$$推论2:算力为$$1$$的节点,处理$$1/p$$模型的1个micro-batch,前向和反向耗时分别是$$t_f/p$$和$$t_b/p$$推论3:算力为$$1/p$$的节点,处理$$1/p$$模型的1个micro-batch,前向和反向耗时分别是$$t_f$$和$$t_b$$

(7)LLM分布式训练面面观

最后小结一下,本文主要有4部分内容分布式通信原语包括了点对点通信和集合通信的方法。其中集合通信包括了一对多的Broadcast和Scatter,多对一的Reduce和Gather,多对多的AllReduce、AllGather、ReduceScatter和AllToAll3D并行包括了数据并行(DP)、流水线并行(PP)和模型并行(TP)DP的优势是计算和通信效率都很友好,但是权重的显存不友好,每张卡都有一份PP的问题是要求mini-batch里面batch size足够大才能掩盖住流水线带来的overhead。batch size如果过大,会增大激活显存的占用TP的优势是权重显存非常友好,没有冗余。但是计算和通信效率不友好,通信量要求很大,在超出了一个island的时候性能下降很快。ZeRO针对数据并行显存占用大的问题,借鉴了Parameter Server的思路,提出了ZeRO-1,ZeRO-2和ZeRO-3的优化。其中ZeRO-2让每张卡只维护一部分的梯度和优化器状态,显存占用减少到原来的$1/8$,通信带宽保持不变Alpa鉴了AI编译器的思路,对3D并行进行建模,用自动化搜索的方式得到了仅次于手工最优的并行策略PS:由于笔者小A并没有亲手撸过上述内容的所有细节,大部分是通过研究代码和精读优秀文章的方式bottom-up总结而来,本质上是个拾人牙慧的知识搬运工,所以终究是纸上谈兵。因此希望各方有实际经验的大佬猛锤,思维碰撞才生火花,真理越辩越明。如果想了解transformer在NLP/多模态/AIGC的算法知识,分布式训练的知识,以及如何在TVM上做PTQ量化和部署,可以关注我aaronxic哟~

Others are asking
分布式预训练模型并行
分布式预训练模型并行主要包括以下内容: 张量并行:当模型参数增大,除流水线并行外,还可用张量并行缓解,即以前的模型并行。以矩阵乘为例,对权重矩阵 B 有按列切分和按行切分两种方案。按列切分,A 不变,每一列独立计算后结果 concat 在一起;按行切分,A 对应列切分,两部分独立计算后结果 sum 在一起。 大模型发展历程:2017 年发布的 Attention Is All You Need 论文开启了相关研究。之后有多种预训练模型,如 2018 年 Google 提出的 BERT,创新性地双向预训练并行获取上下文语义信息和使用掩码语言建模;2018 年 OpenAI 提出的 GPT,开创仅用自回归语言建模作为预训练目标;2021 年 Meta 提出的首个开源模型 LLAMA,为构建更大规模、更通用的语言模型提供方法与工具。 分布式训练的其他方面: 分布式通信原语包括点对点通信和集合通信,集合通信包含多种方式。 3D 并行包括数据并行,各自有优势和问题。 ZeRO 针对数据并行显存占用大的问题提出优化,Alpa 借鉴 AI 编译器思路对 3D 并行建模并用自动化搜索方式得到并行策略。 如果想了解更多关于 transformer 在 NLP/多模态/AIGC 的算法知识、分布式训练知识,以及如何在 TVM 上做 PTQ 量化和部署,可以关注作者 aaronxic。
2025-03-12
分布式预训练数据并行
分布式预训练中的数据并行是使用广泛且加速性能良好的并行方法。各个数据切片能完全解耦,只需在每个 minibatch 结束时进行梯度的 allreduce。数据并行分为中心化方式(如 pytorch 里的 DataParallel)和无中心化方式(如 pytorch 里的 DistributedDataParallel)。这两种方式最大的区别在于 gradient 和 reduce 计算过程。DataParallel 需在 forward 之后把所有输出 gather 到 0 号卡上,计算完 loss 之后再 scatter 到各个设备上,然后做 backward 独立计算 gradient,最后搜集 gradient 到 0 号卡,forward 和 backward 间需插入一次通信。DistributedDataParallel 则是每张卡独立做 forward 和 backward,然后对各卡的 gradient 做 allreduce,forward 和 backward 间无需通信。此外,ZeRO 的出发点是优化数据并行中的显存占用,因为在数据并行中,每个 device 上都有完整的权重、梯度和优化器状态信息,较为冗余。
2025-03-12
分布式预训练
分布式预训练是指在训练模型时采用的一种方法。 在训练 GPT 时,模型以完全随机的权重开始,随着训练时间的推移,通过从分布中抽样并持续反馈,逐渐学会关于单词、空格和逗号等的知识,预测也越来越一致。观察训练时,可通过损失函数随时间的变化来评估。经过预训练,模型在语言建模中学会强大的通用表示,能有效对任意下游任务进行微调。 此外,还有一些关于初始化权重的灵活方法,如利用非监督式训练方式逐个训练神经层。例如,以受限玻尔兹曼机器(RBM)开始,通过对比发散进行训练,生成隐藏值并模拟训练另一个 RBM,重复此过程形成多层,如有分类需求可添加隐藏单元并微调权重,这种非监督式与监督式的组合也称为半监督式学习。 深度信念网络(DBNs)在标准化 MNIST 字符识别数据库中有出色表现,超越普通神经网络。Yoshua Bengio 等提出深层网络冗余式逐层训练,认为深度机器学习方法在复杂问题上比浅显方法更有效。关于非监督式预训练,利用自动代码取代 RBM 也是一种看法,其关键在于有足够多的显示层,能学习优良的高层数据显示,与传统手动设计特征提取步骤不同。Hinton 与 Bengio 的工作证明了深层神经网络能被训练好的假设是正确的。
2025-03-12
deepseek 分布式如何部署
DeepSeek 的分布式部署情况如下: 腾讯云(自建服务器):提供全版本,采用多机分布式部署,节点数量为 2 个,单节点配置为 HCCPNV6 机型,可在线体验(需开通 T1 平台服务)。 腾讯云(调用 API):提供 DeepSeekR1 和 DeepSeekV3 版本,API 调用 DeepSeek 系列模型限时免费。即日至北京时间 2025 年 2 月 25 日 23:59:59,所有腾讯云用户均可享受 DeepSeekV3、DeepSeekR1 模型限时免费服务,单账号限制接口并发上限为 5。在此之后,模型价格将恢复至原价。 京东云:提供“deepseekr1:1.5b”、“deepseekr1:7b”、“deepseekr1:32b”版本,价格为 1.89 元/小时起,采用服务器部署的方式。 Gitee AI:提供全版本,R1 价格 0.1 元/次,基于沐曦曦云 GPU 及曦源一号国产替代算力集群,有在线体验。 此外,还可以通过以下步骤实现 DeepSeek 联网版的部署: 1. 拥有扣子专业版账号,如果是普通账号,请自行升级或注册专业号后使用。 2. 开通 DeepSeek R1 大模型,访问地址:https://console.volcengine.com/cozepro/overview?scenario=coze 。打开火山方舟,找到开通管理,找到 DeepSeek R1 模型,点击开通服务。添加在线推理模型,添加后在扣子开发平台才能使用。 3. 创建智能体,点击创建,先完成一个智能体的创建。
2025-02-20
deepseek 分布式部署
以下是关于 DeepSeek 分布式部署的相关信息: 云计算厂商提供的 DeepSeek 版本及特点: 腾讯云(自建服务器):全版本,多机分布式部署,节点数量 2 个,单节点配置为 HCCPNV6 机型,可在线体验(需开通 T1 平台服务)。 腾讯云(调用 API):DeepSeekR1、DeepSeekV3,API 调用 DeepSeek 系列模型限时免费,即日起至 2025 年 2 月 25 日 23:59:59,所有腾讯云用户均可享受限时免费服务,单账号限制接口并发上限为 5,之后模型价格将恢复原价。 京东云:“deepseekr1:1.5b、“deepseekr1:7b”、“deepseekr1:32b”,价格 1.89/小时起,服务器部署方式。 gitee ai:全版本,R1 价格 0.1 元/次,基于沐曦曦云 GPU 及曦源一号国产替代算力集群,有在线体验。 价格方面: 腾讯云(调用 API):即日起至 20250208 24:00 享受折扣价,20250209 00:00 恢复原价。输入:¥2¥1/M Tokens,输出:¥8¥2/M Tokens。当前有优惠活动,包括邀请好友赚 2000 万 Tokens,注册即送 2000 万 Tokens。 阿里云(人工智能平台 PAI):以 R1 为例,所需计算资源价格 316.25/小时,模型部署成在线服务,在人工智能平台 PAI 下的模型部署下的模型在线服务 EAS。 阿里云(阿里云百炼):全版本,免费额度:10000000/10000000,通过 API 调用。 华为昇腾社区:全版本,部署 DeepSeekR1 模型用 BF16 权重进行推理至少需要 4 台 Atlas 800I A2(864G)服务器,用 W8A8 量化权重进行推理则至少需要 2 台 Atlas 800I A2,服务器调用 Docker 下载部署权重资源,非 API 调用模式。
2025-02-20
内容生成流水线
在 AIGC 与宠物龙养成游戏——DragonX 中,AI 生产发挥了重要作用。整个 Demo 中超过 90%的内容由 AI 生成,涵盖养成(龙的表现、养成材料水晶)、战斗(技能、技能描述、战斗过程、文字表现、战斗背景图)、游历(游历故事、选项、支线故事、故事背景图)、大厅(不同风格 HUD、音频 BGM)等方面。所使用的 AI 生产工具包括:Stable Diffusion 用于生成所有美术素材,如各阶段的龙、水晶材料、背景等;ChatGpt 用于文案内容生成,包括实时的对战、游历故事生成;AIVA 用于音频生成,应用场景为不同 Hud、战斗、游历的 BGM。您可以通过以下系列阅读获取更多信息:
2025-02-24
你好,我想训练一个自己的专属模型,比如说基于网页里面的问卷调查,我有答题的逻辑,网页的问卷调查项目每天都有非常多的不同的地方,但是又有相通的地方,我想让AI在我的逻辑之上能自我迭代自动答题,我该怎么办
如果您想基于网页问卷调查训练一个能在您的逻辑之上自我迭代自动答题的专属模型,有以下两种常见的技术方案: 1. 训练专有大模型: 优点:效果最好。 缺点:成本高,训练和维护需要大量计算资源和专业知识;更新模型知识难度大,需要重新训练或微调,过程复杂耗时。 2. 利用 RAG(检索增强生成)技术: 例如选择 Baichuan27BChat 模型作为底模,配置模型本地路径和提示模板。在 Train 页面里选择 sft 训练方式,加载定义好的数据集,根据数据集大小和收敛情况设置学习率和训练轮次。使用 FlashAttention2 可减少显存需求、加速训练速度;显存小的朋友可减少 batch size 并开启量化训练,内置的 QLora 训练方式好用。但需要用到 xformers 的依赖。根据聊天记录规模大小,训练时间少则几小时,多则几天。 此外,还有学生训练专属植物分类 AI 模型的案例供您参考。在北京市新英才学校的跨学科选修课“生化 E 家”中,老师和学生共同收集校园内不同树叶的照片,在 OpenInnoLab里找到图像分类训练工具,建立植物分类模型,加入大量数据集进行训练,再用图像化编程将其套在程序里,形成简单的识别工具。在这个过程中,老师通过生活体验与学生讨论图像分类原理,学生从体验到实践操作,在不进行大量代码编程的情况下能够训练 AI 模型,并了解模型训练准确度与数据的关系。
2025-03-14
怎么快速生产训练语料
以下是快速生产训练语料的一些方法: 1. 在 LORA 模型训练中: 首先在脚本的 LoraTraining 目录下新建训练文件夹命名为 train。 如果需要训练多个概念,就在(input_角色名称)下面再新建一个文件夹,命名写(训练次数_角色名称_泳装)进行文件夹区分。 在脚本根目录下面建立一个训练文件夹(train),在(train)文件夹内建立一个概念文件夹和一个正则化文件夹(reg,不需要正则化可不建立),在概念文件夹内建立训练素材文件夹(训练素材文件夹前面的需要加“_”你想训练的次数)之后将训练素材放置进去即可。 正则化素材方面,正则化在深度学习中指的是给模型加一些规则和约束,限制要优化的参数有效防止过拟合。假设在训练集里面放入了一个泳装角色的训练素材,那么为了防止过拟合的问题,在正则化文件夹内放入一些同样是泳装的图片素材。正则化素材注意不要过多,不然机器会过多的学习到里面的素材导致跟训练目标角色不一致。 2. 对于神经网络大模型: 大模型生成文字的过程,是根据输入的文字,预测下一个字。通过一次又一次反复的调用同一个神经网络模型,一个一个字的往后续写,直到输出结束符号为止。 大模型的输出并不是一个字,而是所有字都输出一个概率。可以选择最高概率的或者第二高的汉字作为输出结果,也可以从前几名当中随机挑选。 可以将任何网络上的文本直接当作训练素材来训练神经网络模型。把任意一段文字的前几个字作为输入,而下一个字作为答案用做训练素材,从而方便地得到大量的训练素材。 3. 在雅思口语备考中: 如果时间充裕,建议把每个 topic 的问题喂给 GPT,让它一道道问您,您回答,然后转成文本查看发音问题。 让 GPT 对您的内容执行 correct 或者 another native answer 两个指令。前者可以基于您的内容做修正,后者是在自己完全没思路时让它给出答案。 对语料进行分类归纳,如按照教育、工作、购物、科技、消费分成几大类,再弄吃、环保、交通、历史等专题,挑最不熟悉、现场水不出来的准备。考前 1 小时,再顺一遍语料,多看两眼关键表达。
2025-03-14
如何训练自己的智能体
训练自己的智能体可以参考以下步骤: 1. 创建智能体 知识库 手动清洗数据:上节课程是自动清洗数据,自动清洗数据可能出现数据不准的情况,本节尝试手动清洗数据以提高准确性。参考。 在线知识库:点击创建知识库,创建一个画小二课程的 FAQ 知识库。飞书在线文档中每个问题和答案以分割,选择飞书文档、自定义的自定义,输入,可编辑修改和删除,添加 Bot 后可在调试区测试效果。 本地文档:对于本地 word 文件,注意拆分内容以提高训练数据准确度,例如对于画小二的 80 节课程,分为 11 个章节,不能一股脑全部放进去训练,要先将大章节名称内容放进来,章节内详细内容按固定方式人工标注和处理,然后选择创建知识库自定义清洗数据。 发布应用:点击发布,确保在 Bot 商店中能够搜到,没有通过发布无法获取 API。 2. 参考谷歌发布的世界模型 Genie:或许有一天,Genie 可以被用作训练多任务智能体的基础世界模型。在图 14 中,作者展示了该模型已经可以用于在给定起始帧的全新 RL 环境中生成不同的轨迹。 3. 了解基础通识课中的相关内容: 流式训练方式提升训练速度和质量。 多种 AI 生成工具,如输入简单提示词就能创作音乐的 so no 音频生成工具,能创建个人 AI 智能体的豆包,输入文本可生成播客的 Notebook LN。 端侧大模型的特点。 AI 工程平台,如 define,涉及数据清洗管道、数据存储和检索、编辑生成平台、构建 prompt 技巧、智能体概念、插件调用、运维平台、模型层和缓存机制等,还能接入多家大模型。 AI 工程平台 coach 的应用,包括新手教程和文档,可创建智能体,通过工作流节点调用和 prompt 构建提示词,还能调用插件、图像流、知识库等,商城中有各种智能体和插件模板,知识库可添加多种格式内容。 模型社区介绍,如魔搭社区等。 AI 建站预告。
2025-03-13