地平線自動駕駛晶片演算法面試經歷:模型量化+部署優化+端側推理全考察

自動駕駛芯片作者: 美歷團隊

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很有競爭力。

#地平線#自動驾驶#模型量化#TensorRT#端侧推理#Qualcomm#BPU