[心得] Apple DL Compiler Engineer面試

看板Soft_Job (軟體人)作者 (Lizaron)時間4年前 (2021/12/04 12:07), 4年前編輯推噓39(3909)
留言48則, 44人參與, 4年前最新討論串1/1
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
推分享, 事實上越進階越吃domain的leetcode比重愈小
12/04 15:04, 13F

12/04 15:12, 4年前 , 14F
virtual function不就是跟polymorphism有關嗎?
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
7關onsite...好硬啊
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
onsite 5是leetcode 題目,6我就沒看過
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
7關是每個同事都面試一次嗎==
12/04 23:35, 27F
Onsite 1是合作的組的director 其他應該都是同組的人沒錯

12/05 00:17, 4年前 , 28F
6應該是graph的一個應用 但要做過compiler比較確定詳
12/05 00:17, 28F

12/05 00:18, 4年前 , 29F
細作法 我猜可能可以用union find解
12/05 00:18, 29F

12/05 00:41, 4年前 , 30F
都在噴z扣捏==
12/05 00:41, 30F

12/05 09:52, 4年前 , 31F
以前修高等編譯器用 LLVM API 寫過 DCE
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
推 通常domain knowledge越深的越討厭leetcode… 身邊
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
推 想問一下,你覺得 levels.fyi 的服務適合台灣的外商
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
advisor 講的那些blind不就有教了
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
文章代碼(AID): #1XgkcOUg (Soft_Job)
文章代碼(AID): #1XgkcOUg (Soft_Job)