端智能:面向手機計算環境的端云協同AI技術創新

近年來,隨著移動端設備軟硬件能力的進步,移動端的算力有了很大提升,同時面向移動端的機器學習框架和模型輕量化技術越來越成熟,端上的AI能力逐漸進入大眾視野,端智能在電商領域也開始逐步走向規模化應用。通過持續探索,京東零售技數中心團隊創新突破了端側高性能推理引擎、端側模型分發、異構環境及復雜任務兼容等技術卡點,完成了多個業務應用和落地,并獲得信通院邊緣計算產業全景圖行業認證。目前,京東眾多業務已集成至端智能SDK,流量分發、圖像識別等算法場景運行情況良好,日推理計算量已經達數億次,為用戶帶來了更好的購物體驗。

1、什么是端智能

目前,大多數的模型服務主要基于云服務端進行計算。模型的訓練和推理都在云端,使用時移動端用戶通過向云服務器發送請求,包含用戶的原始數據。云服務器在接收到請求后,進行數據預處理和推理計算等操作,并將結果返回給移動端用戶。云服務器承擔了幾乎所有的計算負載,而移動端僅作為用戶交互的界面。所以云端智能面臨著一些瓶頸,包括高延遲、高成本,以及隱私安全風險。

為了打破云端智能的瓶頸,端智能應運而生。端智能技術是將模型推理計算過程遷移至移動端,供移動端直接調用。使用時用戶在端上觸發推理計算,將原始數據給到模型進行特征加工和推理計算,最后將結果返回給用戶。相比云端智能,端智能有三大優勢:

?實時性高:端上實時響應用戶請求,為用戶提供實時AI反饋,提升用戶體驗;

?隱私合規性強:端上數據端上消費,無需上傳云端,隱私合規性強;

?具備離線服務能力:推理服務無需請求云端,在無網或者弱網環境下也可以使用;

2、問題與挑戰

受限于移動端設備的性能和多樣性,在移動端設備上部署端智能并非易事,在端智能開發過程中,遇到了各種挑戰,這些挑戰會一直伴隨著端智能開發過程,需要一直去優化解決,才能將端智能的體驗做到極致。

  • 計算性能

由于使用移動設備的計算資源有限,要兼顧用戶體驗與計算效率的平衡,需要針對移動端設備 的CPU/GPU使用率、內存使用率、耗電量、數據獲取、任務調度等影響推理耗時的問題進行持續優化。

  • 靈活性

業務算法模型確定后,其輸入輸出就得遵循固定的格式。不同端智能應用場景需要的模型和特征數據處理格式存在著較大的差異,如果想調整就需要改客戶端邏輯,功能驗證和迭代效率受到極大的限制。如何在不發版的情況下解決不同業務場景需求,也是需要優先解決的問題。

  • 穩定性

端智能需要在客戶端進行數據的收集、存儲、處理,推理任務的管理與調度,推理引擎和操作系統的兼容等處理,這些環節均可能引起APP的崩潰。作為一家客戶為先的公司,因為端智能的不穩定性導致影響用戶體驗,這是不被允許的,如何在復雜的端上環境做到零崩潰是非常大的挑戰。

  • 安全性

端上存在大量的數據,端智能的數據處理邏輯和推理邏輯都是在端上進行,防止數據泄露、數據篡改、保證數據的隱私合規是非常重要的。

3、京東端智能系統架構

京東零售端智能系統整體系統架構設計如下:

京東端智能系統架構遵循通用性和可規模化應用的設計原則,主要為云-邊-端三層,分別對應著算法模型的生產、部署和執行三個環節。

云對應的是由京東零售-技術研發與數據中心研發的九數算法中臺,負責模型訓練、模型編譯、模型調試。端智能模型生產和訓練在云端進行,在九數算法中臺訓練好模型后,需要對模型進行裁剪和壓縮,實現模型的輕量化,再對輕量化的模型進行編譯轉換,以生成在端上可執行的模型文件。

邊對應的是由京東零售-技術研發與數據中心研發的端智能平臺,負責模型的管理和模型部署分發。端智能管理平臺提供了業務接入、模型管理、配置管理、模型部署、模型分發等一系列的框架能力。端智能平臺模型支持A/B Test,以驗證算法策略的效果;同時支持分級部署,針對不同機型部署不同的算法模型。

端對應端智能SDK,負責端上用戶行為感知、數據加工,以及推理任務的調度和計算。端智能SDK包含數據管道和基礎容器兩部分,數據管道負責端上用戶行為感知、數據加工、數據存儲和數據上報,為端智能推理提供原始數據和特征數據,基礎容器為端智能算法模型提供了端上的運行環境,支持不同推理任務并行處理,讓端上推理計算高效地運轉起來。

4、主要工作

4.1超實時端數據流處理

數據存儲

端上的數據存儲高性能移動端數據庫,支持數據加密,支持并發數據讀寫,滿足端上數據的安全要求和高頻數據讀寫。

端上數據的存儲和獲取作為推理計算的前置環節,如果耗時偏高必然會增加整個端智能推理的耗時。為了最大提升數據庫的性能,前置了數據庫路由,根據數據類型,需要加密的數據會存儲到加密數據庫,不需要加密的數據會存儲到非加密數據庫,數據庫設計上采用單庫單表的設計模型,可以減少單個數據庫文件的大小,降低文件鎖的競爭概率,提高并發性能。同時引入了數據庫的自管理機制,長時間不被使用的舊數據會被刪除,降低數據庫存儲量,提升數據庫的讀寫性能。

數據處理

端上用戶的原始行為通常不能直接作為模型輸入進行計算,京東搭建了一套數據流框架,用來進行模型特征生產和特征計算。端側模型用到的數據源大致可分為3類:云端下發、端側批量存儲數據、端側實時行為感知。云端下發是通過請求后端服務獲取到的,通常會在云端處理好,APP內無需額外的處理,可以直接使用。端側批量存儲數據指對不會實時發生變化的數據進行定期存儲更新,端側實時行為感知指用戶在使用APP過程中的實時行為,經過加工處理后再進入模型計算。

端側批量存儲數據采用非實時批量處理模式,使用數據庫SQL能力進行粗粒度加工,也可以在Python腳本中執行個性化處理邏輯。端側實時行為感知采用實時計算的模式,實時對用戶行為進行過濾、規則匹配、關聯聚合等操作,生產為模型輸入需要的特征數據。生產好的特征會再進一步經過特征計算,包括離散特征編碼、連續特征歸一化等操作,計算好的特征即可輸入模型進行推理計算。

4.2高效端事件觸發和調度

基礎容器為端智能提供輕量化、高性能的執行環境,同時支持模型頻繁的實驗和部署,支持端智能在不同設備上高效運行。當算法模型下發到移動端設備后,觸發推理計算有兩種方式:API觸發和事件觸發。

API觸發: 算法工程師通過調用端智能提供的推理觸發API進行觸發,調用方式如代碼示例如下。API使用Router協議,使用時傳入systemCode和businessCode業務標識,支持自定義輸入數據,在回調方法中獲取推理計算結果。

JDRouter.to("JDEdgeAI", "infer").putString("systemCode", "xxx").putString("businessCode", "xxx").extraObject("extData",HashMap).callBackListener(new CallBackWithReturnListener() {@Overridepublic void onComplete(Object value) {android.util.Log.d(TAG, "onCompleteWithValue " + value.toString());}@Overridepublic void onComplete() {android.util.Log.d(TAG, "onComplete");}@Overridepublic void onError(int errorCode) {android.util.Log.d(TAG, "onError errorCode = " + errorCode);}}).jump(this.getContext());

事件觸發: 算法工程師可以在算法模型資源包中配置需要觸發推理計算的埋點事件ID,當基礎容器監測到有對應的埋點事件時,則會觸發推理計算執行。基礎容器中的功能均已任務化,事件觸發的方式不僅可以觸發模型推理,也可以觸發特征數據計算、模型預加載等操作。觸發配置如下所示,taskName是任務類型,events是任務觸發的事件。

{"triggers": [{"taskName": "InferTask","events": [{"type": "mta","pageId": "JD_XXXX","needPv": false,"clickIds": ["JD_XXXX",]}]},{"taskName": "CalcTask","events": [{"type": "mta","pageId": "JD_XXXX","needPv": false,"clickIds": ["JD_XXXX","JD_XXXX"]}]}]
}

觸發器每觸發一次即創建一個任務,基礎容器內部的任務調度模塊會對任務進行統一的編排與處理。一次推理過程會產生多個任務,每個任務都包含唯一ID、前置依賴、任務優先級、后置依賴等屬性。

為了高效執行任務,降低推理計算耗時,京東采用多任務隊列,按任務優先級并行執行的策略。基礎容器內部預置了三個任務隊列,分別核心任務隊列、常規任務隊列、低優任務隊列,按照任務類型分別放入對應的任務隊列中,每個任務隊列都有自己的執行線程,執行線程會輪詢執行任務隊列中的任務,直到產生推理計算結果,本次推理任務鏈路結束。

為了使任務調度執行頻率更高,執行速度更快,京東支持了多種能力:

?高并發: 支持多任務并發、多線程調度的任務管理模式;

?優先調度: 支持設置任務優先級,保證高優任務優先執行;

?熔斷保護: 對于連續 N 次運行失敗或者崩潰,會暫時阻止其運行;

?防卡死: 推理鏈路某環節超時,會立即停止當前任務。

基礎容器為每一個任務提供獨立的運行環境,并通過對外提供API來進行模型推理等。基礎容器還對推理流程和任務鏈路進行了高度的抽象,最大程度上的滿足了不同算法場景的使用需求。

4.3高兼容性PythonVM端計算容器

為了在端側APP滿足算法模型快速迭代的需求,同時降低算法工程師參與APP移動端開發的門檻,我們上線了Python VM的計算容器。Python VM容器提供了一定的動態執行的能力,在不依賴APP發版的情況下,可以隨時更新由Python編寫的AI算法服務邏輯,調整業務策略,優化業務效果。

選用Python語言主要考量其與AI技術棧的契合,Python是算法工程師最熟悉和熟練使用的語言。算法工程師在訓練好模型以后,將整個模型服務邏輯通過Python腳本部署在APP中,無需使用JAVA、Object-C等APP開發語言,顯著提升算法開發效率。此外,Python VM與原生APP開發環境解耦的方式,使得我們可以在安卓、iOS雙端使用同一套方案,無需分別兼容和適配。將Python VM集成至APP中,我們針對性地解決了以下3個問題:

?包體積縮減:只保留了Python核心執行器功能,非核心的三方庫也做了裁剪,編譯功能前置至云端完成,移動端直接執行字節碼;

?字節碼加密:對動態下發的字節碼采用自定義加密,防止下發過程中被篡改,保障安全;

?線程級并行:移除GIL鎖的限制,在APP單進程環境內,使用多個線程并行執行多個任務。

4.4高性能端推理引擎

AI模型對計算和存儲資源都有較高的要求,因此,高性能推理引擎是AI模型能在手機側運行的核心要素。端側推理引擎的架構與云側推理框架整體類似,包括計算圖、算子的抽象等。但由于移動端資源受限,一方面對引擎包體積有一定約束,端側推理引擎的算子種類需要盡量收斂,實現原子算子,通過原子算子組合出高階功能算子。另一方面,移動端設備硬件差異性較大,CPU、GPU、NPU都包含多種型號,推理引擎需要兼容各類設備。在這些通用能力之外,為了保障復雜模型性能,我們重點優化了以下2個維度:

?算子內核:針對熱點算子及部分算子的低精度實現,定向分析性能瓶頸,利用向量化指令優化內核實現,提升算子性能。

?多硬件混合調度:將模型計算圖拆分為多個子圖,不同子圖可拆分至CPU、GPU、NPU多種硬件分別執行,建模尋優最佳拆圖方案,充分挖掘利用所有硬件的算力;

此外,為了支持原生APP之外的場景,例如H5頁面、小程序等場景,我們還拓展了JavaScript版本的推理引擎。JavaScript引擎提供與原生APP一致的計算接口,在JS環境中自閉環使用,是一套更為輕量和靈活的解決方案。

5、業務實踐

端智能技術目前已經在京東流量分發、圖像識別等多種算法業務場景落地。

image.png

流量分發:通過用戶實時瀏覽行為,理解用戶意圖,增強實時商品分發效果,提升用戶購物體驗。

圖像識別:端上實時識別用戶拍攝圖片的合規性,降低算法計算延時,提升實時識別效果。

由于數據與模型的計算均發生在端上,不依賴網絡,沒有網絡延遲。因此端智能相比云端智能的耗時有顯著的降低,推理效率有數十倍的提升。通過實踐發現對于實時性要求高,計算相對簡單的場景適合端上執行。

6、總結與展望

端智能建設過程圍繞計算性能、靈活性、穩定性、安全性展開,動態預加載、任務調度、高性能數據存取提升了推理鏈路性能,模型動態下發、策略配置、數據動態處理為端智能業務開發帶來充足的靈活性,異常監控、控制開關、兼容處理保證了端智能在線上運行的穩定性,加密傳輸,隱私合規為端智能提供了安全性保障。目前,京東眾多業務已集成至端智能SDK,流量分發、圖像識別等算法場景運行情況良好,日推理計算量已經達數億次,為用戶帶來了更好的購物體驗。

端智能的出現,彌補了云端智能在網絡延時、數據豐富、隱私安全、算力成本方面的不足,但是端智能與云智能本身就不是割裂的技術體系,而是相輔相成的,未來端上模型可以作為云端模型的子模型進行前置推理,端上運行小模型,云端運行大模型,更好地提升推理效果和速度。

端智能未來的建設方向:

?平臺能力建設: 隨著算法場景復雜性的增加,開發效率將受到影響。端智能團隊將通過平臺能力建設,提供開發、調試工具,提升算法工程師的模型開發、上線效率。

?多端場景覆蓋: 京東中存在大量的H5、小程序等場景,端智能后續將在多端進行落地,算法能力將覆蓋移動端全場景。

?算法場景擴展: 端智能團隊致力于在端上覆蓋流量分發、CV、NLP等多算法場景,將更多云端算法模型遷移至移動端前置計算。

作者:京東零售技數中心

來源:京東零售技術 轉載請注明來源

更多年度盤點文章

亞洲唯一!京東榮獲2024年度Gartner供應鏈技術創新獎背后的創新探索

萬字干貨-京東零售數據資產能力升級與實踐

2023京東零售技術年度盤點

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/716578.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/716578.shtml
英文地址,請注明出處:http://en.pswp.cn/news/716578.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

leetcode日記(35)跳躍游戲Ⅱ

想了一個晚上,第一個思路是用動態規劃,記錄走到每一個節點需要跳動的最小步數,大致方法是每走到一個節點就遍歷一下前面的全部節點,看看哪個節點可以一部跳到該節點,然后從中選取跳躍步數最小的節點,最后輸…

完美解決多個Echarts圖表自適應窗口、父容器寬高,并進行性能優化

場景 很多時候我們會在繪制echarts圖表時,使用以下方法監聽瀏覽器尺寸變化,讓圖表resize()完成自適應 window.addEventListener(resize, ()>{wordCloudChart.resize() })然后,這種自適應真的足夠周全嘛?有些時候,…

多元正態分布(Multivariate Normal Distribution)

多元正態分布(Multivariate Normal Distribution),也稱為多變量高斯分布,是單變量正態分布(高斯分布)在多維空間中的推廣。它是描述位于多維空間中的隨機向量的分布情況的一種概率分布。多元正態分布在統計…

基于springboot+vue的城鎮保障性住房管理系統(前后端分離)

博主主頁:貓頭鷹源碼 博主簡介:Java領域優質創作者、CSDN博客專家、阿里云專家博主、公司架構師、全網粉絲5萬、專注Java技術領域和畢業設計項目實戰,歡迎高校老師\講師\同行交流合作 ?主要內容:畢業設計(Javaweb項目|小程序|Pyt…

練習 3 Web [ACTF2020 新生賽]Upload

[ACTF2020 新生賽]Upload1 中間有上傳文件的地方,試一下一句話木馬 txt 不讓傳txt 另存為tlyjpg,木馬文件上傳成功 給出了存放目錄: Upload Success! Look here~ ./uplo4d/06a9d80f64fded1e542a95e6d530c70a.jpg 下一步嘗試改木馬文件后綴…

云片 3.1(日常實習)面經

1、什么時候開始學習的前端 2、平常通過哪些方式學習 3、遇到bug怎么解決的 4、元素水平居中 5、display有哪些屬性 6、align-items除了center還有哪些屬性 7、display:none和visibility:hidden區別 8、常用的計量單位有哪些 9、rem和em是相對什么的 10、vw和vh有了解…

從頭構建gpt2 基于Transformer

從頭構建gpt2 基于Transformer VX關注{曉理紫|小李子},獲取技術推送信息,如感興趣,請轉發給有需要的同學,謝謝支持!! 如果你感覺對你有所幫助,請關注我。 源碼獲取 VX關注曉理紫并回復“chatgpt…

CSS 自測題

盒模型的寬度計算 默認為標準盒模型 box-sizing:content-box; offsetWidth (內容寬度內邊距 邊框),無外邊距 答案 122px通過 box-sizing: border-box; 可切換為 IE盒模型 offsetWidth width 即 100px margin 縱向重疊 相鄰元素的 margin-top 和 margin-bottom 會發…

leetcode-簡單

448. 找到所有數組中消失的數字 硬解 時間O(n)&#xff0c;空間O(n) class Solution { public:vector<int> findDisappearedNumbers(vector<int>& nums) {vector<int> result;vector<int> tem(nums.size()1, 0);for(int i: nums){tem[i] 1;}for…

Benchmark學習筆記

小記一篇Benchmark的學習筆記 1.什么是benchmark 在維基百科中&#xff0c;是這樣子講的 “As computer architecture advanced, it became more difficult to compare the performance of various computer systems simply by looking at their specifications.Therefore, te…

python標識符、變量和常量

一、保留字與標識符 1.1保留字 保留字是指python中被賦予特定意義的單詞&#xff0c;在開發程序時&#xff0c;不可以把這些保留字作為變量、函數、類、模塊和其它對象的名稱來使用。 比如&#xff1a;and、as、def、if、import、class、finally、with等 查詢這些關鍵字的方…

【LeetCode】升級打怪之路 Day 11 加餐:單調隊列

今日題目&#xff1a; 239. 滑動窗口最大值 | LeetCode 今天學習了單調隊列這種特殊的數據結構&#xff0c;思路很新穎&#xff0c;值得學習。 Problem&#xff1a;單調隊列 【必會】 與單調棧類似&#xff0c;單調隊列也是一種特殊的數據結構&#xff0c;它相比與普通的 que…

【NR 定位】3GPP NR Positioning 5G定位標準解讀(一)

目錄 前言 1. 3GPP規劃下的5G技術演進 2. 5G NR定位技術的發展 2.1 Rel-16首次對基于5G的定位技術進行標準化 2.2 Rel-17進一步提升5G定位技術的性能 3. Rel-18 關于5G定位技術的新方向、新進展 3.1 Sidelink高精度定位功能 3.2 針對上述不同用例&#xff0c;3GPP考慮按…

自動駕駛---Motion Planning之Speed Boundary(上)

1 背景 在上篇博客《自動駕駛---Motion Planning之Path Boundary》中,筆者主要介紹了path boundary的一些內容,通過將道路中感興趣區域的動靜態障礙物投影到車道坐標系中,用于確定L或者S的邊界,并利用道路信息再確定Speed的邊界,最后結合粗糙的速度曲線和路徑曲線,即可使…

Go-知識簡短變量聲明

Go-知識簡短變量聲明 1. 簡短變量聲明符2. 簡短變量賦值可能會重新聲明3. 簡短變量賦值不能用于函數外部4. 簡短變量賦值作用域問題5. 總結 githuio地址&#xff1a;https://a18792721831.github.io/ 1. 簡短變量聲明符 在Go語言中&#xff0c;可以使用關鍵字var或直接使用簡短…

【STK】手把手教你利用STK進行仿真-STK軟件基礎02 STK系統的軟件界面01 STK的界面窗口組成

STK系統是Windows窗口類型的桌面應用軟件,功能非常強大。在一個桌面應用軟件中集成了仿真對象管理、仿真對象屬性參數、設置、空間場景二三維可視化、場景顯示控制欲操作、仿真結果報表定制與分析、對象數據管理、仿真過程控制、外部接口連接和系統集成編程等復雜的功能。 STK…

SpringBoot之Actuator的兩種監控模式

SpringBoot之Actuator的兩種監控模式 springboot提供了很多的檢測端點(Endpoint),但是默認值開啟了shutdown的Endpoint&#xff0c;其他默認都是關閉的,可根據需要自行開啟 文章目錄 SpringBoot之Actuator的兩種監控模式1. pom.xml2. 監控模式1. HTTP2. JMX 1. pom.xml <de…

力扣 第 125 場雙周賽 解題報告 | 珂學家 | 樹形DP + 組合數學

前言 整體評價 T4感覺有簡單的方法&#xff0c;無奈樹形DP一條路上走到黑了&#xff0c;這場還是有難度的。 T1. 超過閾值的最少操作數 I 思路: 模擬 class Solution {public int minOperations(int[] nums, int k) {return (int)Arrays.stream(nums).filter(x -> x <…

VM虛擬機無法傳輸文件(更新時間24/3/3)

出現這個問題一般是未安裝VMware Tools 以下為手動安裝教程及可能出現的問題的解決方法&#xff1a; 1. 準備安裝 2.用cmd手動啟動安裝 3. 安裝過程默認即可&#xff0c;直接一直下一步 4.安裝完成后會自動重啟虛擬機&#xff08;沒有的話手動重啟即可&#xff09; 5.重啟以后…

Web應用安全威脅與防護措施

本文已收錄至《全國計算機等級考試——信息 安全技術》專欄 由于極其容易出現漏洞、并引發安全事故&#xff0c;因此數據隱私的保護是目前絕大多數企業不可繞過的運維環節。不過&#xff0c;許多中小型企業往往會錯誤地認為只有大型企業才會成為黑客的目標。而實際統計數字卻截…