我从2019年4月到2020年8月指导了一名本科生做科研实习(来自清华大学计算机系的Dingyuan Cao),成功在HPCA 2021上发表了一篇论文(计算机体系结构四大顶会之一,历史上大陆地区总共中过不到40篇,这篇是第一篇本科生一作的)。Dingyuan凭借这篇论文,也收到了UIUC、UChicago等多所名校的PhD offer,并最终选择了UIUC。写下以下文字,以纪念这段愉快、难忘的旅程。
第一次和Dingyuan见面的时候,他正读大二第二学期,基础课还没上完,所以安排了两个月的时间看书(《深入理解计算机系统》)。到7月初基本把书看完了,然后我给Dingyuan提供了三个topic来选,并给他分析了每个topic的难点、发顶会论文的概率以及我能给他提供哪些指导和资源。最后他自己选了ORAM的overhead optimization,并把投稿目标选在了11月27日的ISCA 2020。
根据学生所选的topic,我找到了IIT的Rujia Wang老师来共同指导Dingyuan(因为我对ORAM的算法细节了解有限)。接下来的四个多月时间里,我们首先让Dingyuan去做一系列motivation实验,并根据实验结果分别针对Ring ORAM的存储开销和性能开销进行优化。在整个过程中,我和王老师主要负责根据结果提出idea,Dingyuan负责在模拟器中实现所提出的结构并提供实验数据进行验证。我们陆续提出了4-5个idea,最后通过实验验证选择了效果较好的两个技术点。在论文写作过程中,主要由我和王老师负责写draft,Dingyuan负责提供数据并做proof reading。论文在11月27日早晨顺利投稿ISCA 2020。(这里还有个小插曲:2019年11月27日早晨投稿完这篇论文,我就送太太去医院了,然后28日凌晨我家小宝宝就出生了。)
在ISCA 2020的rebuttal阶段,其中一位审稿人指出我们提出的用于降低Ring ORAM存储开销的技术点A会引发潜在的stash overflow,造成严重的性能问题。因为证明这个问题需要添加的实验工程量较大,无法在rebuttal期间完成,因此论文最终被reject了。在接下来的一个月时间里,我们添加了实验,证明通过少量增大stash size并配合主动更新机制,可以完全避免stash overflow对性能造成影响。我们将修改后的draft投稿到了MICRO 2020。在这一轮recycle过程中,Dingyuan已经开始可以参与技术点的修改。
在MICRO 2020的rebuttal阶段,所有审稿人都接受了我们对于技术点A的介绍和验证结果,但是其中一位审稿人指出我们提出的用于降低Ring ORAM性能开销的技术点B会引入新的安全问题。这个是我们在设计阶段没有考虑到的,因此这篇文章被MICRO 2020 reject。接下来的两个月时间里,我们将激进的技术点B改为略微保守的技术点C,并通过实验证明新的优化方案同样可以大幅度降低Ring ORAM的存储开销和性能开销。这一版修改稿于2020年7月底被投稿至HPCA 2021,并获得了全部审稿人的认可,最终被online accept(小插曲2:那一天是2020年10月28日,我家娃刚好11个月:))。在这一版recycle draft的准备过程中,Dingyuan承担了全部的实验代码开发,并部分参与了draft章节的修改。
在这篇论文的整个周期中,Dingyuan的进步是非常明显的,从第一版中单纯的developer的角色,到第三版已经充分掌握了整个project的技术细节和逻辑脉络。这也为Dingyuan在2021年3月1日的HPCA 2021线上会议报告出色的表现打下了基础。(小插曲3:Dingyuan的报告被安排在Session 1A,在线上讨论环节UIUC的前辈Josep Torrellas教授也来提问,并对Dingyuan的回答表示满意。1个月后,Dingyuan接受了Torrellas教授的Ph. D offer。)
总结一下Dingyuan的整个实习过程,我觉得以下几个方面的经验值得其他同学注意:
1. 快速、持续、主动的学习能力。在我第一次和DIngyuan见面的时候,他的基础知识是正常的大二同学的水平,全面但不够系统。但是通过接下来两个的突击学习,Dingyuan已经初步建立了computer architecture基础知识的脉络,并大致了解了各部分之间的联系。在开始具体的研究之后,Dingyuan还快速学习了构造motivation实验和分析实验数据的方法,并在之后不断的recycle过程中提升自己的参与度。
2. 扎实的coding和dubug能力。computer architecture研究的一个难点是需要读懂复杂的模拟器代码并根据自身研究的需要进行修改和调试。在整个研究过程中,Dingyuan的代码能力给我留下了深刻的印象。在2019年9月-10月,Dingyuan通常能够在当天完成早晨online meeting中讨论的技术点修改方案,并在当天晚上给出初步的实验数据和结论。这种快速迭代也为论文顺利投稿ISCA 2020提供了有力支持。在MICRO 2020和HPCA 2021的投稿过程中,Dingyuan也能根据讨论中确定的方案快速实现模拟器代码,并及时提供实验数据。(在准备ISCA 2020的同时,Dingyuan还参与清华大学著名的“奋战三星期,造台计算机”项目,没有强大的coding能力是难以做到的)
3. 抗压和扛挫折能力。与CS其他方向相比,computer architecture研究的门槛较高、实验周期长、工程量大,同时顶会的竞争也更为激烈(录取率<20%)。在ISCA的准备过程中,我们先后提出了5个技术点,但前三个都被实验证明效果不佳,因此在整个准备过程中需要不断推倒重来。另外我们这篇论文总共投稿了3次,在ISCA和MICRO的投稿过程中,审稿人都针对我们的技术点提出了尖锐的问题,因此在修改的过程中几乎也是需要推倒重来的。这对于一名刚刚接触科研的本科同学来说,需要强大的心理承受能力支持。
作为指导老师,我觉得也有以下几方面的经验需要注意:
1. 给学生充足的学习时间和明确的学习目标。本科生(其实对低年级硕士生、博士生也是一样的)在刚开始接触科研的时候,往往存在基础知识不系统的问题。这时候需要给予其足够的学习时间(但也不要太长,1-2个月即可),用这段时间去读一些经典的教科书(推荐《深入理解计算机系统》,效果比《量化研究方法》要好)。让学生一开始就去读论文或者综述,往往欲速则不达。
2. 与学生协商确定研究内容。最好不要直接给学生指派研究内容或者方向,而是让其通过前一阶段的学习,自主或半自主选择研究方向和内容。也不要完全让学生自由选择研究方向,最好是给予其几个选择,并为其分析清楚每个选择的利弊,通过共同协商引导学生选择研究方向。在这个过程中,学生也可以有机会学习如何做出理性选择。
3. 协调好工程和研究的关系。工程开发和研究并不是对立的,而是相辅相成的。没有强大的工程能力支持,也很难做出好的研究成果。如果学生的工程能力基础不足,在时间允许的情况下先做一段工程开发其实对学生是有利的。但也要和学生讲明这样安排的目的和时限。
4. 寻找好的合作者。如果和学生共同商定的研究方向超出了自己熟悉的范围,最好找一位熟悉该方向的合作伙伴共同指导。能够为学生提供充足的资源支持其发展也是很重要的。
5. 深度参与和共同成长。在学生开始具体的实验之后一定要深度参与研究过程,定期讨论并参与研究走向的确定(在学生刚开始开始学术研究训练时,指导老师提出idea并深入讨论,学生主要负责实现,这样的模式是合理的)。同时在整个研究过程中,指导老师也需要和学生共同成长,不断同步学习所需要的一切相关知识。
以上。
关于一作的问题
关于给Dingyuan一作的问题,当时我是这样考虑的:
首先,我的博士学业是在中科院计算所完成的,在计算所习惯上是做实验的学生作为论文一作,哪怕导师帮助修改了论文文字部分。另外我在芝加哥大学联培的时候,发现Prof Shan Lu老师的组里,也是学生负责做实验,老师负责写论文,然后学生是一作。所以我觉得这种分工和论文署名分配方式应该并不罕见。
其次,Dingyuan在整个project里出色的完成了全部实验,并在recycle过程中不断提升自己的参与度。他的表现对于一个本科生来说是非常出色的,甚至要强于一些低年级硕士生和博士生,因此在分配署名是我和Rujia老师也就直接默认Dingyuan是一作,我和Rujia老师作为共同一作(equal contribution)。
最后,Dingyuan作为科研新人,未来的路还有很长,希望这篇论文的一作能给他未来的发展道路带来勇气和自信。
关于这篇论文背后的故事,其实我不是清华大学的老师,2019年时我还在中科院计算所做助理研究员,Dingyuan是一位师兄引荐给我的,是我指导的第一位本科实习生。欢迎大家访问我的个人主页:https://mingzhe-zhang.github.io,如果对我的研究工作感兴趣,也欢迎大家给我发邮件。
最后发个广告吧。
我上个月底加入了中科院信息工程研究所的信息安全国家重点实验室,研究方向是面向新型安全应用和近数据计算的存储器体系结构优化。目前我的课题组正在招收学生(硕士生、博士生、客座硕士生/博士生)和博士后,欢迎对计算机体系结构感兴趣、希望在这一领域进行探索的同学与我联系(https://mingzhe-zhang.github.io)。
如果有同学计划出国留学并进行计算机体系结构相关研究,也可以联系Rujia老师(Home)。
此外,还有几位与我有合作的海外学者,也都非常愿意对学生进行细致的指导,供大家参考:
关键在于生产力。
生产力在于科技。
所以: