AoE:如何管理好模型?

做者:丁超git

前言

愈來愈多的業務會用到AI相關的技術,大多數的AI模型是部署在雲端使用的,畢竟服務端計算更快,管理也更容易。隨着終端設備性能提高,在終端使用 AI 模型有了更大的價值,能夠更好知足業務對響應實時性、數據隱私性的需求。滴滴出行的銀行卡識別功能也打算部署在客戶端,可是遇到的問題也很多:github

  1. 模型升級困難,模型在終端的存在通常都是已應用軟件爲載體,用戶能夠選擇是否對應用軟件進行更新,致使模型版本會產生分化。
  2. 硬件適配問題,不一樣的終端設備由於廠商深度定製因素,會出現一些兼容問題
  3. 不一樣模型運行框架不一樣,對於客戶端工程師不夠友好。

針對這些問題滴滴的終端智能團隊推出了AoE做爲解決方案,設計之初就將多模型管理支持可能升級、多框架支持、模型加密等功能定爲基礎設施。json

AoE是怎麼作好模型管理的

咱們針對遇到的問題,主要作了3部分工做:安全

  1. 嘗試了多機型覆蓋測試作好模型的驗證
  2. 利用運行環境配製化來實現加載模型
  3. 經過動態更新來升級模型

下面針對這三項分別進行介紹。bash

運行環境配置化

AoE SDK將推理框架總結了5個過程,它們分別是初使化、前處理、執行推理、後處理、釋放資源。對 AoE 集成運行環境來講,最基本的即是抽象推理操做,經過 依賴倒置 的設計,使得業務只依賴AoE的上層抽象,而不用關心具體推理框架的接入實現。這種設計帶來的最大的好處是開發者隨時能夠添加新的推理框架,而不用修改框架實現,作到了業務開發和 AoE SDK 開發徹底解耦。服務器

用戶只須要簡單的描述json文件便可完成對運行環境的配置,簡化了用戶的使用過程,更爲簡潔高效。框架

簡單的配置以下:工具

{
      "version": "1.0.0",			// 版本號
      "tag": "tag_mnist",			// 區分業務場景
      "runtime": "tensorflow",		// runtime類型
      "source": "installed",			// 安裝源
      "modelDir": "mnist",				// 所在文件夾
      "modelName": "mnist_cnn_keras",  	// 模型文件名
      "updateURL": "https://www.didiglobal.com"   // 升級配置連接
}

複製代碼

機型覆蓋測試

針對硬件差別的問題,咱們在作模型驗證期間嘗試了多機型的覆蓋測試,將模型在不一樣機型上的表現都記錄下來反饋給模型生產團隊,幫助模型不斷的升級修復。性能

截取了部分測試時產生的耗時對比數據大體以下:測試

雖然模型不相同,使用指令可能不一樣,可是大體也能夠了解到機器的性能,具體數值僅供參考。在這個過程當中,沉澱下來了benchmark工具來幫助驗證多機型的覆蓋測試,未來這個工具也會是開源的一部分來幫助你們驗證模型的可用性,以及創建有效的機型比較。

動態更新

AoE的模型管理模塊將模型按分發方式分爲兩種:

  1. 本地模型,意爲應用軟件自帶的模型
  2. 遠程模型,則是經過策略配置,從服務器下載匹配模型到本地的模型

本地模型與遠程模型最大的區別就是本地模型沒法更改,只能跟隨應用軟件一塊兒更新,而遠程模型則是經過和本地模型做比較後更新的較新模型,模型與模型之間經過版本作比較。本地模型與遠程模型兩者能夠共存,也能夠單獨存在,在最新版的滴滴出行中,爲了減小包的大小甚至沒有本地模型,全部的模型都是來自遠端下載。

之因此將模型分紅兩部種,是爲了保證模型是可用的且可靠的,爲何這麼說?通常本地模型都是通過長時間測試後才做爲穩定版本跟隨APP帶到了線上,既能夠做爲最新版本,又能夠做爲後來的穩定版本:即便發現後來下載升級的遠程模型效果不理想也能夠經過灰度測試中止遠程使用遠程模型的使用,保證模型的高可用性。

遠程模型的存在使業務模型擁有了動態更新的能力,方便了產品的迭代,再也不依賴客戶端的發佈週期。在動態開關的寫協助下,甚至能夠作到精確指定模型版本的加載。

總體模型管理的結構以下圖:

模型加載怎麼使用?

模型管理器是AoE的一個基礎組件,以iOS爲例,組件實如今Loader目錄下。默認支持的模型配置文件爲json格式,運行環境配置化部分的代碼就描述了mnist demo的配置。

模型和模型配置文件名的格式配置以及遠程版本存放地址,均可以經過繼承AoEModelConfig類來作修改,具體的使用方式能夠參照squeezenet的實例

在已經開源的版本中AoE還爲你們提供了單功能多模型的支持,拿銀行卡識別來舉例,整個過程分兩步,一是找到卡片以及卡片上的數字區域,二是根據數字區域的圖片識別出卡號,因此整個過程須要兩個模型。開源項目使用的模型配置的tag字段主要用來定義模型所屬功能,結合dir字段,就能夠定位到具體的模型。

寫在最後

經過遠程加載以及多維度的灰度測試配置是的幫助模型穩定安全運行的保證,雖然模型遠程加載功能尚未在開源版本上線,可是已經安排在了日程中,預計在9月低就會上線。若是您對這個項目感興趣,若是您在終端AI運行環境方面有想法,若是您在使用時有疑問,誠摯邀請您加入咱們。

Github地址:

歡迎star~

QQ交流羣(QQ羣號:815254379):

歡迎加羣聊~

相關文章
相關標籤/搜索