做者:字節跳動技術——白崑崙前端
AI技術如今已經覆蓋到了互聯網的方方面面,在雲端的應用已經很是普遍和成熟。爲了追隨人工智能的浪潮,各大廠商也在不斷增強移動設備的AI能力,主要體如今如下方面:算法
通過這幾年的飛速發展,在終端部署AI能力漸漸步入了大衆的視野,端智能的概念應運而生,旨在提供在終端設備上使用AI能力的完整框架。相比雲端,端智能具有如下優點:安全
在端智能的應用方面,Google、Facebook、Apple等巨頭已經走在了前列。Google提出了Recommendation Android App的概念,根據用戶興趣進行內容推薦。Apple的Face ID、Siri推薦也都是端智能應用的表明。markdown
在國內,阿里、騰訊等企業也前後進行了端智能的嘗試。阿里在手淘中寶貝列表重排、智能刷新、跳失點預測、智能Push、拍立淘(以圖搜圖)等多個場景實現了端智能的落地,並推出了MNN神經網絡深度學習框架。騰訊則推出自研的NCNN框架,並在醫療、翻譯、遊戲、智能音箱等領域普遍應用端智能技術。網絡
一個典型的端智能開發流程如圖2-2所示。首先在雲端利用收集的數據進行算法設計和模型訓練,並輸出模型。此時的模型並不適用於移動設備,需經過模型轉換和壓縮轉換爲移動端推理引擎所支持的格式。最後經過雲端配置,將算法和模型動態部署到目標設備上。在終端設備上,在合適的使用場景和時機觸發推理流程,根據模型進行輸入數據的整理並傳遞至推理引擎,獲取並解析推理結果後進行相應的邏輯調整和反饋。架構
在移動設備部署端智能並不是易事,現階段的開發流程存在諸多的問題須要咱們一一解決。框架
按照典型的端智能開發流程,首先須要算法工程師在雲端訓練和輸出模型,模型決定了數據的輸入、輸出格式。下一階段,客戶端工程師需進行端側的開發來適配當前模型,包括輸入數據的收集和整理、輸出數據的解析等。開發完畢後,再交由測試工程師進行後續的質量保障。這期間須要多個角色的協同和溝通,總體開發鏈路冗長且低效。機器學習
正如上面所提到的,一旦模型肯定後,其輸入輸出就遵循固定的格式。若是模型想調整輸入數據的策略,就必定要同時修改客戶端邏輯。所以,線上驗證與功能迭代的靈活性受到了極大的限制,無形中拉長了整個功能上線週期。此外,不一樣端智能應用場景(CV、推薦等)也存在着較大的需求差別,如何知足不一樣的業務場景需求也是須要解決的頭部問題。oop
構建一套完整的端智能運行環境並不是易事,除了在雲端進行模型的訓練和下發,還須要在客戶端進行數據的收集、存儲、處理,硬件資源的評估與調度,推理引擎的選擇,操做系統的兼容,推理任務的管理與調度等等。這些問題無形之中提升了端智能應用的門檻,如何可以屏蔽這些複雜的端上環境也是端智能目前面臨重要挑戰。性能
爲了解決上面的問題,Pitaya與MLX團隊進行了深度合做,共建了一套從端(雲端)到端(終端)的全鏈路動態部署方案。MLX是雲端的模型訓練開發平臺,提供模型訓練、轉化、調試、發佈、A/B等能力。客戶端Pitaya SDK則提供特徵工程、推理引擎、算法包管理、任務管理、監控等端上能力。二者深度整合,覆蓋了端智能流程的各個環節,大大下降端智能的應用門檻。
在介紹Pitaya前,先着重介紹一下MLX平臺。在進行模型訓練的過程當中,咱們會碰到不少的環境差別,好比不一樣的數據源的存儲方結構、數據格式,不一樣的機器學習框架,以及不一樣操做系統環境和基礎設施能力的搭建。MLX平臺就是爲了解決上面的問題而誕生的。它提供了一個在雲端實現模型訓練、轉換並將其最終產品化的服務平臺,經過普遍接入了各種計算框架和服務平臺,省去了複雜的環境搭建工做。
MLX的架構如圖3-1-1所示:
Pitaya將自身的工做流與MLX平臺特性進行了深度的整合,以下圖所示。在傳統的端智能開發流程中,雲端僅負責模型的輸出,可以動態部署下模型。而在Pitaya工做流中,「算法包」是一個完整資源的集合。「算法包」包括推理過程當中使用到的模型,也包括算法邏輯及其依賴庫信息,這些全部的內容被統一打包成爲「算法包」。若是客戶端同步了算法包內容,且具有算法包運行所需的各項能力,那麼就能夠在運行該算法包,實現一個完整的推理流程。
算法包的開發過程當中,能夠臨時生成測試算法包。經過掃碼將宿主App與Pitaya-MLX平臺創建數據通道,推送測試算法包到客戶端,經過真機運行和調試算法包,輸出的日誌信息也會在MLX的IDE環境展現,從而實現雲端調試的完總體驗。得益於Pitaya與MLX深度融合,算法工程師再也不依賴客戶端工程師進行任何開發,就能夠獨立完成算法在端上的運行與調試,極大的提高了算法開發的效率。
當算法工程師完成算法包的調試後就能夠將當前項目打包成一個算法包。每一個業務場景都有一個當前App下的惟一Business標識,算法包與Business綁定。在Pitaya-MLX發佈平臺可針對某一Business業務,從App、App版本、OS版本、渠道等多個維度對算法包的下發進行配置與管理。發佈平臺還與A/B平臺實現了數據打通,能夠實現無縫的線上實驗對比,大大加快業務線上效果的驗證。
除了上面提到的常規配置能力,Pitaya-MLX發佈平臺還支持對當前設備機型進行性能打分,根據打分的結果來進行算法包的差別化下發。這種部署方式能夠更加細粒度的對線上設備性能進行劃分,針對高性能或支持某些AI加速的設備下發精度更高的模型,而針對性能較弱的設備爲了追求更好的使用體驗,則部署相對精簡的模型。
Pitaya中一個核心能力就是「特徵工程」。端上推理通常須要從原始數據生成輸入到模型中的特徵,再由模型推理獲得結果。若是須要業務方自行收集和保存原始數據,其工做量是巨大的。特徵工程的做用就是幫助業務方無侵入式的收集端上的用戶特徵數據,用於後續的推理預測。Pitaya特徵工程與Applog SDK(事件統計SDK)打通,支持在算法包中對推理過程當中須要使用到的的Applog Event進行配置,當算法包在本地生效時,Pitaya就能夠根據算法包的配置收集數據。同時,Pitaya也提供定製化的接口,用於關聯用戶行爲上下文,例如:點擊、曝光、滑動等。在算法包運行過程當中,能夠經過特徵工程的能力獲取用戶的原始數據,經過數據的處理生成模型須要的輸入數據。這種數據收集的方式較傳統鏈路具有更好的動態性和靈活性,讓業務方從繁重的數據處理工做中解放了出來。
此外,特徵工程還支持上傳指定的數據至MLX平臺,用於雲端的模型訓練,造成一個完整的數據閉環,如圖3-2-1。
當一個算法包同步到了終端設備後,觸發算法包的運行能夠有兩種方式。
- (void)runBusiness:(NSString *)business
input:(PTYInput *_Nullable)input
config:(PTYTaskConfig *_Nullable)config
taskCallback:(PTYTaskCallback _Nullable)taskCallback;
複製代碼
每觸發一個算法包的運行實際上就至關於建立了一個任務(Task),Pitaya內部的任務管理模塊會對任務進行統一的接管與處理。算法包是在Pitaya的運行容器中執行的,該容器爲每個任務提供獨立的運行環境,並經過Pitaya提供的接口來進行特徵工程數據的存取和模型推理等。Pitaya對推理流程和接口進行了高度的抽象,支持不一樣類型的推理引擎的集成(ByteNN、ByteDT、TFLite),最大程度上的知足了不一樣業務方的使用需求,下降項目遷移到Pitaya框架的成本。
爲了實現一鍵集成的使用體驗,Pitaya內部打造了一套對任務進行全面、細緻的監控體系。監控內容涵蓋如下幾個方面:
Pitaya SDK將以上指標進行了分類整理,依託於Slardar平臺的數據展示能力,每一個集成業務方均可以一鍵複製模板,在宿主App內創建完善的數據看板,真正作到開箱即用。
Pitaya是專門爲移動端打造的端智能一體化方案,與傳統方案相比,具有如下優點:
目前,字節跳動內已經有抖音、頭條、西瓜等衆多產品線基於Pitaya開始了端智能的實踐和探索,在此過程當中咱們也與業務方持續溝通,不斷打磨產品和使用體驗,並對將來Pitaya的發展方向進行以下規劃:
字節跳動移動平臺團隊(Client Infrastructure)是大前端基礎技術行業領軍者,負責整個字節跳動的中國區大前端基礎設施建設,提高公司全產品線的性能、穩定性和工程效率,支持的產品包括但不限於抖音、今日頭條、西瓜視頻、火山小視頻等,在移動端、Web、Desktop等各終端都有深刻研究。
就是如今!客戶端/前端/服務端/測試開發 面向全球範圍招聘!一塊兒來用技術改變世界,感興趣能夠聯繫郵箱 chenxuwei.cxw@bytedance.com,郵件主題 簡歷-姓名-求職意向-電話。