赫楠,姬光,吳倩,胡寧
(1.北京市地鐵運營有限公司安保部;2.北京聲迅電子股份有限公司;3.北京市地鐵運營有限公司研發中心)
隨著地鐵智能識別機部署的數量越來越多,智能安檢系統承受的運維壓力也隨之增大。現有的圖片管理、模型訓練、軟件安裝和升級通過人工操作,消耗了大量的大力資源,隨著大規模的生產部署,系統運維成本將越來越高。因此,本文目的在于搭建云存儲平臺對安檢圖片數據實現有效的存儲和管理,以及基于容器技術實現模型訓練和生產部署自動化。
X光圖片智能識別系統的生產部署方案關鍵思想是基于云存儲和容器技術建立你分布式的存儲和開發運維一體化環境,實現X光圖片數據的長期保存和有效管理、以及模型訓練、智能識別機分布式部署和運維的自動化,重點解決智能識別機系統軟件安裝,模型文件自動更新等關鍵問題。系統架構如圖1。

圖1 系統總體架構
系統的工作流程如下:
(1)數據處理與管理:首先將安檢物聯機采集的數據保存在云存儲系統中的原始數據庫中;對原始數據庫中的數據進行清洗、預處理和打標簽工作,將處理好的數據存儲在云存儲系統中的訓練數據庫中;將數據集劃分為訓練數據集和測試數據集兩部分。
(2)模型訓練與發布:使用容器平臺按照需求新建模型訓練GPU實例,并根據X光機設備產商不同分別對云存儲中的訓練數據進行訓練得到多個深度學習模型;當模型構建完成,對模型進行測試,若模型精度符合要求,對模型進行壓縮,并將模型發布,保存在云存儲系統中的模型數據庫中。
(3)模型更新:智能識別機通過容器服務實現模型文件的自動更新;安檢員通過智能安檢客戶端檢查并發現新的物品和識別錯誤的圖片并保存,標記后返回保存到云存儲中的訓練數據庫中;定期對更新和擴展后的數據庫,訓練新的模型,替換智能識別機中的舊模型文件,進一步提高識別的準確率。
智能識別機的軟件安裝工作流程如下:
(1)基于鏡像安裝系統軟件,包括Linux操作系統,容器服務軟件。
(2)啟動Docker服務,下載智能識別軟件鏡像,完成軟件安裝。
云存儲基于對象存儲技術,基于通用服務器構建,是一個海量分布式存儲平臺。與當前的網絡存儲系統相比,云存儲具有更高的性價比、更加通用和更方便的使用模式;在需要存儲大量數據的應用場合,如圖片數據、業務數據等,可以大幅提高存儲系統性價比。
圖片存儲和模型文件均通過云存儲系統進行存儲,基于HTTP協議標準進行數據傳輸,非常適用于互聯網應用場景。安檢物聯機或其他終端設備可以更方便地把圖片上傳到云存儲系統,形成新的訓練數據。

圖2 圖片存儲結構
圖片存儲按照圖片內容分為原始圖片、測試圖片、標記圖片、訓練圖片四個部分,分為四個文件夾進行存儲,其中標記圖片從原始圖片復制到標記文件夾后進行標注,標注文件采用符號鏈接到訓練圖片和測試圖片兩個文件夾。圖片存儲采用文件存儲的方式,將所有圖片存入ceph文件系統中。
發布的模型文件根據不同設備廠家的名稱進行分類存儲,然后根據評分分類并存儲各個訓練模型文件,模型文件的存儲采用塊存儲的方式,將所有模型存入ceph塊設備中。
鏡像倉庫建立在云存儲系統中,更新的模型文件采用鏡像進行保存,智能識別機可以通過互聯網下載最新的鏡像文件,實現模型文件自動更新。鏡像的存儲根據不同設備廠家的名稱進行分類,采用塊存儲的方式存入ceph塊設備中。
Docker是一個開源代碼軟件項目,讓應用程序部署在軟件容器下的工作可以自動化進行,借此在Linux操作系統上,提供了一個額外的軟件抽象層,以及操作系統層虛擬化的自動管理機制。
Docker提供了一種靜態鏈接Linux核到應用程序的方式,通過Docker容器可以調用GPUs,因此云平臺采用Docker對Caffe深度學習框架的部署。Docker通過一個命令來拉取正確的Docker鏡像,可以取代很大部分復雜的部署工作。通過靜態的方式將項目中所有依賴項集成進一個壓縮鏡像中,重用時只需要拉取下來即可。

圖3 容器鏡像部署
研發人員將所有的系統資源,運行依賴以及環境配置成一個完整的運行環境,構建成若干個可獨立運行的Docker鏡像。建立私有的鏡像倉庫,通過push操作將所有需要的鏡像存儲在鏡像倉庫中。在任何一臺目標主機上都可以通過pull操作將鏡像倉庫中的新建鏡像或更新鏡像下載到本地。通過編寫Dockerfile或Docker Compose腳本,實現鏡像的自動部署和系統集成。不僅測試人員可以在本地主機上快速進行系統應用的測試集成,還可以在用戶主機上完成自動化部署和運行。
X光智能識別云平臺采用Docker容器對模型文件進行管理與遠程更新。模型文件的管理包括:模型文件的版本控制,生產環境中對模型文件進行跟蹤,配合容器服務將模型文件部署到生產環境中,自動重新訓練模型。
模型文件的管理還提供自動化工作流用于打包和部署深度學習容器,使用容器打包及其運行時的想相關依賴項。模型文件的管理使用的信息包括:運行時環境選項,以及系統架構文件 、運行時的依賴文件,模型文件或包含模型文件的目錄,用戶創建的可實現模型評分的程序文件等。

圖4 模型管理工作流
將模型文件保存到深度學習模型庫,在生產環境中跟蹤模型文件版本,為了方便重現問題和監管,模型管理服務會捕獲所有依賴項和關聯的信息。基于Docker的容器化鏡像原生包含生成預測所需的所有必要依賴項,可以使用一個創建的清單在相應的環境中生成基于Docker的容器鏡像。基于Docker的容器化鏡像可以讓企業用戶在生產環境中靈活運行這些鏡像,使用模型管理,只需要一條命令即可。
深度學習訓練出來的模型文件一般相當大,通常在數百MB,甚至數GB,模型文件越大時,基于互聯網提供模型更新會越困難。
當采用新的深度學習網絡時,會產生一個新的模型。模型訓練通過容器平臺分布式服務構建并驗證模型,發布保存到云存儲中的模型數據庫中。在部署新版本模型的時候,在更新到智能識別機之前,首先對模型文件進行壓縮,從而使模型更新會更輕松。

圖5 模型更新管理
云平臺采用容器的方式對模型文件進行更新,首先需要技術人員對智能識別機進行Docker的部署,提前將模型文件與其運行的環境打包,構建好鏡像并運行相應腳本文件,生成Docker并部署在智能識別機上。
通過Git掛載的方式實現智能識別機中模型文件的同步與更新,當云存儲平臺有最新版本的模型文件發布時,可發布至Git;同時,智能識別機運行更新腳本,將Git中的最新模型文件進行Pull,使用HTTPS的傳輸方式將模型文件下載至智能識別機的Docker中。最后將本地的模型文件進行替換。
智能識別機定期掃描本地文件系統,根據文件系統的狀態和模型版本控制策略來加載和卸載模型。這樣智能識別機可以在系統運行的情況下,通過將導出的模型復制到指定的文件路徑,而輕松地部署新的模型
本文的研究內容主要在X光圖片智能識別云平臺的關鍵技術。云平臺關鍵技術包括基于云存儲對X光安檢圖片進行存儲,實現X光原始數據和訓練數據的有效管理;基于容器技術建立深度學習模型管理的云平臺,解耦環境依賴配置和模型開發,實現模型訓練和測試的自動化;同時,基于容器技術實現智能識別機安裝部署自動化,并基于不同版本的模型建立智能識別機鏡像倉庫,為智能識別機提供模型遠程自動更新服務。