在字节跳动,有这样一群实习生,他们的另一重身份,都是来自顶尖高校的技术博士。
实习第 100 天,团队为了清华博士云飞专门开了一个全新课题。北大博士瑞晨曾经不得已搁置的想法,也在这里实现了大规模验证。
在字节跳动的实习经历,几乎贯穿了北大博士天亮和中科院博士露阳的整个博士生涯。天亮从一个 “束手束脚” 的实习生成长为一名独当一面的技术大牛。曾抱着 “试一试” 心态的露阳,也在 “一件又一件有挑战的事” 中拿下了 5 篇顶会和 3 项专利,他决定长期留在这里……
天亮、露阳、云飞、瑞晨…… 他们是众多正在或曾在字节跳动实习的技术博士故事的缩影。对于仍在校园象牙塔的年轻人而言,职场仿佛是个很遥远的地方。但加入字节跳动后,他们就像一颗颗种子,在这片自由、创新的土壤扎下了根,并不断实现突破、成长……
从左至右:露阳、云飞、天亮、瑞晨
“去那里能真的学到东西”
天亮常说,自己是在字节跳动读了个博士,因为 “博士期间的成果基本上都是在公司做的”。
2018 年 10 月 22 日,入职那天,也是天亮的生日。到达盈都那排 “矮楼” 时,恰逢上班高峰,穿过 “旋转门” 进入工区的人络绎不绝,他回忆说,“当时最直接的感受就是:好多人,好挤啊。”
“挤” 的背后,是这家企业正在快速发展。天亮回忆说,“其实字节参与视频编码标准制定还没多久,但在外界看来,这家公司科研实力很强,有一种异军突起的感觉。”
之所以会产生这样的认知,一方面是字节跳动在短时间内密集发布成果,另一方面则是汇聚了一批 “优秀的人”。
“很多行业享有盛名资深大佬都在字节,” 天亮说,“我导师经常在实验室讲,你们的大师兄、大师姐又在字节做出了什么成果。”
盈都大厦一角
入职前参与的一次提案会,更加深了他的这种印象。那次会上,围绕 H.266 国际标准框架,字节跳动提出了一条全新的技术方案,剩下的五六家厂商,都是对手阵营。
“会议室有两个话筒,我在字节的那位大师姐站在一个话筒前,剩下的厂商站在对面轮番挑战。那种感觉,就像是华山论剑里的高手过招。” 天亮对那次会议记忆犹新,“我之前对她是只闻其名不见其人。直到那次,我才真的意识到,这个人真厉害。”
最终,字节跳动在那场会议上赢得了胜利,提案顺利通过。所以,当导师推荐他到 “大师姐” 的部门实习时,天亮非常激动,“我的想法很简单:有那么多大佬在,去那里肯定能学到真东西。”
因为想 “学到真东西”,而来字节跳动实习的技术博士,并不只有天亮一个。
2020 年的暑假,在清华直博的云飞确定了自己的课题方向 —— 通用智能机器人。导师告诉她,字节跳动有一个相关领域的团队,建议她去 “看一看”。
“我导师读书时也曾在字节实习过好几次,他觉得在这里能学到不少东西。” 云飞说,在导师的亲身经历 “背书” 下,尽管还有其他实习机会,但她还是来到了这里。
云飞在校园
同样是在那个夏天,中科院博二在读的露阳也发现,自己 “需要一个更大、更好的发展平台”。
“在网络领域,传统软件协议栈处理的方式已经到达瓶颈,软硬件协同设计下的高性能传输协议正在成为重点。” 露阳回忆说,“所以我当时很想往数据中心网络领域发展。”
在导师的引荐下,露阳和字节跳动弹性加速部门的负责人聊了几次,发现对方 “做事的态度和科研的能力都很好”。知道露阳在硬件领域比较薄弱,那位负责人(也就是露阳后来的 Leader)还专门为他整理了一套技术文档。
入职第一天下午 1v1 时,露阳回忆说,Leader 给他买了一堆零食和饮料, “他直接说想把我留的时间更长,和我一起做很多更 Exciting 的事。” 原本只是想来 “看一看” 的露阳在当时并没想到,这次实习会持续四年多。
他正式的职业生涯,也将在这里开始。
“专门为实习生开了一个课题”
现在回想起来,云飞会说自己刚开始实习时,做的都是些 “很愚蠢、无聊的事”。“我当时对机器人的认知并不够,没想好具体要做什么,” 她说,“只是模糊的想到把强化学习和机械臂控制做结合,让机械臂把积木块从 A 点抓到 B 点。”
三个月多后,Leader 看她已经 “慢慢进入了状态”,就建议她 “做点更有趣、更性感的事。” 在 Leader 和同事们的帮助下,云飞开始思考,“既然机械臂可以挪动积木块了,那能不能把它们组合成更有趣的形状?”
于是,她开启了自己的实习 2.0 阶段 ——“搭桥”。听起来简单,但对当时的单臂机器人来说,却是从 “简单任务” 到 “复杂任务” 质的飞跃。
“涉及到的材料很多,且形状、长短不一,这种长流程任务对强化学习本身就是一个挑战。” 云飞解释说,“强化学习是一个不停摸索的过程,发现一些有用的信号后,才会朝着这个方向迭代。一开始我们引入了一些外部激励函数,去强行拖着算法走,但都没有取得很好的效果。”
那段时间,让云飞感到 “非常难受”。在与 Leader 和同事们讨论后,她决定另辟蹊径。
“算法之所以探索不到有用的信号,是因为每次都从零开始,碰了钉子就又回到了零的状态,哪怕做出了一些好的结果也作废了。” 云飞说,“后来我们想到,可以让算法记录下自己的历史状态,遇到好的结果就继续沿用。” 本质上,这是一个算法自我学习、自我探索、自我奖励的过程。
“当然这个方法并不是我们的首创,但当时在国内受到的关注还比较小,主要是在学术界大家在鼓捣着玩。” 云飞说,“我在的组之前并没有人做,相当于是单独为我这个实习生新开了个课题。”
国际智能机器人与系统大会 IROS 2021 上,
云飞参与设计的机械臂展示如何 “搭桥”
不只是云飞,类似的故事,几乎每天都在字节跳动发生。
研究量子蒙特卡罗领域的北大博士瑞晨回忆说,自己刚入职时做的事情也很基础,“就是用各种标准网络结构解方程、计算分子性质。”
但不久后,他就发现已有的网络结构开销非常大,计算速度面临着瓶颈。“要得到一个双苯环 84 电子的计算结果,可能需要用一万多的 GPU 卡时。” 瑞晨回忆说,“在这样大的一个消耗下,我们的迭代速度会非常缓慢。”
“我们当时是沿着业界的标准做法,直接计算神经网络的二阶导数,这极大限制了计算速度。” 瑞晨回忆说,“但当时二阶导数在神经网络领域的研究非常少,我就在想,能不能有一种新的方法,去加速二阶导数的计算?”
虽然有严格的理论支撑,但并没人尝试过。当瑞晨拿着初期的验证结果找到 Leader,对方直接鼓励他,“去干吧”。于是,瑞晨就成了这个课题项目的实际负责人,那时距离他入职实习,也只过去了三个多月。
最终结果得到验证的时刻是个冬天,“我当时正在电话亭里和同事开会,顺便把代码跑一跑,结果发现真的成了。” 他回忆说,“那一刻真的是头皮发麻,激动得浑身冒汗。”
在瑞晨和同事们的努力下,最初的那个小想法沉淀成了一套二阶导数计算的自动微分程序,“在这套程序的帮助下,在保证标准网络结构计算精度的同时,计算速度也提升了 10 倍以上。”
这项成果也成为了该领域内里程碑式的研究工作,并发表在了自然子刊《Nature Machine Intelligence》上。去年八月,DeepMind 发表于《Science》上的成果也受益于这项成果。
“这也许会让你大吃一惊,” DeepMind 研究员 David Pfau 在社交媒体上评论道,“但我们依靠微软基于北京字节跳动团队研究的开源包来快速完成这些计算。”
DeepMind 科学家 David Pfau 的个人社交媒体
从 0 经验到推动技术实现行业领先
事实上,这个想法的雏形在瑞晨来字节跳动之前就形成了,但当时的他只能搁置下来。背后的原因,主要是计算资源的欠缺。
到了字节跳动之后,曾经的难题迎刃而解。“正是因为有着充足的计算资源,我才想到原来的那个 idea 能不能再试一试。” 瑞晨说,自己的课题也是组内消耗资源最多的项目,“即便是有前期试验结果,在大规模验证之前,没人能预料到最终的结果,我的部门其实是在陪我一起冒险。”
筋斗云 (字节跳动面向优秀校园技术人才推出的人才专项)Open Day 上,
瑞晨在参与破冰游戏
“不怕你试错,就怕你不试嘛。” 天亮到字节跳动实习后,慢慢变得更敢放手干了,他感觉自己 “从没打过这么富裕的仗”。
“在字节跳动,我可能一两天就拿到计算结果了,这给了我更多试错空间。搞研究嘛,没有试错怎么进步?” 他说,“但是在学校实验室,用到的时间就比较长,拿到结果时甚至可能都忘记为什么要做这个实验了。”
云飞对此也深有体会。“在机器人这个语境下,如果脱离了基础设施,再好的想法也是空中楼阁。” 她说,在实验室里要做一项分布式训练是不可想象的,但到了字节跳动,“有专门的团队在做基础设施,你的训练任务可以得到非常稳定的保障,想实现一些想法也会更加容易。”
露阳正是字节跳动技术基础设施建设者中的一员。
入职第一年,露阳就独立构建了基于 Python 的硬件仿真框架 (Cocotb),并面向 ByteFPGA 平台开发了 driver、monitor、function coverage 等多类基础组件和基于 HBM 的行为模型,为字节跳动多项业务的顺利开展打下了基础。
后来,他开始走出软件仿真的 “舒适区”,逐渐迈向硬件设计这个的陌生领域。
弹性加速部门的工作涉及到众多真实业务,可谓牵一发而动全身。“我在硬件领域的经验不足,没能力去独立负责一个很大的功能模块。” 他回忆称,自己正是从一个个子功能模块开始做起,“每当我提出一种设计方案,Mentor 和其他同事都会帮逐个分析细节,并一起修正错误。”
随着一个个子功能模块的完善,露阳也越走越远。实习第三年,在字节跳动自研网卡项目中,他已经可以独立负责 “超大规模组网拥塞控制测试和优化” 这个关键任务了。自研网卡分为单卡设计、测试和大规模组网测试、优化,在某种程度上,露阳成为了整个项目的 “守门员”。
露阳和陪伴他 4 年多的工位
正当他准备大干一场时,却发现自己掉进了一个又一个 “坑”。“我接手一段时间后,发现到某一个版本后突然间性能就上不去了,网络抖动特别厉害,延迟也很高。” 露阳最开始采用排除法,“哪个组件出现了问题,我就让它回退一个版本,迭代更新之后再重新测试”。