地平線自動駕駛晶片演算法面試經歷:模型量化+部署優化+端側推理全考察
2年模型部署經驗,詳細復盤地平線三輪技術面試全過程,涵蓋深度學習基礎、量化原理、TensorRT部署、端側推理優化等核心考點,附真題彙總與備考建議。
背景介紹
我本科自動化專業,研究生方向是計算機視覺,畢業後在一家自動駕駛公司做了2年的模型部署工程師。主要工作是模型量化、蒸餾和端側部署,用的晶片包括地平線BPU和NVIDIA Orin。地平線在自動駕駛晶片領域是絕對的頭部,所以看到他們招演算法工程師,我第一時間就投了。
說實話,投遞之前我猶豫了一下,因為地平線對演算法能力的要求比純部署崗位高很多,而我的強項更多在工程落地。但轉念一想,模型部署和演算法本身就不分家,而且我對量化、推理優化這些也有實戰經驗,應該還是有競爭力的。大概等了10天左右,HR聯繫我約面試,一共三輪技術面。
面試流程復盤
一面:深度學習基礎+量化原理(約1小時)
一面是一位年輕的演算法工程師,看起來剛工作沒幾年,但問題問得很犀利。先讓我自我介紹,然後就開始了。
深度學習基礎:
第一個問題就讓我有點措手不及——「請說說BatchNorm的原理,以及訓練和推理時BN的行為有什麼不同?」這個我答得還行,訓練時用mini-batch的均值和方差,推理時用running mean和running var。面試官追問了「BN的running mean是怎麼更新的?」我說了momentum引數和指數移動平均,面試官點了點頭。
然後是啟用函式——「ReLU和GELU的區別?為什麼Transformer用GELU不用ReLU?」我說GELU是平滑的ReLU變體,在零點附近有平滑過渡,對梯度流更友好。Transformer用GELU是因為實驗效果更好,特別是在大模型上。面試官追問了「SwiGLU呢?」這個我了解不多,只說了是GLU的變體,用了SiLU啟用。
接著是注意力機制——「請說說Multi-Head Attention的計算過程?QKV是怎麼得到的?」我從線性投影得到QKV,然後scaled dot-product attention,最後concat和線性變換,一步步說了。面試官追問了「為什麼要除以sqrt(d_k)?」我說防止點積值過大導致softmax梯度消失。
還問了損失函式——「交叉熵損失和KL散度的關係?Focal Loss解決什麼問題?」我說交叉熵可以看作KL散度的特例,Focal Loss透過降低easy sample的權重來解決類別不平衡問題。
量化原理:
面試官問的第一個量化問題是「量化的基本原理是什麼?均勻量化和非均勻量化的區別?」我說量化就是把浮點數對映到低位元整數,均勻量化是等間距對映,非均勻量化可以不等間距。面試官追問了「對稱量化和非對稱量化的區別?各自的優缺點?」我說對稱量化zero point為0,計算簡單;非對稱量化有zero point,可以更好地利用量化範圍。
然後是INT8量化的具體流程——「PTQ和QAT的區別?各自的適用場景?」我說PTQ不需要重訓練,速度快但精度可能有損失;QAT需要在訓練中模擬量化,精度更好但成本更高。面試官追問了「PTQ的校準資料怎麼選?校準方法有哪些?」
還問到了per-channel和per-tensor量化的區別,以及為什麼per-channel量化效果更好。我說per-channel對每個通道有獨立的scale和zero point,可以更好地適應不同通道的值域分佈差異。
一面結束的時候,面試官說「基礎還可以,量化部分答得不錯」,讓我等二面通知。
二面:模型部署+TensorRT(約1.5小時)
二面是一位資深工程師,問題更偏實戰。
開場就問了一個很實際的問題——「請說說你做過的最複雜的模型部署專案」。我選了之前做的一個BEV感知模型的部署,從PyTorch模型匯出ONNX,然後轉TensorRT engine,中間遇到了各種算子相容性問題。面試官追問了「具體遇到了哪些算子不相容?怎麼解決的?」我說了自定義插件的開發流程。
然後是TensorRT的優化——「TensorRT做了哪些優化?為什麼推理速度能快這麼多?」我列了層融合、精度校準、kernel自動選擇、動態形狀優化幾個方面。面試官特別追問了層融合——「哪些層可以融合?融合的規則是什麼?」
接著是動態形狀——「TensorRT怎麼處理動態形狀?有什麼效能影響?」我說了優化配置檔案(opt profile)的使用,以及動態形狀下kernel選擇的策略。
還問到了模型壓縮——「知識蒸餾的原理是什麼?你用過哪些蒸餾方法?」我說了logits蒸餾和feature蒸餾的區別,以及我在專案中用的響應蒸餾方法。
二面還問了一個效能優化的問題——「如果你的模型在BPU上推理速度不達標,你會怎麼分析和優化?」我說了先用profiling工具分析瓶頸在哪——是計算密集還是訪存密集,然後針對性地優化。
二面結束的時候,面試官說「工程經驗不錯,但演算法深度還需要加強」,這和我對自己的認知是一致的。
三面:端側推理+專案深挖(約1.5小時)
三面應該是部門的技術leader,問題更偏系統級思考。
首先讓我詳細介紹地平線BPU的架構特點。這個我準備得比較充分,從BPU的伯努利架構說起,講到BNN加速引擎、高精度浮點支援、靈活的儲存架構。面試官追問了「BPU和GPU在推理場景下的主要差異?」我說BPU是專門為深度學習推理設計的,能效比更高;GPU更通用,但功耗也更高。
然後是端側推理的挑戰——「端側推理和雲端推理的最大區別是什麼?端側有哪些特殊約束?」我說端側有算力限制、記憶體限制、功耗限制、實時性要求等約束。面試官追問了「怎麼在精度和速度之間做trade-off?」
還問到了多工模型——「自動駕駛場景下,感知、預測、規劃這些任務怎麼在一個晶片上高效執行?」我說了模型共享、任務排程、記憶體管理等策略。
最後是幾個開放性問題——「你怎麼看端側大模型的趨勢?」「自動駕駛晶片未來3年的發展方向?」這些我結合行業趨勢說了自己的看法。
三面結束後大概5天,HR通知我通過了。整體來說,地平線的面試非常注重實戰經驗,純理論的東西問得不多。
真題彙總
深度學習基礎:
1. BatchNorm原理及訓練推理時的行為差異
2. ReLU、GELU、SwiGLU的區別
3. Multi-Head Attention的計算過程
4. 為什麼要除以sqrt(d_k)
5. 交叉熵和KL散度的關係
6. Focal Loss原理
量化:
7. 均勻量化和非均勻量化的區別
8. 對稱量化和非對稱量化的優缺點
9. PTQ和QAT的區別及適用場景
10. 校準資料選擇和校準方法
11. per-channel和per-tensor量化的區別
模型部署:
12. ONNX模型匯出和算子相容性問題
13. TensorRT自定義插件開發
14. TensorRT的優化策略
15. 層融合的規則和條件
16. 動態形狀的處理方法
17. 知識蒸餾的原理和方法
端側推理:
18. BPU架構特點和GPU的差異
19. 端側推理的特殊約束
20. 多工模型的資源分配
21. 精度和速度的trade-off策略
心得建議
1. 量化知識是核心競爭力。地平線的面試對量化要求很高,不是知道概念就行,還要能說清楚具體的校準流程、精度評估方法、不同量化策略的適用場景。建議至少做過一個完整的INT8量化專案。
2. 部署經驗要能講出細節。面試官會追問部署過程中的具體問題,比如哪個算子不相容、怎麼解決的、效能提升了多少。這些細節是編不出來的,必須要有真實經驗。
3. 了解目標晶片的架構。地平線面試一定會問BPU相關的知識,如果你對BPU架構一無所知,會很減分。建議提前學習地平線的公開技術文件。
4. 演算法基礎不能太弱。雖然模型部署崗位偏工程,但地平線對演算法基礎也有要求。深度學習的基本概念、常見模型結構、訓練技巧這些都要了解。
5. 關注自動駕駛行業動態。面試官會問一些行業相關的問題,如果你對自動駕駛的技術趨勢有自己的理解,會加分。
FAQ
Q:地平線面試對演算法能力要求高嗎?
A:比純部署崗位高,但不會要求你從零設計模型。更看重你對模型的理解深度和部署優化能力。
Q:沒有自動駕駛經驗能過嗎?
A:有模型部署經驗就行,不一定要自動駕駛背景。但面試會問一些自動駕駛場景的問題,建議提前了解。
Q:面試會問手撕程式碼嗎?
A:會。一面讓我手寫了一個量化校準的偽程式碼,二面讓我寫了一個TensorRT插件的基本框架。
Q:工作強度怎麼樣?
A:地平線的工作強度在晶片行業屬於中等偏上,專案緊的時候會加班,但整體節奏還算可控。
Q:薪資水平如何?
A:地平線的薪資在自動駕駛晶片行業屬於頭部水平,加上股票期權,整體package很有競爭力。