百度AI原生云实践: 基于容器云打造 AI 开发基础设施
導(dǎo)讀:眾所周知,AI的發(fā)展離不開三大要素:數(shù)據(jù)、算法和算力。
算法、算力、數(shù)據(jù)三者相互影響,組成了AI技術(shù)發(fā)展突破的基礎(chǔ),也推動(dòng)了人工智能在產(chǎn)業(yè)場(chǎng)景下的應(yīng)用。
同時(shí),不同場(chǎng)景與應(yīng)用,對(duì)底層資源提出了更高的要求,應(yīng)用的多元化需要更完善的硬件與軟件系統(tǒng)來(lái)提升開發(fā)效率,因此基礎(chǔ)設(shè)施也在一定程度上制約著人工智能的發(fā)展。
如何構(gòu)建包括硬件、平臺(tái)、框架在內(nèi)的AI開發(fā)基礎(chǔ)設(shè)施,實(shí)現(xiàn)降本增效,滿足當(dāng)前人工智能落地應(yīng)用的需求?
百度交出了一份名為『AI原生云』的答卷。
本文根據(jù)百度技術(shù)沙龍?jiān)圃鷮?chǎng)賀龍華講師的分享內(nèi)容整理而成,主要包括三個(gè)部分:
1.AI 開發(fā)領(lǐng)域現(xiàn)狀
2.打造基于容器云的企業(yè) AI 開發(fā)基礎(chǔ)設(shè)施
3.常見落地場(chǎng)景(開發(fā)、訓(xùn)練、推理)分享
1. AI 開發(fā)領(lǐng)域現(xiàn)狀
目前,行業(yè)應(yīng)用進(jìn)入全面 AI 原生化階段,智能家居、智能金融,自動(dòng)駕駛、智慧醫(yī)療、智能零售、智能制造,工業(yè)的智能制造等行業(yè),都在廣泛應(yīng)用深度學(xué)習(xí)和機(jī)器學(xué)習(xí)技術(shù)做AI場(chǎng)景的應(yīng)用。
而在 AI 開發(fā)工程領(lǐng)域,挑戰(zhàn)和趨勢(shì)主要有以下三點(diǎn):
- 更大的數(shù)據(jù)和模型。數(shù)據(jù)越來(lái)越多,比如我們經(jīng)常接觸到的百度的搜索數(shù)據(jù),工業(yè)互聯(lián)網(wǎng)涉及的機(jī)器數(shù)據(jù)等,這些數(shù)據(jù)都在呈現(xiàn)指數(shù)級(jí)增長(zhǎng);模型越來(lái)越大,自2018年谷歌提出BERT 模型以來(lái),以BERT、GPT等為代表的模型越來(lái)越往「大」這一方向發(fā)展,短短3年時(shí)間,模型參數(shù)已經(jīng)從最初3億,擴(kuò)張到萬(wàn)億規(guī)模。
- 有了大規(guī)模的數(shù)據(jù)之后需要更大規(guī)模的訓(xùn)練,如何實(shí)現(xiàn)更快的訓(xùn)練便成了一個(gè)亟待解決的問題。
- 企業(yè)在應(yīng)用AI場(chǎng)景過程中投入的成本越來(lái)越高。
對(duì)應(yīng)的,整個(gè)行業(yè)對(duì) AI 開發(fā)基礎(chǔ)設(shè)施的訴求也有三點(diǎn):
- 高性能,數(shù)據(jù)模型越來(lái)越大,對(duì)性能要求越來(lái)越高。
- Serverless 化,傳統(tǒng)的算法工程師很少會(huì)用到基礎(chǔ)設(shè)施平臺(tái),他們對(duì)模型訓(xùn)練和 AI 標(biāo)注等方面的內(nèi)容比較陌生,比較希望可以用Serverless 化的方式來(lái)簡(jiǎn)單的完成 AI 的推理和訓(xùn)練。
- 高利用率,客戶購(gòu)買了幾百?gòu)埢蛘邘浊埧?#xff0c;如何把這些卡的利用率提高?
針對(duì)以上三個(gè)挑戰(zhàn),百度提出了相應(yīng)的解決方案,來(lái)解決如何快速、低成本的訓(xùn)練大規(guī)模數(shù)據(jù)與模型的問題。
2. 打造基于容器云的企業(yè) AI 開發(fā)基礎(chǔ)設(shè)施
2.1 百度 AI 異構(gòu)計(jì)算平臺(tái)
如上圖所示,最底層是 AI 計(jì)算,百度提供特殊的機(jī)型支持大規(guī)模的訓(xùn)練和推理,比如自研的 X-MAN 是第一款4路 AI 服務(wù)器,支持8張 Nvidia A100 卡全互聯(lián)。網(wǎng)絡(luò)上主機(jī)之間通過 RDMA 網(wǎng)絡(luò)實(shí)現(xiàn)高速通信,硬件加速卡方面,借助自研的昆侖卡進(jìn)行硬件加速。
AI 存儲(chǔ)層,訓(xùn)練任務(wù)需要高吞吐、低延遲讀取數(shù)據(jù);針對(duì)這個(gè)場(chǎng)景,百度自研了并行文件存儲(chǔ),搭載裸金屬服務(wù)器、基于全閃存 SSD 介質(zhì),兼容以太網(wǎng)和 IB 網(wǎng)絡(luò);依靠并行架構(gòu),用戶 I/O 在客戶端和存儲(chǔ)節(jié)點(diǎn)間完全并行訪問,支持百萬(wàn)級(jí) IOPS。
在 AI 容器方面,百度做了很多加強(qiáng)。例如 GPU 的精細(xì)化調(diào)度、AI 作業(yè)的優(yōu)先級(jí)調(diào)度、AI開發(fā)框架層優(yōu)化。這些再下面會(huì)詳細(xì)介紹。
AI PaaS 平臺(tái),百度會(huì)提供包括數(shù)據(jù)標(biāo)注、模型推理,數(shù)據(jù)的管理等能力;最上層就是AI具體落地的一些行業(yè),包括工業(yè)、能源、金融等。
2.2 當(dāng) GPU 遇上容器
為什么 GPU+容器 能在上行業(yè)內(nèi)大放異彩,而不是 GPU+虛機(jī) 的組合模式?原因很簡(jiǎn)單,在過去的幾年里,使用容器來(lái)大規(guī)模部署數(shù)據(jù)中心應(yīng)用程序的數(shù)量急劇增加。容器具有其特有的優(yōu)勢(shì):封裝了應(yīng)用程序的依賴項(xiàng),以提供可重復(fù)和可靠的應(yīng)用程序和服務(wù)執(zhí)行,而無(wú)需整個(gè)虛擬機(jī)的開銷。
具體而言,首先,上圖可以看到容器和虛機(jī)最大的區(qū)別沒有一個(gè) Hypervisor 層去隔離,我們可以在很多裸金屬服務(wù)器上直接用容器掛載 GPU 設(shè)備進(jìn)來(lái)直接用,這個(gè)效率是零損耗的。傳統(tǒng)的虛機(jī)是虛擬化的狀態(tài),有一些損耗,而且彈性速度無(wú)法與容器比擬,并且無(wú)法共享 GPU 設(shè)備。
第二,容器是共享宿主機(jī)的內(nèi)核以及關(guān)鍵庫(kù),比如如 cuDNN、硬件驅(qū)動(dòng)庫(kù)等。容器是利用操作系統(tǒng)的資源隔離特性而實(shí)現(xiàn)的輕量級(jí)虛擬化技術(shù)。同時(shí)把資源消耗降低到最小,甚至是沒有消耗(因?yàn)樗峭粋€(gè)內(nèi)核的)。
第三,神經(jīng)網(wǎng)絡(luò)中不同版本的差異性較大,容器為深度學(xué)習(xí)的應(yīng)用提供了環(huán)境一致性。
2.3 百度 AI 容器服務(wù)全景圖
基礎(chǔ)設(shè)施層的計(jì)算方面提供上文提到的百度自研的昆侖芯片,自研的服務(wù)器 X-Man服務(wù)器;網(wǎng)絡(luò)方面,包含 RoCE 網(wǎng)絡(luò)、VPC 網(wǎng)絡(luò)、RDMA 高性能網(wǎng)絡(luò)等;存儲(chǔ)方面也有高速 Cache 的方案。
再重點(diǎn)看一下 AI 優(yōu)化層,GPU 調(diào)度方面,我們的方案能夠支持從容器的場(chǎng)景下采集到GPU 的型號(hào)、算力、顯存、NVLink等信息,當(dāng)然還有 GPU 所在機(jī)器的網(wǎng)絡(luò)位置信息。為什么需要感知 NVLink?NV-Link 特性使得 GPU 能夠直接訪問另一塊 GPU 的內(nèi)存數(shù)據(jù),而不需要過 PCIe 設(shè)備。在訓(xùn)練場(chǎng)景,這是非常重要的。
AI 作業(yè)的調(diào)度方面,我們引入了Volcano 調(diào)度框架進(jìn)行批量 job 的調(diào)度;AI 加速引擎百度在這塊優(yōu)化的比較多一些,比如 NCCL 通信庫(kù),百度在這之上做了一些優(yōu)化,加速硬件和軟件的通信。
AI開發(fā)框架層,支持主流的深度學(xué)習(xí)框架,包括PaddlePaddle、TensorFlow、Pytorch等,另外,在 Paddle 上面百度針對(duì)推理場(chǎng)景做了深度的算子優(yōu)化。
GPU 虛擬化方面,能夠支持 GPU 的共享技術(shù)以及 GPU 算力隔離,還有編解碼,因?yàn)?GPU 常見用于視頻的編解碼,百度的 cGPU 方案同樣也可以做到隔離;
最后是AI的專項(xiàng)優(yōu)化,GPU 精細(xì)管理和 AI 專屬鏡像,針對(duì)百度內(nèi)部有常見的的推理,比如廣告點(diǎn)擊率,會(huì)用專門鏡像做優(yōu)化,使它的效率達(dá)到最高。
2.4 百度 AI 容器特性
第一,軟件定義GPU,我們經(jīng)常聽見軟件定義網(wǎng)絡(luò),軟件定義存儲(chǔ)。AI的場(chǎng)景下,軟件可以定義GPU,可以定義GPU的算力,百度把GPU的資源分為二分之一或者四分之一粒度來(lái)管理,把GPU池化甚至云化,借助 remote CUDA 可以支持你通過RDMA網(wǎng)絡(luò)的模式把數(shù)據(jù)發(fā)送到遠(yuǎn)端 GPU Server 進(jìn)行計(jì)算。
第二,AI 容器調(diào)度,百度支持Gang、Spread、Binpack調(diào)度策略,支持 NVLink 等 GPU 架構(gòu)感知調(diào)度。
第三,加速引擎,支持通信庫(kù)的優(yōu)化還有多業(yè)務(wù)場(chǎng)景,目前在百度內(nèi)部實(shí)踐比較多,比如推薦,Feed流廣告、NLP自然語(yǔ)言識(shí)別等。
2.5 百度自研容器化 GPU 共享技術(shù)方案
上圖左側(cè)最底層是 CUDA 的 Driver,這是硬件驅(qū)動(dòng)層。
往上MPS+CUDA Driver API ,這里是用戶態(tài),在操作系統(tǒng)上能夠看到動(dòng)態(tài)庫(kù)或者進(jìn)程,MPS 是多進(jìn)程服務(wù),可以優(yōu)化多進(jìn)程使用 GPU 的算力。目前百度 GPU 的隔離方案重點(diǎn)在這一層實(shí)現(xiàn),百度目前基于MPS+CUDA HOOK,技術(shù)做到算力和顯存隔離,算力是在 MPS 上做的,用戶態(tài)是用 CUDA 的動(dòng)態(tài)庫(kù)劫持技術(shù)做到顯存的控制,算力是通過 MPS 多進(jìn)程服務(wù)做算力的隔離。
再往上就是CUDA Runtime API、Library以及用戶的應(yīng)用,用戶的應(yīng)用可以直接調(diào) CUDA 的 Runtime API 或者 CUDA 的 Dirver API。
更詳細(xì)的流程可以理解為:用戶創(chuàng)建一個(gè) Pod,通過調(diào)用Kubernetes API Server,進(jìn)行調(diào)度/擴(kuò)展調(diào)度,比如 GPU 特殊的擴(kuò)展調(diào)度器發(fā)給 Kubelet,Kuberlet 創(chuàng)建 GPU 的容器的時(shí)候掛載一個(gè)虛擬 GPU 卡,因此在容器內(nèi)部看到的卡是二分之一卡或者四分之一卡,GPU 在使用的過程中會(huì)調(diào) MPS 多進(jìn)程服務(wù),由這個(gè)多進(jìn)程服務(wù)進(jìn)行算力的調(diào)度和算力的隔離。
以上就是目前絕大部分企業(yè)和行業(yè)在用的技術(shù)方案,雖然有的企業(yè)可能做不到顯存的共享,有的企業(yè)做不到算力的隔離,但是用 GPU 的方式都是用這個(gè)模式來(lái)實(shí)現(xiàn):擴(kuò)展的調(diào)度器在 K8S上,擴(kuò)展的 Device Plugin 再到 GPU 硬件。
通過實(shí)踐可以發(fā)現(xiàn),使用 resnet50 驗(yàn)證訓(xùn)練場(chǎng)景的不同 batchsize 下, 百度自研共享方案與 GPU 直通方案對(duì)比,性能幾乎無(wú)損。
總體來(lái)說(shuō),百度在 AI 容器服務(wù)方面提供的價(jià)值表現(xiàn)在以下四個(gè)方面:
第一,高利用率,很多企業(yè) GPU 成本越來(lái)越高,容器作為 AI 的 IaaS 會(huì)著力提高GPU 的利用率,比如 GPU 的云化,GPU 的池化,還有作業(yè)的優(yōu)先級(jí)搶占級(jí)調(diào)度,GPU 的分層復(fù)用都是為了提高利用率。
第二,靈活的配置,不同業(yè)務(wù)使用 GPU 不一樣,英偉達(dá)的T4卡多用于推理和編解碼,英偉達(dá) V100 卡多用于訓(xùn)練,在調(diào)度這一層靈活配置,按需選擇 GPU 即可。
第三,規(guī)模化落地,在百度內(nèi)外部都有相關(guān)的落地經(jīng)驗(yàn),尤其在百度外部,未來(lái)會(huì)大規(guī)模推廣。
第四,AI 多場(chǎng)景的應(yīng)用,在 AI 開發(fā)、訓(xùn)練和推理等場(chǎng)景均有應(yīng)用。
3. 常見落地場(chǎng)景
3.1 AI 訓(xùn)練場(chǎng)景
百度內(nèi)部的廣告推薦場(chǎng)景有許多輕量級(jí)的模型,比如我們?cè)谒eed流或者視頻流的過程中都會(huì)涉及到訓(xùn)練,拿到用戶的特征值后進(jìn)行訓(xùn)練,圖片模型、轉(zhuǎn)化率模型等都是通過 Kubernetes 進(jìn)行介入,到計(jì)算節(jié)點(diǎn)進(jìn)行作業(yè),生成模型進(jìn)行模型部署。
這種場(chǎng)景的特性是模型結(jié)構(gòu)比較簡(jiǎn)單,對(duì)資源的要求比較低,不需要大規(guī)格的GPU卡進(jìn)行訓(xùn)練,內(nèi)存占用比較小,GPU 資源利用率一般不超過50%,通過優(yōu)化之后,可以實(shí)現(xiàn)并行任務(wù)執(zhí)行總耗時(shí)縮減40%,推薦場(chǎng)景下,GPU 資源利用率可提升50%。
3.2 AI 推理場(chǎng)景
訓(xùn)練的目的就是為了推理,百度有些商業(yè)產(chǎn)品需要預(yù)估收入是多少,廣告點(diǎn)擊率是多少,這些都是典型推理場(chǎng)景,這類業(yè)務(wù)的特點(diǎn)是對(duì)延遲敏感(ms級(jí))并且算力要求相對(duì)訓(xùn)練場(chǎng)景較低,目前我們?cè)诖笊虡I(yè)落地百度的網(wǎng)盟,落地了點(diǎn)擊率的預(yù)估,利用我們的容器和 AI 的解決方案,覆蓋了千張級(jí)別的P4/T4卡,利用率提升了80%。
3.3 AI 開發(fā)場(chǎng)景
外部也有一些典型場(chǎng)景,比如現(xiàn)在人工智能火熱發(fā)展,很多高校開設(shè)了AI相關(guān)課程,但是 GPU 卡價(jià)格昂貴,如果一個(gè)班平常三四十人上課,學(xué)校通常很難購(gòu)買三四十張 GPU 卡來(lái)支持學(xué)生做實(shí)驗(yàn),實(shí)現(xiàn)一卡多用就變得十分迫切,在這個(gè)場(chǎng)景利用百度的 GPU 共享技術(shù),可以做到多個(gè)同學(xué)做AI作業(yè)的時(shí)候用同一張卡,提高并發(fā)率,實(shí)現(xiàn)資源成本的節(jié)約。
推薦閱讀
AI系統(tǒng)中的偏差與偏見
IE 退出后,蘋果 Safari 成為了開發(fā)者最討厭的瀏覽器?
終于有人把大數(shù)據(jù)架構(gòu)講明白了
總結(jié)
以上是生活随笔為你收集整理的百度AI原生云实践: 基于容器云打造 AI 开发基础设施的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 程序员大神用 React “复刻”实现了
- 下一篇: 做百度AI工程师,还要会“相牛”?