更新,因为下面有问到论文的情况,实际在这个领域我们已经有三篇顶会论文:
1、关于全自动并行的策略寻优:
• EuroPar2021—自动并行双递归《Efficient and Systematic Partitioning of Large and Deep Neural Networks for Parallelization》。
2、关于图算融合和算子自动生成的
另外还有几篇论文在路上,有了结果再和大家同步。
利益相关。
其实,这次HDC大会,华为联合鹏城发布了两个千亿的NLP大模型(其中一个模型还和循环智能进行了合作),都是盘古命名的。
一个是4月25日发布的Transformer encoder-decoder的中文理解模型;另外一个4月26日发布的是Transformer decoder的中文预训练模型。这两个模型是不同的定位,也是分别训练出来的。其中第二个预训练模型现在已经开源出来了。
这种超大的模型考验的是全栈和全流程的能力:
1、丰富的数据集和良好的数据清洗
2、硬件系统:芯片、互联、整机
3、硬件使能:高性能的算子库和融合能力
4、AI框架:分布式并行、编译优化
5、AI使能平台:资源管理和调度
6、优秀的算法和模型设计
7、全面的系统工程:包括精度调优、性能调优、模型切分、集群可靠性等等
只有这些能力都达到一流/没有短板,你才能训练出这样的大模型,否则即便给你K级集群,你也用不起来。所以这两个千亿模型训练出来是鹏城、华为EI/智能计算/海思/诺亚实验室/中央软件院等通力协作的结果。
MindSpore作为AI框架有幸同时支撑了这两个千亿模型的训练,过程其实非常艰辛,但总算熬过来。下面就简单介绍一下作为AI框架支撑千亿模型的挑战和解决方案:
千亿参数,TB级显存的模型
以盘古2000亿(基于Transformer decoder结构的预训练模型)为例,如果我们训练时权重都用标准的 FP32 数据格式,那么算下来,权重占的空间就达到了 750GB,训练过程中内存开销还会数倍上升。这 750GB 参数,不是放在硬盘上,也不是加载到内存中,而是需要移到昇腾基础硬件平台 HBM(High Bandwidth Memory高带宽存储器)内存中,以利用昇腾基础软硬件平台进行模型训练。
模型大 ,意味着数据也大,而且都需要是高质量数据。为了满足数据需求,研发团队从互联网爬取了80TB文本,并最后清洗为1TB的中文数据集。
这样的模型与数据,已经不是我们几台服务器能加载上的了,更不用说进行训练。好在研发团队会提供 API,一般算法工程师直接调用接口就能试试效果。
超大规模并行
如果给你足够的计算力,你能想到如何训练这么大的模型吗?我们最常用的分布式训练方式数据并行,单独这么做肯定是不行的,因为没有哪个 计算硬件能放下 800GB 的参数。那么再加上模型并行呢?又产生了新问题,我们该如何拆分如此巨大的「盘古」?硬件产品(如GPU等)之间的梯度流、数据流通信又是什么样的?
显然训练如此庞大的模型,远比我们想象中的复杂,需要大量的工程化操作,并保证这些操作不会或极少影响到模型最终收敛效果。
如果手动来写分布式训练逻辑,那么需要综合考虑计算量与类型、集群带宽、拓扑结构、样本数量等等一大堆复杂的东西,然后再设计出性能比较优秀的并行切分策略,并编写大量并行切分和节点间的通信代码。如果系统环境变了,还要重新设计并修改算法,想想就觉得头大。
MindSpore提供了5维的并行方式:数据并行、算子级模型并行、Pipeline模型并行、优化器模型并行和重计算,并且在图编译阶段,有机融合了5个维度的并行。这5维并行方式组合起来构成了盘古的并行策略。
1、数据并行
数据并行是最基本,应用最广的并行方式,其将训练数据(mini-batch)切分,每台设备取得其中一份;每台设备拥有完整的模型。在训练时,每台设备经过梯度计算后,需要经过设备间的梯度同步,然后才能进行模型参数的更新。
2、算子级模型并行
算子级模型并行是对模型网络中的每个算子涉及到的张量进行切分。MindSpore对每个算子都独立建模,每个算子可以拥有不同的切分策略。
以矩阵乘算子MatMul(x, w)为例,x是训练数据,w是模型参数,两者都是二维矩阵。并行策略((4, 1), (1, 1))表示将x按行切4份,保持w不切,如果一共有4台设备,那么每台设备拥有一份x的切片,和完整的w。
3、Pipeline 模型并行
Pipeline模型并行将模型的按层分成多个stage,再把各个sage映射到多台设备上。为了提高设备资源的利用率,又将mini-batch划分成多个micro-batch,这样就能够使得不同设备在同一时刻处理不同micro-batch的数据。
一种Pipeline并行方式(Gpipe) 要求反向计算要等所有设备的正向计算完成后才开始,而反向计算可能依赖于正向的输出,导致每个卡正向计算过程中累积的activation内存与micro-batch数量成正比,从而限制了micro-batch的数量。MindSpore的Pipeline并行中,将反向提前,每个micro-batch计算完成后,就开始计算反向,有效降低activation存储时间,从而提升整体并行效率。
4、优化器模型并行
优化器模型并行将优化器涉及到的参数和梯度切分到多台设备上。以Adam优化器为例,其内部可能有多份与权重同等大小的“动量”需要参与计算。在数据并行的情况下,每个卡都拥有完整的“动量”,它们在每个卡上都重复计算,造成了内存及计算的浪费。通过引入优化器并行,每个卡只保存权重及“动量”的切片,能降低每个卡的静态内存及提升计算效率。
5、重计算
重计算(Rematerialization)针对正向算子的输出累计保存在内存中,导致内存峰值过大的问题,舍弃了部分正向算子的输出,而是在反向阶段用到时再重新计算一遍。这样做有效地降低了训练过程中的内存使用峰值。如下图所示,第一个内存峰值通过重计算消除,第二个内存峰值可以通过前面讲到的优化器并行消除。
有了这5维的并行维度后,如何将其组合起来作用于盘古,并且如何将切分后的模型分片分配到每台设备上仍然是难题。MindSpore自动并行,把这5个维度并行有机组合起来,可以实现非常高效的大模型分布式训练能力
下图(b)是一典型的树形的硬件拓扑结构,其带宽随着树深度的增加而降低,并且会产生一些流量冲突。为了利用此特征,MindSpore的目标是最大化计算通信比,将通信量大的并行方式(算子级并行)放置在服务器内部的多卡之间;将通信量较小(Pipeline并行)的放置在同一机架内的服务器间;将数据并行(优化器并行)的部分放置在不同机架间,因为该通信可以和计算同时执行(overlap),对带宽要求较低。
在盘古2000亿模型中,MindSpore将64层(layer)划分为16个stage,每个stage包含4层。在每层中,利用算子级并行的方式对张量进行切分。
如下图中的Q,K,V的参数在实际中(按列)被切了8份,输入张量(按行)被切了16份,输出张量因此被切了128份(8*16)。重计算配置是配置在每层内的,也就是重计算引入的多余的计算量不会超过一层的计算量。总计,MindSpore使用了2048块昇腾处理器来训练盘古。
MindSpore对外屏蔽了复杂并行实现的细节,使得用户像编写单机模型脚本那样简单。用户在单机脚本的基础上,仅通过少了配置就能实现多维度的混合并行。下图是简化版的盘古脚本,其中红色加粗字体表示的在MindSpore中的并行策略。将红色加粗字体去掉,则是单机脚本。
除了跨节点间的大规模自动外,在单卡节点内,MindSpore通过图层和算子层的跨层协同优化,来进一步发挥昇腾算力。
在传统的NN网络中,不同算子承载的计算量和计算复杂度也各不相同。如LayerNorm由11个基本算子组成,而Add则只有1个基本算子。这种基于用户角度的算子定义,通常是无法充分发挥硬件资源计算能力的。因为计算量过大、过复杂的算子,通常很难生成切分较好的高性能算子。从而降低设备利用率;而计算量过小的算子,由于计算无法有效隐藏数据搬移开销,也可能会造成计算的空等时延,从而降低设备利用率。
为了提升硬件利用率,MindSpore使用了图算融合优化技术,通过图层和算子层联合优化,并将“用户使用角度的易用性算子”进行重组融合,然后转换为“硬件执行角度的高性能算子”,从而充分提升硬件资源利用率,进而提升整网执行性能。具体优化流程如下图所示:
以LayerNorm算子为例,通过算子拆分和重组,11个小算子,组成了1个单算子和2个融合算子。这些重组后的算子可以生成更加高性能的算子,从而大大降低了整体网络运行时间。
在盘古模型中,图算融合帮助整体训练时间减少了20%以上。除此之外,对于其它 NLP、CV等任务,图算融合在优化性能方面都有不错的表现。
即使给我们足够的算力,超大模型的训练还是异常复杂,远比想象中的困难。对于我们一般算法工程师来说,针对某个任务,上亿参数量已经算大的了,但是并不会感到训练上会有什么困难,因为各个深度学习框架直接调用数据并行接口就能搞定。
但是如果模型继续增大到百亿级、千亿级甚至万亿级,并行与优化策略的复杂度猛然上升,算法工程师一点点地编写与优化代码可太难了。MindSpore通过编译器并行优化能力,把计算逻辑和并行逻辑解耦,单卡串行代码自动实现分布式并行,从而使得算法科学家将精力都解放到模型本身上。
为了从预训练获取更多的知识, GPT-3 与盘古 这样的模型会越来越大,毕竟到现在我们还没看到大模型预训练效果的极限在哪。届时,这类模型对基础设施的需求会更大,并行与优化策略也会更加复杂。预训练的效果,看的也已经不是模型本身,而是基础设施构建得是否足够优秀。大规模计算集群及软硬件协同优化,这次在盘古 的训练上得到了充分的完美体现。
当然,也诚如以上所言,盘古只是对超大规模分布式训练、超大规模中文预训练模型的一次探索,未来还需要更多的研究工作者投入到通用智能与大规模分布式计算的研究工作中。
更新-盘古-a的相对全面的情况:
女王:求求题主放过我,我可不敢有什么政绩。。。
首先这是Fed一月 memo
先说结论:
FOMC 维持利率在 0-0.25% 不变。且确定 3 月完全停止 QE,同时 3 月加息也是箭在弦上,基本会后声明皆符合市场预期,没有太多的意外。
Powell 记者会确实是偏一点点的小鹰派,但我也认为,Powell 的说法不至于拉升市场加息预期至 5次 、并拉升缩表预期至上半年,反而比较像是在强化加息 4 次之预期。
另外我个人觉得,一些中文媒体似乎误读了Powell 记者会的部分片段,下面 Allen 再进一步说明。
1. 3 月加息停止 QE 早已定价
本次会议 Fed 再次确认 3 月将准备第一次加息,并同时停止 QE。
Fed 也再次重申,货币政策是要支持美国经济达到充分就业、与通膨长期均值维持 2.0% 的两大目标。
这部分我想市场早已定价,这裡完全不会是问题,所以我们不讨论太多。
2.未来加息在每次会议都可能发生 (?)
Powell 的原文说法是:Won't Rule Out Hike Every Meeting.
但我有看到部分中文媒体写:不排除每次会议都加息的可能性。
上述我想或许是误读了 (还是其实是我自己误会中文的意思 ?)
我的理解是:Powell 是说加息在未来每场会议都可能发生,指的是“不会在特定月份才加息”,不是说每场都要加息。
Powell 说得很合理,经济本来就是动态的,加息本就不会侷限在什麽月份才启动,端看当时的经济状况而定。
我认为Powell 上述说法,并未延展今年加息预期至五次或更多,若有这种想法,那绝对是误读了。
3.更大规模的缩表?
Powell 在记者会上提到,Fed 需要更大规模的缩表,但请大家不要恐慌,因为我又觉得部份中文媒体过度解读了。
我认为Powell 说到的“更大规模缩表”,在思维上指的是:
因为当前 Fed 资产负债表高达 8.9 万美元,这是新冠疫情爆发之前的两倍大,显然在绝对规模上是非常巨大的。
而上一轮 2017-2019 年 Fed 缩减资产负债表,是自 4.4 万亿美元缩到 3.7 万亿美元停止,缩表的幅度大概是 15.9%,共缩减了约 7000 亿美元。
确实每次缩表的经济背景绝对是不一样的,所以幅度也绝对不会相同,但我们随便抓,假设本轮缩表将缩减 10% 资产负债表规模,那麽这也要降低 8900 亿美元,规模当然很大。
但我认为,不需要过度恐慌在“更大规模缩表”这几个字上。更重要的,我认为是“Fed 缩表的速率是多少?”
我相信缩表没问题,缩表太快才是问题,因为缩表速度若太快,将直接影响的会是美债殖利率升速、以及殖利率曲线的斜率。
这点Powell 也非常清楚,Powell 在记者会上也不断强调,联准会内部尚未具体讨论到一切缩表的进度,要等到 3 月再说。
4.缩表比较可能落在下半年
Powell 在记者会上说明,希望在加息至少一次之后,再来开会讨论缩表的事情,且委员会至少将讨论一次,才会做最终拍板。
更重要的,Powell 希望缩表的进程是有秩序的、是可被预见的过程。
从上述Powell 丢出的时间表看,我个人认为缩表将落在 2022 下半年,最快可能是 6 月份,因为在 3 月加息后,Fed 才会来讨论缩表。
我个人相信 Fed 现在内部早已在讨论缩表,但委员会显然尚未准备好来与市场沟通缩表的前瞻指引。
而缩表这麽大的事情,我个人认为 Fed 需要起次跟市场沟通 2 次,并把缩表规划说得非常清楚之后,才会开始进行,所以比较合理的缩表时间,估计将会落在下半年。
5.最大风险:高通膨
Powell 在记者会上,大概提到了 800 万次的“高通膨压力”,并认为目前美国通膨风险仍在上升阶段,但预计 2022 通膨还是会回落。
Powell 说明,目前美国通膨居高不下,主要仍是供应链所致,白话来说就是供需仍然失衡,且供给侧 (Supply Side) 改善的速度是低于预期。
Powell 强调,目前美国高通膨持续存在,而美国经济要的是长期扩张,所以若要长期扩张,物价势必需要保持稳定。
这边开始进入正题了,我认为这是本次会议的最重要核心,是让我体感上,觉得 Fed 鹰派的地方。我认为 Fed 承认自己落后给菲利浦曲线 (Behind the curve),简单而言,Fed 这次的加息速度大幅落后给通膨。
由于 Fed 在 2021 年对于通膨的误判,先前 Fed 在 2021 年认为通膨在年底就可望自然回落,但也就是因为这件事没有发生,反而通膨还更为严重,所以目前才有使用加息来追赶通膨的压力。但当前宏观环境看,通膨的压力是来自于缺工、供应链紧俏等问题,再加上拜登政府的大力推行财政刺激在那边推波助澜~
所以这一次的通膨是来自于实体经济上的供需失衡问题,并不是金融市场过度投机、企业超额投资等问题,我认为 Fed 在这次的通膨问题上,能做得空间非常有限。
这裡将产生一个不确定性的较大风险,就是 Fed 只能靠货币紧缩去压通膨预期,但实体经济的根本性通膨问题,还是没有获得解决。变成最终 Fed 只能再用更剧烈的紧缩政策,去引导通膨预期走低后,尝试来压低实际通膨率,所以这裡将让 Fed 的紧缩路径,存在著较大不确定性。
比较好的处理方式,应该是直接去解决实体经济上的缺工和供应链/例如我之前提到的塞港问题,让实际通膨率自己走低、而不是靠 Fed 挤压通膨预期之后去引导。
谁可以去把坐在白宫裡疑似患有阿兹海默的白髮老头一巴掌打醒...还我特~
结论:我个人认为 Fed 今年将加息四次,不至于加息五次,而加息四次之预期,相信市场应该已经定价;至于缩表,相信市场尚未定价,估计将落在 2022 下半年,最快可能是 6 月。
如果 Fed 今年加息五次,我会感到非常意外,因为这意味著 Fed 很可能在 2023 年底、2024 年初,就因为美国经济放缓太快而需要降息,Fed 这波操作就会变得非常韭。
最后说说股市的想法目前 Nasdaq 已经插水一段时日,抑制通胀是当务之急,而股市所谓修正才多久已出现V转。对通胀而言意义不大,修正数月才可能有帮助~所以我之前一直描述为“恐慌”。因此对白髮老头而言,怎麽做才有利于中期选举就很清晰了。
最好还是坚持认为市场或已定价加息四次之预期,但缩表预期则是尚未定价的观点。
配置上美股我倾向持有科技权值股,一些 Megacap 的估值我认为合理、前景确定性较高,而这样也可以让你的收益贴著 QQQ 走。
考虑到一堆成长股腰斩,我也愿意加仓接刀成长股,但建议佔据投资组合的比例,或许不要超过 15%,如果选股功力不错,这裡就会开始让你的收益拉开与 QQQ 之类的差距。
最后,我相信人人都会想在市场下跌的环境裡接刀,接刀不是不行,但若接刀失败,斩缆我建议速度要快,我个人不考虑价投的话一次斩缆的比例都是 50% 以上。
首先这是Fed一月 memo
先说结论:
FOMC 维持利率在 0-0.25% 不变。且确定 3 月完全停止 QE,同时 3 月加息也是箭在弦上,基本会后声明皆符合市场预期,没有太多的意外。
Powell 记者会确实是偏一点点的小鹰派,但我也认为,Powell 的说法不至于拉升市场加息预期至 5次 、并拉升缩表预期至上半年,反而比较像是在强化加息 4 次之预期。
另外我个人觉得,一些中文媒体似乎误读了Powell 记者会的部分片段,下面 Allen 再进一步说明。
1. 3 月加息停止 QE 早已定价
本次会议 Fed 再次确认 3 月将准备第一次加息,并同时停止 QE。
Fed 也再次重申,货币政策是要支持美国经济达到充分就业、与通膨长期均值维持 2.0% 的两大目标。
这部分我想市场早已定价,这裡完全不会是问题,所以我们不讨论太多。
2.未来加息在每次会议都可能发生 (?)
Powell 的原文说法是:Won't Rule Out Hike Every Meeting.
但我有看到部分中文媒体写:不排除每次会议都加息的可能性。
上述我想或许是误读了 (还是其实是我自己误会中文的意思 ?)
我的理解是:Powell 是说加息在未来每场会议都可能发生,指的是“不会在特定月份才加息”,不是说每场都要加息。
Powell 说得很合理,经济本来就是动态的,加息本就不会侷限在什麽月份才启动,端看当时的经济状况而定。
我认为Powell 上述说法,并未延展今年加息预期至五次或更多,若有这种想法,那绝对是误读了。
3.更大规模的缩表?
Powell 在记者会上提到,Fed 需要更大规模的缩表,但请大家不要恐慌,因为我又觉得部份中文媒体过度解读了。
我认为Powell 说到的“更大规模缩表”,在思维上指的是:
因为当前 Fed 资产负债表高达 8.9 万美元,这是新冠疫情爆发之前的两倍大,显然在绝对规模上是非常巨大的。
而上一轮 2017-2019 年 Fed 缩减资产负债表,是自 4.4 万亿美元缩到 3.7 万亿美元停止,缩表的幅度大概是 15.9%,共缩减了约 7000 亿美元。
确实每次缩表的经济背景绝对是不一样的,所以幅度也绝对不会相同,但我们随便抓,假设本轮缩表将缩减 10% 资产负债表规模,那麽这也要降低 8900 亿美元,规模当然很大。
但我认为,不需要过度恐慌在“更大规模缩表”这几个字上。更重要的,我认为是“Fed 缩表的速率是多少?”
我相信缩表没问题,缩表太快才是问题,因为缩表速度若太快,将直接影响的会是美债殖利率升速、以及殖利率曲线的斜率。
这点Powell 也非常清楚,Powell 在记者会上也不断强调,联准会内部尚未具体讨论到一切缩表的进度,要等到 3 月再说。
4.缩表比较可能落在下半年
Powell 在记者会上说明,希望在加息至少一次之后,再来开会讨论缩表的事情,且委员会至少将讨论一次,才会做最终拍板。
更重要的,Powell 希望缩表的进程是有秩序的、是可被预见的过程。
从上述Powell 丢出的时间表看,我个人认为缩表将落在 2022 下半年,最快可能是 6 月份,因为在 3 月加息后,Fed 才会来讨论缩表。
我个人相信 Fed 现在内部早已在讨论缩表,但委员会显然尚未准备好来与市场沟通缩表的前瞻指引。
而缩表这麽大的事情,我个人认为 Fed 需要起次跟市场沟通 2 次,并把缩表规划说得非常清楚之后,才会开始进行,所以比较合理的缩表时间,估计将会落在下半年。
5.最大风险:高通膨
Powell 在记者会上,大概提到了 800 万次的“高通膨压力”,并认为目前美国通膨风险仍在上升阶段,但预计 2022 通膨还是会回落。
Powell 说明,目前美国通膨居高不下,主要仍是供应链所致,白话来说就是供需仍然失衡,且供给侧 (Supply Side) 改善的速度是低于预期。
Powell 强调,目前美国高通膨持续存在,而美国经济要的是长期扩张,所以若要长期扩张,物价势必需要保持稳定。
这边开始进入正题了,我认为这是本次会议的最重要核心,是让我体感上,觉得 Fed 鹰派的地方。我认为 Fed 承认自己落后给菲利浦曲线 (Behind the curve),简单而言,Fed 这次的加息速度大幅落后给通膨。
由于 Fed 在 2021 年对于通膨的误判,先前 Fed 在 2021 年认为通膨在年底就可望自然回落,但也就是因为这件事没有发生,反而通膨还更为严重,所以目前才有使用加息来追赶通膨的压力。但当前宏观环境看,通膨的压力是来自于缺工、供应链紧俏等问题,再加上拜登政府的大力推行财政刺激在那边推波助澜~
所以这一次的通膨是来自于实体经济上的供需失衡问题,并不是金融市场过度投机、企业超额投资等问题,我认为 Fed 在这次的通膨问题上,能做得空间非常有限。
这裡将产生一个不确定性的较大风险,就是 Fed 只能靠货币紧缩去压通膨预期,但实体经济的根本性通膨问题,还是没有获得解决。变成最终 Fed 只能再用更剧烈的紧缩政策,去引导通膨预期走低后,尝试来压低实际通膨率,所以这裡将让 Fed 的紧缩路径,存在著较大不确定性。
比较好的处理方式,应该是直接去解决实体经济上的缺工和供应链/例如我之前提到的塞港问题,让实际通膨率自己走低、而不是靠 Fed 挤压通膨预期之后去引导。
谁可以去把坐在白宫裡疑似患有阿兹海默的白髮老头一巴掌打醒...还我特~
结论:我个人认为 Fed 今年将加息四次,不至于加息五次,而加息四次之预期,相信市场应该已经定价;至于缩表,相信市场尚未定价,估计将落在 2022 下半年,最快可能是 6 月。
如果 Fed 今年加息五次,我会感到非常意外,因为这意味著 Fed 很可能在 2023 年底、2024 年初,就因为美国经济放缓太快而需要降息,Fed 这波操作就会变得非常韭。
最后说说股市的想法目前 Nasdaq 已经插水一段时日,抑制通胀是当务之急,而股市所谓修正才多久已出现V转。对通胀而言意义不大,修正数月才可能有帮助~所以我之前一直描述为“恐慌”。因此对白髮老头而言,怎麽做才有利于中期选举就很清晰了。
最好还是坚持认为市场或已定价加息四次之预期,但缩表预期则是尚未定价的观点。
配置上美股我倾向持有科技权值股,一些 Megacap 的估值我认为合理、前景确定性较高,而这样也可以让你的收益贴著 QQQ 走。
考虑到一堆成长股腰斩,我也愿意加仓接刀成长股,但建议佔据投资组合的比例,或许不要超过 15%,如果选股功力不错,这裡就会开始让你的收益拉开与 QQQ 之类的差距。
最后,我相信人人都会想在市场下跌的环境裡接刀,接刀不是不行,但若接刀失败,斩缆我建议速度要快,我个人不考虑价投的话一次斩缆的比例都是 50% 以上。