旷视天元背后的追风少年
在大多数人的眼里,程序员的生活是刻板的:996的工作时间、长期熬夜、掉发严重、万年格子衫…
然而,旷视天元的开源研发团队,却以多元化的面貌展示了这个群体少为人知的浪漫与执着:
有人痴迷明史,选择北漂就是为了故宫;有人是职业旅行家,探访过三十多个国家;有人钟爱二次元,动漫就是他的全世界;有人是Dota 2信仰粉,也有人是强大的Dota 3号选手;还有猫奴、影迷、德州扑克爱好者……
他们唯一的共同点,也许就是写程序这个“业余爱好”。
但正是这样一群个性不一的年轻人,让旷视成为了国内第一个将深度学习框架开源的AI独角兽。2020年3月25日,旷视正式将在内部使用多年的深度学习框架开源,并命名为天元MegEngine。
开源的背后,是数不清日夜的付出,以及一往无前的勇气。在天元开源的征程上,旷视的“程序员”做了什么?对于中国开源,他们扮演了怎样的角色?
旷视决定开源
自2020年3月25日正式发布天元 Alpha 版本之后,旷视天元打出“深度学习,简单开发”的口号,在开发者社区引起火热关注。
深度学习框架堪称AI时代的核心软件支柱,下接芯片,上承应用。
“为什么要开源一个深度学习框架,真的不是在重复造轮子吗?”
天元开源后,团队成员经常收到这样的提问。毕竟,在旷视将天元开源前,市场上已经有Google所开发的TensorFlow和Facebook所开发的Pytorch等主流深度学习框架。
那么,旷视为什么还要坚持开源?
自2012年起,尽管深度学习尚未引起广泛关注,但已陆续有研究者开发出第一代深度学习框架,比如Theano。然而,在实践过程中,旷视的技术人员发现,这类早期开源框架使用手工的方式编写每层配置文件,非常不灵活,根本无法满足对算法训练效率的需求。 雷锋网
于是,旷视研究院决定自己开发一款框架,通过计算图的方式设计模型并求导。2014年初,旷视研究院的 3 名实习生从第一行代码写起,用了不到半年的时间,成功开发出深度学习框架天元(MegEngine)的初始版本MegBrain。 雷锋网
2019 年年底,公司决定将 MegBrain 开源,开源版产品进行了重新整合,更名为MegEngine,中文名为“天元”。其中,“Meg”对应旷视“Megvii”,而"Engine"指"引擎"。旷视将天元开源,是希望它能成为人工智能技术发展的“引擎”。 雷锋网 (公众号:雷锋网)
首先,饮水不忘挖井人。
在技术进步层面,旷视团队在开源社区中受益颇多,因此,当旷视的框架技术有了些积累后,他们也希望把技术拿出来,回馈给开源社区。
其次,旷视渴望向世界发声。 雷锋网
自2011年成立以来,旷视在各种行业顶级期刊与会议上发表了大量优秀的论文,在人工智能领域积累了丰富的研究成果。如同一个初窥门径的武林少侠,它渴望与江湖高手对话、切磋,实现共同进步。
如果天元是开源的,那么旷视的许多内部研究成果就可以直接拿出来供大家使用,而不需要改写到其他的框架上,对话会更容易;此外,天元框架对企业级应用(尤其是部署推理)做过深度优化,大家可以开箱即用,这对旷视乃至整个行业在研究落地上均有帮助。
天元的研发负责人许思然认为:“我们是工程师,我们用代码沟通。开源代码,实际上就是旷视所有技术人员与开发者交流的一种方式,这是工程师自然而然的追求。”
他认真而又不失乐观的表示:“开源这件事,对于我们整个团队乃至整个旷视都是一个激励和鼓舞,因为我们的代码将能够产生更大的影响,服务更多人。”
因此,尽管困难重重,旷视毅然决定将天元框架开源。众人拾柴火焰高。这句中国俗语亦可用于形容现代开源事业的核心:多元,团结,贡献。在背景各异的团员驱动下,天元开源,拉开了帷幕。
开源:过五关、斩六将
确定开源后,许思然与团队对天元框架进行了全面升级:
首先,旷视团队重新设计了天元的Python前端,让它更加易用,让有机器学习相关使用经历的开发者上手更容易。
接着,审查开源代码许可证,保证整个流程遵循开源社区的规范。在这一方面,许思然与团队花了大量时间,与内外部的法务专家合作,一行一行代码地检查,对整个代码库进行了十多次人工分析和回顾。
经过多次反复审查,许思然笑称:“现在我们团队人人都是“法律高手”,什么 License(许可证)的代码能用、什么不能用,啥叫"分发源代码",啥叫“分发产物”,用了要怎么写声明,我们现在都一清二楚…… ”
其次,团队在用户环境适配方面下了大功夫。
在旷视内部,所有人统一使用旷视自研的Brain++平台(一个融合了算法、算力和数据的AI生产力平台),很容易做到“开箱即用”。但是,在开源版本,用户所使用的机器各种各样,各种配置都不太一样,比如系统版本、各种软件版本、机器的型号、显卡的类型等等。为此,他们通过天元开发者群的交流与 GitHub 上所提交的信息,不断改进,让代码可以适配各种各样的机器和型号 。
除此之外,天元团队还在原有内部版本的基础中增加了中文API文档。一位开发者在和许思然闲聊时反馈:“有一种莫名的亲切感,可能因为它是中文的。”
在加入天元项目之前,团队的许多成员都对开源有一定了解。程聪宇接触过 Linux Kernel、Chromium与LLVM等开源项目;张风在美国读博期间也直接或间接参与了一些科学计算相关的开源项目;文洁此前的经历则是持续推进已经开源的项目,直到加入旷视才开始从准备工作跟到项目正式开源、完善。
与其余同学相比,通过校招进入旷视的王波此前对开源几乎一无所知,因此,在刚被通知天元要开源时,“整个人有点懵,不知道该干啥。”后来,他参与到代码审核工作,在审查过程中慢慢跟上大部队的节奏:“去年2月26日完成审核工作、确定代码无法律风险后,在会议室里深深地舒了一口气。”
在开源前,程聪宇和团队的主要任务是保证x86的性能就绪,优化卷积实现,最终达到对标 OpenVINO 的水平。令程聪宇印象最深刻的是:x86 nchw88 的 winograd 没有就绪前,他们的 x86 在 ResNet50 的性能一直比OpenVINO 低一点。后来,他与组员在 winograd conv 上进行了各种调优,性能终于超过 OpenVINO。那一刻,“大家真的是如释重负!”
文洁记得,除了正常的代码开发工作外,开源发布会的各种准备工作非常多。正式发布的前一天才发现直播供应商出了些问题,开发团队临阵磨枪研究了一晚直播转发功能,非常累。但看到直播的那一刻,她非常激动,觉得一切辛苦都是值得的:“因为我们做到了!”
终于,2020年3月25日,旷视在北京发布了国产深度学习框架天元的 Alpha 版本,正式面向全球开发者开源!
开源:正在进行时
发布会当天,团队定了蛋糕,大家一边吃着蛋糕一边看天元开源的线上发布会,既兴奋又忐忑。
除了激动、自豪,天元团队的成员也感到压力:天元在开发者社区引起了很多关注,自己写的代码将接受整个行业的检测,不确定能否得到大家的认可;Alpha 版本之后,还有许多工作要完善。
开源后,许思然特地跑去社区看关于天元的反馈,有真诚的赞许,也有很多细节改进的建议:“作为一个新的开源项目,天元可能存在很多问题,我们都愿意承认这一点。但是我们在不断地改进它,这也是大家现在工作的一个非常重要的部分。”
天元是一个由企业主导、社区共建的开源项目,因此参与的人员更广泛,来自科研、教学、生产等各个领域。这也意味着,天元将收到不同的反馈意见。
继3月开源后,旷视团队又在2020年6月发布了 Beta 版本。大约90天内,他们收到了330多个来自使用者的反馈意见,大多是关于修bug方面的改进和速度方面的提升。
根据反馈,许思然与队员一一作了改进,在中文 API 文档的流程中补充了大量针对中高阶开发者的进阶使用部分,提供了在安卓上从训练到完成产品一整套的教程,还提供了相关的支撑程序设施,使大家能更好体验训练推理一体的完整流程。
Beta 版本的进步是肉眼可见的:天元开源了ARM系列CPU支持、完善量化训练和推理功能、推理功能优化等3项功能升级,并与小米的MACE深度学习推理框架、OPEN AI LAB 的Tengine框架实现深度集成。
随后,2020年9月,团队发布了天元1.0预览版,新增5大技术特性:全新的Imperative Runtime、自动代码裁剪功能、更多的国产硬件支持、10余项推理侧性能优化、基于MLIR的静态子图优化引擎;2020年10月发布 1.0 正式版;2021年1月又发布了 1.2 版本,2021年3月24号,天元1.3版本上线……
密集的发版节奏也让团队工作异常忙碌。最忙的时候,为了赶工,团队在周末也会赶到公司加班。“不过大家一边讨论,一边吃好吃的外卖,也是非常有意思的体验。”负责模型量化的刘希宇谈道。
在高强度的工作状态下,每个人逐渐养成了自己的“护肝”秘诀。张风在压力大时,会通过跑步与健身出汗,让自己冷静下来;刘希宇会偶尔做一下办公室桌椅健身操,改善颈椎职业病。
开源让团队度过了很多不眠之夜:在2020年的四次版本发布中,许思然分别熬到了凌晨3点、4点、5点和6点。发版前需要确保开源版本一切正常,由于在同步过程中往往会出现裁剪错误或依赖内部的文件,总是在对外发布之前突然发现各种小问题导致编译不了,于是通宵达旦的调查到底哪里裁剪出现了差错。
但如今,团队已经开发出许多小工具,可以让各种开源版测试自动完成,不用工程师再熬夜盯。
对于程聪宇来说,忙碌只是小case,最大的困难是开源后继续做 Arm 优化。天元希望可以实现比其他深度学习框架更快的速度,这给优化带来了巨大挑战。当时,他们几乎用了所有能用的方法来进行优化,但都没有取得效果,一度非常绝望。
后来,他们通过profile发现存在的问题是访存瓶颈。在开会讨论解决方法时,有组员提出对不同卷积 case 进行不同的优化,配合 layout 来进行优化。实验证明,这个方法非常有效。程聪宇很自豪:“虽然很难,但我们做到了。”
天元的开源与迭代,最终使性能达到了团队目标吗?
根据以往的开源经历,程聪宇深知做一个好用的“训练+推理”的框架非常不容易,既要保证性能,又要保证易用性,且不同硬件平台差异也大。开心的是,天元在高性能方面做得不错 (算子优化、多平台支持),典型模型的预测和推理性能在 x86/Arm/CUDA 平台上不弱于主流框架;遗憾的是,易用性还需要继续打磨。
对张风与王波来说,天元在静态图的性能和显存占用方面达到了预期目标,但Alpha版本发布时,动态训练的能力刚刚起步,在架构设计、显存和性能上都表现一般。但经过团队的努力,在2020年结束之际,天元的动态训练能力也达到了一个成熟的状态。
“这是令大家最有成就感的事。”张风如是说。
从开源到开放
回顾过去的一年,旷视团队的各成员均被开源文化深深吸引:在工作中,他们既为中国的开源事业奉献了自己的力量,收获了友谊与自我成长,还遇到了很多志同道合的朋友。
尽管开源的工作无比繁重,但程聪宇觉得,在天元团队工作还是非常快乐的:“和有趣的人一起工作,是1+1>2的效果。”
有一次,他们特地挑了一个“良辰吉日”去开卡丁车,去之前还积极制定了缜密详细的比赛规则。
张风对这次赛事印象深刻,“戴上头盔,耳朵里就只有发动机的轰鸣声,轮胎和跑道摩擦声和自己的心跳声,大家好像一下子就从电脑前的程序员变身为职业赛车手,非常解压!”
那一次,王波因为有事没参加,事后既羡慕又庆幸,“据说开太猛了有点累。”
开源,让团队成员不再感觉自己是“打工人”,有了更多的主人翁意识。许思然认为,开源有一个重要的点,就是用户第一。“你自己就是用户,你最懂你自己的诉求,知道怎么改。在开源的逻辑之下,人人都要为最终使用者的体验去负责。”
在这个过程中,天元团队有一个明显的变化,就是心态变得更加开放。
刚开源的那段时间,运营的小伙伴督促天元的研发同学做线上直播,和开发者做一些技术分享的talk,大家都不敢去。如今,天元的Meetup活动内部讲师征集,大家却十分踊跃,令活动进行非常顺利。
比如,刚开始对开源几乎毫无经验的王波,最近成功晋升为小组组长,成为了2021年天元首期Meetup的讲师。直播前,王波预讲了3-4次。“现场效果还不错,意外收获了很多开发者的反馈,还是挺开心的。”王波事后总结道。
文洁也有同样的感受:“在之前的开源工作中,我们更多是宣传代码的心态。但在天元开源中,我们知道我们的不完美,也很诚实地告知大家,欢迎大家一起来讨论、改进。”
与开发者的日常
程聪宇认为,“一个软件之所以能取得成功,很大程度上要归功于开源本身,因为有更多人参与到这个软件的开发,有更多使用者发现问题,从而解决问题。这些开源软件的贡献者非常厉害,值得尊敬。”
有些贡献者“来无影、去无踪”。天元有一个编译工具,里面有一千多行代码。“开源之后,真的有开发者跑过来,帮我们仔仔细细地检查一遍,挑出几个错误,改过来。咦,果然合适!” 这件出乎许思然意料的事情,令他至今记忆犹新。
天元开源后,来自社区开发者的反馈帮助天元团队成长了很多。
许思然回忆,刚开源的那段时间,几乎天天被身边几位热情的开发者怼,说这个做的不对,那个也不对。后来,大家在互怼的过程中找到了一个相对平衡和彼此理解的状态。曾经的主怼人之一W同学让许思然印象深刻:“他是喷天元最厉害的开发者之一,但也是天元每次版本更新后最先试用的人。”
W同学将自己的行为归结为“爱之深、责之切”。在W同学眼中,天元经过一年的迭代,现在的量化框架非常优雅,能使得量化训练更容易正确初始化,兼容各种算法,“虽然还有点慢,但是真香!”如今,W同学已成为天元的“推广大使”,在自己的社交平台积极安利天元,繁忙的工作之余还常常为天元贡献教程文档。
天元的开发者社区中还有一个微信群,叫做“MegEngine和喝奶茶的好盆友们”。群里有旷视的员工,也有很多外部开发者,大家因为天元开源而结识。
2020年结束的跨年夜,大家在群里相约,通过云聚会写模型的方式一起庆祝跨年。开发者“落月星辰”在12月31号当晚就写了好多个经典模型。
“落月星辰”评价天元:虽然天元目前也存在一些缺陷,比如缺少预训练权重文档。但相比其他框架,天元提供的 API 在计算机视觉一块提供了更多支持,文档更齐全,对用户提问秒回;而且天元的后端静态推理很强,内存优化做到了极致。”
展望
2020年被称为国产深度学习框架开源的元年。除了旷视的天元MegEngine,清华的Jittor、华为的MindSpore等国产框架也都纷纷开源,市场似乎变得拥挤起来。
然而,挑战与机遇总是并存。旷视的野心不是垄断,而是成全。布局天元,意味着不计较一角一地的得失,跳出局部,从全局看问题。
正如“天元”的命名启示,“天元”在围棋中,是棋盘的正中心。旷视将天元开源,是希望自研的深度学习框架成为中国人工智能领域发展的基石,动力,以及信心。
开源本身,往往是“后来居上”:将自家的独门绝技分解成一招一式,慷慨对外,既是开诚布公的交流,也是明枪暗箭的较量。将天元开源之后,旷视不再独享其优势性能,天元的代码随时被修改、被借鉴、被创新,但在天元团队看来,这正是开源的魅力所在:“促进交流,共同成长!”
许思然相信:“一个领域越火,发展的速度就越快。深度学习是一个技术主导的领域。技术做得好,能够被其他人借鉴;做得差的,方案就没人用。开源的深度学习框架变多,最大的好处是大家可以相互学习对方的长处。”
一年的奋战过后,旷视团队继续走在开源的路上。
当被问及何时会觉得天元开源成功了,许思然想起电影Soul(《心灵奇旅》)中的一个片段:“没有一个明确的时间点,说到那个时间点,突然就成功了,进入到下一个阶段了。”他认为,开源也是如此,也许有一些标志性的阶段,但没有尽头。
问及接下来的工作期待,许思然的回答是:“多做几个强大的 feature,让更多人来用 MegEngine 。”张风等人则希望,能够从开发者社区的交流中获得更多助力。
尽管越来越多国人意识到开源的价值,但必须承认的是,中国的开源生态仍待完善,我们仍有一段漫长的道路要走。
路漫漫其修远兮,吾将上下而求索。旷视天元开源团队的身上,有着新一代青年人对技术创新一往无前的勇气、热情与执着。作为中国开源队伍中的一分子,他们让我们看到天元框架的潜力,以及中国开源生态发展的更多可能性。
致敬天元少年,致敬中国开源事业!(举杯)
(天元团队成员觉得所取得的成绩都是团队贡献,请求化名,感谢读者理解)
。