AIACC-AGSpeed(AIACC 2.0-AIACC Graph Speeding)是阿里雲推出的一個基於PyTorch深度學習架構研發的計算最佳化編譯器,用於最佳化PyTorch深度學習模型在阿里雲GPU異構計算執行個體上的計算效能,相比原始的神龍AI加速引擎AIACC,AIACC-AGSpeed是AIACC 2.0產品的實現,是完全獨立的產品形態,可以實現無感的計算最佳化功能。
AIACC-AGSpeed介紹
AIACC-AGSpeed簡稱為AGSpeed,AGSpeed作為阿里雲自研的AI訓練計算最佳化編譯器,對PyTorch深度學習架構訓練過程中的計算效能進行深度最佳化,具有其顯著的計算效能優勢。
AGSpeed的組件架構圖如下所示:
組件架構 | 說明 |
編譯器前端 | AGSpeed編譯器前端整合了由神龍AI訓練效能和加速團隊進行深度最佳化後的TorchDynamo,您無需修改任何模型代碼,AGSpeed前端直接從PyTorch Eager API中抓取計算圖,並將計算圖交給AGSpeed Backend Autotuner處理,Autotuner會自動選擇效能最佳化效果最佳的後端實現,為您提供了最佳的效能體驗。 |
編譯器後端 | AGSpeed編譯器後端整合了由神龍AI訓練效能和加速團隊為TorchScript IR研發的IR最佳化Pass,用於啟用更多融合操作來提升效能。另外,AGSpeed後端還整合了由神龍AI訓練效能和加速團隊進行深度最佳化後的NvFuser,相比原生NvFuser具有更強的魯棒性和最佳化效能。 |
受限情境說明
在AGSpeed編譯器前端,如果使用Dynamic Tensor Shape會觸發Re-capture、Re-optimize、Re-compile動作,可能會導致AGSpeed的計算最佳化效能回退,建議您儘可能使用
agspeed.optimize()
介面最佳化模型的靜態部分。具體原因和建議如下所示:說明 靜態指的是輸入Tensor的shape不變,模型在向前傳播過程中計算得到的中間變數的shape也保持不變。
原因
- 在AGSpeed編譯器前端,如果存在Dynamic Tensor Shape,可能會導致TorchDynamo重新抓取計算圖並且重新執行convert frame,對最佳化效能產生較大影響。
- 在AGSpeed編譯器後端,如果存在Dynamic Tensor Shape,會導致TorchScript重新specialize graph,並重新執行所有的最佳化Pass。另外,NvFuser後端也有可能會為新的Tensor Shape重新編譯新的kernel,這些都會對效能產生較大影響。
建議
使用agspeed.optimize()
介面最佳化模型的靜態部分可以有效避免上述限制。例如,針對目標檢測模型,僅使用agspeed.optimize()
最佳化深度學習的backbone,避免封裝檢測頭,因為檢測頭部分計算的中間變數存在shape多變的現象。
聯絡我們
如果您有AI加速AIACC相關的問題或需求,歡迎使用DingTalk搜尋群號33617640
加入阿里雲神龍AI加速AIACC外部支援群。(DingTalk通訊用戶端下載地址)