天天看點

淘系端智能技術體系概述

相比雲側智能,端智能具有低延時、保護資料隐私、節省雲端計算資源等顯著優勢。

背景

近年來,以深度學習為代表的新一代人工智能技術得到了快速發展和廣泛應用,模型訓練和模型推斷基本都在雲側完成。但随着移動裝置算力的提升、模型壓縮技術的成熟,模型推斷在終端裝置運作成為可能,端智能(On-Device AI)應運而生。

端智能是指算法模型在終端裝置上運作及其上層應用。其中,終端裝置是指以手機為主的各種智能裝置,算法模型多數是指深度學習模型。相比雲側智能,端智能具有低延時、保護資料隐私、節省雲端計算資源等顯著優勢。目前手機上的智能攝像、人臉識别、增強現實(AR)特效等端智能應用已經非常普遍。據全球權威IT研究與顧問咨詢公司高德納(Gartner)預計,到2022年,80%的智能手機将内置人工智能技術。

阿裡巴巴内部豐富的業務場景為技術創新提供了肥沃的土壤,手機淘寶作為國内規模最大的電商App之一,早在2016年就在拍立淘場景中進行端智能相關應用實踐。經過多年探索、實踐和沉澱,我們目前已經建構了相對完整的端智能技術體系,并且在拍立淘、直播内容了解、AR商品導購等場景獲得規模化應用。據不完全統計,阿裡巴巴集團内部已經有超過30個移動App應用了端智能技術,手機淘寶内部應用場景超過25個。

問題和挑戰

淘系端智能技術體系概述

圖1 端智能業務應用流程

端智能在手機App上的應用開發鍊路如圖1所示。首先是問題定義,通過需求分析,識别業務問題并将其拆解為AI算法問題;其次進行資料采集、模型設計、訓練、壓縮和轉換;最後将模型部署到端上,當業務應用時,加載算法模型做推斷運作。端智能全鍊路較長,涉及服務端和移動端、算法開發和移動開發,面臨的核心問題和主要挑戰如表1所示。

核心問題 主要挑戰
算法模型在端側高效運作及模型大小問題;算法前後處理庫(OpenCV、Numpy等)在端側缺失問題 終端裝置和系統碎片化,終端計算、記憶體等資源有限;訓練架構碎片化,模型過大
算法研發遇到的全鍊路問題(壓縮、轉換、校驗、調試、部署、運作),模型快速疊代和運作品質問題 算法開發和移動開發協作效率低,算法疊代慢;移動App穩定性要求高,版本釋出周期長,修複問題慢
算法應用時門檻過高,難以大規模化應用落地 端智能應用場景碎片化,業務團隊算法人員缺失

表1 端智能面臨的核心問題和主要挑戰

端智能技術體系

淘系端智能技術體系概述

圖2 端智能技術體系

針對上述問題和挑戰,淘系端智能團隊經過長期思考和實踐,建構了端智能完整技術體系,如圖2所示,其設計的基本思想和特點是:

  1. 跨生态:通過基礎層建構深度學習推理引擎等高性能計算庫,解決模型運作和前後處理計算問題,覆寫碎片終端硬體和系統生态;
  2. 全鍊路:通過系統層平台化建設輕量級的深度神經網絡推理引擎MNN(Mobile Neural Network)[2]工作台、MNN運作時和MNN服務端,解決算法模型研發全鍊路問題,以及運作期算法任務計算、資料和排程問題;
  3. 低門檻:通過方案層配合算法人員沉澱開箱即用算法集和領域解決方案,降低算法門檻,實作多App、多場景快速複制接入應用。
  4. 接下來:我們将圍繞阿裡自研并開源的深度神經網絡推理引擎MNN ,深入解讀端智能技術體系。

▐  基礎層

端智能技術體系的基礎層主要包含支援模型運作和前後處理的一系列計算庫,目前在終端運作的算法模型主要以深度模型為主,是以解決深度模型在終端裝置高效運作的問題尤為重要,為此我們自研并開源了端側推理引擎MNN,如圖3所示。

淘系端智能技術體系概述

圖3 端側推理引擎MNN全景圖

▐  推理引擎面臨的挑戰

推理引擎的本質是為了實作異構模型在異構的裝置和系統上最高效地運作,主要面臨以下兩方面的挑戰。

環境碎片:(1)網絡模型碎片化,存在卷積神經網絡(Convolutional Neural Networks,CNN)、循環神經網絡(Recurrent Neural Network,RNN)、生成式對抗網絡(Generative Adversarial Networks,GAN)等不同結構;(2)訓練架構碎片化,存在TensorFlow、PyTorch、PaddlePaddle、MindSpore等多種不同的深度學習架構,産生不同的模型格式;(3)軟硬體環境碎片化,存在ARM CPU、GPU、NPU等硬體,同時存在iOS、Android多版本的作業系統。

資源受限:移動裝置本身的算力、記憶體、存儲等資源有限,且不具備雲側橫向擴充能力。在算力方面,雖然移動裝置的算力相比之前已有明顯提升,但相比雲側叢集算力還存在好幾個數量級的差距。比如華為麒麟970 NPU算力有1.92 TFLOPS,而谷歌TPU叢集算力已達EFLOPS級别。在記憶體方面,以iPhone12 Pro為例,運作記憶體僅有6 GB。在存儲方面,目前移動裝置的存儲大小有64 GB、128 GB、256 GB不等,具體到每個App的存儲空間更加有限。

▐  MNN的基本設計思路

針對上述兩大挑戰,推理引擎的目标就是找到一種技術方案,向上覆寫多種訓練架構和模型結構,向下覆寫多種異構裝置和作業系統,同時在特定裝置上實作極緻性能。MNN基本的設計思路如下。

歸一化:針對訓練架構碎片化,通過模型轉換,将不同訓練架構的模型格式轉換成MNN格式,再進行統一的優化、壓縮。針對移動裝置碎片化問題,通過幾何計算歸一化算子實作,提供20多個基礎算子,其他算子則通過基礎算子組合而成。

差異化:針對硬體CPU/GPU/NPU計算單元、記憶體等方面的差異性,一方面,幾何計算中的基礎算子針對異構硬體做差異化極緻優化,比如針對各個CPU、GPU後端,手工實作彙編代碼,優化矩陣乘、彙編等核心算子,接近對應硬體的理論計算量,擷取極緻性能;另一方面,通過半自動搜尋、自動調優等方式,結合硬體和模型的特性,選擇合适的計算方式,進而獲得最高效的模型運作方式。

▐  MNN的核心功能子產品

MNN的核心功能子產品為模型轉換、模型壓縮、半自動搜尋、自動調優和幾何計算。

模型轉換:是推理引擎的必要子產品,關鍵是如何做到轉換的完備性、正确性和易用性。(1)完備性:提供TensorFlow/TFLite/PyTorch/ONNX/Caffe模型轉換工具,實作大量訓練架構算子;(2)正确性:提供自動校驗流程,及時發現轉換錯誤問題;(3)易用性:與可視化工具Netron內建,且支援Windows、Mac系統。

模型壓縮:這是降低模型大小和計算量的有力手段,可有效應對移動終端算力、記憶體、存儲等資源受限情況,關鍵問題是如何做到既降低模型大小又能保證模型精度。經過長期實踐,MNN目前支援的模型壓縮方案主要是量化和稀疏剪枝的方法。量化分為訓練量化算法和離線量化算法。訓練量化算法有8比特訓練量化和低比特量化,如Overflow-aware量化、權值7比特量化,使得模型在推理的過程中可以更多次地使用高效的硬體乘加指令集而不溢出8比特整數的位寬,在保證模型推理精度、降低記憶體占用的情況下性能提升30%左右。通過TensorFlow和PyTorch插件提供訓練量化算法,支援在這兩個訓練架構中無縫訓練使用。離線量化算法分為KL/ADMM量化、權值量化、EMA量化,相關算法在MNN模型轉換工具中有所支援,可以做到轉換時壓縮。稀疏剪枝算法将模型層間的連接配接依據一定的規則置零,并對模型進行稀疏編碼,進而獲得模型體積的降低和性能的提升。按照作用機制,稀疏剪枝分為随機稀疏和分塊稀疏,其中分塊稀疏可充分利用硬體SIMD指令的并行度,在稀疏度(零值權重比例)為90%時,與稠密計算相比可獲得3~4倍的性能加速。

半自動搜尋:這是一種在引擎運作時,根據硬體資訊和模型結構資訊進行動态決策,選取最高效運作方式的技術方案。引擎需要預先完成不同硬體與不同算子的實作方案,并相應地設定損失評估公式。在加載模型時,根據裝置硬體資訊、模型算子、輸入資訊,按評估公式計算這些方案的計算性能,選擇最優實作。為了支撐引擎運作時具有的半自動搜尋能力,MNN提出了名為“預推理”的特殊處理過程,即一次模型推理運作。在預推理過程中,會提前進行算子的計算政策選擇和資源配置設定,基于這些配置,可以提升該模型後續的推斷運作性能。将半自動搜尋往前再推一步,是MNN在移動端GPU後端中所使用的自動調優(autotuning)優化手段。移動端GPU在記憶體、運算、排程各方面存在較多不同的優化元素,如矩陣乘計算分塊的複用量、局部線程并發量等。與CPU不同的是,這些優化的元素與模型和具體的GPU硬體存在強關聯,而無普适的規律,是以,需要在運作時的“預推理”步驟進行自動調優,耗時2~10秒不等,即通過多次試跑自動嘗試上述優化元素的組合,自動找出目前硬體最佳的算子實作。

幾何計算:MNN所需要支援的硬體後端呈現碎片化和多樣性特性。有移動端ARM CPU(ARMv7、ARMv8、ARMv8.2)/GPU(OpenCL、OpenGL、Metal)/海思NPU,服務端x86 CPU(SSE、AVX、AVX2、AVX512)和NVIDIA GPU,而每個硬體後端都需要實作超過100個算子。如何低成本地實作多後端高性能算子是極具挑戰的工作。幾何計算是一種從根本上解決碎片化環境下算子優化問題的技術方案,其基本思想是:在網絡中張量形狀已知的前提下,将算子的坐标映射關系固化為一系列資料,進而将衆多算子歸一化為少量核心算子。

設MNN支援的算子數為N,後端數為B,則實作所有算子所需工作量為O(BN)。幾何計算的核心目标是通過算子拆解化歸,使用少數核心算子組合實作其餘算子,進而将O(BN)工作量降至O(B) +O(N)。具體而言,如圖4所示,任意算子實作可拆分為形狀計算(即計算輸出張量次元,複雜度為O(N))、資源配置設定(即在相應後端申請記憶體,複雜度為O(B))以及内容計算(即算子自身邏輯,複雜度為O(BN))。内容計算進一步拆解為複雜度為O(BN)的坐标映射和複雜度為O(B)的基礎算子,如Exp、Add、Multiply、MatMul、Conv。幾何計算的核心是将坐标映射拆解為算子相關的區域資訊計算邏輯(即圖示的“幾何計算”)和硬體相關的資料搬運邏輯(即圖示的“光栅算子”)。光栅算子根據給定的輸入輸出張量的區域計算邏輯,進行實際的資料搬運,得到輸出張量。

淘系端智能技術體系概述

圖4 幾何計算示意圖

▐  MNN的特性

深度學習引擎MNN具有通用性、高性能、輕量性、易用性四大特性。

通用性:MNN支援TensorFlow、TFLite、Torchscript、ONNX、Caffe等主流模型格式,并支援CNN、RNN、LSTM、BERT等常用網絡結構以及動态形狀、控制流等動态模型機制。此外,MNN支援179個TensorFlow算子、71個TFLite算子、85個Torchscript算子、113個ONNX算子、58個Caffe算子,同時支援171個ARM CPU算子、154個OpenCL算子、154個Vulkan算子和153個Metal算子。在異構系統方面,支援iOS 8.0+、Android 4.3+和具有POSIX接口的嵌入式裝置,以及PC作業系統(Mac OS、Windows、Linux)。

高性能:MNN支援的異構後端包括ARM CPU(v7/ v8/ v8.2)、移動端 GPU(OpenCL/Vulkan/Metal)、NPU(華為海思NPU、蘋果Apple Neural Engine)、x86、CUDA。MNN在各個硬體後端上性能優異,位于業界前列[3, 4]。

輕量性:(1)引擎輕量化方面,在iOS平台上,ARM v7+ARM64 Framework大小為12.8 MB左右,連結生成可執行檔案增加1.1 MB左右,metallib檔案400 KB左右;Android ARM64平台上,動态庫(.so庫)大小770 KB左右,OpenCL庫180 KB左右。(2)模型輕量化方面,MNN提供由量化和稀疏剪枝算法組成的模型壓縮工具箱,其中量化算法可在模型精度基本不下降的情況下将模型大小壓縮75%左右,同時相對于浮點運算性能提升約30%;而稀疏剪枝算法可以實作在稀疏度90%時獲得3~4倍的性能加速。

易用性:MNN支援C++、Object-C(iOS)、Java(Android)、Python、JS多語言應用程式接口(API)。此外,MNN還提供了完備的文檔和工具集(模型轉換、模型壓縮、模型可視化),具體見MNN開放網站。

▐  系統層

系統層主要通過平台化建設思路,系統性地解決研發期算法任務部署的效率和品質問題,以及運作期算法任務運作時的計算、資料和排程問題。

在研發期,主要存在以下問題。(1)疊代效率:如圖1所示,算法人員從訓練完模型到真正部署到端側運作,還涉及模型轉換、壓縮、真機調試、業務封裝、內建釋出等工作,中間需要算法、工程和測試人員互相協作,根據實踐經驗,整個過程往往以月度來計算;(2)任務品質:移動App因其版本釋出慢、修複問題困難等特點,對端智能算法任務的穩定性和性能提出更高要求,如果算法人員對移動App研發不熟悉,對工程實踐中的穩定性、性能等内容關注不足,将影響任務品質。

在運作期,主要存在以下問題。(1)計算:計算單元需要考慮移動裝置天然碎片化和差異化的軟硬體生态。端側運作的算法任務除模型推斷運作外,往往存在前後處理計算,涉及圖像處理、數值計算等,在若幹場景下還需要做端和雲之間的計算中繼。(2)資料:端側算法任務計算的中間和最終結果往往需要上傳至雲端使用,雲側資源資料也需要下載下傳到端側作為算法任務的輸入,是以需要做好資料的上傳下達以及為算法提供标準化的資料服務。(3)排程:雲-端之間排程,面向海量差異化裝置需要提供個性化的部署服務,支援按人群、裝置、功能等多元度進行釋出;端内多任務間排程,算法任務運作與移動App前台使用者操作存在競争,需要選擇合适時機運作,避免影響App前台使用者體驗。

淘系端智能技術體系概述

圖5 端智能系統方案

針對上述問題,淘系端智能團隊建構了由MNN工作台、MNN運作時和MNN服務端組成的系統方案,如圖5所示,基本設計思路是:

  1. 提供一站式研發平台軟體,将算法和工程開發方案解耦,讓算法實作獨立疊代,同時釋出前做模型精度和運作性能品質校驗,使算法任務運作品質可控;
  2. 提供多端一緻、端雲一緻的計算容器,标準化API接口屏蔽底層移動裝置硬體和軟體差異;
  3. 提供端雲一緻的資料中心,資料可視化規範資料内容,API接口标準化規範資料使用;
  4. 提供端雲協同的任務管理子產品,支援雲端之間任務個性化部署,以及端内任務排程。

MNN工作台主要包括:(1)一站式算法工作平台,支援算法模型訓練、壓縮、轉換、校驗、調試、部署全鍊路流程,其中模型生産鍊路主要通過本地界面串聯服務端訓練平台能力實作,模型壓縮、轉換、校驗主要由本地內建的MNN能力實作。(2)三端一緻的調試環境,支援iOS、Android、PC(MAC和Windows)三端一緻的調試環境,算法人員不僅能夠在PC上快速做任務開發,還能在真機上進行Python任務斷點調試、變量修改、日志查詢等操作,其技術實作主要是在MNN工作台中內建了基于Python虛拟機的跨平台MNN運作時環境。(3)部署品質保障機制,主要包括算法精度保障和裝置運作性能保障。其中算法精度保障主要通過建構服務端ARM推理服務,進行大規模資料樣本的算法精度驗證;裝置運作性能保障主要通過釋出前在高、中、低端真機驗證運作,系統收集耗時、記憶體等資料名額判斷是否符合釋出基準條件。

MNN運作時主要包括:(1)計算容器,基于Python虛拟機建構運作時環境,将底層圖像處理庫、機器學習庫、深度學習引擎、資料計算庫等基礎能力通過标準API展現;(2)資料中心,基于資料分層設計提供标準資料服務,規範化端側資料埋點、特征處理、資料存儲、資料讀取流程,實作流程标準化、可管控、可度量;(3)任務中心,提供算法任務管理、運作觸發、性能監控、運維熔斷等服務,保障算法任務在端側運作穩定可靠。

MNN服務端主要包括:(1)釋出中心,面向海量裝置提供個性化的部署服務,同時保障穩定性,做到可灰階、可監控、可復原,具體包含任務管理、安全釋出、監控運維、算法實驗等功能;(2)資料中心,面向算法提供标準化、規範化的資料服務,包括資料可視化、資料接入授權、資料使用消費統計等内容;(3)模型中心,面向算法提供模型訓練、模型轉換、模型壓縮、模型評測等服務,是MNN工作台的背景能力中心。

▐  方案層

端智能應用場景碎片化,業務團隊中往往缺少算法人員,而模型訓練等工作對于工程人員門檻太高,導緻應用落地困難。對此,解決思路是把通用的算法能力沉澱下來做成開箱即用的算法集,把在特定場景驗證過的端智能應用方案沉澱下來做成解決方案,并且通過系統層MNN工作台統一對所有使用者開放。

開箱即用算法集合:淘系算法沉澱PixelAI算法集,累計開發出超過30種功能。比如在人臉相關的功能方面,包含人臉檢測、人臉關鍵點、人臉屬性、人臉3D重建、人臉活體檢測、人臉比對等基礎功能,以及基于基礎功能形成了人臉美顔、美型、美妝等上層功能。同時,在圖像分割方面,覆寫人像分割、頭發分割、指甲分割、商品分割等。在人體和人手方面,覆寫人體姿态估計(2D和3D)、手勢檢測和動作識别、腳檢測跟蹤。

特定領域解決方案:淘系技術基于前述MNN工作台、MNN運作時、MNN服務端積累了若幹解決方案。當UC浏覽器、閑魚等其他App也有類似需求時,隻需對接MNN運作時和服務端,改造各自端側使用者界面(UI)部分和業務服務端系統,大約一周即可完成整體接入使用。部分案例包括(1)白屏檢測方案:基于圖像了解算法,在端側對異常實時檢測進行頁面展示;(2)圖像超分方案:基于端側實時超分算法能力實作低品質圖檔清晰化,既保證使用者體驗又節省流量;(3)反欺詐方案:基于端側高品質光學字元識别(Optical Character Recognition,OCR)算法能力,在聊天場景中進行實時防範,提示欺詐性的文字和對話,幫助使用者避免被詐騙。

典型應用場景

端智能技術已經在手淘拍立淘、直播内容了解、AR商品導購等場景具有規模化應用,下面簡要介紹端智能在AR商品導購場景中的應用。

使用者線上購物時基本通過圖文、短視訊了解商品資訊,相比于線下購物,線上購物一直存在無法試用商品的痛點。基于端側智能技術,在端上能夠做到實時精準的人臉、腳部檢測和追蹤,結合真實感渲染能力,為使用者商品試用提供了技術可能性。

目前,手淘天貓美妝等已建構“AR試”産品矩陣,包括AR試妝、AR試鞋、AR手表和眼鏡試戴等15項能力(如圖6所示),累計近5000萬使用者參與,幫助品牌帶來明顯轉化提升,使用者停留時長明顯增長。“AR試”給消費者帶來有趣好玩、具有真實感的購物體驗,讓使用者可以體驗商品上身的逼真效果,打造“先試後買”的購物新體驗,提高使用者購買決策效率。

AR試的基本方案是“端上實時檢測+端上實時渲染”,由于産品互動的強實時需求,AR試的技術難點主要是,手淘在超過300種不同手機型号上解決人臉檢測、腳檢測、手腕檢測等算法的實時性問題。針對這個問題,MNN推理引擎進行極緻的性能優化,最終實作AR試妝人臉檢測算法耗時小于5ms,AR試鞋檢測算法耗時10~50 ms,有效保障了産品方案的實時互動體驗。

淘系端智能技術體系概述

圖6 典型應用場景示例

總結與展望

目前,整個手機和移動應用正在經曆一次由端智能技術驅動的智能化變革,比如最新釋出手機的各類智能拍攝功能,最新釋出的蘋果iOS 15中也包含了基于端智能的實時翻譯,智能推送等功能。淘系技術從2017年開始在端智能方向重點投入,是行業裡少有的站在移動應用開發視角,面對移動裝置生态碎片、資源有限、發版周期長等問題,探索沉澱了一套端智能技術方案,并在手機淘寶等場景獲得規模化應用驗證。其基本思想:通過端側推理引擎MNN解決深度模型在碎片化終端運作問題;通過一站式端智能平台解決算法模型壓縮、轉換、調試、驗證等全鍊路問題;通過開箱即用算法集和解決方案降低算法門檻解決規模化應用問題。目前也存在一些問題需要後續解決,比如:碎片化訓練架構和終端異構裝置問題,特别是NPU的碎片化問題突出且缺少标準化;一站式平台解決整個算法鍊路還不夠順暢,特别是跟訓練的串聯;規模化應用還有提升空間,特别是殺手級的應用場景還缺失。

展望未來,宏觀上可以把移動裝置的智能化發展分為三個階段。階段一(雲上訓練+雲上推斷):在該階段的離線階段,移動端上傳資料,雲側聚焦海量資料,訓練産出模型;而在線上階段,移動端上傳資料,雲側加載模型,推斷運作,傳回結果。階段二(雲上訓練+端上推斷):該階段的離線階段與階段一中的訓練推斷相同,而線上階段通過模型壓縮将模型小型化後部署到端側運作。階段三(端雲協同學習):整個端和雲是高度協同的,雲側有大模型的訓練和推斷,端側也有小模型的訓練和推斷,雲和端之間不隻是有資料的通信,還有模型間學習梯度的通信。目前移動裝置智能化發展正處于第二階段,端智能技術在其中發揮巨大作用,并向第三階段演進。相信未來端雲結合會更加緊密,通過端雲協同終端裝置的智能能力将會更強大。

參考文獻

  1. Gartner. Gartner Highlights 10 Uses for AI-Powered Smartphones.  https://www.gartner.com/en/newsroom/press-releases/2018-03-20-gartner-highlights-10-uses-for-ai-powered-smartphones . 2018.1.
  2. Jiang X, Wang H, Chen Y, et al. MNN: A universal and efficient inference engine[C]// Proceedings of the Conference Machine Learning & Systems (MLSys), 2020.
  3. 淘系技術. MNN推理引擎最新實測,CPU、GPU性能全面領先 https://mp.weixin.qq.com/s/ITCNuAX-PO02LbplfRvhBg . 2020.7
  4. 淘系技術.談談MNN GPU性能優化政策.  https://mp.weixin.qq.com/s/vv2RZHcinKwPyq5_qzNxTg . 2020.3.
  5. MNN. www.mnn.zone.
  6. 淘系技術. MNN CPU性能優化年度小結.  https://mp.weixin.qq.com/s/mYphx3JKiOEGtWS-H9P7Dg . 2021.4.
  7. 淘系技術. 解析購物新體驗背後的移動AI+AR技術. https://mp.weixin.qq.com/s/RQ7RO8iTqWyA5SWHQBd5Gg . 2021.1.

繼續閱讀