两年多前,郑辉还是一个即将毕业的大四学生,每天沉迷在代码的世界里,忙着准备研究生复试,从未对AI有过太多想法。
没有人会想到,两年后的郑辉已经是一位资深的AI开发者,他独立开发的NonZero算子被合入异构计算架构CANN主线,参与开发的深度学习框架降低了大模型训练的门槛,目前正在做大模型分布式推理加速,希望可以帮助其他开发者在生产环境中高效部署在线推理服务。
在昇腾AI的生态里,像郑辉这样为大模型浪潮默默贡献自己力量的开发者不胜枚举。他们还不是世界的“主角”,却在用自己的方式改变着世界。
01 “导师安排的第一个项目”
时间回到2022年4月,因为优秀的笔试成绩,郑辉顺利进入到杭州电子科技大学的研究生复试。当导师问及有没有感兴趣的研究方向时,郑辉分享了自己解决Bug的经历,第一次接触到了分布式机器学习。
同样是在2022年4月,昇腾AI开发者创享日在西安举行,正式发布了“昇腾众智计划2022”,推出了包含算子、模型开发、系列创新应用在内的4000多个任务,杭州电子科技大学正是签约合作的高校之一。
刚进实验室的郑辉,由此被导师安排了第一个项目——使用C++开发NonZero算子与调优。
深度学习算法由一个个计算单元组成,这些计算单元被称为算子,可以理解为实现特定运算逻辑的代码模块,比如文本生成、翻译、情感分析等任务。一个优秀的算子不仅可以提高模型的效率和性能,还能够降低模型的资源消耗,在相同的计算资源下完成更多任务。
因为算子在模型中扮演了重要角色,自己也是第一次做类似的项目,郑辉心里泛起了嘀咕:“我的能力够不够,最后能不能做好,会不会影响别人的进度?”向实验室的师姐请教后,郑辉“硬着头皮”接下了任务。
为了学习算子开发的知识,郑辉在B站上看了不少视频课程,发现昇思MindSpore上有详细的开发文档和现成的算子库,遇到不懂的问题可以直接和昇腾AI的工程师沟通,逐渐有了把项目做好的信心。
让郑辉印象深刻的是:“开发算子时看到代码里已经有一个for循环,不理解为何还要去实现for循环的并行,在我看来收益并不大。但昇腾AI的工程师告诉我,就算是一个微小的提升,在庞大的数据面前也会产生有价值的收益。”
经过近两个月的钻研,郑辉提交的PR被审核通过,通过引入Parallel.For循环实现了算子开多核,可以进行多线程提速,让昇思MindSpore的NonZero算子有着不逊于Tensorflow和Pytorch的精度,目前代码已合入CANN主线。
相较于最后的结果,郑辉认为自己从过程中获得了更大的价值:“算子开发是我的第一个项目,经过算子的需求分析、性能分析、开发、测试、性能优化等一整套开发流程,让我深入了解了大模型的内部运行机制,包括数据流、计算图和并行计算。更重要的是,让我有勇气去承担更大的项目,每次遇到困难时,总会劝自己试一试,不试试怎么知道自己不行,万一成功了呢。”
两个月的时间并不长,但让郑辉完成了从懵懂少年到“众智开发者”的蜕变,同时也印证了昇腾AI发起众智计划时的构想:通过汇聚产业界智慧和力量,加速基础软件创新突破,共促多样性计算产业发展和生态繁荣。
02 “难点在于找到应用场景”
喜欢琢磨事的郑辉,不想在象牙塔里做一个学术派,而是在项目中解决问题。在他的认知里,人工智能落地应用最大的难点已经不是技术实现,而是场景的选择,怎么让生成式AI在更多场景中发挥价值。
郑辉的想法并非没有道理,AI工程化早已是一个热门课题。
即使是谷歌这样的互联网“头羊”,AI科学家和工程师们也常常会遇到“开发一周,上线三月”的情况,需要对模型花费数个月的时间进行鲁棒性、数据时序穿越、线上线下一致性、数据完整性等各个维度的排查。能否为业务场景带来更好的效果、更大的价值,将是AI走进千行万业的关键。
除了算子、深度学习框架等基础开发,郑辉不愿错过任何一个将AI在场景中应用的机会。昇腾AI创新大赛2023的活动发起后,郑辉毫不犹豫地参与其中,甚至没有选择自己有过项目经历的昇思赛道,而是更有挑战性的应用赛道。
“我在团队中是主要负责场景的选择,以及整个船舶监测系统平台的设计。像智慧海防监测这样的场景,对数据安全有着极高要求,特别适合运行在软硬件一体的国产生态上。所以我们基于昇腾算力平台,将AI应用于海洋渔船作业场景,通过预测渔船航行线路,来提高安全保障。”
不同于一些为了比赛而比赛的现象,昇腾AI创新大赛2023已经结束了半年,郑辉所在的小组仍在继续推进项目:“今年将不再局限于部分地区的港口,计划将沿海各省的数据都纳入范围,我们的目标是在全国沿海城市实现这个项目,通过整合更广泛的一个数据资源,为出海渔船构建一道隐形的安全防线。”
很多人说2023年是“生成式AI元年”,各行各业都在训练自己的大模型。可“大炼模型”终归只是AI走进产业第一步,在现实和智能之间,仍然横亘着一片鲜有人涉足的“荒海”,需要千千万万的开发者去扮演“渡舟”的角色,通过一个个落地应用的项目或产品,照亮千行万业的智能化之路。
正在读研二的郑辉,某种程度上让外界看到了中国AI的希望所在。
就像在“渔船航行线路”项目中,郑辉特意提到了后续的商业化问题:“我们可以和保险公司合作,在他们的风控体系中增加渔船的航行线路,在给渔船提供金融服务的时候,有一个更全面的风险分析。”
兴趣使然的开发者,总会有激情消退的时候;能看到商业机会的开发者,才会是理想的“渡舟”,最开始也许只是一条“木筏”,可只要找到了商业化的路径,“木筏”就会一步步进化成舢舨、帆船、货轮,载着更多场景驶向智能化的彼岸。
03 “让大模型的推理快起来”
因为算子开发的机会,郑辉踏入了人工智能的河流;因为昇腾AI创新大赛2023.郑辉认识到了场景应用过程中的种种痛点。曾经对AI“不太感冒”的大男孩儿,慢慢有了更多的想法,开始做一些更有挑战性的项目。
比如ChatGPT刚火的时候,郑辉就跑去问各种问题,发现ChatGPT的回答速度很慢,认为“这种体验感大大降低了用户的兴趣”。原因在于,基于Transformer的大模型具有多次迭代的特性,导致在推理方面存在负载不均衡、算力资源无法充分利用等问题,在大模型的实际使用中,推理速度往往成为制约性能的一大瓶颈。
过去一年多时间里,大模型训练始终是技术圈的焦点,其实推理加速比训练加速更难。训练加速主要受数据并行性和模型并行性的影响,而推理加速更多地受到模型结构、计算图优化、内存访问、实时性等方面的影响,需要在短时间内处理大量数据,而且要求极低的延迟。
为了解决大模型推理问题,华为2012实验室和杭州电子科技大学联合组建了“攻坚小组”。郑辉主动向导师请缨,参与了MindSpore Serving的研发,旨在帮助开发者在生产环境中高效部署在线推理服务。
不同于外界降低精度来提升推理速度的做法,郑辉的策略是实现并优化Fastserve论文,通过多级请求等待队列,将不同请求划分到不同的等待队列,实现抢占式调度用于降低请求延迟、饥饿调度用于唤醒低优先级请求、主动式Kvcache管理用于充分利用算力资源,在提高推理服务系统吞吐性能的同时,降低请求的平均完成时间。
“如果没有最初做算子开发的经验,恐怕也不敢去做大模型的推理加速。从算子的角度看大模型,推理加速其实就是对算子的优化,然后利用算子就行脚本编写,从而实现推理加速和吞吐量的提高。”郑辉回忆道。
和一个人做算子开发的经历相比,与团队成员协同完成Fastserve策略的过程,让郑辉对团队合作有了更深刻的认识:“一个人可以走的更快,但一群人可以走的更远。个人在团队里好比一颗齿轮,扎实的技术深度就是齿轮驻扎在一台庞大机器里的深度,协作能力好比齿轮的边缘,同事的配合会使我这颗齿轮的转动更顺利。”
对于23岁的郑辉来说,加入AI开发的时间并不算长,却走出了一条典型的成长路线:因为各种机缘接触到了昇腾AI生态,开始了在AI世界的“升级打怪之旅“,起步时还有些生涩,但通过一个个项目中不断发现问题、解决问题,对场景和技术理解的深度不断提升,不断攀登更高的山峰。同时在一次次碰撞中,学会了高效协同,集众智、合众力去解决更复杂的难题。
04 结语
以梦为马的奔跑,终将成就熠熠生辉的人生。
正是像郑辉这样有技术、有想法、有商业嗅觉的年轻人,以一种无畏向上的精神踏入人工智能赛道,沉浸在代码的世界里挥洒汗水,用智慧和毅力解决了一个又一个技术问题,让我们看到了AI走进千行万业的希望。