写在前面
理所当然地,2024 年的年终总结还是摸到了 25 年的 2 月份才写。刚回到学校,并且刚刚赶完一个 DDL,这个能稍作喘息的时间正好可以用来倒点情绪垃圾。
24 年可以说是一个非常丰富的一年了。一方面,它刚好落在我的毕业季,是我从人生的一个阶段(本科)升到另一个阶段(博士)的过程,也是我从一个定居点(上海)迁到另一个地方(北京)的过程,也刚好是我从一个工作的结束进入到自由探索、以及自己 lead 的下一个 project 的区别。跨年时候,本来想在朋友圈发个年度的回忆照片九宫格,但是翻开自己相册滑到最上面,才发现时间线到达今年 9 月的时候便戛然而止,头几张照片已然是我收拾行李从家里出发、踏上远途的照片,而上半年在交大的日子似乎像是从记忆被删除了一样。哦,想起来了,原来是之前为了腾空间做了一次大备份,把本科阶段的材料、照片都转移到了其它存储介质上。这样的感觉还挺奇妙的,回望上半年,感觉自己就像一个旁观者在看着另一个人的人生,而现在这个瘫在研究生宿舍的我才给我一种实感。
不论如何,还是用尽全力回忆一下在记忆中逐渐模糊的上半年吧。
孤独、吉他与蓝色星球——毕业季、上半年
上半年基本与我的大四下是重合的。首先是 Parrot 成功中稿了 OSDI’24,挺让我自己意外的。除了开心以外,自己的大部分精力也被 Rebuttal 和中稿后的 Artifact Evaluation(系统会的中稿文章都需要经过 AE,目标是复现论文中的结果)占据了,由于 AE Reviewer 没有服务器,又因为安全因素不能直接把 MSRA 的服务器暴露给对方,只能通过一个很邪道的方式——在 Docker 里开 VSCode Tunnel 来让他们使用,由此又遇到了一堆神秘的环境问题。
这堆东西差不多搞到了 5 月份吧,总算是拿到了三个表示实验成功复现的徽章——而这时候离我毕业论文的 DDL 又只有一个月多了。其实本来还想着毕业论文整个新东西玩一玩的,但是现在看来是没有时间了,于是就走了摆子路线,把 Parrot 魔改了一通,侧重点放在了 Sharing Prompts 以及 Prompt-aware Scheduling 上(后来发现这个方向还是挺 promising 的,看到了很多 follow-up,早知道精力够的话抓紧时间 follow 一篇了 /流泪)。最后结果还不错,居然捞到了一个学校的优秀毕业论文,不过现在想想这个东西的评选更多应该就是看 Publication,和我本身做的咋样也没啥关系。
上半年给我的感觉呢,就是一直在被一个又一个的 DDL 追着走,然后一直在忙但是也不知道在忙啥,蓦然回首,已经要到了毕业之时,要和待了四年的交大、相处了四年的同学说再见了。那段时间一直在循环孤独摇滚的《ギターと孤独と蒼い惑星》,听上头了顺手还把歌词改编了一下写进毕业寄语里了。这个心绪还是比较微妙的,现在隔了这么久也有点难追溯了,现在想想应该还是有些感动与不舍的,虽然四年间骂了很多次交大,抱怨了很多次 ACM 班,但是还是很高兴本科生涯在这样一个颇具凝聚力的班级里度过,也遇见了不少良师益友。这段时间逛校园的频率也变高了,也许是到了要离别的时候,才想努力把校园的一草一木留在脑海中。收完宿舍的最后一件物品,终于还是在某日提着沉重的行李挪出了寝室,就像四年前拖着行李第一次进学校一样。
暑假
如果说毕业季更多的是对交大校园本身的留恋感,那么暑假则更有一种与朋友间各奔东西的离别愁绪。大四的暑假是个奇妙的时间段,对一些人来说可能是最后一个能放开玩的假期,对另一些人来说则是飞往海外前最后一段在中国的时光。由于周围大部分都是同年级的同学们,大家到了大四之后去处也是各不相同,于是在最后的时光与本科同学以及高中同学相聚了一下。凌晨在深圳街头闲聊,仿佛要把本科四年的压抑给宣泄出来;以及在杭州和同学们吃了西湖醋鱼、逛了银泰,进行了持续多天的旅游式团建(上次还是在 24 年初和他们一起去温泉旅馆),唯一的缺点就是那段时间杭州真的太热了,和烤炉一样。
同时,和女朋友的毕业旅行也是必不可少的,原定去日本的旅行因为我签证被 long check 导致最后临时改道去了云南。云南令我印象最深的是一尘不染的天空,只有亲眼见了才能体会到的震撼。以及到了夜晚,古街上的一个个酒馆里演奏民谣的乐队也别有一番风味。
说到办签证的事,这件事也是废了我好大精力。最初可以追溯到 3 月底论文刚被接受的时,我就立刻准备去办签证了,结果意识到我没有护照,于是花了点时间在上海排了两周办了护照,然后又约了 5 月的沈阳面签(因为其它地方队实在太长了)。飞去沈阳顺便逛了逛东北大学,面签之后感觉没有太处理好,也可能是我遇到的面试官的问题,带了一堆材料但是最后只出示了简历,主要是她问我有没有 funding 的时候我说了没有(因为 MSRA 确实不给我报销,学校那边又不提供),然后让我回去开一个 funding 证明,喜提 Check,一直到开会结束后一周才成功下签,喜提没用的美签 +1。
入学
暑假基本就是在比较放松摸鱼的状态下度过了,可能干的正事也就是维护了一下 Parrot 以及写了篇 CUDA 的读书笔记。带着对过去的怀念与对未来的迷茫,终于到了博士入学的时间。一开始和高老师聊过之后,我还不确定组里的算力是否充裕、该做什么方向等(因为高老师组里主要做的是传统体系结构,不过他之前也做过一些 MLSys,并且他也想在组里开辟这个方向),因此当时一直想着先找个实习,一来有卡可以用,二来也可以借机看看现在业界关心的问题是啥。本来暑假时候聊了 DeepSeek,但是一周要求出勤四天,博一的课程安排还不太允许(现在想想,感觉有点错失良机了,不过以后应该也有机会去,不着急),于是暂时先搁置了。
入学也是一笔开销,首先是一些实验室环境的配置等,高老师非常慷慨地报销了很多办公设备,包括新键盘、屏幕转接器等等,以及拿到了新的 Macbook Pro(虽然是 M1),算力方面现在发现担心多余了,还是非常充足的。不过研究方向确实是一个问题,只能靠自力更生了,因此找个实习的事还需要继续考虑。宿舍以及生活方面,在之前的题为“开荒”的博客大致提了,孤身一人来求学还是一件比较奇妙的体验,相比本科离家更远,也更孤单了。研究生是两人寝,但舍友是本地人,所以经常不住宿舍,这让我可以独享宽敞的寝室,不过也对自己的自制力以及心理有更高的要求了,所谓“慎独”。
刚到学校主要是舍友领着我熟悉校园,因为他本科也是在清华。然后就是我的一个高中同学,在一开始也帮了我很多,差不多过了两三周,基本稳定下来了,校园也熟悉的差不多了。这段时间也花了点功夫整理了一下 Parrot 的 doc,主要是怕其它 researcher 需要用到 codebase,但我又写的比较乱,因此写了点设计文档供来者参考。
杏子味的下半年
在安逸下来后,就该考虑一下正事了。博士生的正事当然是搞科研了。下半年,也就是第一个学期,我称之为“杏子味的下半年“。杏子本身酸甜可口,但是食用多了却会中毒——所对应的是读博阶段看似安逸,但却令我感到一些不适。同时,《杏子》也是胃弱P(いよわ)的一首歌的名字,胃弱的编曲特点是在一些正常的旋律中掺杂着不规律、不和谐的钢琴旋律,同时带有小快板式的节奏感,曲绘往往也会有一些逐渐崩坏的描写,也是我想指代的——即表面安逸下的不安感。
这种不安感是哪来的呢?课题组氛围是很好的,这种不适我更加认为是一种博士的必然。我会感到焦虑,虽然说之前发了一篇,但是每天阅读大量的文献下,总会读到很多自己很欣赏,以至于产生”为什么不是自己做的“这样的心绪的 Paper。加上 MLSys 这个领域本来就很卷,自己的第一篇也是半年前的事情了,而下一个工作却还没有着落,于是随着时间推移越发越焦虑,可能焦虑就是读博必须克服的一大心理难题吧。
焦虑的另一个原因是 Peer Pressure。ACM 班的大家实在是太厉害了,导致我自己时常有一种劣等感。之前的工作虽然发了很好的会议,但是 sys work 本身的 impact 都比较有限,这促使我下一个工作非常想做 practical 的东西,调研了一番后首先先确定了一个大致的方向——做 LLM 里的混精度乘法,特别是 Quantization 中会出现的那种,这个主要是受同样发表在 OSDI 24 上的工作 Ladder 的启发。做了一个月发现之前想的思路似乎不太可行,于是一个月便打了水漂。事后总结,我感觉还是因为这个领域太硬核了,并且卷的也比较干净,很难直接有什么大的突破。这一个月的浪费更加让我焦虑了。
上面说过,之前一直因为研究的问题想找实习,我也同时在行动了。最后联系了 Bytedance 的 SEED,面完感觉还不错,就接了 offer 去实习了。实习期间还是干了一些挺有反馈感的事情,比如写了算子、搭了编译器的架子等等。不过这并没有缓解我的不安,直接原因,功利地来讲,是我感觉这段时间做的工作不太能发 paper,短期也很难有什么反馈。虽然我认同这是一个长期很重要的工作,但是作为一个实习生我还是更想搞一些偏 research 的活,于是在两个月后和 mentor 提出了一些自己的想法,mentor 也表示理解,允许了我去探索更轻量、更偏学术的方向。不过这里还是要夸一下,个人感觉字节的待遇非常不错,实习的硬件体验上非常棒,以及通勤对我来说很方便。
总之到了 10 月结束,过程上有一段失败的探索,一些实习上的经验,一箩筐读过的 paper,其它便是空。更要命的是,我同时还需要上课。我在伯克利的同学这学期只选了一门课,而我这学期上了四门,虽然有的课被我翘了,但是还是有诸如课程作业这样的东西在干扰着我。我需要同时处理实验室、实习以及课内,这几乎把我的带宽全部占满了,现在回头想想我最后能安排好时间一一处理掉,还是挺不容易的。
最后的暮光
到了 11 月,终于有一些曙光了。在放弃混精度后,我转向了之前想做的另一个方向,长文本,起因是本科同学的 Quest 让我觉得还有很多能改进的地方。一开始想了一个很简单的,Quest 是按固定大小分块,而我一开始想了用语义来分(semantic chunk),但后面仔细想想,这也只是让 Quest 最后选的 token 更好,而这种方法的上限其实就是 Oracle TopK。我测了一下 Oracle TopK,感觉提升并没有想象中的大,于是便作罢(结果不久后就看到一些相似想法的工作,令人感叹)。然后我偶然发现,对 Q*K 的结果用一个简单的 Thresholding,可以去掉大部分无用的 tokens。于是我便赶紧记下这个事情,并且给项目起了个名字叫 Twilight,一方面是对方法的谐音+拼凑,另一方面是我感觉这个领域已经走到了末期,于是便叫”暮光“。
到了 12 月,每天做的事无非就是搭实验、跑点数字看看。我非常珍惜这个来之不易的观察,但是离成为一篇完整的工作还是有距离。在有一次周会上,我无意间想到 Thresholding 的推广其实就是 Top-P,并且可以用 LLM sampling 的 Top-P kernel 直接做,这给了我一个很大的 motivation,并且让我快速把整个工作 refactor 了一下。我定的目标是 1 月底的一个会,时间有些紧张,于是我向实习那边请了个小假,全力投入这边。同时我还要花一定精力去对付期末周。那段时间我几乎是全身心在写 kernel,累了就听点歌给自己鼓劲。寒假结束回到家依然是功率拉满的状态,最后才将将把 paper 赶完,并且由于匆忙个人感觉还是有很多纰漏,不过好说歹说也是交上了完整的 pdf。
相比自己的第一个工作,这篇工作我认为做的东西也很重要,虽然只是一个 AI 会,但是也花了我很大的精力。第一个工作由于是在 MSRA,有 mentor 手把手带着,并且他和我几乎是对半分工,所以工作量没有太大(虽然最后也是压线)。而第二篇工作几乎全落在我一人肩上,包括讨论、拉人、写论文、代码等等。但我也比较好奇我一个人大概能做到什么地步,并且我自己觉得这对于成为一个独立的 researcher 还是很重要的,因此我也没有觉得不值。总之,第一学期的最后总算是压线留下了些什么,虽然只是一篇 AI 工作,并且后续还要花精力继续修,但是鉴于同时还有课内以及实习,我自己已经相对比较满意了。
其它插曲
上面写起来感觉充斥着一股浓浓的失败感,不过其实下半年还是有很多体验不错的事的。首先是把 Parrot 投到了 ChinaSys,并且成功拿到了一个 Oral,和实验室的师兄们一起去天津出了个差(虽然没时间逛),在那里也看到了很多同僚们非常出色的工作,让我对 MLSys 未来方向的思考更加开阔了。以及还运营了一下知乎账号,写了两篇 CUDA Blog 和 Triton Blog,涨了不少关注 QwQ。以及在 social 方面也加了不少人,和其他人聊完之后深刻感觉到自己还有许多需要学习的地方,也体会到不同人在 research 方面的侧重与关注点差别也非常大。
2025,按自己的节奏前行
2023 我的主题词是 “重生”,而 2024 我想选择 “前行”。一方面,2024 取得了一些阶段性成果,但我要警示自己 move fast;另一方面,前行也是一个客观的状态,毕竟毕业、博士入学、实习入职等等都是在前行。而“按自己节奏前行”则更加重要,这里的内涵也包含几个方面:
- 第一个是自律,包括自己一个人待在寝室的“慎独”,以及最简单的作息等等,还有劳逸结合的节奏。这方面我自己做的并不是很好,我总感觉我是一个非常极端化的人,工作的时候会发疯地工作,而玩的时候又会玩的也比较疯,但新的一年还是希望更加规律、更加高效吧。
- 第二个是关于焦虑的方面。作为博士,能够让自己焦虑的因素实在是太多。我想了很多,现在心态暂时调整的也比较好了。首先,论文的数量并不是很重要,其实有一篇高质量的代表作比水好几篇要更加有意义,所以应该努力把一个工作做精。同时,在这一过程中,也有机会发现其它问题,而不是像之前一样从零开始像无头苍蝇一样乱转。其次,不是一作/共一的工作也不太重要,毕竟 N 作一般也不会作为自己的代表作,citation 的话也没有那么重要,虽然 impact 很重要,但是感觉唯流量是图也不可取,会让人变得浮躁而无法做事。再者,网络其实有一个放大器的作用,对着别人的新成果焦虑,实际上就是在用自己的产出对抗全世界(你能观测的)人的产出,这本身就是不合理的。每个人都有自己的节奏,按着自己的节奏来即可,就像那首《纽约比加州时间早3个小时》的诗里说的那样。不过焦虑情绪确实无法避免,如果自己调节不来的话,也可以和人聊聊、排解排解。
- 第三个是研究方向上,MLSys 本身其实范围很大,如果什么都兼顾那必然是没有精力的,所以要努力找一个领域可以深耕 / 专精。现在虽然还是会看不同地方的机遇,但是其实已经有一些模糊的定位了。首先,我的任务是 Efficient 的 Machine Learning,这个 Efficient 主要就是加速,然后我的终极目标是把它自动化(也即类似深度学习编译器的东西)。不过在自动化之前,也得做一些算法、Kernel Optimization 之类的工作,只有积累了足够多的经验才能总结抽象,做自动化的工作。不过我个人觉得我自己的优势在于找到一些独特的赛道(比如 Parrot),我自己也希望这能成为我的 Research Style,这一方面可以避免和热门赛道卷,另一方面如果不小心找到了很有意义的赛道,也能很有 Impact。总之,总结下来,我接下来打算专精的方面是,“新赛道、自动化”的 Efficient ML。不过个人感觉这个说的也比较虚,而且范围也相对广一些。不过现在暂时才一年级,也没必要立刻收敛自己的研究方向。暂时先这样吧~
- 第四个是一些其它心理方面的东西——我感觉我总有一些强迫症,包括有时候做实验做着做着突然会觉得代码很丑,以及老是想着过去没完成的一些东西/Idea 等等。这些心态也需要克服一下。验证 Idea 可以先写一个理论的加速比计算,同时可以用 Google Docs 等云文档记录实验结果(之前用的是 Notion,但是感觉下来感觉更适合自己做笔记时候用)。总之最重要的是克服强迫症,把项目分为探索阶段以及 release 阶段,在探索阶段爱咋搞咋搞。
- 此外,前行(move forward)里的 forward 也和机器学习的前向推理双关。不过这一条纯属是来搞笑的。
前面更多是在说一些心理上的事情。关于实际的事情,照例写一些新一年的期待:
科研方面,
- 把 Twilight 后续做好,包括开源代码。
- 另外,字节这边关于 Compiler 的工作也要努力完成,争取离职前在字节这边也有完整的一篇工作。
- 和同学合作的那个工作需要完成。
目前暂时专精这些事情,其它方面可以讨论,但是不要分散自己的精力瞻前顾后!有想法可以先记录下来,虽然说现在不做有 scoop 的风险,但是不专心的话现在已有的东西都做不好。上半年主要先做这些事,下半年/第二年可以继续做的一些事情:Training-aware 的 Compiler(Relax Training 后续?)、Structured Generation。
合作方面,首先可以考虑给一些开源项目交 PR,这个还是要以自己的工作为核心,然后发散出的一些东西可以交到相关的项目里。
博客方面,之前花了好大力气终于把 CUDA 读书笔记写了。现在开了个“几分钟系列”,一个是用来自己读新的算法 + 整理一些经典算法,也算复习一遍;另一个是增大影响力,不过这方面投入要慎重,有时候写博客也挺花时间的。
生活方面,首先当然还是作息尽量规律些,并且学会享受生活。然后平时尽量到工位(学校/字节)去,工位环境挺好的,也能鼓励自己干活,宿舍实在太容易堕落了。以及突然发现放声唱歌可以让自己debug更加有力气,不过可能只能在宿舍用这招。
装机。旧电脑真的越来越破了,特别有时候打游戏(划掉)干活非常难受,新电脑找时间可以配一下,不过还是想上 50 系显卡。
之前说的看医生,这学期稍空的时候可以去(不过我这个人就是这样,总想着“有空时候”,然后就会一拖再拖),最晚下学期。这学期课虽然少一些,但是成为助教了,所以仍然有一些事。