<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          推理部署工程師面試題庫

          共 5058字,需瀏覽 11分鐘

           ·

          2024-04-19 21:14



          作者丨進擊的Killua
          來源丨h(huán)ttps://zhuanlan.zhihu.com/p/673046520
          編輯丨GiantPandaCV


          最近團隊在招人,記錄一些常用的面試問題,持續(xù)更新中。


          1. 描述一下SM的結構?

          (INT32/FP32/FP64)CUDA core,Tensor Core,LD/ST, Warp Scheduler

          RegisterFile,ShareMemory,L1 Cache

          2. 共享內(nèi)存和寄存器分別應該存放哪些數(shù)據(jù)。

          局部變量、臨時變量,場景:高頻訪問、空間較小。


          3. bank沖突是什么?描述具體結構,如何解決?

          為了并行處理,NVIDIA GPU的共享內(nèi)存被劃分為多個“bank”來支持并發(fā)訪問。然而,當多個線程同時訪問同一個bank內(nèi)的不同地址時,可能會導致bank沖突,從而降低內(nèi)存訪問的性能。

          數(shù)據(jù)對齊:確保共享內(nèi)存中的數(shù)據(jù)元素(例如數(shù)組或結構體)是按照bank大小對齊的。這樣,多個線程可以同時訪問不同的banks,而不會產(chǎn)生沖突。

          線程束(warp)的對齊訪問:盡可能地組織線程,使得在同一個warp內(nèi)的線程訪問的數(shù)據(jù)都來自不同的banks。例如,如果一個warp有32個線程,并且每個線程訪問不同的bank,那么整個warp的訪問將是無沖突的。

          數(shù)據(jù)填充:Padding方式避免bank沖突。


          4. 說一下分支沖突,如果warp內(nèi)有沖突,部分符合if條件,部分符合else條件,是否需要等待?

          當一個warp中的線程在執(zhí)行一個條件分支時,如果不是所有的線程都滿足相同的條件(例如,部分線程滿足if條件,而其他線程滿足else條件),這將導致warp內(nèi)的線程分裂成多個執(zhí)行路徑,從而增加了計算的開銷。當warp中的線程分裂到不同的執(zhí)行路徑時,它們不能再同時執(zhí)行相同的指令,因為它們需要執(zhí)行不同的指令集。這導致了一種情況,其中部分線程在某個時刻被激活,而其他線程則被暫停。

          在warp內(nèi)部,所有的線程都是硬件級別上同步的。當一個warp中的線程分裂到不同的執(zhí)行路徑時,這個warp內(nèi)的所有線程都需要等待,直到所有的分支條件都被滿足。具體來說:

          • 如果部分線程滿足if條件而其他線程滿足else條件,那么這個warp會被分裂成兩個獨立的warp。

          • 每個新的warp都會獨立地執(zhí)行其指定的指令路徑,不需要等待其他warp。


          5. 項目中用過TensorCore嗎?了解TensorCore的原理嗎?

          進擊的Killua:Tensor Cores 使用介紹  

          https://zhuanlan.zhihu.com/p/671312675


          6. 為什么用float4向量來存取數(shù)據(jù)?有什么好處?

          數(shù)據(jù)對齊:在許多GPU和其他并行處理器上,訪問對齊的數(shù)據(jù)是更加高效的。使用float4向量,數(shù)據(jù)被自動對齊到4字節(jié)的邊界,從而提高了訪問速度。

          內(nèi)存事務優(yōu)化:現(xiàn)代GPU架構和其他并行處理器優(yōu)化了內(nèi)存事務。當連續(xù)地讀取或寫入float4向量時,它們可以在一個內(nèi)存事務中處理多個數(shù)據(jù)元素,從而減少了內(nèi)存訪問的開銷。

          內(nèi)存帶寬利用率:通過減少內(nèi)存事務的數(shù)量和增加每個事務的數(shù)據(jù)量,float4向量可以更有效地利用內(nèi)存帶寬,從而提高整體系統(tǒng)的性能。


          7. 了解cuda流和cuda graph嗎?

          • CUDA流(CUDA Streams):CUDA流是CUDA編程模型中用于管理和調度并行操作的抽象概念。使用CUDA流,可以將多個GPU操作組織成不同的流,并發(fā)地執(zhí)行這些流中的操作。CUDA流提供了一種靈活的方式來管理GPU資源并優(yōu)化并行計算。

          • CUDA圖(CUDA Graphs):CUDA圖是一種高級的CUDA編程技術,用于提前定義和優(yōu)化GPU操作的執(zhí)行順序。通過創(chuàng)建和使用CUDA圖,可以減少GPU操作之間的依賴關系,從而提高并行性和性能。CUDA圖允許開發(fā)者以圖的形式表示和管理GPU操作,這使得在某些情況下可以實現(xiàn)更高級的優(yōu)化和調度。


          8. 在Nsight Computing中,經(jīng)常關注的與內(nèi)存相關的指標?

          內(nèi)存帶寬(Memory Bandwidth):內(nèi)存帶寬指標告訴你GPU的內(nèi)存子系統(tǒng)每秒可以傳輸?shù)臄?shù)據(jù)量。高帶寬通常表示內(nèi)存子系統(tǒng)的性能良好。

          L1、L2和L3緩存命中率(Cache Hit Rate):這些指標告訴你在訪問緩存時命中的次數(shù)與嘗試訪問緩存的總次數(shù)之間的比例。高的緩存命中率通常表示算法和數(shù)據(jù)訪問模式對緩存友好。

          內(nèi)存利用率(Memory Utilization):內(nèi)存利用率指標告訴你GPU內(nèi)存的使用情況。了解內(nèi)存的使用情況可以幫助你識別內(nèi)存使用過多或過少的問題。

          內(nèi)存延遲(Memory Latency):內(nèi)存延遲指標告訴你從發(fā)出內(nèi)存請求到收到響應所需的時間。理解內(nèi)存延遲可以幫助你優(yōu)化數(shù)據(jù)訪問和計算模式,從而減少延遲并提高性能。


          9.cutlass中如何對GEMM進行優(yōu)化的嗎?

          進擊的Killua:CUTLASS 基礎介紹

          https://zhuanlan.zhihu.com/p/671324125


          10. 了解Transformer嗎?底層是什么結構?知道Faster Transformer嗎?cuda中如何優(yōu)化?

          進擊的Killua:FasterTransformer Decoding 源碼分析(一)-整體框架介紹

          https://zhuanlan.zhihu.com/p/669257891

          進擊的Killua:FasterTransformer Decoding 源碼分析(二)-Decoder框架介紹

          https://zhuanlan.zhihu.com/p/669303360

          進擊的Killua:FasterTransformer Decoding 源碼分析(三)-LayerNorm介紹

          https://zhuanlan.zhihu.com/p/669440844

          進擊的Killua:FasterTransformer Decoding 源碼分析(四)-SelfAttention實現(xiàn)介紹

          https://zhuanlan.zhihu.com/p/669648527

          進擊的Killua:FasterTransformer Decoding 源碼分析(五)-AddBiasResidualLayerNorm介紹

          https://zhuanlan.zhihu.com/p/670656687


          11. Paged Attention有了解嗎?

          紫氣東來:NLP(十七):從 FlashAttention 到 PagedAttention, 如何進一步優(yōu)化 Attention 性能

          https://zhuanlan.zhihu.com/p/638468472



          12. TensorFlow和Pytorch設計思路有何不同?

          • TensorFlow:最初采用靜態(tài)計算圖的方式進行計算,用戶需要先定義計算圖,然后執(zhí)行計算。

          • PyTorch:采用動態(tài)計算圖的方式進行計算,允許用戶在運行時動態(tài)地構建和修改計算圖。


          13. Nsight Compute和Nsight System使用場景和區(qū)別?

          NVIDIA Nsight Compute

          1. 針對性:Nsight Compute 主要針對 CUDA 應用進行深入的性能分析,特別是核函數(shù)(kernel)的性能特性和瓶頸。

          2. 特性分析:Nsight Compute 提供詳細的核函數(shù)性能分析,包括指令級統(tǒng)計、內(nèi)存訪問模式、計算吞吐量等。

          NVIDIA Nsight Systems

          1. 全局視圖:Nsight Systems 提供全局視圖的性能分析,包括整體的應用執(zhí)行流程、資源使用和性能特性。

          2. 系統(tǒng)級分析:Nsight Systems 不僅分析 GPU 性能,還分析 CPU、內(nèi)存和系統(tǒng)級的性能特性,提供全面的系統(tǒng)性能視圖。

          使用場景:

          • Nsight Compute 適用針對核函數(shù)性能優(yōu)化和調試的需求。

          • Nsight Systems 適用需要全面系統(tǒng)性能分析和優(yōu)化的應用場景。


          14.模型導出fp32的trt engine沒有明顯精度損失,導出fp16損失很明顯,可能的原因有哪些?

          比較突出的幾個可能性就是:對一些敏感層進行了量化導致掉精度比較嚴重,或者權重的分布沒有集中導致量化的dynamic range的選擇讓很多有數(shù)值的權重都歸0了。另外,minmax, entropy, percentile這些計算scale的選擇沒有根據(jù)op進行針對性的選擇也會出現(xiàn)掉點。


          15.onnx模型推理結果正確,但tensorRT量化后的推理結果不正確,大概原因有哪些?

          可能原因有:

          • a. calibrator的算法選擇不對;

          • b. calibration過程使用的數(shù)據(jù)不夠;

          • c. 對網(wǎng)絡敏感層進行了量化;

          • d. 對某些算子選擇了不適合OP特性的scale計算。


          16.采用tensorRT PTQ量化時,若用不同batchsize校正出來模型精度不一致,這個現(xiàn)象是否正常?

          正常的,因為calibration(校正)是以tensor為單位計算的。對于每次計算,如果histogram的最大值需要更新,那么PTQ會把histogram的range進行翻倍。不考慮內(nèi)存不足的問題,推薦使用更大的batch_size,這樣每個batch中包含樣本更加豐富,校準后的精度會更好。但具體設置多大,需要通過實驗確定(從大的batch size開始測試。一點一點往下減)。需要注意的是batch_size越大,校準時間越長。


          17.模型量化到INT8后,推理時間反而比FP16慢,這正常嗎?

          正常的,這可能是tensorrt中內(nèi)核auto tuning機制作怪(會把所有的優(yōu)化策略都運行一遍,結果發(fā)現(xiàn)量化后涉及一堆其他的操作,反而效率不高,索性使用cuda core,而非tensorrt core)。當網(wǎng)絡參數(shù)和模型架構設計不合理時,trt會添加額外的處理,導致INT8推理時間比FP16長。我們可以通過trt-engine explorer工具可視化engine模型看到。



          - The End -


          GiantPandaCV

          長按二維碼關注我們

          本公眾號專注:

          1. 技術分享;

          2. 學術交流

          3. 資料共享

          歡迎關注我們,一起成長!



          瀏覽 2229
          32點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          32點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  强开小嫩苞毛片一二三区 | 肏逼婷婷丁香免费国产 | 成人做爱网站视频| 久久五月丁香 | 手机第一毛片 |