黑科技:AoE-如何管理好模型?
前言
越來越多的業務會用到AI相關的技術,大多數的AI模型是部署在云端使用的,畢竟服務端計算更快,管理也更容易。隨著終端設備性能提升,在終端使用 AI 模型有了更大的價值,可以更好滿足業務對響應實時性、數據隱私性的需求。滴滴出行的銀行卡識別功能也打算部署在客戶端,但是遇到的問題也不少:
1.模型升級困難,模型在終端的存在一般都是已應用軟件為載體,用戶可以選擇是否對應用軟件進行更新,導致模型版本會產生分化。
2.硬件適配問題,不同的終端設備因為廠商深度定制因素,會出現一些兼容問題
3.不同模型運行框架不同,對于客戶端工程師不夠友好。
針對這些問題滴滴的終端智能團隊推出了AoE作為解決方案,設計之初就將多模型管理支持可能升級、多框架支持、模型加密等功能定為基礎設施。
AoE是怎么做好模型管理的
我們針對遇到的問題,主要做了3部分工作:
- 嘗試了多機型覆蓋測試做好模型的驗證
- 利用運行環境配制化來實現加載模型
- 通過動態更新來升級模型
下面針對這三項分別進行介紹。
運行環境配置化
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的模型管理模塊將模型按分發方式分為兩種:
- 本地模型,意為應用軟件自帶的模型
- 遠程模型,則是通過策略配置,從服務器下載匹配模型到本地的模型
本地模型與遠程模型最大的區別就是本地模型無法更改,只能跟隨應用軟件一起更新,而遠程模型則是通過和本地模型作比較后更新的較新模型,模型與模型之間通過版本做比較。本地模型與遠程模型二者可以共存,也可以單獨存在,在最新版的滴滴出行中,為了減少包的大小甚至沒有本地模型,所有的模型都是來自遠端下載。
之所以將模型分成兩部分,是為了保證模型是可用的且可靠的,為什么這么說?一般本地模型都是經過長時間測試后才作為穩定版本跟隨APP帶到了線上,既可以作為最新版本,又可以作為后來的穩定版本:即使發現后來下載升級的遠程模型效果不理想也可以通過灰度測試停止遠程使用遠程模型的使用,保證模型的高可用性。
遠程模型的存在使業務模型擁有了動態更新的能力,方便了產品的迭代,不再依賴客戶端的發布周期。在動態開關的寫協助下,甚至可以做到精確指定模型版本的加載。
整體模型管理的結構如下圖:
模型加載怎么使用?
模型管理器是AoE的一個基礎組件,以iOS為例,組件實現在Loader目錄下。默認支持的模型配置文件為json格式,運行環境配置化部分的代碼就描述了mnist demo的配置。
模型和模型配置文件名的格式配置以及遠程版本存放地址,都可以通過繼承AoEModelConfig類來做修改,具體的使用方式可以參照squeezenet的實例
在已經開源的版本中,AoE還為大家提供了單功能多模型的支持,拿銀行卡識別來舉例,整個過程分兩步,一是找到卡片以及卡片上的數字區域,二是根據數字區域的圖片識別出卡號,所以整個過程需要兩個模型。開源項目使用的模型配置的tag字段主要用來定義模型所屬功能,結合dir字段,就可以定位到具體的模型。
寫在最后
通過遠程加載以及多維度的灰度測試配置是幫助模型穩定安全運行的保證,雖然模型遠程加載功能還沒有在開源版本上線,但是已經安排在了日程中,預計在9月底就會上線。如果您對這個項目感興趣,如果您在終端AI運行環境方面有想法,如果您在使用時有疑問,誠摯邀請您加入我們。
項目鏈接:https://github.com/didi/AoE