[TL;DR]
这会提到我怎么看MLE/SWE 然后面试的内容 然后我觉得面Meta的准备方向
最后有结果的部分,但那也还没确定所以就看看就好
如果有要面FB/Meta那真的TL;DR可以往下拉到有亮色 [看这就好] 就好
是我相信对大多数人比较有帮助的 剩下大部分是我murmur XD
[前情提要]
在风口上的猪也会飞,运气不错比大多数的人早踏进ML这块
个人认为说ML有点太"空洞",不过我还真的就是做的很空洞... 基本上什么都做
我自己大学时做的偏optimization 研究所/实习做偏modeling 工作就full stack...
目前看起来MLE还是一个variance很大的一个工作。毕竟ML要真搞出东西并不容易..
有所产出的话,MLE升的速度快到不行(我有朋友MS毕业后5年在FB升到E7的)
但其实大多数相对SWE是比较难有产出的,或是说其实做的事就跟SWE一样
从毕业在水果店也待了快四年了,最一开始是做inference,基本上就某智能助手的model
丢给我们必须要让他在你的耳机/表/手机上跑快快 (well, 一开始是要可以跑XD)
所以我做过的东西挺多的,从跟researcher说你们这model太慢了,直接帮他们修model
或是换换拆拆数学式,到搞Halide/TVM让kernel跑快快
甚至直接下去跟硬件仔们讨论怎么memory map一个transformer model全都做过
基本上就是做的很广但却没有很深的下海搞research或是design silicon
其实在水果店过的还是挺舒适的,而且做的东西也挺有趣的。
可是世事无常,去年我亲人诊断癌症,刚好疫情我就大量remote。我的manager也觉得ok
但我们team从最一开始3人膨胀到现在70人左右,终于轮到我中间多一层manager了XD
所以我跟原manager中间就插了另一个manager,很强硬的说一年最多2周remote
在疫情之前我一年大概都有3个月左右的remote,想想跟我原本的manager讲也没啥意思
我就开始找公司里其他team
刚好这时候Google有个三月ping过我,那时候我没面因为我说不考虑relocate到bay
说她手上有些Seattle的缺问我有没有兴趣 我就顺水推舟说sure
然后上面说那个FB (Meta?) E7的朋友也说他们有新project大概50个HC问我有没兴趣
我也就顺顺的跟这两家开始面试了XD
[大致心态]
我心里想的优先程度是 内转到training team ~= Meta >>> Google
因为Google实在是太不确定要做什么了,我就把Google面试全部往前排当作Meta的练手
内转到training team的优点是水果股价上涨太多了... golden handcuffs 而且那个team
的manager我很熟 所以倾向满大的
Meta的优点是要做的那个东西scope很大 非常大 而且他们是很想把东西搞出来所以才有
那么多HC,另外就是team里面超过6成都是E6+,基本上不需要担责任(误)而且我满确定
里面的人都是强的,可以学的东西很多
[General]
我面试都用C++,除了中间一个有用Python。基本上interviewer问我要用什么语言我都会
说我看题目是什么来决定我用什么来写code,除非他有特别要求我用什么语言我也行。
所以基本上string/data preprocessing之类的我会用Python,其他大部分都C++...
PS. 我有个室友特爱Java,我也不知道为啥XD
他最近也在面试 用Java吃亏了一轮 可是劝不听......
[Google]
Google我的面试算中规中矩,但也不是典型的Google面试(几乎没leetcode style算法)
我的Phone screen直接跳过,所以跟recruiter讲过一次电话就直接5轮virtual面试
Round 1.
behavioral基本上就那样,我满喜欢一个形容就是,Behavioral就是讲科幻故事
但是讲的故事是硬科幻,基于事实所编造出来的科幻故事LOLLLL
Round 2.
这轮Design是友善光头大叔,长超像Walter White... 差点问他是不是兼职工程师= =
这大叔是UCB毕业的,在谷歌待了快20年 他说他thesis是做生医影像处理 所以有搞过很
多GPU有的没的
那基本上他问的东西就是ML应用在encoding/decoding上面,只是他是一个非常specific
的scenario... 所以不是单单比较PSNR之类的,那这东西最大的问题其实跟我实习时做
ads的query expansion有异曲同工之妙 我认为回答的算ok,讨论起来也满开心的
Round 3.
这轮Coding是一个上交ACM班的小姊姊,他看我resume上面有玩过ICPC就尬聊了10分钟
然后问了一个极简单的树问题,我确认了一次他说 恩 然后大概30秒解决...
我后来有去leetcode稍微找一下,有个那问题的困难版(generalized)但被归在easy LOL
后来他就问了那个问题的怪延伸,但那问题应该是无最优解,所以后面变得比较像是
design round,但在design过程,讨论pros/cons同时有叫我写些code implementation
Round 4.
这轮Coding是俄罗斯人。我对俄罗斯人没什么好印象,因为我自己面试过的俄罗斯人都有
够变态强,而且我认识的俄罗斯人也都强飞天... 面试官是俄罗斯人通常难度都SSS级
这轮也是我觉得最hardcore的...
他先问了我要用什么语言,我说C++,后来的问题没算法,但就要我写类似Forward
Iterator的东西。整个流程差不多30分钟后,他说ok没问题
然后看还有时间就说 我们来点好玩的,will not be official
后面他问了3题bitwise operation的问题,我还记得以前看农场文都说Google最爱问
脑筋急转弯,开始工作都一笑置之,放屁都leetcode吧 没想到竟然被我遇到脑筋急转弯
总之最后五分钟最后一题问我怎么bitwise取负我没来得及想出来G_G
Round 5.
这轮Coding是个来自youtube的大叔,也是待了10来年
问了一个Streaming的问题,基本上也是leetcode不会出现的东西,因为没正解
所以跟第三轮一样有点像是做design但又没那么design
讨论pros/cons然后要我写。总之这轮有点像是Round 3+4,因为最后产出来的东西
也是类似Forward Iterator。
他最后说他没想过有人interview会主动要用C++,这题他是design给Python的
我就恍然大悟 喔~~~然后口头跟他讲一下Python yield之类然后generator的东西
他看起来也挺满意的就结束了
[Meta]
Meta的面试因为是内推,所以我一开始就已经定好了team
一开始的phone就直接跟director phone screen,基本上就先做team match
然后接下来就5轮virtual onsite (2 coding + 2 design + 1 behavorial)
Round 1.
这轮coding的面试官没很强,不然就是对C++没很熟。
问的第一个问题leetcode上肯定找得到或是大学算法课一定提过的那种经典问题。
我一开始写step by step听到她问我某一行是不是该放进去for循环就知道不妙了XD
总之后来我写的code没给最优解,给了个复杂度一样,但是space比较差的作法
但是space比较差的那种写法比较清晰易懂,然后我再口头跟他讲这东西可以怎么把
space压到O(1)
这场基本上整个interview就我在drive的,想办法让他懂code,我再问他需不需要我做
优化,他问的两个问题我都写比较简单的做法 但他都要看着code想 然后再跟我说
没关系 It's good.
Round 2.
这轮的面试官是个UCB出来Kurt Keutzer的学生。所以面试前我有特别去读这个人的
paper大概知道他做什么东西还有主要研究方向。然后另外自己去多读一些相关paper
这轮他基本上是问Convolution/Padding/Inner Product相关的问题,他也有问我要用
Python还是C++ 虽然用Python因为indexing的关系会比较简单,但我还是选了C++,后面
会提为什么XD
基本上coding的部分也是不到15分钟就结束了,但是我留的小心机就在这时发挥作用了XD
他看我用C++写就开始问有没有可以优化的部分。我就开始把一些memory localization或
像是for的顺序,tiling之类的跟他讨论,他的研究就Parallel/Distributed computing
所以也是聊东聊西大家都很开心 他也就very good very good XD
Round 3.
Behavorial 没什么 讲故事
Round 4.
这轮是个俄罗斯人G_G
这轮Design完全毁掉 他要我Design一个CI/CD System. 这轮我面的过程我就知道毁了。
我跟他的沟通完全没有办法scope down,我完全不知道他想要我做怎样的CI,他也讲的
很模糊,感觉就是不想跟我讲他想要什么要我去通灵他要什么,大概直到最后才稍微
有碰到一点点边要CI能够handle不同precision下的regression要如何处理。我这整个
时间里面从hardware fleet/networking/deployment/testing/data generation都碰
他对testing跟data generation"貌似有兴趣" 尤其是data generation的部分
可是我一直没办法scope下来,所以到最后我其实也不太知道他是要问什么orz
这轮很有趣的是有一个人Shadow,然后这个人我听过,是个爱丁堡大学的教授lol
我还读过他的paper XD 可是我看他的page跟linkedin完全没提到他来FB了XD
Round 5.
这轮还是个俄罗斯人orz
但还好这轮Design算是愉快的结束。基本上就是一开始是讨论要如何Design IR,然后
有新的kernel要怎样才能做high-performance implementation。
然后还有针对不同的ML Framework我们的IR要注意什么样的东西
ML Framework的IR比起一般像是LLVM IR有什么可以扩展或是更restrictive来让我们
更好针对ML problem做optimization。
整个过程我觉得well scoped然后每个sub problem都还算是有in depth的讨论,还行
[后话]
面试的时候其实公司事情很忙,所以也没太多时间准备... 而且原本安排好面试完回
台湾,但是刚好我亲人病危,就提早回台湾,Google面试跟Meta的前三轮都是在防疫
旅馆面。Meta最后两轮在自主管理时,但隔天是告别式 所以整个也是微微烦躁
但可能冥冥之中就是这样所以我面试的过程没什么leetcode东西,主要是design方面
平常有好好上班 RFC跟doc好好写都还算能好好回答的问题
[看这就好]
个人认为谷歌这种面试满难准备的,但是Meta我后来一问才知道 我毁掉的那个第四轮
其实在Meta里面就是负责Pytorch CI/CD的部分,所以他在意的没意外应该同时要是
numerical还有performance,然后像是unit test的部分对于不同precision还有hardware
都应该要有所着墨,毕竟他的team关心的就是kernel implementation。仔细想想我那
时候有提到Conv跟MatMul之间的关联然后他就有问test data还有unit test的design跟
decision好像就有那么点影子了。算我脑子短路GG
Meta在面试的时候会有个页面是说要面试你的人会是哪些人,我当初有查Round 4面我的
那个人可是Linkedin上没太多资讯,只知道他在NV/Intel待过,不像Round 2那个人那么
多资讯,如果我当初能像Round 2那个一样多肉搜(?)一些资讯或许会好很多orz
要面Meta的人我觉得应该要好好掌握这点,多了解面试你的人的背景,其实满容易抓到他
可能会问的问题,会问的Design问题的方向,毕竟Design问题都是open的,那会要scope
down的部分通常就是他们熟悉的部分,毕竟这样他们能问的更多,评估会更精准一点。
[暂时结果]
反正我终极目标是要越remote越好,毕竟我想多花点时间陪家人,但又不是纯当社畜
做些自己没兴趣的工作
所以我跟HM开门见山第一句都是问他能接受多remote XD
我直接先把那些不太喜欢remote的HM排除不考虑了
谷歌team match了几个team,有其中2个我觉得都不错。两个都算是"full stack" ML.
一个是GPU,可是他们同时又硬又软。他举了一个例子是他们有一个second-order method
可是发现GPU perf不好,那有两种解法,一个是数学上改变求导顺序,另一种就是修改
GPU compiler的部分让他utilization可以上去。他说我想做numerical optimization
的话他有很多问题可以让我做,想做compiler也行,或是他们也有team member在做TF的
API这样可以expose一些GPU特有的hint来做优化
另一个是MLPerf相关,像是train BERT in 30 secs HM说从numerical optimization到
TF/JAX然后XLA往下到TPU或是类似HugeCTR那种Model Parallelism都是可以explore的。
我想做什么他基本上都会有东西让我做
Meta我后来得知我的Round 4直接吃了一个Strong no hire XD 而且在Debrief的时候R4
的面试官无法理解怎么会有人这么笨lol 其他轮都是Strong Hire 最后R5的面试官跟
director力保之下的最后结果就本来target E6可是给了个E5
至于薪水... 还在谈XD 毕竟水果这几年涨得凶,我现在unvest还很多
所以我是直接拿W2跟unvest去谈,没拿offer compete
谷歌HR直接跟我说我的W2他们有点难达成 我是说没关系,你只要给我remote多点
我钱少些没关系。HR说他会跟那些HM说。
脸书的话他们直接给了我E5的顶,可是还是比我现在少XD 但是有说要突破band的话可以
但是要VP approval。说Base可能没办法动,但可以给到E6的RSU
然后我那E7朋友说没关系,他们要做的东西已经算explore完了 我进去没意外应该可以
直接收割,我很在意level的话以那东西的impact升E6没啥问题
其实还有Tiktok是面试in process,HR跟我说他们no budget limit。但是最吸引我的是
他们offer说可以在亚洲时区(新加坡/中国)工作... 这应该比任何comp都还吸引我
总之一切还满未定的
那就预祝自己Tiktok面试顺利 还有各位找工作的朋友们面试顺利了
当然还有大家平平安安疫情快点结束