GPU 優化 是什麼?

GPU Optimization:GPU 優化 的完整解釋

通過高效利用 GPU 硬體特性(記憶體層次、並行單元、向量化)提升深度學習訓練和推論性能。

核心概念

GPU 是大規模矩陣運算的理想硬體,但充分利用 GPU 性能需要深入理解其架構。現代 GPU(如 H100)擁有數千個核心,主頻 2GHz,峰值浮點運算能力達 141 TFLOPS(FP32),但若使用不當,實際利用率可能不到 10%。GPU 優化的目標是提升「算術強度」(計算量與記憶體存取量的比)。

GPU 記憶體層次結構包括:

  • 全域記憶體(Global Memory):容量大(40GB),延遲高(幾百個週期)
  • L2/L1 快取:容量小(數 MB),延遲低
  • 共享記憶體(Shared Memory):極高頻寬,低延遲,但容量有限(48-96KB per 塊)
  • 暫存器:速度最快(每週期一次存取),容量極小(64KB per 執行緒)

高效的 GPU 核函數應最大化高速記憶體的使用。

運作原理

GPU 優化的常見技術包括:

  1. 核函數融合:將多個核函數合併為一個,減少全域記憶體往返。例如,矩陣乘法後加 ReLU 激活,融合後可避免將中間結果寫回全域記憶體

  2. 記憶體存取模式優化:合併存取(Coalesced Access)使相鄰執行緒存取相鄰記憶體位置,充分利用記憶體頻寬。若記憶體存取不合併,實際頻寬利用率可能降至 10%

  3. 共享記憶體利用:將頻繁存取的資料載入共享記憶體,以 100 倍頻寬提升執行速度。但需要仔細的資料分塊和同步

  4. 混合精度訓練:使用 FP16(Float16)進行乘法和累積,FP32 進行梯度累積。H100 的 FP16 吞吐量是 FP32 的 3 倍,且記憶體消耗減半

  5. 量化:將 FP32 權重量化為 INT8,記憶體縮小 4 倍,部分 GPU(如 Tensor Core)支援 INT8 加速,推論延遲降 50% 以上

實際應用

GPU 優化在各應用域帶來顯著效果:

  • 訓練優化:使用 Nvidia Apex 混合精度訓練,GPT-2 訓練速度提升 2.7 倍,記憶體減少 50%
  • 推論優化:TensorRT 融合卷積和 ReLU、使用 INT8 量化,ResNet50 推論延遲從 50ms 降至 8ms
  • 推薦系統:使用融合的 embedding 核函數和規律化記憶體存取,Embedding 層速度提升 5 倍
  • 自然語言處理:混合精度 + 梯度累積 + 梯度檢查點,使得 BERT-large 批大小提升 4 倍
  • 強化學習:GPU 優化推論環路,使得 DQN 訓練的環境採樣速度從每秒 10K 幀提升至 50K 幀

常見誤區

許多工程師誤認為「寫 CUDA 核函數就能自動獲得 GPU 加速」。實際上,為了充分利用 GPU,核函數設計需要理解記憶體層次、線程束(warp)執行模型、同步機制等。一個設計不當的核函數性能可能比簡單的 GPU 核心庫慢 100 倍。

另一個誤區是「GPU 記憶體越大越好」。實際上,單卡 GPU 記憶體增加(如從 40GB 升至 80GB)對訓練速度的影響遠低於記憶體頻寬提升。H100 使用 HBM3 記憶體(約 3.3TB/s),而旧款 GPU 為 900GB/s。頻寬的提升在記憶體綁定核函數上帶來更大性能提升。

與相關技術的比較

  • GPU 優化 vs. 量化:量化是應用層優化(減少資料寬度),GPU 優化是硬體層優化(提升硬體利用率),兩者可結合(量化+GPU優化的核函數)
  • GPU 優化 vs. 混合精度:混合精度是訓練技巧(FP16 計算+FP32 累積),GPU 優化利用硬體特性(Tensor Core)執行 FP16 乘法
  • GPU 優化 vs. 模型並行:模型並行分割模型跨多 GPU,GPU 優化提升單 GPU 性能,後者是提升前者效率的基礎
  • GPU 優化 vs. 稀疏加速:GPU 優化面向稠密運算,稀疏加速針對稀疏矩陣,超稀疏矩陣(稀疏度>90%)可能需要特殊硬體加速器

常見問題