赫楠,姬光,吳倩,胡寧
(1.北京市地鐵運(yùn)營(yíng)有限公司安保部;2.北京聲迅電子股份有限公司;3.北京市地鐵運(yùn)營(yíng)有限公司研發(fā)中心)
隨著地鐵智能識(shí)別機(jī)部署的數(shù)量越來(lái)越多,智能安檢系統(tǒng)承受的運(yùn)維壓力也隨之增大?,F(xiàn)有的圖片管理、模型訓(xùn)練、軟件安裝和升級(jí)通過(guò)人工操作,消耗了大量的大力資源,隨著大規(guī)模的生產(chǎn)部署,系統(tǒng)運(yùn)維成本將越來(lái)越高。因此,本文目的在于搭建云存儲(chǔ)平臺(tái)對(duì)安檢圖片數(shù)據(jù)實(shí)現(xiàn)有效的存儲(chǔ)和管理,以及基于容器技術(shù)實(shí)現(xiàn)模型訓(xùn)練和生產(chǎn)部署自動(dòng)化。
X光圖片智能識(shí)別系統(tǒng)的生產(chǎn)部署方案關(guān)鍵思想是基于云存儲(chǔ)和容器技術(shù)建立你分布式的存儲(chǔ)和開發(fā)運(yùn)維一體化環(huán)境,實(shí)現(xiàn)X光圖片數(shù)據(jù)的長(zhǎng)期保存和有效管理、以及模型訓(xùn)練、智能識(shí)別機(jī)分布式部署和運(yùn)維的自動(dòng)化,重點(diǎn)解決智能識(shí)別機(jī)系統(tǒng)軟件安裝,模型文件自動(dòng)更新等關(guān)鍵問(wèn)題。系統(tǒng)架構(gòu)如圖1。
圖1 系統(tǒng)總體架構(gòu)
系統(tǒng)的工作流程如下:
(1)數(shù)據(jù)處理與管理:首先將安檢物聯(lián)機(jī)采集的數(shù)據(jù)保存在云存儲(chǔ)系統(tǒng)中的原始數(shù)據(jù)庫(kù)中;對(duì)原始數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行清洗、預(yù)處理和打標(biāo)簽工作,將處理好的數(shù)據(jù)存儲(chǔ)在云存儲(chǔ)系統(tǒng)中的訓(xùn)練數(shù)據(jù)庫(kù)中;將數(shù)據(jù)集劃分為訓(xùn)練數(shù)據(jù)集和測(cè)試數(shù)據(jù)集兩部分。
(2)模型訓(xùn)練與發(fā)布:使用容器平臺(tái)按照需求新建模型訓(xùn)練GPU實(shí)例,并根據(jù)X光機(jī)設(shè)備產(chǎn)商不同分別對(duì)云存儲(chǔ)中的訓(xùn)練數(shù)據(jù)進(jìn)行訓(xùn)練得到多個(gè)深度學(xué)習(xí)模型;當(dāng)模型構(gòu)建完成,對(duì)模型進(jìn)行測(cè)試,若模型精度符合要求,對(duì)模型進(jìn)行壓縮,并將模型發(fā)布,保存在云存儲(chǔ)系統(tǒng)中的模型數(shù)據(jù)庫(kù)中。
(3)模型更新:智能識(shí)別機(jī)通過(guò)容器服務(wù)實(shí)現(xiàn)模型文件的自動(dòng)更新;安檢員通過(guò)智能安檢客戶端檢查并發(fā)現(xiàn)新的物品和識(shí)別錯(cuò)誤的圖片并保存,標(biāo)記后返回保存到云存儲(chǔ)中的訓(xùn)練數(shù)據(jù)庫(kù)中;定期對(duì)更新和擴(kuò)展后的數(shù)據(jù)庫(kù),訓(xùn)練新的模型,替換智能識(shí)別機(jī)中的舊模型文件,進(jìn)一步提高識(shí)別的準(zhǔn)確率。
智能識(shí)別機(jī)的軟件安裝工作流程如下:
(1)基于鏡像安裝系統(tǒng)軟件,包括Linux操作系統(tǒng),容器服務(wù)軟件。
(2)啟動(dòng)Docker服務(wù),下載智能識(shí)別軟件鏡像,完成軟件安裝。
云存儲(chǔ)基于對(duì)象存儲(chǔ)技術(shù),基于通用服務(wù)器構(gòu)建,是一個(gè)海量分布式存儲(chǔ)平臺(tái)。與當(dāng)前的網(wǎng)絡(luò)存儲(chǔ)系統(tǒng)相比,云存儲(chǔ)具有更高的性價(jià)比、更加通用和更方便的使用模式;在需要存儲(chǔ)大量數(shù)據(jù)的應(yīng)用場(chǎng)合,如圖片數(shù)據(jù)、業(yè)務(wù)數(shù)據(jù)等,可以大幅提高存儲(chǔ)系統(tǒng)性價(jià)比。
圖片存儲(chǔ)和模型文件均通過(guò)云存儲(chǔ)系統(tǒng)進(jìn)行存儲(chǔ),基于HTTP協(xié)議標(biāo)準(zhǔn)進(jìn)行數(shù)據(jù)傳輸,非常適用于互聯(lián)網(wǎng)應(yīng)用場(chǎng)景。安檢物聯(lián)機(jī)或其他終端設(shè)備可以更方便地把圖片上傳到云存儲(chǔ)系統(tǒng),形成新的訓(xùn)練數(shù)據(jù)。
圖2 圖片存儲(chǔ)結(jié)構(gòu)
圖片存儲(chǔ)按照?qǐng)D片內(nèi)容分為原始圖片、測(cè)試圖片、標(biāo)記圖片、訓(xùn)練圖片四個(gè)部分,分為四個(gè)文件夾進(jìn)行存儲(chǔ),其中標(biāo)記圖片從原始圖片復(fù)制到標(biāo)記文件夾后進(jìn)行標(biāo)注,標(biāo)注文件采用符號(hào)鏈接到訓(xùn)練圖片和測(cè)試圖片兩個(gè)文件夾。圖片存儲(chǔ)采用文件存儲(chǔ)的方式,將所有圖片存入ceph文件系統(tǒng)中。
發(fā)布的模型文件根據(jù)不同設(shè)備廠家的名稱進(jìn)行分類存儲(chǔ),然后根據(jù)評(píng)分分類并存儲(chǔ)各個(gè)訓(xùn)練模型文件,模型文件的存儲(chǔ)采用塊存儲(chǔ)的方式,將所有模型存入ceph塊設(shè)備中。
鏡像倉(cāng)庫(kù)建立在云存儲(chǔ)系統(tǒng)中,更新的模型文件采用鏡像進(jìn)行保存,智能識(shí)別機(jī)可以通過(guò)互聯(lián)網(wǎng)下載最新的鏡像文件,實(shí)現(xiàn)模型文件自動(dòng)更新。鏡像的存儲(chǔ)根據(jù)不同設(shè)備廠家的名稱進(jìn)行分類,采用塊存儲(chǔ)的方式存入ceph塊設(shè)備中。
Docker是一個(gè)開源代碼軟件項(xiàng)目,讓應(yīng)用程序部署在軟件容器下的工作可以自動(dòng)化進(jìn)行,借此在Linux操作系統(tǒng)上,提供了一個(gè)額外的軟件抽象層,以及操作系統(tǒng)層虛擬化的自動(dòng)管理機(jī)制。
Docker提供了一種靜態(tài)鏈接Linux核到應(yīng)用程序的方式,通過(guò)Docker容器可以調(diào)用GPUs,因此云平臺(tái)采用Docker對(duì)Caffe深度學(xué)習(xí)框架的部署。Docker通過(guò)一個(gè)命令來(lái)拉取正確的Docker鏡像,可以取代很大部分復(fù)雜的部署工作。通過(guò)靜態(tài)的方式將項(xiàng)目中所有依賴項(xiàng)集成進(jìn)一個(gè)壓縮鏡像中,重用時(shí)只需要拉取下來(lái)即可。
圖3 容器鏡像部署
研發(fā)人員將所有的系統(tǒng)資源,運(yùn)行依賴以及環(huán)境配置成一個(gè)完整的運(yùn)行環(huán)境,構(gòu)建成若干個(gè)可獨(dú)立運(yùn)行的Docker鏡像。建立私有的鏡像倉(cāng)庫(kù),通過(guò)push操作將所有需要的鏡像存儲(chǔ)在鏡像倉(cāng)庫(kù)中。在任何一臺(tái)目標(biāo)主機(jī)上都可以通過(guò)pull操作將鏡像倉(cāng)庫(kù)中的新建鏡像或更新鏡像下載到本地。通過(guò)編寫Dockerfile或Docker Compose腳本,實(shí)現(xiàn)鏡像的自動(dòng)部署和系統(tǒng)集成。不僅測(cè)試人員可以在本地主機(jī)上快速進(jìn)行系統(tǒng)應(yīng)用的測(cè)試集成,還可以在用戶主機(jī)上完成自動(dòng)化部署和運(yùn)行。
X光智能識(shí)別云平臺(tái)采用Docker容器對(duì)模型文件進(jìn)行管理與遠(yuǎn)程更新。模型文件的管理包括:模型文件的版本控制,生產(chǎn)環(huán)境中對(duì)模型文件進(jìn)行跟蹤,配合容器服務(wù)將模型文件部署到生產(chǎn)環(huán)境中,自動(dòng)重新訓(xùn)練模型。
模型文件的管理還提供自動(dòng)化工作流用于打包和部署深度學(xué)習(xí)容器,使用容器打包及其運(yùn)行時(shí)的想相關(guān)依賴項(xiàng)。模型文件的管理使用的信息包括:運(yùn)行時(shí)環(huán)境選項(xiàng),以及系統(tǒng)架構(gòu)文件 、運(yùn)行時(shí)的依賴文件,模型文件或包含模型文件的目錄,用戶創(chuàng)建的可實(shí)現(xiàn)模型評(píng)分的程序文件等。
圖4 模型管理工作流
將模型文件保存到深度學(xué)習(xí)模型庫(kù),在生產(chǎn)環(huán)境中跟蹤模型文件版本,為了方便重現(xiàn)問(wèn)題和監(jiān)管,模型管理服務(wù)會(huì)捕獲所有依賴項(xiàng)和關(guān)聯(lián)的信息?;贒ocker的容器化鏡像原生包含生成預(yù)測(cè)所需的所有必要依賴項(xiàng),可以使用一個(gè)創(chuàng)建的清單在相應(yīng)的環(huán)境中生成基于Docker的容器鏡像?;贒ocker的容器化鏡像可以讓企業(yè)用戶在生產(chǎn)環(huán)境中靈活運(yùn)行這些鏡像,使用模型管理,只需要一條命令即可。
深度學(xué)習(xí)訓(xùn)練出來(lái)的模型文件一般相當(dāng)大,通常在數(shù)百M(fèi)B,甚至數(shù)GB,模型文件越大時(shí),基于互聯(lián)網(wǎng)提供模型更新會(huì)越困難。
當(dāng)采用新的深度學(xué)習(xí)網(wǎng)絡(luò)時(shí),會(huì)產(chǎn)生一個(gè)新的模型。模型訓(xùn)練通過(guò)容器平臺(tái)分布式服務(wù)構(gòu)建并驗(yàn)證模型,發(fā)布保存到云存儲(chǔ)中的模型數(shù)據(jù)庫(kù)中。在部署新版本模型的時(shí)候,在更新到智能識(shí)別機(jī)之前,首先對(duì)模型文件進(jìn)行壓縮,從而使模型更新會(huì)更輕松。
圖5 模型更新管理
云平臺(tái)采用容器的方式對(duì)模型文件進(jìn)行更新,首先需要技術(shù)人員對(duì)智能識(shí)別機(jī)進(jìn)行Docker的部署,提前將模型文件與其運(yùn)行的環(huán)境打包,構(gòu)建好鏡像并運(yùn)行相應(yīng)腳本文件,生成Docker并部署在智能識(shí)別機(jī)上。
通過(guò)Git掛載的方式實(shí)現(xiàn)智能識(shí)別機(jī)中模型文件的同步與更新,當(dāng)云存儲(chǔ)平臺(tái)有最新版本的模型文件發(fā)布時(shí),可發(fā)布至Git;同時(shí),智能識(shí)別機(jī)運(yùn)行更新腳本,將Git中的最新模型文件進(jìn)行Pull,使用HTTPS的傳輸方式將模型文件下載至智能識(shí)別機(jī)的Docker中。最后將本地的模型文件進(jìn)行替換。
智能識(shí)別機(jī)定期掃描本地文件系統(tǒng),根據(jù)文件系統(tǒng)的狀態(tài)和模型版本控制策略來(lái)加載和卸載模型。這樣智能識(shí)別機(jī)可以在系統(tǒng)運(yùn)行的情況下,通過(guò)將導(dǎo)出的模型復(fù)制到指定的文件路徑,而輕松地部署新的模型
本文的研究?jī)?nèi)容主要在X光圖片智能識(shí)別云平臺(tái)的關(guān)鍵技術(shù)。云平臺(tái)關(guān)鍵技術(shù)包括基于云存儲(chǔ)對(duì)X光安檢圖片進(jìn)行存儲(chǔ),實(shí)現(xiàn)X光原始數(shù)據(jù)和訓(xùn)練數(shù)據(jù)的有效管理;基于容器技術(shù)建立深度學(xué)習(xí)模型管理的云平臺(tái),解耦環(huán)境依賴配置和模型開發(fā),實(shí)現(xiàn)模型訓(xùn)練和測(cè)試的自動(dòng)化;同時(shí),基于容器技術(shù)實(shí)現(xiàn)智能識(shí)別機(jī)安裝部署自動(dòng)化,并基于不同版本的模型建立智能識(shí)別機(jī)鏡像倉(cāng)庫(kù),為智能識(shí)別機(jī)提供模型遠(yuǎn)程自動(dòng)更新服務(wù)。