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