摘要:为了更深入理解千亿参数的盘古大模型,华为云社区采访到了华为云EI盘古团队高级研究员谢凌曦。谢博士以非常通俗的方式为我们娓娓道来了盘古大模型研发的“前世今生”,以及它背后的艰难往事。
本文分享自华为云社区《华为高级研究员谢凌曦:下一代AI将走向何方?盘古大模型探路之旅》,原文作者: 华为云社区精选 。
“每个人都生活在特定的时代,每个人在特定时代中的人生道路各不相同。在同一个时代,有人慨叹生不逢时,有人只愿安分……”这是2021年北京高考命题作文“论生逢其时”的开头。
答题的是一位既没上过小学,也没读过初中、高中的特殊考生。他只是在短时间内学习了大量人民日报的文章,然后凭借自己的阅读理解、文本联想以及语言生成能力,写出这篇看似“像模像样”的高考作文。
是的,它是一个AI——华为云盘古大模型,就在2021世界人工智能大会(WAIC2021)上刚被评选为大会的“镇馆之宝”!在现场,观众可与大模型互动,直接给对方出题。比如,一句“明明明明明白白白喜欢他,但他就是不说,他很高冷。”这句话里,“明明”显示一个人名,而后又作为形容词,且整句需要断句。但当记者向大模型提问 “白白喜欢谁?”时,大模型很快回答“明明”。回答正确!
虽然盘古没有寒窗苦读十几年,但它也经历了上亿参数的“学习”。
我们再来看个例子,比如理解下面这两句话:
- 小明在读书,通过不断坚持,克服各种困难,最后读完了。
- 小红在画画,期间遇到了很多困难,最后也完成了这副画作。
虽然上面两句话的人物和事件都不相同,但盘古也能和我们人类一样,从中提取一个相同的含义:锲而不舍。这个能力其实已经在华为开发者大会(Cloud)2021现场有所展示。我们不禁想问道盘古大模型是如何做到如此“聪慧”的呢?
为了更深入理解千亿参数的盘古大模型,华为云社区采访到了华为云EI盘古团队高级研究员谢凌曦,考虑到大模型涉及到的一些技术比较晦涩,所以谢博士以非常通俗的方式为我们娓娓道来了盘古大模型研发的“前世今生”,以及它背后的艰难往事。
华为云EI盘古团队高级研究员 谢凌曦
何为大模型:AI落地千行百业的必由之路
神话传说里,盘古开天辟地,宇宙从一片混沌变得有序。谈及盘古大模型,谢凌曦从人工智能的诞生开始说起。
“上世纪50年代,AI概念被提出,人们使用人工设计规则的方式去定义AI;到了80年代,在大数据的浪潮下,人们通过训练数据模型的方式来实现AI;后期随着数据规模扩大以及算力的发展,深度学习掀起新浪潮,各种AI模型不断涌现。”
“直到近两年,我们开始将跨领域的知识整合到AI模型中,基于Transformer结构的各种大模型出现,包括OpenAI的GPT-3,以及盘古大模型。它们打开了深度学习模型的规模与性能共同发展的局面,达到了深度学习领域新的高度。”谢凌曦说道。
过去十年,AI 算法对计算资源的需求增长了40万倍,神经网络从小模型到大模型已经成为了必然的发展趋势。大模型能够解决 AI 模型定制化和应用开发碎片化,它可以吸收海量的知识,提高模型的泛化能力,减少对领域数据标注的依赖。
大模型一方面激活了深度神经网络对大规模无标注数据的自监督学习能力,同时对于 AI 框架的深度优化和并行能力都有很高的要求,是深度学习框架下将AI做到极致的集大成者。“从传统方法到深度学习,这是一次大的跳跃,而在深度学习这个台阶上,大模型已经站在了最前面,等待着下一个台阶的出现。”
当前盘古系列超大规模预训练模型,包括NLP大模型、CV大模型、多模态大模型、和科学计算大模型。 模型大意味着它吸收了海量数据知识,以盘古NLP大模型为例,它学习了40TB的中文文本数据;盘古CV大模型则包含了30亿+参数。这些数据提高了大模型的泛化能力,提升算法对新鲜样本的适应能力,从而学到隐含在数据背后的规律,减少对领域数据标注的依赖。
谢凌曦进一步解释道,一方面大模型可以从无标注数据上更加通用的将知识迁移到目标任务上,进而提升任务性能;另一方面,通过预训练过程学习到更好的参数初始点,使得模型在目标任务上只需少量数据就能达到不错的效果。
当大模型可以从小数据样本中学习更多,就能帮助我们打开走向通用AI的大门,它可以解决AI模型定制化和应用开发碎片化的难题。
谢凌曦给我们算了一笔账,他认为AI算法落地难不是因为它无法解决实际问题,而是应用场景太狭窄,每个痛点都需要定制化开发,从而导致投入的成本和人力过高。
一旦场景变化,整个模型可能都需要重新开发。而大模型是一种工业化AI开发的新模式,可以解决小模型的定制化难题,让一个模型可以应用到多个场景中,让AI真正落地到千行百业中。
所以,作为这个时代发展的必然产物,大模型值得我们下功夫去挖掘,去探索深度学习、乃至AI的下一个阶段会是怎样的形态。
在这之前,我们需要先弄明白大模型是如何被炼成的。
不止参数,盘古NLP和CV大模型有更多“绝招”
谷歌1月份提出1.6万亿参数大模型Switch Transformer;
英伟达、斯坦福联合MSR,共同训出了10000亿参数的GPT;
智源研究院发布1.75万亿参数大模型悟道2.0;
……
在各种新闻报道中,我们很容易将大模型的突破归功于亿级别的参数。
谢凌曦推翻了这个刻板印象:“量大和多样是大模型的必然要求,但参数并不是衡量模型能力的最佳指标。如果将大模型训练的中间状态都存储下来,做个简单的融合,我们甚至可以把模型的参数量乘以一个非常的数,甚至可以说现在已经有百万亿、千万亿参数的模型,但这并不会对模型的效果有很大的帮助。因此,参数量这个指标,并不是大模型强弱的最终评定标准。”
大模型是一种统筹了数据预处理、模型架构、算法训练与优化的一套完整体系,即便有足够的算力、原始数据、原始模型,也并不意味能够做出真正跑得通的大模型,这其中非常考验技术研发和协同能力。
但毋庸置疑的是,数据越多,大模型学到的也就越多。“只要你给它足够多的数据,让他‘死记硬背’,它的理解能力确实会增强。”什么样的数据决定了模型有什么样的基本效果。谢凌曦表示,基于大量的参数,模型能够学会数据之间的关系,抽象出逻辑能力,更加智能化。
盘古NLP大模型
在最近的 CLUE 榜单上,盘古的NLP模型在总榜、阅读理解排行榜和分类任务排行榜上都位列第一,总榜得分比第二名高出一个百分点。为了说明盘古的NLP模型是如何在理解能力上接近人类的,回到文章的开头,谢凌曦举了我们开篇提到的那个“锲而不舍”的例子解释:
- 小明在读书,通过不断坚持,克服困难最后成功了。
- 小红在画画,期间遇到了很多困难,最后也完成了这副画作。
人类可以很容易的通过逻辑判断能力知道两件事表达的是同一个意思:锲而不舍,但大模型需要大量的数据投喂和学习,去捕捉元素与元素之间的关系,比如两段文本之间的关系,几段文本之间,哪两段之间关系更近一些,才能得出逻辑性的判断结论。
还是上面的例子,如果把2改成为“小明在读一本书,期间遇到很多困难,可最后也没能读完”,这样1和2的文字非常相似,但其实两者表达的是完全不同的含义。
大模型需要学会判断这种关系,谢凌曦解释道:“表征(从文本和图像中直接抽取的简单特征)和语义之间的关联性是极其复杂的,人能够理解,但让计算机去理解并建立计算模型就非常困难,大模型就希望以大数据的方式以及堆砌大量可训练参数去完成这件事。”
如果想要大模型理解我们的逻辑世界,参数之外的功夫也至关重要。
首先,千亿参数的大模型每优化一次就会耗费巨大的成本,牵一发而动全身。所以谢凌曦和团队选择在预训练阶段加入基于prompt的任务,降低微调难度,解决以往大模型为不同行业场景进行微调的困难。在下游数据充足时,微调难度的降低使得模型可以随着数据变多而持续优化;在下游数据稀缺时,微调难度的降低使得模型的少样本学习效果得到显著提升。
盘古NLP大模型架构
另外,在模型结构上面,跟传统其他企业训练的NLP大模型的方式不同,盘古看重的不仅是大模型有生成能力,还要有更强的理解能力。华为采用了Encode和Decode的架构,来保证盘古大模型的在生成和理解上面的两个性能。
盘古CV大模型
针对盘古CV大模型,谢凌曦同样先举了一个例子:如何区分白色猫和白色狗的图片?人类看到这两张图片能一眼识别出来哪只是猫,哪只是狗,那么大模型面对这些是如何处理的呢?
“我们需要让模型在训练的过程中,了解这些样例之间真正强关联性的东西。” 谢凌曦强调图像中非常重要的一个东西就是层次化的信息。“在判断图像的过程中,首先要把握好图片中层次化的信息,能够快速的定位到图片中哪部分信息是起决定作用的,让算法以自适应的方式去关注比较重要的地方或内容,这样就容易捕捉样本之间的关系。在这两张图片中,很明显白色不是最重要的信息,动物才是图片中起决定性的信息。”
盘古CV大模型架构
基于此,盘古CV大模型首次兼顾了图像判别与生成能力,能同时满足底层图像处理与高层语义的理解需求,同时能够融合行业知识的微调,快速适配各种下游任务。
另外,为了解决模型大,数据多带来的学习效率低,表征性能弱的问题,盘古CV大模型在预训练阶段主要集中在数据处理、架构设计和模型优化三个阶段进行优化。目前盘古CV大模型在Image Net 1%、10%数据集上的小样本分类精度上均达到目前业界最高水平。
在CV大模型中,除了应用一些业界通用的算法,其中也有华为自研的算法,比如在视觉中强行给模型注入一些层次化的信息,让模型能够学的更好。
而每个自研算法的的背后,其实都是团队解决每一个困难之后的宝贵经验总结。
大模型研发很难,还好有他们
在整个盘古大模型的研发过程中,难点很多,比如上文提到的独创算法,因为除了架构和数据,算法是非常核心的技术。
谢凌曦详细谈了谈其中的一个技术难点:无论是文本信息,还是图像信息,表征上看起来相似的东西,语义理解上却截然不同。
“我们从问题出发,发现视觉特征是一个层次化的捕捉过程,表征的一些特征更多的是集中在浅层特征里面,但到了语义就更多体现在深层特征里面。所以,需要我们在不同层面上把这些特征对齐,这样才能学的更好。同样,在NLP上需要将模型的注意力放在一个最合适的地方。这个关键点也是通过复杂的神经网络寻找到的,而并非随便在一段文字中利用算法去找到关键点。”
这是一个很通俗的解释,技术细节相对会更复杂和难以抽象化描述。但这个问题也只是冰山上的一角,整个大模型的研发中,谢凌曦和团队要不断去挖掘表象问题的本质,解决类似的技术难题。
另一个比较棘手的问题是模型的调试运行。为了从预训练获取更多的知识,盘古大模型的数据肯定会越来越大,对底层的硬件平台性能要求更高。此时,预训练的效果,看的也已经不是模型本身,而是基础设施构建得是否足够优秀。
比如运行大模型需要足够的机器提供充足的算力,但一台机器最多只能安装8个GPU卡。NLP大模型需要上千个GPU卡,即使是较小的CV大模型,也需要128块GPU同时运行,所以必须有一个非常好的机制去合理调配资源。
巧妇难为无米之炊,最开始的时候谢凌曦也很苦恼,谁来支撑大模型的运行呢?实践证明,华为云为盘古提供的可多机多卡并行的云道平台起了大作用。云道平台能够轻松分配资源,避免因基础设施问题导致的盘古研发进度受阻,它同时可以将数据,以最合适的格式存储在服务器上,以便在使用过程中更有效的读取。
不仅如此,大模型的困难也难在工程上,华为CANN、MindSpore框架、ModelArts平台协同优化,充分释放算力,为盘古大模型提供了强大的背后支撑:
- 针对底层算子性能,基于华为CANN采用了算子量化、算子融合优化等技术,将单算子性能提升30%以上。
- 华为MindSpore创新性地采用了“流水线并行、模型并行和数据并行”的多维自动混合并行技术,大幅降低了手动编码的工作量,并提升集群线性度20%。MindSpore开源框架加持,如何「炼出」首个千亿参数、TB级内存的中文预训练语言模型?细致解读了这些关键技术。
- ModelArts平台提供E级算力调度,同时结合物理网络拓扑,提供动态路由规划能力,为大模型训练提供了最优的网络通信能力。
但众所周知,大模型之所以大,根源在于“数据多、模型大”,这就带来模型的训练成本高。以GPT-3为例,训练一次成本是1200万美金。谢凌曦感慨道,“大模型调参本身就非常困难,每一次模型训练之前,都需要事先在很多小的场景中做验证工作。每一次模型的训练都需要确保万无一失,不能出现已经开始训练,却有一个Bug存在的现象”。
为“应用”而生,盘古赋能更多用户
大模型训练在各方面突破,也为缺乏大量数据的行业铺上接入智能时代的轨道。正如华为云人工智能领域首席科学家、IEEE Fellow田奇教授在发布盘古大模型所提到的,盘古大模型是为各行业的应用而生,盘古具备前所未有的泛用性,无论是2B场景或是2C场景。
行业知识来源于行业数据,盘古团队使用了大量行业语音和文本数据,借助这些数据进行微调,模型的行业特定意图和知识理解能力得以大幅提高。
以盘古CV大模型为例,其在电力巡检行业中表现出超强的应用能力。它利用海量无标注电力数据进行预训练,并结合少量标注样本微调的高效开发模式,节省人工标注时间。 在模型通用性方面,结合盘古搭载的自动数据增广以及类别自适应损失函数优化策略,极大地降低了模型维护成本。
谢凌曦还谈到,除了行业的应用,面向开发者方面,盘古大模型正在逐步上线到AI资产共享社区(AI Gallery)。后期会陆续开启邀测制,请大家敬请期待。 在平台上盘古会开发出一些比较通俗易用的工作流:如果你是有一定基础的开发人员,可以从工作流中做更多的定制化开发,更好地释放预训练模型的能力;如果你只是一个AI开发小白,想用大模型做简单的AI开发,盘古也会给你更加通俗易懂的界面,让大家用一些拖拉拽的方式去实现。后续盘古会针对开发者推出系列的课程,指导开发者基于盘古大模型在实践场景中开发应用。
另一方面,盘古也希望和开发者共成长。“大模型只是一个抓手,让它应用到实际场景中。不仅更好的帮助用户提高训练的进度和缩短训练的时间,而且模型上的应用数量增多,用户的成本自然而然就降低了。” 谢凌曦表示,盘古的发展单靠我们团队是远远不够的,我们还需要和开发者一起建设好这个生态。
最后
谈到盘古大模型的未来,谢凌曦有个简单的小目标——把盘古推向下一个技术爆发点。AI大模型是深度学习的最高阶段,往下走可能是一条平的直线,大家都在等待跳跃的那一天。华为云一直在努力,用各种原创技术去推动,解决AI开发者实际会遇到的问题,最本质的目的是赋能千行百业的AI落地。
道阻且长,行则将至。
正如盘古大模型的名字一样,华为也希望以大模型为抓手,把AI推向一个前所未有的高度,让我们往下一代AI去走,劈开AI未来道路上的“混沌”。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。