Adreno GPU:4倍加速,上游到TVM主程式-TVMCon2023

Find AI Tools
No difficulty
No complicated process
Find ai tools

Adreno GPU:4倍加速,上游到TVM主程式-TVMCon2023

目錄

  1. 介紹
  2. 什麼是TVM
  3. GPU支援
    • 3.1邏輯 memory type
    • 3.2 GPU 架構
    • 3.3 L1 快取
  4. 優化方法
    • 4.1 動態分配 textures
    • 4.2 靜態 textures
    • 4.3 標記轉換
    • 4.4 最佳排程
    • 4.5 分裂輸出維度
    • 4.6 減少和適應的池化
    • 4.7 Vinegar 配置
    • 4.8 NHWC 和 CHWV 轉換
  5. 運行時優化
  6. 結論

使用TVM實現極速生產級代碼的探討 🚀

在這篇文章中,我們將探討如何使用TVM(Tensor Virtual Machine)實現極速生產級代碼。TVM是一個由Octo ML開發的通用深度學習推理引擎,它提供了高效的硬件加速和自動化優化功能。

介紹

近年來,深度學習模型的應用越來越廣泛。然而,高性能的深度學習模型在不同硬件上的執行效率往往存在著巨大差異。這就意味著,我們需要針對不同的硬件進行優化,才能發揮深度學習模型的最大性能。

TVM的出現解決了這一問題。它提供了一個統一的抽象層,將模型與硬件分離開來。這意味著,只需要編寫一次模型,就可以在不同的硬件上運行,不需要對模型進行任何修改。

什麼是TVM

TVM是一個通用的深度學習推理引擎,提供了即時編譯、自動調優和低延遲執行等功能。它支持多種硬件平台,包括CPU、GPU和ASIC。TVM還提供了前端支援,可以與主流的深度學習框架(如TensorFlow和PyTorch)無縫集成。

TVM運行時庫主要有三個核心組件:

  1. Relay:一種中間表示形式,可以將各種深度學習框架的模型轉換為統一的表示形式。
  2. TIR(Tensor Intermediate Representation):一種專為深度學習推理而設計的中間表示形式。
  3. TVM runtime:負責模型的實際執行,包括低層次代碼生成、即時編譯和自動調優等功能。

TVM的主要目標是提供高性能和低延遲的深度學習推理。通過自動調優和即時編譯等技術,TVM能夠在不同的硬件平台上實現最佳的性能。

GPU支援

GPU是深度學習的主要運算平台之一,它具有高度的並行性和計算能力。TVM提供了強大的GPU支援,可以對模型進行高效的加速。

邏輯 memory type

在使用TVM進行GPU加速時,一個重要的概念是邏輯 memory type。邏輯 memory type是一種內存類型,用於表示圖像等數據。它具有特定的API,可以在不同的編程網絡中使用。

在TVM中,我們使用opencl和opencl.cpp作為GPU的邏輯 memory type。這種數據類型的特點是它具有阻塞的布局,它有X和Y兩個維度,與扁平的1D資訊存取相比,它有更好的存取效能。

GPU 架構

為了更好地理解為什麼邏輯 memory type的重要性,我們需要了解GPU的架構。在GPU架構中,L1快取只用於存儲邏輯 memory type。如果存在計算密集型的原始,可以重複使用數據,將數據存儲到邏輯 memory type中,可以減少延遲。

TVM在TVMCon 2021上展示了由Optimal開發的原型,該原型是為了支援Hydrant GPU而開發的。這個原型在MobileNet等網絡上表現出色,但在某些網絡上與競爭解決方案相比較慢。

在實現過程中,用戶不得不開發自己的佈局轉換或浮點數數據類型轉換,並且這並不方便。該實現也無法上游使用,而是一個比較麻煩的hack方法。

為了解決這個問題,TVM開發人員通過TV和TIR級別的設計來支援GPU架構。他們提出了動態分配和靜態分配兩種工作流程,並根據不同的硬件進行了優化。

動態分配是指在主要功能中動態分配紋理,這是通過調用調度器以及將紋理分配給文本和緩衝區使用的調度器來實現的。

靜態分配是指將張量轉換為塊布局,並將它們與文本相關聯。這個過程是通過轉換器和將文本和緩衝區的信息轉換成後端JSON文件來完成的。在運行時,TVM會根據後端JSON文件進行內存分配。

優化方法

為了進一步優化GPU加速,我們提出了幾種優化方法:

動態分配紋理

對於任務密集型的卷積,我們提出了一種動態分配紋理的方法。通過將數據複制到紋理中,可以加快計算速度。儘管複制數據需要一些時間,但計算速度會得到顯著提升,最終可以達到4倍的加速。

靜態分配紋理

對於具有較小維度的卷積,我們提出了靜態分配紋理的方法。通過將輸入張量轉換為塊布局,可以更好地利用緩存,從而提高性能。這一優化方法可以獲得高達10倍的加速。

標記轉換

標記轉換是在relay級別進行的一項轉換,用於將張量標記為主要功能和參數的參數。它在融合轉換之後被調用,並與調度器進行同步。標記轉換需要與支持紋理的調度器相匹配,否則會出現運行錯誤。

最佳排程

最佳排程是另一個重要的優化方法。如果無法將輸出軸劃分為子軸,將無法達到最佳性能。我們提出了一種擴展輸出的方法,以確保可以找到最佳的配置。通過這種優化方法,我們可以實現10倍的加速。

減少和適應的池化

對於減少和適應的池化操作,我們引入了不同的調度方法。如果要處理的元素數量小於一個閾值,則建議在一個工作項中處理它們。如果要處理的元素數量大於閾值,則建議使用精確配置,並在不同的工作項中進行并行執行。

Vinegar 配置

我們還增加了Vinegar的支援。對於一些網絡,Vinegar並不總是比直接卷積更好。然而,TVM的自動化調優功能可以選擇最佳的配置。通過使用Vinegar,我們可以獲得額外10%到20%的加速。

NHWC 和 CHWV 轉換

在層級方面,我們使用了I-drop布局和块大小布局,以實現NHWC和CHWV之間的轉換。這兩種布局具有相同的性能,可以適用於不同框架的模型。

運行時優化

在推理過程中,TVM提供了運行時優化的功能。為了加快編譯速度,用戶可以在首次運行應用程序時,將二進制編譯的日誌保存下來,以後運行時只需要載入即可。這種方式可以將編譯時間從45秒減少到15毫秒。

結論

通過以上的優化方法和運行時優化,TVM能夠實現與競爭對手(如TensorRT和TFLite)相當甚至更好的性能。我們希望這些方法在未來的TVM版本中能夠得到進一步優化和改進。

TVM的出現為深度學習模型的加速和優化帶來了新的可能性。我們相信,隨著TVM的不斷發展和改進,它將成為未來深度學習模型加速的主要工具之一。

謝謝大家的聆聽,如果您有任何問題,我將很樂意回答。謝謝! 🙏

精華摘要

  • TVM是一個通用的深度學習推理引擎,可以在不同的硬件平台上實現高性能和低延遲的模型推理。
  • GPU架構中的邏輯 memory type是一種內存類型,可以提高計算效率。
  • 通過動態分配和靜態分配紋理,可以進一步優化GPU加速的性能。
  • 標記轉換和最佳排程是兩種優化方法,可以提高模型的性能。
  • 減少和適應的池化以及Vinegar配置也是提高性能的重要優化方法。
  • TVM提供了運行時優化的功能,可以加快編譯速度,提高效率。

常見問題

問:TVM支持哪些硬件平台? 答:TVM支持多種硬件平台,包括CPU、GPU和ASIC。

問:如何在TVM中使用動態分配紋理? 答:動態分配紋理是通過調度器進行的,可以在主要功能中動態分配紋理,從而加快計算速度。

問:我們如何選擇最佳的排程? 答:最佳排程是根據不同的硬件進行優化的,我們可以通過分裂輸出維度,確保獲得最佳的配置。

問:如何減少池化操作的計算量? 答:如果要處理的元素數量小於閾值,可以在一個工作項中進行計算;如果要處理的元素數量大於閾值,可以使用並行執行進行計算。

問:我們如何進行運行時優化? 答:在首次運行應用程序時,可以編譯並保存二進制編譯的日誌,以後運行時只需要載入即可,從而加快編譯速度。

資源

Are you spending too much time looking for ai tools?
App rating
4.9
AI Tools
100k+
Trusted Users
5000+
WHY YOU SHOULD CHOOSE TOOLIFY

TOOLIFY is the best ai tool source.