很多人印象里,华为是一家从传统通信设备制造发展到消费电子、汽车电子领域的国内科技标杆。但事实上,这家企业的成功,离不开一些可能没那么多关注度的研究项目。比如,目前一些热门的行业领域,有不少都涉及到数学、物理学这些基础研究。正如任正非所言,未来的电子技术融合了这些科学。
本文就分享一位华为数学大佬的故事,除了学习做事做人的态度,另一方面也了解国内行业都在做些什么。
“数学家”在华为的奇妙冒险
作者:叶子纯
2018年,在加拿大英属哥伦比亚大学拿到数学博士学位之后,我怀着激动而紧张的心情加入华为海外研究所。让我激动的是,我在异国他乡可以加入一家来自家乡的公司,这是一份工作,更是一份归属感;而让我紧张的是,作为一个数学博士,我将在海外所的异构编译器实验室工作,而编译器对于我来说是一个全新的领域。
我还记得面试的时候,实验室主任高耀清老师跟我说:“对于编译器来说,最后都是要落实在具体芯片上的运算,这里非常需要你这个数学博士的技能。”这如同在一张全新的地图上开始冒险,听起来是个还不错的挑战。
进入“地图”之前我先检查了一下自己的“属性面板”:数学知识专精,AI知识熟练,还有一些例如编程知识的新手武器,于是我“走进”这张“AI编译地图”,开始了一场奇妙冒险,而这段冒险之旅,一走就是六年。
01 新手村篇
“数学家”的首立功
在“新手村”中,我接到了第一个任务:解决AI编译器的自动微分问题。自动微分(AD)是一种对计算机程序进行高效且准确求导的技术,是一些热门的机器学习框架和AI编译器的核心特性。当时,中央软件院几个部门正在合作构建新一代AI算子编译器AKG(Auto Kernel Generator,自动算子生成器),而我们研究所承接的是自动微分相关功能,由编译器专家Amy带领团队进行相关算法和对应代码生成功能的开发。团队里编译器的专家很多,但是自动微分涉及相对复杂的数学算法,相关文献需要一定的数学基础才能够理解。因此,领导把我安排在这个项目,希望能够以我数学专业的特长助力项目的开展。
这天,Amy交给我了几篇文献:“这几篇文献里面数学内容比较多、比较难理解,你看看能不能弄清楚,怎么把这些算法落地到我们的产品里。”
读论文?这对我来说实在是太熟悉了,而且毕竟是一个数学专精的玩家,我拿着论文三下五除二便搞清楚了里面的数学原理。但如何把这个算法实现成编译器中的一个部件却是一个大难题。
还好“新手村”里有着优秀的新手保护机制:我的导师和同组的伙伴都是AI编译的好手,有了他们的帮助,我很快上手了。其实编译的过程就跟翻译一样,把程序在不同的中间表达中进行翻译,而自动微分就跟一种“方言”的翻译一样,根据特定的算法规则对于程序进行翻译。经过一个月的攻关,我们实现了自动微分的模块原型Demo。
完成了技术验证之后,自动微分功能便正式排进版本的迭代中。一开始,我们功能开发得非常顺利,一些简单的反向算子生成问题被我们轻松解决。但是新手村里有给人练手的小怪,也有试验你能力的精英怪,我们马上便碰到了一只拦路虎:卷积算子的反向算子生成问题。
由于卷积算子计算复杂,循环嵌套多,并且有大量滑动窗口的判断,我们基于原始算法生成的代码性能很差,直接在卷积算子上应用我们的算法会导致代码膨胀,就如同翻译诘屈聱牙的古文一样。卷积算子是网络中一个非常重要的算子,计算占比极大,我们无法回避这个问题。不打败这只最后的精英怪,我是无法踏出新手村的。所以我试图在算法上做小的优化,但是每次我将优化完的结果发给负责代码生成的同事看时,他们总是摇摇头说:“No, the loops are still too complicated(不,这些代码还是太复杂了。)”随着产品发布时间的逼近,我们身上的压力越来越大。
在对算法小修小补的反复碰壁后,我决定沉下心来从头梳理这个问题。看着屏幕上一个简单的数学公式变成了一层一层叠加的循环,我发现我陷入了代码给我布下的迷雾中,忘了我最厉害的技能是数学,为什么不把它当做一个数学问题来解决呢?我能不能先把这个反向卷积算子算出来,再根据最后的数学结果特征寻找解决的方案呢?
就这么干!我合上笔记本电脑,拿出草稿纸开始推算,先求导,利用链式法则,再做代数式化简和求和变换,一步,两步,迷雾慢慢散开。有了!卷积反向算子原来可以通过卷积正向算子通过参数变换实现!我恍然大悟,我们不应该采取“直译”的方式,去一个循环、一个循环地翻译代码,而是应该把算子当作整体来“意译”,求出算子反向具体表达再从整体出发生产代码,这样我们可以使用正向算子中所采用的优化,生成高效的反向算子。
最后,我们把相关算法落地在MindSpore AKG并在华为全联接大会发布,后续形成专利入选中央软件院的潜高专利,我个人也被授予2019年度研究所的研发卓越贡献个人奖。此前,任总在接受采访时说“华为有700多位数学家”,我已经厚着脸皮自动对号入座了;在我用数学方法成功解决难题的时候,同事们也说:“我们AI编译器也有自己的数学家。”这更加坚定了我要继续在数学领域披荆斩棘的决心。
2021年,我从加拿大回国,加入了中央软件院架构与设计管理部,“新手村”的挑战已经完成,是时候进入主地图了。
“新手村结算画面”:获颁研发卓越贡献个人奖(右为作者)
02 主地图上篇
三丫坡集结解难题
著名数学家陶哲轩是这么描述现在的数学研究工作:“一些直觉,大量文献,再加上一点点运气,在大量连续不断的刻苦的工作中慢慢地积累,缓缓地进展。”来到华为之后,虽然我没有继续数学专业研究,但是常听大家说板凳要坐十年冷,结硬寨,打硬仗。细想来,个中道理似乎是相通的。在“新手村”中的经验告诉我,要从更高的维度看问题,从最根本的角度去解决问题。怀着这样的信念,我在AI编译的主地图上继续探索。
2023年,我们开始追寻“要把AI基础平台做成世界领先,做厚‘黑土地’”这一目标。当时的现实情况是,我们的AI软件已经具备基本能力,但在易用性、生态方面还存在差距。AI框架和AI编译器是AI软件的重要组成部分,在对AI框架和编译器的发展进行深入的分析和调研之后,我们发现:2022年底ChatGPT发布以来,所有AI编译领域都集中在支持Transformer(变换器模型)类的大语言模型,而支撑好大语言模型对于AI框架和编译器的主要诉求之一就是支撑动态形状(Shape)场景。
于是,AKG的SE张任伟找到我说:“现在看来动态Shape是AKG在大模型时代重要的破局点,这个事情你看咱们应该怎么办?”
我还是抱着从最根本角度去解决问题的理念,跟他说:“基础不牢,地动山摇。咱们之前AKG是基于TVM(tensor virtual machine,张量虚拟机)软件栈,对于现在的场景适应能力感觉有所不足,不如我们基于MLIR(Multi-Level Intermediate Representation,多层级中间表达)重新搞一套,打扫干净屋子再请客;另外,解决动态Shape的很多需求关键是数学上的符号表达,我们可以搞一个全新的符号引擎来解决。屋子打扫干净了,再加一根承重柱,这个问题得这么解。”
任伟说:“好,现在欧拉能力组和三丫坡攻关在征集相关课题,要不然你带个队伍报个课题?”
我说:“好,我当队长,你继续当SE,我们三丫坡走一趟!”
在三丫坡集结之后,我们先进行了为期一周的基础训和专业训,然后就地投入到攻关之中。由于技术路线已经决策完成,摆在我这个队长面前的更多的是人员安排和作战阵型的问题。还好虽然我只是一介书生,但是也略懂一点兵法。孙子兵法说“以正合,出奇胜”,也就是说作战的时候需要以大规模部队进行合战,稳住根本,然后通过预备队等精锐力量收割战场。第一次排兵布阵的我,也尝试了一下两千年前老祖宗的经验:专家带领着大部分精兵参与基础软件构建的工作,保证整体软件的可用性;少部分骨干则进行竞争力构建的工作,为软件提供差异性竞争力。
第一次开工会在三丫坡的会议室进行,我给大家简单介绍了项目的背景和人员的安排。大家都对这个新课题跃跃欲试,马上开始开发代码。由于分工明确,相关的技术细节在项目最开始已经完成论证,这个新项目的启动格外顺利。大家各司其职开始开发,很快,软件的各个部件就跟积木的零件一样准备好了。而下定决心从根本解决问题的我,承担了串联整个软件栈的工作:上午,我跟符号引擎构建的同事一起讨论,如何在数学上简化AI场景的符号表达;下午,我和代码生成的同事一起开发,研究把数学表达式变成可执行的代码;晚上,我看着大家分头开发的组件,像拼七巧板一样把所有零件拼在一起。
到了最终测试效果的时候了:Transformer(变换器模型)网络训练,启动!我怀着一丝激动而紧张的心情按下了回车,经过短暂的编译之后,屏幕上开始跳动训练的耗时数据。25%的提升!我们成功超越了开题时给自己定下的20%的目标。随着AKG 2.0于2023年年底开源,我们的项目被能力组评为优秀课题,而我也被能力组评为软件精英,我们在三丫坡的第一次集结取得了完美的结果。
但是现在明显还没到庆祝的时候,我们其实才刚刚踏上主地图的探险,不远处道路正在被乌云所笼罩,而我们必须穿过这片乌云达到下一个目标:商用交付。
03 主地图下篇
松山湖攻关落商用
虽然课题的技术攻关取得了成功,但是作为一个技术穿刺项目,难免会被问到如何实现商业落地及为客户提供价值等相关问题,而我也在苦苦思索这个问题的答案。和技术穿刺的项目不同,商用落地项目更考验的是技术和需求的匹配程度,以及技术的泛化性和稳定性。如果说我们之前的课题攻关打造了小型军火库,商用交付就是在这个军火库中挑出一把客户最需要的枪:这把枪不仅要能满足客户现实作战的需求,还必须保证射得准、不卡壳、不哑火。
从来没有做过商用落地的我在这犯了难。这时,我想到陶哲轩对于数学研究的看法。一些直觉和大量文献,这个有了,我们通过调研和经验判断选择了动态Shape这个突破口;连续工作的积累,这个我们也有了,我们已经打造了符号引擎和AKG-MLIR软件栈。那么我们现在差的就是那么一点运气?或者一个契机?
山穷水尽疑无路,得来全不费工夫,没想到这个契机以一个意想不到的方式到来了。
第一次三丫坡攻关后,我们小分队暂时解散被分配到不同的项目当中。而我被安排到昇腾推理做相关算子的优化。一次例会上,大家正轮流介绍自己开发进度,我突然听到一句:“reshape(形状转换)算子和后面的shape(形状计算)算子可以融合,减少host(主机)和device(设备卡)之间的流水打断。”
对啊,问题的关键其实是流水!我马上找到了我们小队的陈德仕讨论说:“现在核心的问题就是device算子总是需要等host算子计算,但是我们的符号引擎可以帮助host算子提前进行计算吗?”
陈德仕表示赞同:“的确,等待的原因是host算子不知道上一步计算的结果,但是我们可以用符号的方式表达未知的结果,提前进行计算,这样后面的device算子就不用等了,这样问题就解决了。”
我马上拉上小组内的陈德仕和张兆创进行网络验证。在经过简单的适配之后,我们成功在SDXL(Stable Diffusion XL,稳定扩散模型XL版本)上使能我们的优化,并且立刻就获得了10%的收益,看来是可行的!
我们马上把相关发现汇报给后来担任MindSpore基础框架XM的张任伟,他看到了我们的技术方案和验证效果,认为这个技术路线是可行的,但是客户落地场景时间紧,需要适配的场景多,于是建议我:“要不然我们再组织去三丫坡进行攻关?到时候相关网络的FO(特性交付责任人)都在那里,如果可以支撑客户的同时迭代我们的技术,那真是秦始皇照镜子,双赢啊!”
于是,我们小分队又一次来到三丫坡,主要进行相关技术的落地工作。有了泛化性这个明确目标,我们集中力量开始解决host/device算子融合的问题。我们从网络出发,提取网络特征,基于特征的数学表达构建融合模式。
兜兜转转这么久,最后还是回到了数学,这就是我的专长了,更何况这次我们已经提前准备好了符号引擎这个强有力的数学武器。我慢慢地把一个个网络特征变化成数学表达式,再转化成代码,一行行地流入我们的AI框架。这个过程经常会持续到深夜,我们一起讨论、开发,验证完成之后,才顶着月色一起回酒店。
最终我们的符号引擎作为动态Shape图算优化的基础设施落地到MindSpore中,并且在KbyK模式的O1优化中进行shape类算子的融合优化。
7月初,我们客户现场的同事传来喜讯:我们的技术商用落地,成功服务于客户了!
04 续篇
新的征程已经开启
在写这篇文章的时候,我正准备再一次前往三丫坡进行攻关。抬头看到皎洁的月色,回想起之前无数个头顶银辉的攻关之夜,有一些变化,又好像没什么变化。变化的是每次攻关的项目,不变的是月色依旧见证着我们讨论、攻关,一行行的代码提交。
祇今尚有清流月,曾照松湖万码过。可以想象,我在AI编译领域的奇妙冒险地图仍在持续更新中,希望走在这条道路上的我,永远满怀刚加入华为时的悸动与憧憬。
来源/《华为人》
转载请注明作者和出处
扫码加入
通信交流群
年终啦!工程师写总结,送示波器、稳压电源、螺丝刀!
活动地址👉https://mbb.eet-china.com/forum/topic/147657_1_1.html
【活动主题】写工程师职涯故事或总结,发布到面包板社区网站即可!
【活动时间】2024.12.11 - 2025.02.10
可以从这几个方面开始您的分享(必须和电子行业相关):
一、职业生涯中的故事:回顾自己过去的电子从业经历;
二、2024年年终总结:分享今年的工作心得和收获,也可以是找工作的经历。
三、工作中的小事情:记录发生的一件难忘的事情,可以是一个技术案例、一个让你收获颇丰的电路。
一等奖:普源DS1202Z-E示波器,华为WATCH GT 5幻夜黑,任选一个
二等奖:小米扫地机3C,小米平板REDMI Pad SE 11,任选一个
三等奖:优利德UTP1306S稳压电源,华为随行WiFi 3 Pro,任选一个
优秀奖:绿林螺丝刀套装117合1,米家温湿度计,任选一个
所有参与者均可获得50E币奖励!(E币可在社区商城兑换奖品)
阅读量过万奖励:若单篇文章在MBB微信号阅读量过万,每篇奖1000个E币奖励(数据统计截至时间为2025.2.28,仅限前20篇,按文章发布在MBB社区的时间排序,个人累计封顶奖励10000个E币奖励)
↓↓ 点击阅读原文,参加活动