今天分享內容包括三部分,第一是端智能總體趨勢和淘寶應用現狀,第二是淘寶在應用端智能過程當中面臨的問題和挑戰,以及咱們的應對和解決思路,咱們構建了端到端的完整技術體系,第三是開源推理引擎 MNN 的最新狀況。git
端智能簡單說就是在端側作機器學習或者深度學習模型的推理運行及上層應用。端智能相比雲端智能具備低延時,保護數據隱私,節省雲端計算資源等優點。其實你們在平常生活中已經用到了不少端智能應用,好比手機上拍照的 AI 攝像,人臉解鎖 FaceID ,以及短視頻 App 中各類 AR 特效等。github
那麼,爲何會出現端智能,以及他底層演化邏輯是什麼?首先這兩年有一個明顯趨勢就是深度學習從實驗室往產業落地方向演進,海量終端設備成爲落地最佳載體,手機是覆蓋用戶最多的設備,很容易作到規模化應用。除了這個大的趨勢,咱們以爲影響端智能演進還有三個關鍵要素,分別是算力、算法和場景。算法
算力:手機的算力不斷增加,每一年 CPU/GPU 性能也有很是大的提高, NPU 更是已經成爲標配,而且有數量級上性能提高。性能優化
算法:模型壓縮技術不斷成熟,其中量化已經很是成熟,基本能夠實現不下降精度的狀況下將模型縮小爲 1/4 甚至更小,另外小模型的架構設計也愈來愈成熟,面向移動端的各類網絡模型不斷出現,面向移動終端有限資源的算法模型設計也逐步成熟。網絡
場景:就手機自己來講,AI 成爲手機的熱點和賣點,像 AI 攝像,人臉解鎖等已經成爲手機的基礎功能。從 App 應用場景來講,近來刷爆咱們朋友圈的應用都是跟 AI 相關的,有 Face App ,垃圾分類識別,以及 Zao App 。目前有些軟件更多的是使用雲端 AI 能力,須要把人臉照片上傳至服務端作換臉,容易出現數據隱私問題。若是用端 AI 來作,不用上傳你人臉圖片,很天然解決數據隱私問題,只是如今端上算力不夠,作不到這樣的應用。架構
咱們能夠預期的是,隨着算力的加強,算法的成熟,基於端智能也會出現愈來愈多有趣、好玩的一些創新應用。框架
如今集團裏愈來愈多的 APP 開始應用端智能,拿手淘來講,端智能已經成爲咱們的核心基礎能力,助力業務發展的創新和突破。在阿里巴巴有 20 個以上的 APP 在使用端智能,拿手淘來講,咱們已經上線了 10+個場景,有 25+ 個模型在跑,天天運行次數超過 500 億次,在手淘搜索推薦等重要場景也在使用端智能作更加精準搜索推薦,今年雙 11 也會大規模使用。運維
咱們作了這麼多應用,那在應用過程當中到底碰到了哪些問題和挑戰?機器學習
首先從 APP 使用端智能整個鏈路上面看,通常都會有數據採集,作數據清洗或者數據標註,而後作算法模型設計,接着在服務端模型訓練,以後進行模型壓縮和轉化,其次在部署端上面作推理,最後產品落地去使用。整個鏈路較長,涉及雲端和客戶端,以及須要算法工程師和移動開發工程師配合才能完成相關應用落地。編輯器
我以爲端智能應用有三個大的挑戰,第一:總體鏈路比較長,並且其中每一個節點出現問題都會阻礙端智能應用落地,特別像 17 年算法模型在端側推理部署運行成爲瓶頸,因此咱們開發 MNN 去解決這個問題。第二:算法和工程協同,須要算法工程師和移動工程師通力合做,可是二者存在自然的 gap 須要互相協同配合。第三:端側環境複雜,碎片化的設備,系統,各類兼容性問題。針對這些問題,咱們構建一套端到端的全鏈路部署方案,下面具體展開講解。
這是咱們的技術大圖,主要有三部分組成:
下面將會具體展開講解推理引擎,開箱即用算法集,行業解決方案三塊內容。
首先來看下推理引擎 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 試妝,第三個閒魚作的一個智能發佈,第四個是咱們在智能硬件的若干應用。
接下來說下 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 來作車牌識別,物體檢測,車輛檢測等各類應用,特別還有同窗寫了不少介紹和使用文檔。這裏一併表示感謝,也但願更多的同窗可以參與進來。
▼開源地址:https://github.com/alibaba/MNN
關於 MNN 後續演進有三點內容想特別和你們分享。
最後,咱們的願景是期待能和你們一塊兒打造功能完善,性能極致,簡單易用的端側推理引擎,而且可以在行業中得到普遍應用。
本文做者:呂承飛(呂行)
本文爲雲棲社區原創內容,未經容許不得轉載。