[心得] 水果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