面向推理訓練一體化的 MNN 工作臺

阿里巴巴移動技術發表於2022-02-08

作者:修玉同(音弦)

MNN 工作臺是阿里淘系端智慧團隊構建並對外免費開放的一站式端側 AI 研發平臺,它基於已開源的 MNN 深度學習端側推理引擎(開源地址:https://github.com/alibaba/MNN ),內嵌模型工具、單機預訓練模版、開箱即用演算法集、端側真機斷點除錯以及獨創的三端一體部署方案等一系列能力。自對外開放以來,MNN 工作臺始終致力於解決 降低對 AI 感興趣的開發者們的參與門檻提升演算法與工程之間協作效率 兩個端側 AI 發展的核心問題,深受廣大端側開發者的好評。

但在好評之餘,MNN 工作臺團隊仍在持續思考:在讓迭代變得更加高效、部署驗證更加連貫、模型生產更加簡單這幾點上,我們真的做到極致了嗎?在面向不同分層的開發者時,我們真的解決了他們所有的核心訴求嗎?

因此在和不同團隊與開發者溝通交流後,我們將目光聚焦在了兩大方面:

  1. MNN 工作臺的部署除錯體驗非常流暢,但是缺乏殺手鐗級別的訓練能力,這會導致訓練 - 部署的整體流程產生割裂;
  2. 演算法逐漸產生複雜、多工、多模型協作的趨勢,如何針對這一問題提供更有效的解決方案,也是一個亟需攻克的難點。

構建強大專業的訓練能力

MNN 工作臺提供了開箱即用的演算法模型市場以及內建的多項預訓練模版,面向開發者提供極致簡單的模型生產方式,這從一定程度上為端側 AI 場景的普及打下了基礎。但是隨著越來越多專業級演算法使用者的加入使用,MNN 工作臺現有的訓練能力也暴露了諸多弊端:

圖 1 - 過去的一站式工作流

  • 模型市場 / 預訓練模版面向的是簡單通用的場景,僅對外暴露了非常少的模型引數,無法按照專業演算法的訴求進行個性化修改和定製;
  • MNN 工作臺先前的訓練流程都是基於 MNN 訓練機制執行在單一裝置上,這從一定程度上限制了資料集與訓練引數,導致最終的模型效果無法滿足複雜業務場景下的高質量要求。

基於此,在 MNN 工作臺中嵌入專業級的訓練能力融合成為推訓一體的完整工作流迫在眉睫。考慮到訓練需要大規模的叢集資源及排程管理能力,我們選擇和阿里雲 PAI-DLC 團隊合作,借力其強大的雲端基礎設施打造契合於端側 AI 研發流程的訓練能力。在整個實施過程中,MNN 工作臺並不是簡單的將雲端訓練概念照搬以及 API 聯調,而是結合自身洞察到的端側部署驗證遇到的痛點,從使用者視角出發進行的鏈路設計:

圖 2 - 基於 PAI-DLC 的推理訓練一體化工作流

  • PAI-DLC 是一個獨立的訓練叢集,訓練過程涉及的程式碼需要通過 Git 提交,資料、樣本及模型等還需要通過 NAS / OSS 提供,這些環節都需要人為的進行配置,配置成本較高。因此 MNN 工作臺整體串聯了相關係統,僅需要使用者簡單點選幾下滑鼠,相關資料集等就會自動同步對應的位置,再配合相關自動化指令碼協助使用者完成繁瑣重複性的工作;
  • 模型產出到部署到終端裝置上還有一定距離。千萬別小看這最後一公里,傳統的端側演算法部署流程需要工程團隊的介入支援,相關引數效果調整還需要不斷溝通聯調,消耗演算法耐心和精力。而利用 MNN 工作臺三端一體的特性,演算法同學一鍵下載對應的模型檔案、編寫簡短几行程式碼就可以完成真機效果驗證,真正做到一站式訓練部署的順滑體驗;
  • 針對端側模型輕量化的特點,我們也在流程中融入了 MNN 量化稀疏演算法能力,讓演算法可以高效對比不同模型引數計算量下的效果。

圖 3 - 推理訓練一體化工作流演示

功能精進:多視窗、聯合除錯與 Git Flow

隨著推訓一體工作流的逐步完善,一個全新的問題也隨之浮出水面:雲端訓練的耗時冗長,為了節約時間如何同時訓練多個模型?

在此之前,工作臺僅支援單視窗“獨佔”的執行模式,即使用者同一時刻只有一個工程能夠享受到一站式工作的“紅利”,為了操作其他工程,使用者只能從當前工程切出,這像極了智慧機之前的“老年機”互動,給使用者帶來了很大不便。此外,一些複雜的端計算場景也需要對多個工程進行聯動開發和除錯,將工作臺改造為支援多開勢在必行。

因此自推訓一體平臺萌芽之際,我們就開始了對工作臺多開能力的改造,最終我們完成了工作臺底層程式模型和 IPC 模型的改造,並在端側 DebugSDK 支援了一對多連線的能力,讓工作臺實現了從“老年機”到“智慧機”時代的跨越:

圖 4 - MNN 工作臺多視窗架構

工作臺進入“智慧機”時代為端側的演算法研發帶來了更多可能,自此之後你不必再為使用其他功能要關掉當前工程而苦惱了:現在你可以同時開啟多個工程,同時開發和提交多份訓練程式碼,在同一臺手機上除錯多個端計算工程,在開發的同時使用模型工具等等:

圖 5 - MNN 工作臺多工聯合除錯

圖 6 - 利用多視窗能力同時訪問多個模型工具

工作臺從單視窗變成多視窗意味著使用者需要管理的工程變多了,為了避免混亂,全鏈路的所有操作最好能夠完全在其對應的工作臺視窗中完成,通過梳理細節我們發現無論端計算髮布還是遠端訓練都少不了基於 Git 的程式碼釋出流程,如果工作臺不能支援完備的 Git 操作那麼整個工作流依然是割裂的因此我們在工作臺中移植了視覺化的 Git Flow,它支援通過 Diff Editor 檢查變更,視覺化編輯 Git 工作區,通過命令選單執行 Pull / Push / Stash 等操作,通過 Git 元件你可以輕鬆完成程式碼檢查和釋出。推訓一體平臺配合 Git Flow 真正意義上實現了端側演算法工程全鏈路工作都在同一個工作區完成

圖 7 - 通過 Git Flow 元件進行視覺化版本控制

最佳實踐

基於推訓一體工作流和工作臺完善的整合開發環境,我們可以快速實現從 0 到 1 的端側演算法工程構建,首先我們需要建立一個 PAI 訓練工程,編寫好訓練程式碼,進行本地訓練驗證:

圖 8 - 使用本地環境執行訓練工程

本地驗證無誤後,我們可以一鍵推送到雲端 PAI-DLC 容器中進行訓練,訓練結束後可一鍵將訓練產物拉回本地:

圖 9 - 雲端訓練和訓練產物下載

雲端訓練產物往往要經過諸如轉換、量化等模型工具的處理才能在端側使用,藉助於工作臺多視窗能力你可以直接在模型上右鍵開啟任意多個模型工具進行高效的模型處理:

圖 10 - 一鍵執行多種模型工具

最後,我們可以切換到三端一體的端側開發部署環境進行驗證,如果在驗證過程中遇到問題我們可以無縫切換回訓練工程重複前面的步驟:

圖 11 - 端側部署與除錯

推訓一體工作流較為完整的解決了端側演算法訓練與部署割裂的問題,其中訓練部分通過端雲結合的手段讓開發者無需感知端和雲的差異,推理驗證部分藉助三端一體和工作臺強大的除錯能力讓演算法可以在端側獨立進行除錯和部署。目前這些能力均已開放,你可以在 https://www.mnn.zone 下載 1.6.0 及以後版本的 MNN 工作臺進行體驗,推訓一體的操作方式可參考 MNN 工作臺推訓一體平臺操作手冊。

結語

在過去這半年,MNN 工作臺始終秉持「解決使用者真正的需求」的理念,不斷與工程、演算法同學深入交流,溝通其在端側 AI 研發中遇到的種種問題。從除錯、真機驗證到實時效能評測,一系列功能的推出都展現了我們在解決端側 AI 研發全鏈路問題上的決心和能力。而隨著整合專業級訓練能力的 MNN 工作臺版本釋出,相信會給大家帶來更好的使用體驗。

關注【阿里巴巴移動技術】微信公眾號,每週 3 篇移動技術實踐&乾貨給你思考!

相關文章