如何構建線上線下一體化 AI PaaS 平臺

UCloud技術發表於2018-12-17

11月30日至12月01日,UCloud受邀參加了由51CTO主辦的“WOT2018 全球人工智慧技術峰會”。作為推動人工智慧務實創新的年度重要技術會議,UCloud與千餘名參會者共聚一堂,不但探討了如何讓人工智慧技術為行業賦能,還進行了題為《如何構建線上線下一體化AI PaaS平臺》的主題分享。

如何構建線上線下一體化 AI PaaS 平臺

下面是演講內容的部分整理。

構建AI平臺的技術挑戰

在AI落地之前,大部分企業首先會面臨的第一個挑戰就是基礎環境構建的複雜性:AI框架的多樣選擇,環境的諸多變數、硬體的諸多變數以及底層資料儲存的諸多變數。以上這些交叉組合之後直接導致了一個情況:如果需要構建完整的一套軟硬體組合的系統,而每一條業務線都有不同需求的時候,多環境維護就會變得異常痛苦。其次,需要在AI系統建設時考量演算法的相容性、平臺的擴充套件性、彈性伸縮的能力、容災能力等以應對平臺的橫向和縱向擴充套件。最後一點也是現在普遍出現的挑戰,即公有云和私有云如何整合開發。

AI平臺技術挑戰的解決思路

針對以上三大技術挑戰,主講人UCloud AI平臺技術專家 宋翔博士向參會者提出了他的五大解決思路。

如何構建線上線下一體化 AI PaaS 平臺

環境分離。首先是算力的分離,透過整個容器技術將CPU、GPU等環境給統一化,使用者只需提供對應的容器。其次,針對GPU、CPU對應的不同硬體封裝全部由系統去處理,這樣的益處在於對於使用者而言他所需面對的只是一個容器。同時,UCloud在底層也專門做了一個資料接入層,這個接入層會把大量各式各樣的資料統一成本地儲存和NFS。這樣處理之後,使用者可省去關注大量儲存介面接入的工作,這也是整個環境分離的一個核心思路。容器分離的優勢在於使用容器之後,每一個任務其實都是獨立的執行環境,所以不同任務之間不會出現軟體衝突。第二,UCloud會提供很多預裝的容器,所以企業/個人可以節省很多環境準備的開銷支出。此外,對於容器來說,企業/個人可自由安裝各類軟體包,封裝各類演算法。容器同樣也可重複使用,基於某一個容器去做自己的分支,打包不同的演算法進去也未嘗不可,可重用性很強。最後也是比較突出的一點是容器映象可以在任意型別節點執行。GPU的容器可以在任意GPU的節點上去跑,CPU的容器也可以在任意的CPU節點上去跑。這使得每一個映象均可以在不同的環境中執行,這樣的相容性和通用性在真正實際應用部署過程中優勢突出。

環境分離的第二部分是資料接入。我們團隊在整個平臺設計過程中的理念就是讓使用者專注於業務程式的編寫,其它如介面轉譯、頻寬控制、許可權控制等交由一個軟體接入層去管理。這樣的好處第一,計算節點不需要支援各種儲存介面,僅需要透過2-3種(例如本地儲存、NFS)介面就可以對接各類儲存型別。第二,透過擴充套件資料接入層可接入的儲存型別,就可以擴充套件AI平臺的資料接入型別。第三,資料接入層可以做資料流量控制,確保各個任務的SLA,同時對後端的資料儲存系統進行頻寬、流量保護。第四,整個接入層還以做一些許可權控制,以便不同的人共享資源時確保資料安全性。

如何構建線上線下一體化 AI PaaS 平臺

分散式化。分散式化首先解決了節點當機的問題,可做到容災。其次可做到資源共享。以UCloud的AI訓練服務平臺和AI線上服務平臺舉例。訓練平臺的核心就是管理GPU資源,我們做一個橋樑把使用者的演算法和資料進行一個連通,這樣一來,對於任何任務在任一GPU節點上去執行的時候,它都能訪問自己的資料。企業/個人無需關心資料獲取的來源、打通方式及維護GPU節點或叢集,這些工作將全部交給平臺管理。而線上推理平臺,對於使用者而言,則只要關心業務的邏輯開發,開發一個單節點能用的AI服務即可。平臺會負責做負載均衡、容災、管理任務、彈性的擴(縮)容等工作。

模組化。呼叫資源時我們團隊做了一個適配,即企業/個人既可以使用UCloud自己的資源管理平臺也可以用K8s或是OpenShift。此時你會發現整個平臺可以對接不同的資源管理系統。我們使用資源管理系統的目的是讓它能管理資源,給到使用者資源狀態的反饋。同時實際任務的排程和下發都由核心平臺去做。這樣,整個平臺系統就變成了三層結構,最上層就變成了一個靈活層,實現快速對接各種各樣的不同軟體環境。這即是前後分離。

如何構建線上線下一體化 AI PaaS 平臺

可擴充套件性。在完成上述操作後,整個系統的擴充套件性會非常強。如果有增加新的儲存模式或者擴容儲存的話,企業/個人的開發只是在資料封裝層,無需開發到應用裡去。對於整個叢集而言,因為所有任務已經全部分散式化了,所以可以快速地部署第二個第三個叢集,平臺甚至支援對一個叢集進行快速擴充。

資源共享。透過之前的原理介紹,想必大家不難發現我們UCloud開發的這兩個平臺其實就是一個平臺。CPU叢集、GPU叢集、儲存叢集均是可以共享的。這兩個互通平臺甚至可交付給幾百幾千人共享資源,資源的使用率就這樣被大幅提升。

原理介紹之後必然是實踐,UCloud AI實驗室在過去的兩年分別構建了公有云AI平臺和私有云AI平臺。下面是這兩個平臺的構建方法簡述。

如何構建公有云AI平臺

公有云的AI平臺是基於UCloud自己的公有云產品線上構建的,完全是在UCloud的雲主機或者物理雲主機上搭建環境,用的容器及負載均衡也都是UCloud本身提供的服務。整個系統的架構如下圖示:

如何構建線上線下一體化 AI PaaS 平臺

UAI-Train的底層對接所有儲存, GPU資源像一個池子一樣被管理起來。平臺同時支援分散式訓練、單接點的訓練以及互動式的訓練。所有的訓練對於使用者來說,可能只是一個任務,但平臺會根據不同的訓練需求及所需的資源需求去適配不同的硬體裝置,去協助完成這一任務。而UAI-Inference展現給使用者的則是一個圖形介面,包括服務的請求數量、客戶到底呼叫了哪些應用、計費資訊等。但底層的如APP使用了多少節點、是否需要做擴(縮)容等都是平臺自行處理。整套系統全部是容器化的,可以做很多封裝。並且我們也提供很多開源系統的映象包括開源演算法的線上服務映象等,這些映象就像是案例,如果企業/個人需要快速去驗證部分應用的話可直接拿去使用試驗。

UAI 公有云平臺也具備了很多功能:1、自動排程。平臺會依託整個UCloud的GPU資源池,提供足量的GPU去跑任務,由系統自動選取空閒的節點。如此一來,當沒有任務提交的時候也不會有任何的成本開銷。2、強擴充套件性。當後臺運營期間發現整個GPU的需求量上升的時,UCloud GPU資源池裡的資源可擴充套件到平臺裡去,同時平臺也可對接UCloud自身的海量儲存資源。以確保訓練任務的正常執行。3、負載均衡。在UAI-Inference裡,使用者部署的APP或者其它應用,系統是會自動協助做負載均衡。第一層從交換機開始做,中間有我們UCloud的負載均衡器(LVS、ULB),再下一層是排程演算法,協同將所有任務打散至各個計算節點上去。如遇節點掛掉,系統將第一時間幫助使用者去補足量的節點。4、高可用的容災能力。整個系統會部署在多個Set裡面,如果業務量和節點數較多時,會被打散在UCloud不同的可用區裡面,哪怕某一個機房出現斷電或者擁堵的情況,另外一個機房的節點還能夠提供部分的有損服務。5、基於秒級/分鐘級的計費規則,按需收費。我們團隊將計費從傳統的按年按月按小時的計費方式直接縮成了按分鐘或者按秒的計費方式。對於使用者而言,無論是使用UAI-Train還是UAI-Inference,,每一分錢都是用在刀刃上的,無需擔心大量前置資源的浪費。任務一旦結束,計費也就停止了。

如何構建私有云AI平臺

其實,私有云的AI平臺構建部分與公有云很相似,從下圖中我們不難看出核心層幾乎是一致的。底層依賴的資源也依舊是CPU與GPU。

如何構建線上線下一體化 AI PaaS 平臺

發生變化的是接入層及上層介面。最重要的變化是許可權管理、資源管理和資料管理這一塊即與使用者的私有云做整合,按照UCloud的API去開發,使使用者整合出一套自有的許可權管理或者賬號管理體系,包括儲存體系也是這樣去操作。另外,現階段開發的私有云平臺版本是基於超融合技術。如此一來,在私有云上去部署演算法和應用就變得非常容易,使用者只需要把演算法推到演算法庫,然後演算法庫可以利用AI平臺把演算法部署到AI平臺上去。同時這個超融合平臺還自帶容器平臺,容器平臺可以部署一些接入的容器,即業務容器。使得業務容器和演算法容器透過內網的連線打通,變成一個服務。私有云AI平臺與公有云平臺一樣具備很多優勢:1、提供預置AI基礎環境。包括NVIDIA GPU驅動、Cuda、TensorFlow/MXNet等框架。使用者無須進行復雜的環境安裝、配置工作。2、提供一站式AI服務。包括AI訓練平臺和AI線上服務平臺,使用者無須自行搭建複雜的AI平臺。3、系統可自由橫向擴充套件。可以根據需求規模自行定義。4、縱向擴充套件力強。使用者可自由對多種計算、儲存、網路資源型別進行選擇合適組合。5、可快速定製使用者賬號許可權、資源管理等功能。

相關文章