[心得] Apple DL Compiler Engineer面試
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
建議也在美國找工作的人也能試試看
以上經驗希望能幫助到一些人
謝謝收看
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.162.91.160 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1638590872.A.7AA.html
※ 編輯: Lizaron (1.162.91.160 臺灣), 12/04/2021 12:12:31
推
12/04 12:21,
4年前
, 1F
12/04 12:21, 1F
推
12/04 12:23,
4年前
, 2F
12/04 12:23, 2F
推
12/04 12:27,
4年前
, 3F
12/04 12:27, 3F
推
12/04 12:57,
4年前
, 4F
12/04 12:57, 4F
推
12/04 13:05,
4年前
, 5F
12/04 13:05, 5F
推
12/04 13:15,
4年前
, 6F
12/04 13:15, 6F
推
12/04 13:44,
4年前
, 7F
12/04 13:44, 7F
推
12/04 14:01,
4年前
, 8F
12/04 14:01, 8F
推
12/04 14:28,
4年前
, 9F
12/04 14:28, 9F
推
12/04 14:37,
4年前
, 10F
12/04 14:37, 10F
推
12/04 14:57,
4年前
, 11F
12/04 14:57, 11F
推
12/04 15:03,
4年前
, 12F
12/04 15:03, 12F
推
12/04 15:04,
4年前
, 13F
12/04 15:04, 13F
推
12/04 15:12,
4年前
, 14F
12/04 15:12, 14F
恩沒錯 我應該直接把那個問題放在polymorphism下面 剛剛是想到什麼寫什麼
※ 編輯: Lizaron (1.162.91.160 臺灣), 12/04/2021 15:16:41
推
12/04 15:29,
4年前
, 15F
12/04 15:29, 15F
※ 編輯: Lizaron (1.162.91.160 臺灣), 12/04/2021 15:36:19
推
12/04 16:30,
4年前
, 16F
12/04 16:30, 16F
→
12/04 16:35,
4年前
, 17F
12/04 16:35, 17F
推
12/04 16:40,
4年前
, 18F
12/04 16:40, 18F
→
12/04 16:48,
4年前
, 19F
12/04 16:48, 19F
推
12/04 17:11,
4年前
, 20F
12/04 17:11, 20F
推
12/04 17:23,
4年前
, 21F
12/04 17:23, 21F
推
12/04 17:53,
4年前
, 22F
12/04 17:53, 22F
推
12/04 18:19,
4年前
, 23F
12/04 18:19, 23F
推
12/04 19:49,
4年前
, 24F
12/04 19:49, 24F
推
12/04 20:36,
4年前
, 25F
12/04 20:36, 25F
推
12/04 21:58,
4年前
, 26F
12/04 21:58, 26F
推
12/04 23:35,
4年前
, 27F
12/04 23:35, 27F
Onsite 1是合作的組的director 其他應該都是同組的人沒錯
推
12/05 00:17,
4年前
, 28F
12/05 00:17, 28F
→
12/05 00:18,
4年前
, 29F
12/05 00:18, 29F
→
12/05 00:41,
4年前
, 30F
12/05 00:41, 30F
推
12/05 09:52,
4年前
, 31F
12/05 09:52, 31F
推
12/05 13:18,
4年前
, 32F
12/05 13:18, 32F
推
12/05 20:18,
4年前
, 33F
12/05 20:18, 33F
推
12/06 08:15,
4年前
, 34F
12/06 08:15, 34F
推
12/06 11:04,
4年前
, 35F
12/06 11:04, 35F
推
12/06 11:32,
4年前
, 36F
12/06 11:32, 36F
→
12/06 11:32,
4年前
, 37F
12/06 11:32, 37F
推
12/06 14:47,
4年前
, 38F
12/06 14:47, 38F
推
12/06 16:11,
4年前
, 39F
12/06 16:11, 39F
推
12/06 17:26,
4年前
, 40F
12/06 17:26, 40F
→
12/06 17:26,
4年前
, 41F
12/06 17:26, 41F
個人覺得可以試試看 有一些心法應該是通用的
但他們大部分的薪資數據點還是以美國為主 這部分應該就沒辦法這麼準
※ 編輯: Lizaron (1.162.91.160 臺灣), 12/06/2021 17:39:44
→
12/06 18:38,
4年前
, 42F
12/06 18:38, 42F
推
12/07 11:01,
4年前
, 43F
12/07 11:01, 43F
→
12/08 07:39,
4年前
, 44F
12/08 07:39, 44F
也許吧 但我平常沒有在看Blind
Advisor主要的工作其實還是跟你共同撰寫所有你跟recruiter的重要的回信
如果已經很熟悉怎麼談offer的話確實不需要
※ 編輯: Lizaron (1.162.66.238 臺灣), 12/08/2021 08:39:38
推
12/08 15:24,
4年前
, 45F
12/08 15:24, 45F
推
12/08 16:09,
4年前
, 46F
12/08 16:09, 46F
→
12/08 17:31,
4年前
, 47F
12/08 17:31, 47F
推
12/09 15:31,
4年前
, 48F
12/09 15:31, 48F
Soft_Job 近期熱門文章
PTT職涯區 即時熱門文章