研二下学期

你总是不知道接下来会发生什么

May 15, 2022 -
回忆录
-

从上一篇结束开始

找工作

面试时间线从12.5一直到快2月底,大部分的东西写在了上一篇,这里就不复述了。幸好没去FAIR可能进去就没hc了……

然后就是申请一些常规的东西比如OPT-i20。本来之前想先申请一个SSN的(来考驾照),手动申请了几次都被拒绝说缺材料(但是我是按照学校网站上的instruction做的)。在申请EAD的时候顺便勾选了申请SSN,过了一周之后就寄到了。于是就赶紧让Chi带着在Penn Hill考场开了几圈+蹭舍友车又练了一次去考驾照,虽然还挂了一次(自从有驾照之后他就literally不开车了,买菜全我开)。

(听说加州考驾照要排队,所以optimal solution是直接匹村考完去那边换)

然后就是抽H1B了,居然直接中了,距离签offer才过了一个月……我还担心抽不到会怎么办,做好了几个预案(因为毕竟身边就有4次没抽中的)…… H1B一年比一年人多,一年比一年难抽,真可怕

接下来就是找SF房子,本来想住downtown但是考虑SF这种地方并不是很安全(与pitts相比),而且正好某次约饭和Michael聊到这件事情,他说他认识华人房东,于是就把我介绍了过去。1b1b在downtown要3打头,在稍微靠近机场那边只要2打头而且还靠近bart,感觉很划算很方便就直接摆烂签了。

接下来是买车的事情。我思考了一阵子之后打算不买车。有这么几个原因:1. 怕被砸;2. 并不是天天onsite,按照这个onsite频率的话,每次uber加起来都比买车保养要划算;3. 如果出去玩的话租车也挺方便,还能蹭各种promotion code;4. 如果平时买菜的话可以直接zipcar或者旁边就有whole foods,其实也没啥开车的需求。所以就不是很打算买……当然过几个月我的想法可能就变了。

CMU

最后一个学期,没啥选课压力(

因为我只要上任意一门SCS的课并且不挂科就能毕业,所以打算选一些有趣并且有用的课。结果……呵呵

15-618: Parallel

陈天奇老师今年教parallel。整体来看课程设置和storage system的水平差不多。

讲课方面cover了大部分能parallel的工具、语言、硬件、方法论。感觉中规中矩。作业一共四个assignment+一个project。第一个和第二个没啥意思,三和四每年都换,但是其实是同一个问题。今年是一个电路布线问题,在固定size的正方形板子上,给定m个配对的起点和终点,以尽可能快的运行时间(比如用各种并行方式),最小化重叠线路层数和总长度,要求是每条线最多只能拐两次弯,保证每条线不是直接就能连过去(x1 != x2 && y1 != y2)。Asst3和Asst4的区别在于3用openmp,4用MPI。4比较有意思,比如这个是给的std的结果:

parallel-ref

然后我们长这样(建议下学期如果还用这个题的话把我的当std):

Easy:

Processors Computation Time (s) Max Cost Sum of Square Cost
1 6.489171 17 99555902
4 1.727148 18 99579426
16 0.630565 17 99609950
64 0.443192 15 98419846
128 0.521997 15 98553406

Medium:

Processors Computation Time (s) Max Cost Sum of Square Cost
1 16.597288 32 489028364
4 6.374476 32 488878822
16 3.422556 32 488874464
64 2.688615 31 489122928
128 3.120388 32 490290506

Hard:

Processors Computation Time (s) Max Cost Sum of Square Cost
1 18.308949 36 625606537
4 6.950436 36 625165479
16 3.642382 36 625261957
64 2.685592 36 625223075
128 2.90401 36 626971955

有这么几个点:

  1. 合并策略:从它给的reference可以看出他一定是贪心地merge:如果新的答案加进来有正向收益,那么更新答案;否则直接丢掉;
  2. 底层数据结构:我开始用线段树,但是后面发现根号分块比线段树会快个一倍,虽然复杂度不一样,但是即使是单线程跑也是快一倍;
  3. overfit他给的数据:比如hard,它分两部分,第一部分是先把这个正方形切成4x4的小格子,然后在格子内部生成起点终点,虽然格子内部需要连线的数目不一样,但是这个并不本质,本质的还是最后需要线性时间合并答案;第二部分是在整个大的正方形内部随机生成起点终点连线,这个只能该怎么做怎么做;所以可以第一部分在16份中分别merge,毕竟不同区域的线一定不会相交,第二部分是整体merge。

然后就会发现可以把尾巴压得很低(指128核的两个cost


project我找了找之前做过的东西选择写poisson image editing,顺便骗了一件taichi的衣服和纪念品

考试的话由于covid改成了线上,两天之内想怎么考怎么考,不过据说上学期parallel考试是线下就有点僵硬

btw其实这门课一个人做就行,我队友基本上没写代码,每次都打发他去写report,并且final project的所有他的commit其实都是我的(但我觉得无所谓因为我打发他去写os了,后面再说

11-642: Search Engine

选这门课是因为感觉search engine作为整个互联网的基础设施之一还是有必要了解一下的

然后感觉自己在浪费时间

首先Jamie讲的ppt还行,但是越到后面的课程越跳跃,越容易lost,并且还是网课,所以体验8行

其次他的assignment是完善一个search engine系统,但是evaluation metric很傻逼,得和老师的一模一样才行(虽然我知道某些地方老师写的有点问题,但是得literally复现成一样的bug才行)

最后考试是背诵默写,因为Jamie说面试的时候可能会问这种问题。但是你作为一个ng即使进google也不会被问这种search engine的问题,被问的时候也是做了一段时间工业界的search engine然后跳槽到某个组之后才问,那个时候的理解要远比学这门课来的深。于是我觉得他的这些考试题背诵默写毫无意义。

我是一个不会背书的人,算了下期末考好像不考也能及格(当时已经p/f掉了),乱写了那么40分钟之后直接第一个交卷,喜提三十几分。

15-605: OS

好课,但是没啥动力上

https://www.1point3acres.com/bbs/thread-198949-1-1.html

OS第一定律:世界上没有黑盒,所有代码和现象都是可解释的

想要做到这点其实不容易,虽然我们都知道这句话是对的,但是很难在任何时刻都坚定相信它(而是甩锅给宇宙射线)

OS第二定律:根据第一定律,大部分bug可以看着现象来反推就能发现是哪里出了问题,而不必看代码

这个就是debug的最高境界:不看代码直接de。某次office hour我亲眼见识了下助教不看代码如何只问现象就能debug感觉惊呆了。我在我舍友(google全职)身上试了几次,效果挺不错的

OS第三定律:所有形式的锁都可以拆解成 mutex + cond_var + counter 的排列组合

这个就只是考试用的(虽然有些面试也会考),题目做多了就熟练了

p3拖延症,p0-p2时间挺紧的所以通常会提前做,但是p3拖得太久了,并且我当时专门做parallel project,把这个锅都甩给了队友,导致毫无动力,再加上已经p/f了,结果就是我俩project分数倒数第一 (对没错就是那个PaxOS一堆空着的)

也不是说不会做,就是队友先开摆了我只能跟着摆…而且我认为我已经学到了这门课的精髓,可以把时间投入给别的更值得做的事情中(比如写EnvPool)

考试出的挺好的,很贴近实际而且难度适中

本来打算看ddia当做book report的但是拖延症又犯了,后面只看了前三章就强行写读后感,主要是过于摆烂

P/F

期中过后我和队友czx(这三门课都和我一样)决定开摆,先把se和os给pf掉了

想当年我大学四年没用过一次pf,如今堕落到这种地步(x

11-634: Capstone

找了个“助教”当,把 EnvPool 弄了进来,招了6个人组了个group,但是并没啥进展

很大一部分是我自己的问题,时间分配不当,而且不会先把最难的那部分处理掉导致试错曲线过于陡峭(毕竟不是所有人都有一样的context),后面意识到这点之后再去处理效果好了很多

毕业

没啥感觉,和thu一样

就随便拍了几张毕业照,穿着袍子,聚了个餐。回想起来当初自己的目标是 “更主要的是增长见识,看看有没有什么有趣的事情可以做,顺便结交一些有趣的人”,现在看来见识没怎么增长,有趣的事情也没怎么做,有趣的人也没怎么结交。真羡慕自己大四毕业那段时间的想法(这是我第一次羡慕过去的自己)。

项目

我一直觉得在CMU上课写一些project对于我个人而言没什么用处,占用过多的时间,没法做自己认为更有意义的事情。虽然初期的时候(第一年)感觉这些课程project很有用,但是时间久了边际效益明显递减。但是为了那个毕业证又不得不写。内心十分难过但也无能为力。


寒假拿完octoml的offer之后有个和陈天奇老师聊天的机会。于是我就问他如何经营开源社区:

  • 放权,培养contributor,不要每件事情亲自上
  • share credit,让其他人有归属感

听君一席话,胜读十年书

之后我对tianshou和envpool都采取了这种策略,效果目前看起来还不错。


EnvPool其实在10月开源的时候还有很多东西没做完,但是寒假并没有干活的动力。我在4-5月份想写EnvPool的情绪达到了巅峰,在决定os摆烂之后直接天天扑上去。因为我觉得写这个能给整个community造成正向的影响力,推动整个RL社区的进步,相比起os kernel的自我提升而言更有意义,所以即使是当免费劳动力我也愿意做。

于是就写了整整一个月

主要是mujoco那个部分,正好deepmind搞了个新的mujoco binding后来还开源了,于是就不用看OpenAI之前写的那个奇怪的pyx代码。后面接进去的工作量其实也没多少。

再后面看到 rl_games 的几个人花了2分钟就把pong给train完了,感觉十分厉害,正好paper缺实验,于是就问他们有没有兴趣一起写paper。之后就拉了个discord group,跑实验写paper,正好赶上了nips benchmark&dataset ddl就交了上去(虽然我那段时间在roadtrip都没干活),之后挂了个arxiv

我觉得对我而言这是一种全新的科研合作方式,让合适的人做合适的事情(比如我觉得我不适合跑实验分析实验但是适合底层实现),这样就很舒服,并且大家都各取所需,结果皆大欢喜,比一个人或者一个团队埋头苦干高效多了。

于是就被徐sir亲切地叫做白嫖哥……


修tuixue把cgi和ais恢复了下(其实不是我修的……ljg tql 手撕hcaptcha直接绕过 惊呆了(虽然后面cgi把hcaptcha图片比例调成了100%

Ohiopyle + Falling Water

spring break和cqb、lpn一起去玩了两天,感觉景色一般般

falling water没啥感觉,可能是我不会拍建筑

PTSD-Roadtrip

这个名字取得好

两男一女,我本来准备当电灯泡的,结果让司机变成了电灯泡(bushi

路线是pitts - chicago (1) - omaha (1) - denver (4: rocky mt, pikes peak, maroon bells) - moab (3: arches np, capital reef np) - ely (1: great basin np) - yosemite (3: mono lake, sequoia np, yosemite, 夜观星象) - sf (恶魔岛) - 一号公路 (Morro Bay 1) - SD

应女票要求写:SD (1: Balboa park, Marine room)

rocky mt那边差点g了,因为路径没规划好(海拔三千多m)并且那几天刚下过大雪还没化,trail都找不到路,不过其实另一段开车的线路要远比走路的好看(毕竟太阳快落山了当时

此处只发风光片:ins

逃离坐牢去SD

临时起意

有一些很神奇的事情:

  • 租车本来只打算租一个破车,但是白嫖到了一辆福特野马
  • 决定去SD当天就找到了一个很便宜的UCSD宿舍转租(毕竟这些人都去实习了,房子都空着
  • 突然多呆了一周因为SF的前租客正好🐑了
  • 以及我们是真的match

风光片继续ins,以及更新了下profile photo和各种头像(感谢女票帮我找回外貌信心

Read More