[心得] 水果DL Compiler Engineer面试

楼主: Lizaron (Lizaron)   2021-12-04 12:07:50
0. 背景介绍
小弟在美国念MS 但念的不是纯软而是Computer Architecture
目前在硅谷的ARM工作四年半
一开始是做ML Processor的Architecture/Microarchitecture Prototype
写各种处理器的model然后做实验 然后设计两三年后的ML处理器该长什么样子
两年前因缘际会开始碰了LLVM上的一种新的infrastructure - MLIR
prototype的目标从专用处理器转向了ML compilation stack
简单来说我们设计了一个新的Mid-level IR for ML backend target - TOSA
然后实现在LLVM/MLIR上
最后我们做的所有东西基本上都开源到了Tensorflow跟LLVM的upstream github repo上
另一部分则开源到了ARM自家的开源网站上
算是不小心点了很多原本没想到的技能树
一直以来都对写前后端的纯软没兴趣 本来也没有想要丢
刚好一个月前被Linkedin推了一下这个缺
发现JD很符合我正在做的事情就丢了
本来也没打算换工作所以只丢了这一个
leetcode也只在onsite前三天内刷了10题左右
属于佛系找工作法
但靠着不小心点的技能树成功转职到水果公司变成compiler engineer
1. 面试
A. Phone 1 - 过履历
没什么特别的 应该是之后的manager 纯粹过一下履历而已
B. Phone 2 - Coding interview
开始之前面试官先murmur说Leetcode上的问题基本上都没什么屁用XD
然后问各种C++的features(主要是OOP相关):
- polymorphism pattern
比如说什么情况要用virtual method以及C++是如何实现virtual的
为什么polymorphism里的destructor一般情况都是virtual
- template跟metaprogramming
- const class method
- move semantics
然后要我自己随便写一些example这样
example能跑然后解释一下发生什么事情就好
[碎碎念]平常写处理器模型都有在用所以还行
幸好没问variadic template或一些C++14后的features
不然我也是死XD
C. Onsite 1 - Domain specific question
问Deep learning里面的quantization
- 解释int8 quantization怎么运作的
- pre-training quantization怎么做? fake-quant node要记录那些资讯
- post-training quantization怎么做
[碎碎念]我自己其实没有任何real-world network training的经验
平常是大组里面的另一个组在做
好险平常大meeting没有完全放空所以大致上还算懂
D. Onsite 2 - Coding interview
一样先抱怨Leetcode的问题大多都没屁用(到底是有多气XD)
Build a simple directed graph (from scratch)
然后graph至少要有AddEdge(), AddNode(), RemoveEdge(), RemoveNode()
注意一下各种node跟edge的关联 在加减node跟edge的时候记得会有连动
脑中有图应该就没什么太大问题
E. Onsite 3 - Domain specific question
给一个简化过的ML处理器
题目有给ALU的MACs, DMA bandwidth 然后给一个conv2d的workload
问:
- 什么优化都不做 要花多少cycles
- tiling是什么?
- 各种指令(execution/DMA) 有了tiling之后怎么做pipeline
- 假如对input height/width做了2x2的tiling能变快多少
F. Onsite 4 - Domain specific question
问更多ML处理器的optimization
- 又问了一次tiling 问说跑conv2d的时候为什么kernel不是1x1的时候会有overhead
- input stationary跟weight stationary的差别
- cascading是什么? 好处跟限制分别是什么?
[碎碎念] E跟F前两年的处理器建模的经验帮助很多
当时不是直接做compiler optimization但model也必须支援
所以基本上都有碰过
G. Onsite 5 - Coding interview
这个就是问类似Leetcode的问题
想像一个一维数线
然后定义
struct Interval {
int start;
int end;
};
input给std::vector<Internal>
每一个input的Internal可以重叠
问说所有Internal union之后
新的区间std::vector<Internal>是什么
[碎碎念] 应该是很基础的问题
但因为平常没刷题当下又很紧张
我就用了最笨的方法
因为都是整数点 所以创了一个std::vector<bool>去纪录
先扫过所有的input Intervals就能知道
[min(input), max(input)]之间的整数点是否被interval覆蓋
然后再用这个vector去reconstruct output
H. Onsite 6 - Coding interview
先问了MLIR跟LLVM的问题 比如说什么是SSA
然后跟1-D一样 要我写一个Directed Graph
不一样的点是可以假设基本功能有了
要怎么做Dead Code Elimination(DCE)
口头解释了一下用DFS的话怎么做
但最后我选择直接找to_nodes.empty()做recursive
我其实很不习惯别人看着我写code所以我写很慢XD
还没写完时间就快用完了 但他有懂我要做什么所以说这样就可以了
I. Onsite 7 - 聊天(?)
大组的Director
基本上只是在问我履历上的事情
老实说每一个面试大概都45分钟
因为他们每一个人都对我在ARM做的open source MLIR project很有兴趣
每个面试官都花了20-30分钟问我在做什么XD
剩下的真的被问问题的时间其实不多
算是满幸运的
2. 谈offer
我一开始面试前被HR问说有没有在找别的公司
很傻很天真的说没有XD
后来不小心看到levels.fyi有offer negotiation service
手痒就花了500美金买了XD
advisor建议你还是要说你有在面别的公司 就算你没有也能说是刚开始面
才不会被吃得死死的
后来也按照他的建议算是谈到了不错的offer
建议也在美国找工作的人也能试试看
以上经验希望能帮助到一些人
谢谢收看
作者: humanfly (laguna@HEADSHOT)   2021-12-04 12:21:00
感谢分享
作者: gogogogo3333 (gogogogo33333)   2021-12-04 12:23:00
作者: sickle30 (Sickle)   2021-12-04 12:27:00
推一个
作者: armorNoob (pro臭酸肥宅)   2021-12-04 12:57:00
作者: whatzup1124 (我是干嘛)   2021-12-04 13:05:00
感谢分享 厉害
作者: lukelove (午睡)   2021-12-04 13:15:00
作者: sbL (sbl)   2021-12-04 13:44:00
作者: eopXD (eopXD)   2021-12-04 14:01:00
推推
作者: haydou (haydou)   2021-12-04 14:28:00
作者: jhjhs33504 ( )   2021-12-04 14:37:00
推 厉害了
作者: kyrie77 (NTU KI)   2021-12-04 14:57:00
作者: Yan5566   2021-12-04 15:03:00
神人 推
作者: ChampYen (网络黑猫)   2021-12-04 15:04:00
推分享, 事实上越进阶越吃domain的leetcode比重愈小
作者: ejnfu ((-. .-)b)   2021-12-04 15:12:00
virtual function不就是跟polymorphism有关吗?
作者: hizuki (ayaka)   2021-12-04 15:29:00
实用
作者: bowin (尽其在我)   2021-12-04 16:30:00
推好文分享
作者: cksxxb123 (maxwell)   2021-12-04 16:35:00
好厉害!
作者: felizzZ   2021-12-04 16:40:00
推实用 恭喜
作者: freef1y3 ( )   2021-12-04 16:48:00
7关onsite...好硬啊
作者: Mike1109 (黄金右手)   2021-12-04 17:11:00
作者: ahahahahah (あああああ)   2021-12-04 17:23:00
作者: doranako (真爱无限)   2021-12-04 17:53:00
onsite 5是leetcode 题目,6我就没看过
作者: ogsogsogs   2021-12-04 18:19:00
推猛者
作者: eju901677 (诚)   2021-12-04 19:49:00
作者: mirror0227 (镜子)   2021-12-04 20:36:00
跪了
作者: windmagic (爵太郎)   2021-12-04 21:58:00
强者推
作者: touurtn (vv)   2021-12-04 23:35:00
7关是每个同事都面试一次吗==
作者: TheOneisNEO (Thomas Anderson)   2021-12-05 00:17:00
6应该是graph的一个应用 但要做过compiler比较确定详细作法 我猜可能可以用union find解
作者: Firstshadow (IamCatづミ'_'ミづ)   2021-12-05 00:41:00
都在喷z扣捏==
作者: plsmaop (plsmaop)   2021-12-05 09:52:00
以前修高等编译器用 LLVM API 写过 DCE
作者: wk415937 (wk4)   2021-12-05 13:18:00
作者: ftrhalcyon (futurehalcyon)   2021-12-05 20:18:00
作者: RadiationXen (Xen)   2021-12-06 08:15:00
作者: Nasg   2021-12-06 11:04:00
作者: w180112 ([NOOB]我超RETARD我超废 )   2021-12-06 11:32:00
推 通常domain knowledge越深的越讨厌leetcode… 身边好几个朋友都这样
作者: Matz (妹妹C吸)   2021-12-06 14:47:00
作者: superddk (帅帅的人)   2021-12-06 16:11:00
推 跪了
作者: jigfopsda (jigfopsda)   2021-12-06 17:26:00
推 想问一下,你觉得 levels.fyi 的服务适合台湾的外商吗?
作者: bearsteak (熊排)   2021-12-07 11:01:00
作者: flash5408   2021-12-08 07:39:00
advisor 讲的那些blind不就有教了
作者: u8351574 (seanjay)   2021-12-08 15:24:00
推分享!谢谢
作者: Huiee (灰Hui)   2021-12-08 16:09:00
太神啦!!!
作者: ifconfig5566 (it56)   2021-12-08 17:31:00
强者
作者: cartom   2021-12-09 15:31:00
跪着推
作者: Mtcat (山地猫)   2021-12-15 16:22:00
11
作者: zwwz (??)   2021-12-17 12:43:00
问一下 你如何有工作签证啊 谢谢

Links booklink

Contact Us: admin [ a t ] ucptt.com