深度學習應用開發架構的一種思路

深度學習應用開發架構的一種思路

背景

深度學習當下依然處在風口,它從一開始解決單一場景中單一問題的算法,逐步成長爲能夠解決複雜問題的效率工具。

隨着深度學習相關的各項技術的發展,對深度學習的要求也越來越具體:一方面是朝着小而快的方向發展,不斷針對特定場景做深度定製優化、精簡模型,將算法部署到到移動端甚至嵌入式設備;另一方面是朝着大而全的方向演進,目標是解決一些複雜但是通用的問題,這部分模型大多部署在高性能的服務器,作爲SAAS服務提供給B端或C端用戶使用。

結構劃分

當我們提到深度學習,第一反應是什麼?絕大多數人的反應是模型。這是因爲深度學習應用開發的核心就是將合適的模型用合適的計算資源處理。所以我們從模型開始,分別往下到硬件,往上到業務進行結構劃分。

從模型往下走,是推斷框架,也就是上面說的”合適的計算資源“。這個推斷框架可以是兼容各平臺的,也可以是針對單一平臺深度定製優化的,具體如何選擇要結合場景和業務要求。推斷框架以下,就是硬件層,其他軟件框架一般還會有系統適配層,但是深度學習對系統的依賴會包含在推斷框架中,所以推斷框架以下就只考慮硬件層。

從模型往上走,我們需要一個問題:我的模型如何被外部調用?也就是說需要逐步考慮外界的需求。最簡單的場景,比如我就是要識別鍵盤鼠標等通用物體,那麼我的應用場景所需要的算法就是物體識別,而物體識別這個算法也只需要一個模型,比如MV2。但是實際應用場景往往包含不止一個算法、且一個算法可能會需要多個模型的結果。

所以模型上面需要一個算法層,用來控制和管理各個可能需要的模型,算法層網上,是場景邏輯層,用來管理這些算法。

資源管理

深度學習算法至少包含兩類資源文件,一是算法配置文件,裏面包括模型路徑、輸入輸出feature的形狀、輸入輸出層名稱、以及一些可配置的閾值等常量參數,這類配置文件可以用JSON等格式保存和讀取;二是算法模型,這個模型可以存放在應用沙盒中,本地記載,也可以存放在服務器上,以網絡下載的方式加載。

整體結構

在這裏插入圖片描述

優缺點分析

優點

  • 場景自由度高,每個層級內部是完全解耦的,可以自由組合算法和場景,滿足更多複雜需求
  • 模塊劃分清晰,各層各模塊只需要關注自身,做好本模塊的優化即可
  • 可配置性強,將各類參數用配置晚間管理,對於大部分需求修改,都只需要修改模型文件或者配置文件,不用重新編譯發佈代碼庫
  • 可移植性強,這套框架本身並不依賴平臺,所以可以很輕鬆的在移動端(iOS/Android)和服務器上實現

缺點

  • 不適合輕量場景,對於很輕量的場景(單算法單模型單系統不需要配置),這套架構顯得有點複雜,數據流過長
  • 調試麻煩,因爲所有模塊都是同一對外輸出,所以在開發各個模塊時調試起來不方便

結論

我們針對深度學習應用開發提出了一種架構思路,可以在複雜場景中提升開發效率,易於部署且可以靈活定製適配各種需求。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章