首頁>科技>

今天分享內容包括三部分,第一是端智慧整體趨勢和淘寶應用現狀,第二是淘寶在應用端智慧過程中面臨的問題和挑戰,以及我們的應對和解決思路,我們構建了端到端的完整技術體系,第三是開源推理引擎 MNN 的最新情況。

01、端智慧趨勢和現狀

端智慧簡單說就是在端側做機器學習或者深度學習模型的推理執行及上層應用。端智慧相比雲端智慧具有低延時,保護資料隱私,節省雲端計算資源等優勢。其實大家在日常生活中已經用到了很多端智慧應用,比如手機上拍照的 AI 攝像,人臉解鎖 FaceID ,以及短視訊 App 中各種 AR 特效等。

那麼,為什麼會出現端智慧,以及他底層演化邏輯是什麼?首先這兩年有一個明顯趨勢就是深度學習從實驗室往產業落地方向演進,海量終端裝置成為落地最佳載體,手機是覆蓋使用者最多的裝置,很容易做到規模化應用。除了這個大的趨勢,我們覺得影響端智慧演進還有三個關鍵要素,分別是算力、演算法和場景。

算力:手機的算力不斷增長,每年 CPU/GPU 效能也有非常大的提升, NPU 更是已經成為標配,並且有數量級上效能提升。

演算法:模型壓縮技術不斷成熟,其中量化已經非常成熟,基本可以實現不降低精度的情況下將模型縮小為 1/4 甚至更小,另外小模型的架構設計也越來越成熟,面向移動端的各種網路模型不斷出現,面向移動終端有限資源的演算法模型設計也逐步成熟。

場景:就手機本身來說,AI 成為手機的熱點和賣點,像 AI 攝像,人臉解鎖等已經成為手機的基礎功能。從 App 應用場景來說,近來刷爆我們朋友圈的應用都是跟 AI 相關的,有 Face App ,垃圾分類識別,以及 Zao App 。目前有些軟體更多的是使用雲端 AI 能力,需要把人臉照片上傳至服務端做換臉,容易出現數據隱私問題。如果用端 AI 來做,不用上傳你人臉圖片,很自然解決資料隱私問題,只是現在端上算力不夠,做不到這樣的應用。

我們可以預期的是,隨著算力的增強,演算法的成熟,基於端智慧也會出現越來越多有趣、好玩的一些創新應用。

現在集團裡越來越多的 APP 開始應用端智慧,拿手淘來說,端智慧已經成為我們的核心基礎能力,助力業務發展的創新和突破。在阿里巴巴有 20 個以上的 APP 在使用端智慧,拿手淘來說,我們已經上線了 10+個場景,有 25+ 個模型在跑,每天執行次數超過 500 億次,在手淘搜尋推薦等重要場景也在使用端智慧做更加精準搜尋推薦,今年雙 11 也會大規模使用。

02、淘寶端智慧體系建設

我們做了這麼多應用,那在應用過程中到底碰到了哪些問題和挑戰?

首先從 APP 使用端智慧整個鏈路上面看,一般都會有資料採集,做資料清洗或者資料標註,然後做演算法模型設計,接著在服務端模型訓練,之後進行模型壓縮和轉化,其次在部署端上面做推理,最後產品落地去使用。整個鏈路較長,涉及雲端和客戶端,以及需要演算法工程師和移動開發工程師配合才能完成相關應用落地。

我覺得端智慧應用有三個大的挑戰,第一:整體鏈路比較長,而且其中每個節點出現問題都會阻礙端智慧應用落地,特別像 17 年演算法模型在端側推理部署執行成為瓶頸,所以我們開發 MNN 去解決這個問題。第二:演算法和工程協同,需要演算法工程師和移動工程師通力合作,但是兩者存在天然的 gap 需要互相協同配合。第三:端側環境複雜,碎片化的裝置,系統,各種相容性問題。針對這些問題,我們構建一套端到端的全鏈路部署方案,下面具體展開講解。

這是我們的技術大圖,主要有三部分組成:

客戶端引擎 & 框架 包括機器學習演算法庫,深度學習推理引擎 MNN,演算法快速迭代的 Python VM 容器,以及上層的演算法能力集合和行業解決方案。離線配套工具 包括模型轉換,模型壓縮工具,以及配套的效能測試,除錯工具等。雲端平臺 包括模型轉換和壓縮服務,以及模型管理,部署,運維監控的各種系統。

下面將會具體展開講解推理引擎,開箱即用演算法集,行業解決方案三塊內容。

首先來看下推理引擎 MNN 的技術挑戰,第一碎片化,網路模型,訓練框架,終端裝置都是碎片化的。第二資源受限,終端裝置不像服務端,他的記憶體,算力比較有限。第三高效能,像人臉檢測等實時性要求比較高,所以在資源受限情況下還需要做到高效能,這也是巨大的挑戰。

推理引擎,就是找到一種方案實現不同模型在不同裝置上最高效的執行。這裡有三種不同設計思路。

一種是類似 TVM 的自動化搜尋方案,考慮模型的特徵,比如卷積核大小,考慮部署裝置的硬體特效,比如記憶體,算力,然後結合兩者找到一種最高效的執行方式。這種方式效能高,但成本也高,因為需要離線為每一種裝置做遍歷調優,找到最高效的執行方式,比如手淘覆蓋的手機比較多,所以成本非常高。

第二種方式是純手工優化,主要是針對特定的卷積核大小做優化,比如 3x3 卷積,所以專門優化的網路模型效能比較好,沒優化過的效能會差一些,另外未考慮硬體特性,所以整體效能一般,成本也較高,因為需要遍歷情況比較多。

第三種方式就是我們 MNN 採用的方案,我自己叫半動搜尋優化,通過 NC4HW4 記憶體佈局將不同卷積核做對齊做統一矩陣計算優化,再根據硬體特性排程做選擇最優方式執行,我們現在更多是基於規則,後續演化考慮做線上調優。整體來說效能比較好,成本也比較低。

這是 MNN 整體架構圖,左邊離線部分包含模型轉換和模型壓縮,將各種訓練框架模型轉換成 MNN 的模型;右邊是線推理部分,MNN 目前支援 CPU,以及 GPU 對應的 OpenCL,Vulkan 等 backend 。

以圖上為例, Pixel 2 手機支援 CPU ARM 和 Vulkan backend ,小米 6 支援 CPU ARM,OpenCL , Vulkan backend ,Mate20 支援 ARM82 架構的 CPU backend,以及 OpenCL , Vulkan backend 。

在預推理環節,我們根據模型結構資訊,以及裝置的硬體資訊 找到一種最快執行方式。比如 Pixel 2 上使用 CPU 和 Vulkan 執行,小米 6 使用 CPU 和 OpenCL 執行,Mate 20 上使用 ARM82 指令和 OpenCL 執行。這是粗粒度的 CPU 和 GPU 執行方式選擇,更細一點比如同樣 CPU 執行,我們有 winogrand,strassion 矩陣計算演算法會根據模型和硬體特性選擇不同分塊,這樣實現最快執行。

MNN 很早基於 iDST 量化演算法支援了模型壓縮能力,但是之前的量化工具的產品化做的不是特別好,過去幾個月我們重點優化了量化工具,儘量做到簡單易用。目前無訓練的量化工具我們已經發布,一行命令就可以簡單實現量化,精度下降 1% 以內,檔案大小減少到原來的 1/4 ,推理速度提升 30~70% 。另外,我們正在研發帶訓練能力的量化方案,這裡實現跟業界方案不太不一樣,我們為了解決碎片化的訓練框架的問題,現在是直接在 MNN 上新增訓練能力,這樣可以使用 MNN 模型做 Finetune 訓練。

前面介紹了推理引擎 MNN ,主要解決演算法模型端側執行問題。但是移動開發對演算法模型其實不是很懂,以人臉為例,他更希望有個人臉 API 給我呼叫一下使用,所以我們做了開箱即用演算法集合,裡面有人臉,人體姿態,物體識別等內容。

但是後來我們發現即使有了人臉特徵點,要做一個 AR 人臉特效這樣的應用還是有很大的成本。所以我們又做了一個 AR 特效解決方案,可以簡單方便做一個 AR 貼紙特效。

具體來說,通過一個 IDE 編輯器做所見即所得的特效編輯,然後匯出一個資原始檔包,對應端上有個渲染 SDK 解析資原始檔做特效還原。但從業務場景來說,手淘畢竟不是一個短視訊 App , AR 貼紙對業務價值有限,所以我們目前 AR 方案更多是結合美妝行業,家居行業等做商品相關的 AR 應用,提升使用者購物體驗。

說完 AR 特效方案,再看一個大資料相關的解決方案。在原有的大資料體系裡面,客戶端更多是一個數據採集的角色,服務端做大資料計算和挖掘,然後做例如個性化推薦的應用。

但是隨著端算力增強,端上可以跑機器學習和深度學習模型,我們做了端側的資料特徵計算框架,支援做資料特徵提取,模型計算等工作。其中一個應用就是情景計算,利用端側多維度的資料,可以準確刻畫使用手淘的情景資訊,比如你是在走路還是坐車,還是躺在床上。

另外,根據你在頁面的停留時長,瀏覽軌跡可以識別你對商品的喜好程度,從而做更加精準的推薦。目前這塊已經在手淘的搜尋推薦廣泛使用,並且取得了不錯的效果。

接下來具體看幾個在手淘這邊的典型應用場景,第一個是拍立淘,拍立淘是一個以圖搜商品的服務,原來是直接拍照上傳雲端做識別,這樣整體耗時比較長,服務端成本比較高。現在已經把越來越多的部分放到端側來做,比如物體檢測,分割等放到端上來做,然後再上傳雲端做識別召回,相比原來有更好的使用者體驗,也節省了服務端成本。

這是一些其他典型應用,第一個是基於使用者實時意圖識別做互動式搜尋推薦,第二個是 AR 試妝,第三個閒魚做的一個智慧釋出,第四個是我們在智慧硬體的若干應用。

03、MNN開源進展和應用

接下來講下 MNN 開源相關的情況,下面是 MNN 的發展歷程,我們 17 年 10 月正式啟動,經歷 18 年雙十一洗禮,今年雙十一有更大規模的應用。

這裡有幾個數字,每天 MNN 在手淘推理次數遠大於 2 億次, Crash 佔比 <0.1% , 業界應用 >20 個, issue 修復 260 。所以可以說, MNN 是經過多場景海量計算驗證的,它的穩定性和可靠性值得信賴。

MNN 的核心特點是通用性,輕量性,高效能,易用性。

目前無論是效能,裝置支援,訓練框架支援,OP 支援等方面我們都是業界領先。

MNN 的易用性也是我們非常重視的一個點,Python 是演算法工程師友好的語言,所以我們構建了 Python 工具鏈,方便演算法同學測試和驗證。目前我們提供模型轉換,模型壓縮,模型結構視覺化,以及支援 OP 列表查詢的工具,下面是具體安裝命令,pip install MNN ,然後可以選擇對應的工具使用,右側是模型結構顯示的一個示例。

MNN 開源以後,現在已經成為阿里巴巴的官方推薦專案,也很高興看到業界同學用 MNN 來做車牌識別,物體檢測,車輛檢測等各種應用,特別還有同學寫了很多介紹和使用文件。這裡一併表示感謝,也希望更多的同學能夠參與進來。

關於 MNN 後續演進有三點內容想特別和大家分享。

精彩回顧

  • 整治雙十一購物亂象,國家再次出手!該跟這些套路說再見了
  • 下一個風口:移動社交時代的電商新形態