天天看點

模型部署優化的學習路線是什麼?

模型部署優化這個方向其實比較寬泛。從模型完成訓練,到最終将模型部署到實際硬體上,整個流程中會涉及到很多不同層面的工作,每一個環節對技術點的要求也不盡相同。

部署的流程大緻可以分為以下幾個環節:

模型部署優化的學習路線是什麼?

一、模型轉換

從訓練架構得到模型後,根據需求轉換到相應的模型格式。模型格式的選擇通常是根據公司業務端 SDK 的需求,通常為 caffe 模型或 onnx 模型,以友善模型在不同的架構之間适配。

該環節的工作需要對相應的訓練架構以及 caffe/onnx 等模型格式有所了解。

常用的 Pytorch 和 TensorFlow 等架構都有十分成熟的社群和對應的部落格或教程;caffe 和 onnx 模型格式也有很多可參考和學習的公開文檔。

即使沒找到有可參考的文章時,好在二者都是開源的,依然可以通過對源碼和樣例代碼的閱讀來尋找答案。

二、模型優化

此處的模型優化是指與後端無關的通用優化,比如常量折疊、算數優化、依賴優化、函數優化、算子融合以及模型資訊簡化等等。

部分訓練架構會在訓練模型導出時就包含部分上述優化過程,同時如果模型格式進行了轉換操作,不同 IR 表示之間的差異可能會引入一些備援或可優化的計算,是以在模型轉換後通常也會進行一部分的模型優化操作。

該環節的工作需要對計算圖的執行流程、各個 op 的計算定義、程式運作性能模型有一定了解,才能知道如果進行模型優化,如何保證優化後的模型具有更好的性能。

了解得越深入,越可以挖掘到更多的模型潛在性能。

三、模型壓縮

廣義上來講,模型壓縮也屬于模型優化的一部分。模型壓縮本身也包括很多種方法,比如剪枝、蒸餾、量化等等。模型壓縮的根本目的是希望獲得一個較小的模型,減少存儲需求的同時降低計算量,進而達到加速的目的。

該環節的工作需要對壓縮算法本身、模型涉及到的算法任務及模型結構設計、硬體平台計算流程三個方面都有一定的了解。

當因模型壓縮操作導緻模型精度下降時,對模型算法的了解,和該模型在硬體上的計算細節有足夠的了解,才能分析出精度下降的原因,并給出針對性的解決方案。

對于模型壓縮更重要的往往是工程經驗, 因為在不同的硬體後端上部署相同的模型時,由于硬體計算的差異性,對精度的影響往往也不盡相同,這方面隻有通過積累工程經驗來不斷提升。

OpenPPL也在逐漸開源自己的模型壓縮工具鍊,并對上述提到的模型算法、壓縮算法和硬體平台适配等方面的知識進行介紹。

四、模型部署

模型部署是整個過程中最複雜的環節。從工程上講,主要的核心任務是模型打包、模型加密,并進行SDK封裝。

在一個實際的産品中,往往會用到多個模型。

模型打包是指将模型涉及到的前後處理,以及多個模型整合到一起,并加入一些其他描述性檔案。模型打包的格式和模型加密的方法與具體的 SDK 相關。在該環節中主要涉及到的技能與 SDK 開發更為緊密。

從功能上講,對部署最後的性能影響最大的肯定是SDK中包含的後端庫,即實際運作模型的推理庫。開發一個高性能推理庫所需要的技能點就要更為廣泛,并且專業。

并行計算的程式設計思想在不同的平台上是通用的,但不同的硬體架構的有着各自的特點,推理庫的開發思路也不盡相同,這也就要求對開發後端的架構體系有着一定的了解。

具體到不同架構的程式設計學習,建議參考目前各大廠開源的推理庫來進一步學習。

繼續閱讀