曠視天元深度學習框架Beta版的技術升級與生態建設

2020 年 7 月 9 日,以“智聯世界 共同家園”爲主題,以“高端化、國際化、專業化、市場化、智能化”爲特色的世界人工智能大會雲端峯會開幕。會議第三天,曠視在其舉辦的線上“深度學習框架與技術生態論壇”上,與業內專家、學者圍繞曠視6月底發佈的天元深度學習框架Beta版的技術升級與生態建設進行了探討,帶領廣大開發者走近“天元”,深入瞭解這一國產深度學習框架的設計之道,探討深度學習框架與技術生態的未來發展。

作爲一款訓練推理一體化、靈活高效的新型深度學習框架,天元能夠幫助企業與開發者的產品從實驗室原型到工業部署平均節省90%的流程,真正實現小時級的轉化能力。

曠視開源天元(MegEngine)這個在內部全員使用、工程實踐超過6年的深度學習框架,爲的是能夠將自己的經驗與成果同業界分享。通過開源社區的力量,幫助更多開發者把自己的精力地集中在算法的研發和業務場景中,從煩瑣的流程,煩瑣的性能優化和模型復現中解放出來,真正實現“深度學習開發,從未如此簡單”。

據曠視研究院高級技術總監許欣然介紹,從3月份開源到6月底Beta版發佈,天元共經歷了5個版本的迭代,得到了曠視內部與外部開發者們的建議與支持。天元Beta版核心技術升級包括三大特性:

1.完善量化訓練和量化推理功能

天元Beta版本提供了靈活的量化訓練和高效的量化推理的能力,讓開發者可以快速的完成高精度的量化訓練並直接部署到推理側,以最小的精度代價獲得最高的推理性能。

2.添加對ARM CPU的支持

天元添加了對ARM CPU的支持,在ARM、CUDA、X86三個主流計算平臺上都提供了經過深度優化的 kernel 實現,結合天元優異的計算圖優化技術,在量化、浮點模型上均提供了業界領先的計算性能和內存顯存佔用。

3.優化推理功能

天元對推理功能做了一系列的功能優化,提供 Profile工具、上手指南、性能優化教程等內容,幫助開發者快速上手,獲得更高的推理性能,讓開發者在推理的時候可以使用更方便,開發更高效。

另外,天元Beta版新增10餘個SOTA模型,並正式提供中文版API文檔,還新增了Objects 365 Dataset 的 API 和多機訓練參數打包等功能。

除了功能和性能上的改進之外,天元框架還與小米MACE、OPEN AI LAB Tengine等推理框架進行了深度集成。

以下是具體技術細節與性能對比。

模型量化——訓練與推理

背景:在當前,提高神經網絡推理性能的主流方法是在 GPU 和各類嵌入式設備上,對深度學習模型的推理過程進行量化,即使用 int8 乃至更低精度進行推理。

然而該方案的問題在於,若使用量化後的模型進行推理則可能會面臨因量化帶來的精度損失。另外,由於模型量化領域發展迅速,投入大規模使用僅兩三年,大量開發者當前所使用的量化工具性能參差不齊,模型量化後精度損失較多;又加上種種量化細節不對齊,使得模型轉換的步驟進一步加劇了精度上的問題。在這樣的條件下,開發者不得不通過更大的量化模型來達成業務目標,使得量化帶來的性能提升被抵消,難以充分發揮出設備的全部計算性能。

解決方案:基於天元訓練推理一體化架構,同時站在訓練和推理的全局視角上優化模型量化的體驗和效果,讓開發者可以在保持模型精度的同時,獲得更大的性能提升。

量化訓練方式的選擇

背景:關於神經網絡模型量化,最關鍵問題是如何選取量化表示時的縮放係數(也被稱之爲 scale)。針對這一點有兩種方案:後量化統計方法(Post Quantization)、量化感知訓練(Quantization Aware Training)。

所謂後量化統計方法,即在模型正常訓練結束後進行數值統計並量化。這種方法因流程簡單而在當前應用廣泛。其缺點在於,當模型較小的時候則精度偏低;同時該方法由於訓練階段與量化步驟分離,導致訓練與推理階段精度不一致,只有在完整訓練之後才能知曉量化的具體精度下降程度。

量化感知訓練則指的是在訓練階段就模擬量化推理過程,讓模型對量化過程進行適配。此方法能讓模型保持更高精度,且在訓練階段就能掌握推理的精度,其缺點在於流程較爲複雜。

解決方案: 基於曠視內部學術研究與工程實踐積累的大量經驗,天元實現了方便快捷量化感知訓練功能,讓開發者可以只增加少量流程,就能利用上量化感知訓練的能力。這使得曠視的研究人員與工程師在給定算力下,能夠獲得更高的推理精度,進而獲得算法優勢。另外,在訓練階段即可知曉最終推理精度,加快了模型迭代速度,讓模型的開發過程更爲高效、可控。

量化接口使用流程

具體而言,整個量化接口的使用分爲五步。如上圖,在正常模型訓練的搭建網絡、訓練網絡、生成序列化模型三步上,額外增加了量化參數配置、量化感知訓練兩個步驟。

一般來說,在默認的量化配置下,開發者就可以獲得比較優良的精度,這對應於右側黃色高亮的三條語句,操作簡單、方便。

量化接口設計

量化接口的具體設計,分爲浮點模塊、僞量化(FQ) 模塊和量化模塊。三者分別執行浮點、模擬量化和真實量化工作。

具體而言,開發者首先在普通模塊上進行正常的模型訓練工作;然後,可以轉換至僞量化(FQ) 模塊,通過配置不同的 Observer 來配置不同的量化參數 scale 獲取方式,從而進行不同的量化感知訓練或進行後量化統計。

在完成量化參數 scale 的統計後,開發者便可以再轉換至量化模塊,直接進行推理或者序列化存儲生成模型。

天元的這套量化接口設計借鑑了 PyTorch 的方案,並在其基礎上進行了一系列改進和優化,方便擴展。

訓練:靈活多樣的量化配置

天元Beta版提供的量化接口讓開發者能夠使用不同的 Scale 獲取方法,多種基於統計或基於學習的方式,以及靈活配置量化策略、位寬。此外,由於量化方法在整體上仍處於發展當中,因此天元量化接口的設計宗旨是便於擴展。通過支持用戶自行註冊量化實現,便於兼容各類特殊硬件和新的量化方法。

訓練:量化參考模型與操作文檔

值得一提的是,天元Beta版除了提供量化功能外,還在模型倉庫中提供了完整的模型復現。如上圖所示,三個模型在全 int8 量化下準確率僅下降約1%。此外,Beta版本還提供了詳盡的量化操作文檔,幫助開發者們快速上手。

推理:多平臺直接部署

模型量化的推理方面,在天元Beta版中,量化模型的推理方法與浮點模型完全一致,開發者僅需直接讀取序列化模型執行,在各個平臺上都可以直接載入並進行高效推理。

在訓練階段,開發者可以非常靈活地控制網絡量化模塊,混合使用各種量化策略;在推理部署階段,系統會使用與訓練相同的設置,無需額外配置,便能保證一致。

各個框架對 int8 量化的定義在細節上有諸多不同,對天元來說,訓練後直接可用於推理,一份模型,全平臺可推理,開發者不用對每個平臺都學習不同的部署流程。這免除了模型轉換可能帶來的各類誤差問題,也不用擔心轉換時算子不支持,轉換後精度不對齊等問題。

推理:高效原生 int8 實現

作爲框架的設計者同樣也是使用者,天元團隊深知對於開發人員而言,性能往往是在推理階段最關注的指標,爲了性能,即便麻煩也需要將模型轉換到更快的推理框架上。

爲此,天元在各主流計算平臺上提供的高效 int8 實現,讓開發者不再需要面對上述痛苦,保證開發者用天元框架訓練後能夠直接進行推理部署。

上圖展示了 ARM 上的推理性能對比。可以發現,通過轉換至 int8,天元使得常用網絡獲得了至多3倍的提速。此外,針對手機上常用的小模型,天元提供了更好的優化效果,加速效果更佳明顯。

此外,天元在 CUDA 和 x86 上也提供相對於 float32 顯著的提速效果。與Arm 類似,int8 推理的耗時僅有 float 模型的 30%~50%。在 CUDA 上,天元可以充分發揮出 Tensor Core 的計算能力,榨乾顯卡的計算能力;而在X86 上,由於X86 指令集的原因,天元可以在支持 AVX512-VNNI 指令集的最新一代處理器上得到比較明顯的 int8 提速。

綜上,原生的 int8 高效推理性能,可以讓開發者方便地進行模型推理部署,同時充分發揮出硬件的計算能力。

推理功能優化

優秀的原生 ARM 推理性能

除優秀的模型量化功能外,天元在 Beta 版本還提供性能高效的 ARM 算子實現。天元引入NCHW44 layout,通過將張量的內存排布進行調整,進一步優化訪存,並降低各種邊界情況的判斷,提升計算性能;同時軟硬結合,在支持的設備上,使用最新的 ARM dotprod 指令,編寫高質量的各類卷積算法實現,最終獲得了高效的推理性能。

在 int8 推理時,天元依靠深度優化 im2col、winograd 和 direct conv 等算子,在各類網絡上都達到了優秀的性能指標。上圖分別展示的是不啓用 dot 指令和啓用 dot 指令的性能對比,可以發現,天元均提供了優異的性能表現。

另外,藉助 ARM 的dot 指令,天元 ARM 上的 int8 推理在 ResNet 上從 64ms 降低到了 30ms 以內,在一系列常用網絡上都可以獲得兩倍以上的大幅度加速。因此如果手上有支持 dotprod 指令的設備,開發人員可以在天元的支持下獲得巨大的性能提升。

值得一提的是,在一些不支持 dot 指令的設備上,通過使用 winograd 可以降低乘法指令個數,從而在 ResNet、VGG 這類網絡上獲得比較顯著的加速。爲了追求加速比,業界常見的做法是對 weight 進行限制,將表示精度限制在 6bit 內,從而避免累加結果溢出。然而這存在的問題在於,需要在模型訓練時就進行特殊處理,導致一個模型難以在全平臺部署;同時,這也降低了量化網絡的推理精度,限制了使用場景。

天元作爲一個訓推一體的框架,追求訓練與推理側功能的精確對齊,針對上述問題,創新性地使用 float 作爲中間計算格式,實現了 winograd 算法。這種方法的優點在於,對 weight 沒有特殊要求,能夠與訓練時的設置精確對齊,確保精度沒有損失;同時,這種算法還更充分地利用上了計算單元,提高計算性能,確保開發者可以隨時啓用獲得性能提速,無需擔憂精度問題。

除了 int8 推理之外,考慮到仍有大量開發者在使用 float 模型進行推理工作。爲了讓這些開發者也可以得到最優的性能,天元在 float 算子上也進行了大量優化,使得各類常見的模型獲得了業界領先的性能,開發者可以在不改動原有工作流程的情況下,獲得性能上的提升。

ARM int8 內存佔用

在深度學習的應用中,運行時內存佔用也是一個重要的指標。天元對訓練側的自動內存優化策略進行了充分打磨,實現了內存佔用和推理性能之間的良好平衡。上圖展示了天元在內存佔用上的優勢。

天元僅依靠通用優化策略,便實現了對任意模型結構優良的優化表現,使得框架無需針對網絡結構進行特殊優化。各領域開發者在使用自己的模型結構時也能有較低的內存佔用。

至此,天元獲得了在各主流計算平臺的高效推理能力。在X86 / CUDA / ARM 的各種子架構上,均提供性能經過深度優化的算子,保證了推理時的高性能,讓開發者可以實現訓練-推理一體,免於模型轉換。

推理工具與教程

配合本次 ARM 能力的放出,天元在官網上提供了完整的部署流程教程,幫助大家快速上手端側推理的開發步驟。

另外,天元也進一步優化了推理方面的使用體驗,提供性能分析工具和優化手冊,方便開發者找到性能瓶頸,提高模型推理性能。

最後天元針對跨平臺編譯進行優化,開發者可以利用天元在 Linux / Windows /macOS / iOS / Android 上進行推理。

各平臺內置常用圖像處理算子

除了 NN 算子之外,在深度學習模型應用的場景中,各類 CV(也就是圖像處理)算子往往也作爲模型的預處理步驟存在,這些步驟的性能和精度會高度影響一個深度學習模型的落地效果。

天元內置了常用的 CV 算子,並進行了高度優化,它們可以作爲模型的一部分存在,實現框架的統一優化。在推理時,解碼後的結果可以直接輸入框架,通過一次調用完成全部 CV 操作和 NN 算子,簡單方便。

在深度學習模型的落地中,一個重要的步驟稱爲“對分”,它能確保模型訓練與最終推理的行爲完全一致。天元提供的 CV 算子在各平臺間對齊精度,盡全力避免訓練與推理的差異,降低其中的誤差,從而顯著降低對分的成本,助力模型快速落地。

新增復現模型與訓練功能增強

除本次核心技術升級外,天元也一直在更新更多模型復現,助力開發者利用天元完成更多工作。

包括前文提到的量化模型ResNet、ShuffleNet v1、MobileNet v2,至此天元的分類模型提供了主流ResNet 系列、ShuffleNet 系列、MobileNet 系列的量化、非量化版本,並提供基於ImageNet 的預訓練權重。

檢測模型的訓練邏輯比較複雜,天元本次復現了Faster R-CNN,並提供了 RetinaNet 的量化版本。

另外,本次還更新了兩個生成對抗網絡。在 CIFAR10 數據集上覆現了 DCGAN 和 WGAN 兩篇論文的工作,各項評估指標都達到復現的SOTA水平。

此外,天元本次提供了兩個人體骨骼點復現模型,分別是經典的 Simple Baseline 和 MSPN 網絡,MSPN 是曠視在 CVPR 2019 上提出的高效人體姿態估計網絡。這兩個模型都提供了基於 COCO 數據集的預訓練權重,便於大家進行更多實驗。

天元從 Beta 版本開始,正式提供中文版 API 文檔,讓更多開發者可以利用上天元的能力,加入深度學習的時代。此外,還新增了若干算子、Objects 365 Dataset 的 API 和多級訓練時參數打包的功能。

開源生態合作

在開源生態的合作方面,天元相信社區的快速發展需要多放的協同努力,不斷用創新的方法來解決不同場景下面臨的難題。

天元積極與各大開源項目展開合作。到目前爲止,已與包括小米 MACE、Open AI Lab Tengine等框架進行了深度集成,用戶可以將天元的模型直接轉換到 MACE 或 Tengine 中執行,從而獲取在各類異構設備上執行深度學習模型的能力。

例如藉助小米 MACE 推理引擎,開發人員甚至可以幫助天元模型運行在計算能力極低的微控制器上;而藉助 Tengine,深度學習模型能夠在多樣的異構設備上高效執行。

除了基本的模型轉換方式之外,天元更是對多種框架進行了深度集成。如上圖,天元可以把 MACE 、Tengine 以及 TensorRT 等推理框架作爲一個大型的推理算子集成到更大的天元計算圖中,從而通過混合使用各個框架,來獲得不同框架所提供的特殊能力。

而像各種設備間的內存拷貝,計算的調度工作,則由天元來協助解決,無需用戶費心。例如,我們可以結合天元提供的豐富的 CV 算子,高性能 kernel,MACE 和T engine 的異構計算能力,以及 TensorRT 提供的高性能融合 kernel 等等,讓開發者在做推理工作時,不再只能做單選題。這種深度的融合模式與模型轉換模式共存,供開發者針對自己的使用場景自由選擇使用。

天元發展規劃

目前,天元團隊正在爲9 月的正式版本進行開發,屆時希望能夠提供更完善的動態計算能力,讓訓練側可以更加自由的表達計算形式。另外,天元會進一步優化訓練和推理的全流程使用體驗,讓深度學習從算法到落地更加高效。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章