李茜萌,陳春雨,何恒翔
哈爾濱工程大學 信息與通信工程學院,黑龍江 哈爾濱 150000
近年來,以ARM 陣營為代表的嵌入式計算平臺的性能高速增長帶來了嵌入式產業的繁榮,ARM 芯片開始進入越來越多的平臺,如無人機、平板、智能機器人。ARM 芯片內部集成了CPU、GPU、ISP 等模塊,部分芯片內甚至集成了通訊基帶,這種系統級芯片(system-on-a-chip,Soc)的封裝特點在于大大簡化了嵌入式設備的硬件研發難度的同時,為嵌入式平臺帶來了強大的圖像、音頻及其他傳感器數據獲取的能力[1]。在具備了可靠的數據高速獲取能力之后,如何更加高速可靠地處理這些數據則對平臺性能提出了更高的要求。當前,人工智能技術的第三次繁榮,其在計算機視覺(computer vision,CV)、自然語言處理(natural language processing,NLP)等領域取得了比傳統算法更加優良的效果,部分領域甚至實現了大幅度的超越。但是深度學習技術對于計算力的需求極高,很多網絡需要高性能的GPU 或者TPU 才能運行,無法直接將其移植至嵌入式端[2]。本系統利用現代社會已經實現完善部署的Wi-Fi 網絡及蜂窩網絡,將嵌入式設備需要計算的圖像數據傳送至云端,云端通過部署的服務器、工作站集群進行高速計算并返回結果,充分利用了嵌入式設備體積小巧、適合部署于前端的特性,以及云計算高性能、高可靠、存儲容量大的特性,實現了成本及性能的最優化配置,對多種現代流行的AI 框架都能很好的兼容。大量嵌入式設備的同時接入,對系統的計算能力也提出了巨大的挑戰,本文將探究一種能夠解決以上矛盾的可彈性部署的分布式AI 計算架構系統。
在傳統方法中,為了讓嵌入式設備采集到的數據能被高速處理,多采用有線連接的模式在其附近部署一套工作站。這種方式雖然初步實現了深度學習計算的功能,但是其能耗高、發熱量大,在部分工業生產環境中是不被允許的,特別是部分現場潮濕、多塵、電壓不穩的情況,這些不利因素直接導致了工作站不能穩定工作。并且因為數據并非時刻需要計算,那么這種方案也將導致計算資源長時間處于閑置狀態,是一種極大的成本和資源的浪費。本文結合分布式設計思路[3-5],提出了一種框架,將計算平臺部署于云端,工作站集群部署于環境適宜的機房內,為設備長時間高負荷運行提供了有效保障[6]。分布式計算、彈性部署的特點能為大量嵌入式設備的計算需求提供有效的計算性能保障,同時也減少了計算資源的限制和浪費。與單純利用嵌入式設備進行計算對比,本方案具有極大的性能優勢,以Mask RCNN[7]網絡為例,相較在樹莓派4 平臺直接運行,速度提升幾十倍。
本系統由中央服務器、集群服務器、GPU 工作站集群、嵌入式端4 部分組成。中央處理器是整個網絡的核心節點,負責綜合調度各個設備進行工作,接收到嵌入式端的請求后會為其分配當前最空閑的計算集群的連接方式;然后嵌入式設備連接集群服務器后開始傳送數據,集群服務器會進一步將數據轉發給集群內運行對應模型,且最為空閑的GPU 工作站進行計算并接收計算結果;最后將結果回傳給嵌入式終端,如圖1 所示。

圖1 系統架構
中央服務器在整個系統中擔當的是核心調度的工作,其對設備的穩定性要求極高[8],故采用了阿里云服務器作為中央服務器的硬件載體。云服務器具有安全、可靠、穩定及可彈性增加容量等特點[9]。本系統中的云服務器配置為單核Xeon處理器,主頻2.4 GHz,2 GB 內存,40 GB 硬盤,1 Mb固定IP 帶寬,操作系統為Windows Server 2013。
為了實現多地分布式部署,一個系統中允許存在多個計算工作站集群,每個集群中都有一臺專門的服務器作為集群服務器,由其與中央服務器以及嵌入式設備進行通信,然后再轉發給與它連接的各臺GPU 工作站。集群服務器需要運行大量的通信進程以及調度進程,同時需要保存大量原始數據和計算結果,故對CPU 核心數量、內存容量以及存儲空間要求較高,本系統中集群服務器使用了一臺搭載i7-8700k 處理器、64 GB DDR4 內存、1 TB 固態硬盤、12 TB 機械硬盤的工作站,并為其開通了50 Mb 帶寬的固定IP,操作系統為Ubuntu 18.04。
一個集群內部會部署多臺GPU 工作站,GPU 作為AI 計算的實際主體,為了盡可能多部署GPU,每臺GPU 工作站內部都擁有多塊顯卡[10]。本系統采用的GPU 工作站配置為:i9-10900k 處理器、128 GB DDR4 內存、4 塊2080Ti 顯卡、2 TB 固態硬盤、12 TB 機械硬盤,操作系統為Ubuntu 18.04。深度學習框架支持主流的Tensorflow、Keras、Pytorch、Caffe 等[11]。
嵌入式端采用最新推出的樹莓派4B 作為主控板,其搭載了1.5 GHz 四核A72 核心CPU,500 MHz的GPU,2 GB DDR4 內存,802.11ac 無線網卡,千兆有線網卡,USB3.0 接口。四核心的高性能ARM核心搭配大容量的內存,使其能運用多線程技術來很好地支持數據采集工作,千兆網口和802.11ac無線網卡的配備使其能很方便地接入有線網絡或Wi-Fi 網絡。再結合小巧的體積和低功耗、低發熱設計,完善的操作系統適配,使其極其適合作為本系統的嵌入式端核心板,操作系統采用其官方系統(基于Debian 開發)。
本系統是一套面向實際應用的可彈性部署的分布式AI 計算系統,當前整套系統跨越了Windows、Ubuntu、Debian 這3 個操作系統,且未來很可能會移植代碼至不同的操作系統進行運行。為了實現代碼能方便地進行跨系統開發,我們選定了C++作為主要開發語言,并且采用Boost 這個實際意義上的C++標準庫來實現代碼與操作系統無關的特性。同時,在深度學習模型中,調用部分采用Python 編寫,采用C++調用Python 的方法將兩者融合。C++和Python 這2 種語言都具有很好的跨平臺適配能力,C++擁有極高的運行速度,多用于系統、平臺框架開發;Python 具有開發方便、工具包眾多等優點,在人工智能等領域被廣泛采用。C++與Python 的混合開發,使整個系統兼具運行速度快和開發方便的優點。
在通訊程序部分,本系統采用了Boost.Asio作為通訊框架,以TCP 為通信協議。本項目需要傳送大量文件數據,TCP 相比UDP 擁有更好的可靠性,能很好地支持系統工作。通訊模式采用異步非阻塞模式,以實現在盡可能少占用資源的情況下進行大量設備的連接和數據收發[12]。在本系統中,服務器端和客戶端各自擁有一個處理交互類,在該類中,定義了一系列收發處理函數及超時檢測等函數。因異步非阻塞通信的特殊性,為了實現錯誤重發和文件收發等功能,在類內定義了一個保存狀態的標志位。默認狀態標志是normal,服務器在該狀態可以接收客戶端發送的字符串信息。接收到字符串后,按照指定格式解碼字符串,從而提取到客戶端的需求,如:登陸、心跳檢測、信息傳輸、文件發送請求等。接著服務器端調用相信函數處理客戶端需求后并回傳結果信息。以收發圖像為例,如客戶端發送的字符串屬于請求發送圖像,則該字符串內同時會包含圖像文件大小等信息,此時服務器的狀態和客戶端的狀態標志都會改變為收發文件狀態。下一步客戶端會在收到服務器回信后發送文件,服務器端則會啟動一個循環接收的程序,直至收到的文件大小等于上一步中客戶端發送的文件大小值,收發成功后,服務器和客戶端的狀態再次回歸normal,如出錯則再次進行文件傳送。
中央服務器是整個系統的核心節點,其擁有固定公網IP 且開發特定端口允許設備連接,其核心功能由3 部分構成:與集群服務器通訊程序、與嵌入式端通訊程序、與其他服務器通訊程序,
如圖2 所示。中央服務器支持負載均衡功能,能為用戶設備提供最合適的算力分配。中央服務器內部擁有一個儲存各個集群服務器實時狀態信息的vector,該vector 內的信息每秒會更新一次。當中央服務器收到嵌入式端計算請求后,會遍歷該vector,首先檢測哪幾個集群服務器能提供滿足該計算需求的計算能力,接著對比這幾個集群服務器負載壓力,找出壓力最小的那個服務器集群并將其連接方式轉發給嵌入式端,以此實現負載均衡,平衡各個集群的計算壓力。

圖2 中央服務器
2.1.1 與集群服務器通信
該模塊能管理接入的集群服務器信息,其內部擁有一個vector 用于存儲集群服務器的信息,包括連接模式、IP 地址、端口、當前負載、支持運行的模型名稱及其版本等。
其首先會啟動一個異步非阻塞模式的通訊服務器端用于接收集群服務器的連接。當一臺集群服務器進行接入時,服務器端會先接收到一條帶有login 標志為用戶名及密碼的字符串,可以以此進行身份校驗,防止惡意接入。身份校驗通過后,服務器會接收到一條字符串信息,解碼該字符串即可獲取其連接方式,該信息將用于轉發給嵌入式端。以上步驟完成后,服務器端會每秒和集群服務器通信一次,接收其發送的實時負載狀態并更新vector 中對應位置的信息。
2.1.2 與嵌入式端通訊
該模塊負責與嵌入式設備進行通訊,工作模式為異步非阻塞。當嵌入式設備接入時,同樣會首先進行賬號和密碼驗證,確認無誤后進一步接收設備需要計算的模型信息。接著該模塊開始檢索存儲有集群服務器信息的vector 列表,找出支持該模型計算的、且當前負荷最小的那個集群,進一步取出該集群的連接方式等信息后轉發給嵌入式端,待嵌入式端接收完畢后,中央服務器會斷開連接以減少整個系統的負荷。
2.1.3 與其他服務器通訊
此模塊主要與其他服務器,如數據庫服務器、管理服務器進行通訊和信息交互,通訊模式為同步阻塞模式,屬于客戶端。此模塊屬于對外交互模塊,主要用于上傳狀態信息、計算結果等信息給其他服務器,同時可以幫助中轉其他服務器的指令給嵌入式端。
集群服務器扮演著一個計算集群的管理者的角色,也是整個集群對外交互的唯一設備。其作為一個客戶端與中央服務器進行通訊,用于上傳自身的連接方式和實時狀態信息,同時其自身也作為一個服務器端與嵌入式端進行通訊,將需要計算的數據分發給各個工作站,如圖3 所示。

圖3 集群服務器
由于部分復雜任務需要依次經過多個模型進行計算才能完成,如先經過一個Mask R-CNN模型,再經過一個ResNet[13]才能輸出結果,所以集群服務器內部維護著一個上下文列表,這個上下文列表記錄著每個任務需要依次調用的模型以及模型的版本。當一個計算任務到達時,集群服務器會先檢索這個上下文列表,尋找到該任務需要進行的計算步驟,然后依次將該數據發送給進行對應任務的GPU 工作站進行計算,并取回結果。
集群服務器管理著一個集群內部的所有GPU工作站,它會建立一個通訊服務器程序,當GPU工作站上的各種計算程序接入后,就會被集群服務器進行集中管理,實時監控各個任務的計算負荷、模型名稱和版本等數據。
GPU 工作站集群由多臺GPU 工作站構成,每臺都安裝有多塊高性能GPU,每一塊GPU 視部署的模型大小可以運行一個或多個任務進程,每一個進程都是一個獨立的程序。
當一個計算進程啟動后,會首先調用Python加載深度學習模型,同時讀取該模型的記錄文檔,獲取模型名稱和版本信息。以上步驟完成后,該進程會啟動一個Python 版的Socket 程序主動連接集群服務器,身份校驗以及字符串解碼等格式與本系統中其他部分的通信程序一致,不同的是此處采用同步阻塞模式,可以大大減輕編程復雜度。依托通信程序,GPU 進程能告知集群服務器自身的模型版本以及負載壓力等信息,后續當收到集群服務器發送的圖像數據后,GPU 立刻開始計算并返回計算結果。為了提高軟硬件運行效率,每一個計算進程都支持數據緩存隊列,會提前接收后續數據放入隊列中,這樣可以減少每次計算的數據等待時間。
當前存在很多熱門的深度學習框架,而一個任務很可能在不同的處理階段需要依賴不同的框架進行計算。為了實現對多種深度學習框架的支持,本系統允許各個計算進程在單獨的Python 環境中運行。即利用Anaconda 生成多個獨立的深度學習環境,分別安裝不同的深度學習框架[14],然后再在各個框架內建立任務進程。各個進程都依靠網絡通訊單獨與集群服務器建立連接,再依賴集群服務器的上下文管理功能進行任務調度,這種模式有效避免了不同深度學習框架依賴庫版本不同而導致的系統混亂,完美實現了一個系統內多種深度學習框架的共存。
嵌入式端是用戶使用的設備,當用戶有數據需要云端進行計算時,其首先會以客戶端的身份連接中央服務器的通訊端口,同時上傳自身的身份驗證和任務需求,在接收到云服務器返回的計算集群連接信息后,斷開與中央服務器之間的連接。接著又以客戶端的身份連接集群服務器,支持以IP 和網址的形式進行連接,在連接到集群服務器后,同樣是先進行身份驗證,然后再上傳任務需求和所需計算的數據,如圖4 所示。因為嵌入式端需要計算的往往是圖像數據,以項目中經常需要計算的3D 圖像和RGB 高清圖像數據為例,單份數據的體積往往能達到3 MB。為了盡可能地減少網絡資源占用及降低通訊延時,同時為了防止數據在公網進行傳輸時發生泄密,需要在數據發送前對其進行一定壓縮及加密[15]。最后,嵌入式端會等待集群服務器回傳計算結果,一次完整的計算過程便完成了。

圖4 嵌入式端
為了使本套系統能符合項目使用需要,故列出如表1 所示性能指標。

表1 系統性能指標
本系統采用Boost.Aasio 作為核心通信框架,相比經典的Socket 通信程序,Boost.Asio 可以看成是Boost 庫對Socket 的進一步封裝,能更好地支持異步通信模式。相比ACE 等通信框架,鑒于Boost 庫已經成為事實上的C++標準庫,其自帶的Asio 擁有比ACE 框架更加容易安裝和使用的優勢。
在實際測試場景中,中央服務器帶寬為1 Mb,計算集群帶寬為50 Mb,嵌入式端上行帶寬受用戶實際使用場景不同而不同。每份數據經過壓縮后約為0.6 MB。因為每個設備不是連續發送數據的,經測試,整個系統可以同時為超過50 臺設備提供服務,同一時刻并發接收8 個設備上傳數據,基本接近了網絡帶寬極限。在客戶端連接數量方面,實測最大可保持連接數可保持500 以上,短時可保持1 000 以上。
模型計算方面以GPU 集群中部署的Mask RCNN 模型為例,計算一張圖像的平均時間約為0.15 s,數據傳輸時間受用戶上行帶寬不同而不同,按平均0.2 s 計算,設備端完整運行一次云計算的時間花費約0.35 s,完全滿足用戶需求。
經測試,整個程序可完美兼容Ubuntu、Mac OS、Windows 這3 款主流操作系統,支持C++和Python 混合編程,對Tensorflow 和Pytorch 這2 款學術界熱門的深度學習框架能很好地支持。
中央服務器工作狀態如圖5 所示。

圖5 中央服務器工作狀態
隨著嵌入式產業與人工智能產業的蓬勃發展,以及最新5G 及Wi-Fi 6 的入局,為大量嵌入式設備提供AI 計算云服務成為了一個重要的研究方向。
1)本系統構建了一套可彈性擴容、分布式部署的AI 計算系統;
2)該系統試驗期間穩定運行無崩潰現象;
3)本系統是智能養殖場景下,使用深度學習方法進行體尺計算的一種創新型方法;
4)本系統具有硬件資源利用率高、成本低、安全可靠的特點,有效解決了嵌入式設備對快速可靠的AI 計算的需求。
5)本系統很容易擴展至其他應用場景。