當前位置:
首頁 > 科技 > 拒絕空談 AI 設想!手把手教你構建實時、高可用的 AI 調度平台

拒絕空談 AI 設想!手把手教你構建實時、高可用的 AI 調度平台

當前人工智慧飛速發展,機器學習的精度和性能也在不斷提高,由機器學習引導的技術正在默默改變著大家的生活,並創造出很多新的商業機會和價值。

人工智慧目前最直接的出發點就是讓計算機能將人眼看到的、人耳聽到的媒體轉化為計算機可以理解的對象,計算機只能處理量化的數據和信息,對於如何從音視頻和其它媒體中挖掘出其內在的數據是人工智慧領域在不斷探索的方向,因為數據即價值。目前視頻和圖片資源數據量巨大,如果能將其中的數據挖掘並量化出來,將產生巨大的商業價值。

從目前技術方向看AI還是比較接地氣的技術方向,我們不斷看到越來越多AI真實落地的場景,並切實的解決人們工作生活中的問題。目前生產系統中大多深度學習推理計算任務(Inference)基於單機作業,對於商業化的系統,當Inference任務量很大的時候沒有合適的平台適用。

傳統大數據平台大都專註於數據和計算,而機器學習任務則更關注演算法並且需要提前載入模型,而且需要對連續的有關聯性的數據做分析跟蹤等處理,所以設計一款Scale Out、實時性和高可靠的調度平台非常重要。

計算設備

CUDA的廣泛應用造就了GPU計算的崛起,用NVIDIA的顯卡進行深度學習的加速訓練是最常用的一種設備,其中使用最多的是GTX1080 Ti顯卡,不過NVIDIA聲稱不再支持用戶消費級顯卡進行深度學習訓練,這樣以後只能買更昂貴的Tesla GPU,所以以後發展成什麼樣還是個未知數。

CUDA GPU計算除了這種高功耗的顯卡,還有NVIDIA Jetson TX2這種低功耗嵌入式平台,這種平台的CPU是ARM架構,GPU是Pascal GPU。

圖1 NVIDIA Jetson TX2

對於移動端或許不能使用CUDA的平台則直接使用CPU進行計算,並結合NNPACK庫進行加速,NNPACK由Facebook開發,是一個加速神經網路計算的加速包,NNPACK可以在多核CPU平台上提高卷積層計算性能,通常會有2-3倍的性能提升。

Movidius是英特爾推出的基於Myraid2晶元的神經元計算棒,將所有的功能封裝到了U盤大小的設備中,用戶只需要將計算棒插入USB介面中,就可以進行高效的機器學習推理任務。

通常只需要一個樹莓派級別的載體作為宿主機就可以直接使用,如果單個計算棒的性能不夠,還可以使用多個進行加速,取得線性加速比。

深度學習平台

目前機器學習實踐的過程主要有兩個階段,首先是模型訓練,用標註數據集對目標場景進行訓練,使模型足夠收斂,達到一定精度。然後是用訓練好的模型進行推理,對新數據進行分類檢測,提取媒體數據中的特徵數據。

目前常用的深度學習平台主要有TensorFlow、Keras、MXNet和PyTorch等,各有優缺點,目前還沒有哪一個具有絕對的優勢,處於百花齊放的階段。

調度需求

目前AI正在飛速發展,所以計算設備比較多樣,計算環境往往是異構的。包含桌面機、GPU伺服器和移動端等一些低功耗平台,同時也可以直接使用雲端GPU資源組成Hybrid計算環境,這些需求對調度的框架提出了新的要求:

實時性:實時性能大幅提高AI場景的用戶體驗,和離線的大數據處理不同,需要以最低的延時處理完深度學習計算任務,比如無人機上的圖像處理,需要以幾乎實時的性能完成深度學習計算;

高可用:對一些特徵提取的場景,數據的完整性非常重要,單個節點的故障不會引起業務的中斷,調度系統需具備HA和Failover功能;

Scale out:對於AI企業來說,以靈活的方式擴展計算能力顯得非常重要,不同的用戶會提出不同的部署模型和不同的調度策略,當計算任務增多的時候,橫向擴展便非常必要;

細粒度:不同的深度學習模型具有不同的網路深度,對資源的消耗也不盡相同,較深的網路需要較大的內存或者顯存,同時有些網路後處理需要較多的CPU時間;

多維度:目前深度學習的網路層數也是比較多,層數越多模型就越大,這就要求消耗更多的顯存和內存。也有一些經過刪枝精簡的模型適用於Mobile平台和其它低功耗平台,每種計算模型對GPU、CPU、顯存和內存的需求都不一致,所以必須使用多維度MDS(multidimensional scheduling)對資源進行分配和均衡。

圖2 系統架構

設計實現

1、多級調度

深度學習計算任務的處理過程是將原始數據放到神經網路中進行卷積和各種運算處理,所以運行之前需要先把網路模型載入到內存或者顯存中,模型的載入和卸載需要較大的時間,所以一次模型的載入需要儘可能多的處理數據,但是作為調度系統考慮到balance,不能佔用太長時間,所以需要對每個提交AI計算任務的session定義如下資源佔比:

Fixed Workers:系統中只要有可用資源就優先分配足額的worker數量,這些worker是pre-start,以最快的速度來處理session中提交過來的計算作業,確保用戶的計算作業能及時得到處理,保證作業處理的實時性;

Dynamic Share Ratio:當fixed workers配置的資源不能滿足作業的計算需求,導致session中pending作業較多的時候,通過配置dynamic share ratio,按照配置的資源使用份額,申請額外的worker來加速處理當前session,所有session中的pending作業競爭按照share ratio比重分配可用資源。

2、Scheduler Policy

調度系統支持以下調度策略:

先來先服務:默認調度策略,先提交的作業優先調度派發作業到滿足資源需求節點運行;

優先順序調度:對作業和session設置不同優先順序,調度系統有限處理高優先順序的作業;

獨佔式調度:獨佔式調度可以讓作業獨佔節點的計算資源。調度系統把作業調度到滿足資源需求得節點,在作業完成前,不會讓其他作業使用該節點資源,從而實現獨佔該節點資源的目的;

搶佔式調度:搶佔式調度可以讓一個處於等待狀態的高優先順序作業,強行搶佔一個正在運行的低優先順序作業的計算資源。使得高優先順序作業可以使用該計算資源,低優先順序的作業在高優先順序作業完成後,會儘快的恢復低優先順序作業的運行;

GPU綁定調度:將作業調度派發到指定的GPU卡運行,避免多個作業共享GPU導致相互干擾,實現GPU的綁定調度,提高作業運行效率。

3、Scheduler Policy Plugin

隨著應用的不斷發展,用戶對調度策略也會有不同的需求,除了系統提供的調度策略,調度系統還支持用戶開發自己的調度策略,以滿足不同的作業調度需求,調度系統以插件模式方式載入用戶自定義調度策略,實現調度策略的深度定製,提高調度策略的靈活性和可配性。

4、Cloud Plugin

當本地集群沒有足夠的資源來處理時,可以通過Cloud Plugin動態申請雲端計算資源,這樣便可以組成Hybrid Cluster以增強本地集群的算力,目前可選的公有雲提供商也比較多,可以同時申請多個公有雲的資源組成多雲Cluster。

5、資源的分配和計算

調度系統提供2種資源分配和計算的方式,一種是按照每種模型作業的資源需求固定分配,一種是通過調度系統自動調整每種模型作業對資源的需求,實現自適應的資源分配。

固定分配:作業在申請計算資源時,如果通過調度系統按照作業的需求分配資源,有可能會出現作業申請資源過多,作業在實際使用計算資源時沒有充分利用現有的計算資源,導致計算資源的浪費。因此調度系統提供資源固定分配模式,每種模型作業按照使用的經驗值,配置模型作業的資源消耗,調度系統在啟動作業時會自動計算系統所有的資源池,按照節點的負載信息和作業資源配置情況給每個作業分配相應的資源,確保作業能分配到滿足的資源,不會引起資源的競爭,提高資源的使用效率,待作業運行完畢,調度系統及時將作業的資源回收,下一輪調度時,分配給其他作業使用;

自適應分配:當作業的資源需求配置和實際使用的資源誤差較小時,固定分配模式能滿足每種作業的資源需求,但是如果配置的資源需求和作業實際使用過程中使用的資源誤差較大。比如模型載入後,不同的輸入數據對資源的需求都不一樣,如果配置固定的資源需求,會導致部分作業資源需求得不到滿足,實時性得不到保證,而部分作業又使用不完分配的資源,導致了資源的浪費,調度系統提供資源自適應分配方式,作業啟動時,先給作業分配一個最低閾值的資源需求,然後調度系統在運行過程中,不斷收集作業資源使用情況,根據作業實際資源使用情況,動態調整作業的資源需求,實現自適應的資源分配,提高資源的使用效率。

6、API

調度系統提供相應的API開發介面,方便對調度系統進行定製化開發,滿足用戶的特殊需求,主要提供以下API介面:

集群:查詢集群狀態、集群相關信息;

作業:實現作業的提交、查詢和控制等;

節點:節點狀態查詢、資源監控和節點控制等;

調度策略:實現用戶自定義的調度策略;

資源:查詢集群資源使用情況、吞吐量等。

7、Block Host/GPU

人工智慧作業在應用中對計算任務的順序和完整性有比較高的要求,比如視頻的計算任務需要按照視頻幀的順序進行處理完整才能得到最終能的統計數據。所以對集群的硬體計算設備有比較高的要求,調度系統提供以下2個功能,方便實現硬體的擴展和維護:

Block GPU:基於成本考慮,大部分企業不會直接選擇Tesla GPU進行計算,一個Tesla P4專業GPU的價格是GTX1080Ti的4-5倍,但是性能卻只有2倍左右, 當然GTX1080Ti是消費級的GPU,作為企業應用的話穩定性肯定比不上Tesla P4,所以一定要考慮GPU出現故障的場景,這時候就需要單獨Block故障GPU,在調度系統中標記排除,不再將作業派發到這類GPU,確保計算作業的正常處理,但是其他可用的GPU可以繼續分配作業使用;

Block Host:作為長時間運行的GPU伺服器也有可能隨時出現故障導致作業不能正常結束,調度系統通過命令行介面,可以Block該故障機器,將機器標記成不可用狀態,確保沒有新的作業派發到該節點運行,以免影響整個作業執行的順序和完整性。另外,如果需要對該節點進行維護升級,可以通過Block Host功能,在不影響已經運行的作業情況下,調度系統不派發新的作業到該節點,直到節點上的作業運行完畢,方便對設備進行維護升級。

8、High Available

HA在商業系統中是不可或缺的功能,往往體現在系統設計的各個層面。

作業維度:作為調度系統,必須保證每一個提交進去的作業被正確執行,作業運行過程中很有可能因為各種原因發生錯誤,首先需要做的就是本地Retry,當本地Retry到一定次數後需要考慮Host環境因素由調度系統調度到其它機器進行Retry,如果再次失敗到一定次數,可以標記Task為Fail。另外,對於支持檢查點的作業(checkpoint),調度系統提供介面支持定期對作業進行checkpoint,方便作業及時恢復和遷移,對於不支持檢查點的作業,調度系統對每個作業的運行狀態記錄相應的events,當調度系統重啟後,能根據events恢復作業的運行狀態,確保作業的正常運行;

GPU維度:AI計算使用的GPU一般都是高端顯卡,功耗有比較大,在測試和應用場景中經常會發生GPU無法使用的作業,當一些作業連續在同一個GPU上失敗後,調度系統需要將該GPU標記,並在後續的調度中排除該GPU的使用,確保作業能正常的運行;

節點維度:類似於GPU維度,調度系統如果檢測到計算主機不可用,需要將該主機上目前運行的任務重新分配到其它計算節點繼續執行,將該計算主機標記並排除到後續的調度中,同時當該主機恢復後能繼續加入到計算列表中進行任務分配;

Scheduler維度:Scheduler具有Master scheduler和Slave Scheduler,通過ETCD選舉Leader進行調度,Scheduler需要啟動多於3個節點,當Master Scheduler進程離線後,ETCD可以確保選出一個新的Mastre scheduler接管當前的調度任務,同時Master Scheduler需要實時同步當前資源分配計划到ETCD cluster,在新的Scheduler啟動後快速從ETCD同步數據恢復現場,保證集群可用性。

9、演算法編排

一個完整的人工智慧應用,在一個流程中可能會用到好幾個模型演算法,為了能快速適用於不同客戶的AI需求而不用頻繁修改代碼,需要能快速組織出一個新的流程,類似於集群和容器的編排,演算法編排用於快速定義一個機器學習程序的計算流程以實現一個完整的商業需求。

將不同的演算法功能模塊抽象為公共演算法模塊,這些演算法模塊組織成流水線來完成一個完整的演算法輸入和輸出。輸入參數為採集過來或者實時的原始數據,比如文本、視頻、圖片和視頻流等,輸出就是具體檢測跟蹤或者提取的結構化數據,可以用來存儲到關係型資料庫或者NoSQL資料庫。

通過模型編排組織起來的演算法流水線能夠以最快的速度進行AI處理,可以極大提高AI產品的實時性和性能。

圖3 演算法編排

作者:呂金明,系統架構師,長期從事分散式計算以及大數據相關的研發工作,以及大數據產品的集成,如Spark、Docker、Kubernetes、Tensorflow等開源框架及技術。李鬆鬆,高級軟體開發工程師,一直從事分散式計算、集群作業調度系統以及HPC相關的研發工作。

聲明:本文為作者投稿,版權歸其個人所有。

熱 文推 薦

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 CSDN 的精彩文章:

為什麼大公司一定要使用 DevOps?
公開薪資後,我會被解僱嗎?

TAG:CSDN |