作者|劉東陽、吳梓洋
2018 年底,vivo AI 研究院為了解決統一高性能訓練環境、大規模分布式訓練、計算資源的高效利用排程等痛點,着手建設 AI 計算平台。經過兩年多的持續疊代,平台建設和落地取得了很大進展,成為 vivo AI 領域的核心基礎平台。平台從當初服務深度學習訓練為主,到現在演進成包含 VTraining、VServing、VContainer 三大子產品,對外提供模型訓練、模型推理和容器化能力。平台的容器叢集有數千個節點,擁有超過數百 PFLOPS 的 GPU 算力。叢集裡同時運作着數千個訓練任務和數百個線上服務。本文是vivo AI 計算平台實戰系列文章之一,主要分享了平台在混合雲建設方面的實踐。
背景
混合雲是近年來雲原生領域關注的新方向之一,它是指将私有雲和公有雲服務結合起來使用的解決方案。目前幾大公有雲廠商都提供了各自的混合雲方案,如 AWS 的AWS Outpost、谷歌的 GEC Anthos 和阿裡的 ACK 混合雲。大部分廠商都是通過使用 Kubernetes 和容器來屏蔽底層基礎設施的差異,對上提供統一的服務。AI 計算平台選擇建設混合雲,主要是基于以下兩點原因。
公有雲的彈性資源
平台的叢集使用公司自建機房内的裸金屬伺服器,新增資源的采購流程複雜、周期長,無法及時響應業務臨時的大量的算力需求,如大規模參數模型的訓練和線上服務的節假日活動擴容。同時由于今年伺服器供應鍊形勢嚴峻,網卡、硬碟、GPU 卡等硬體裝置都缺貨,伺服器采購傳遞存在較大風險。公有雲的資源可以按需申請和釋放,通過混合雲使用公有雲資源,能夠滿足業務的臨時算力需求,又能有效降低成本。
公有雲的進階特性
公有雲有一些進階的特性,比如 AI 高性能存儲 CPFS、高性能網絡 RDMA、深度學習加速引擎 AIACC,這些方案或特性目前公司私有雲尚不具備,而私有化落地的時間和金錢成本都很高,通過混合雲可以快速和低成本的使用這些特性。
方案
方案選型
通過前期調研,以下三種方案可以實作混合雲的需求:

方案一的實作成本低、不改變目前資源申請流程,可快速落地。業務可以接受小時級的擴容。是以我們選擇了方案一。
整體架構
混合雲的整體架構如下圖所示。K8s 叢集的管理平面部署在公司自建機房,工作平面包含了機房的實體機和阿裡雲的雲主機。機房和阿裡雲間通過專線打通了網絡,實體機和雲主機可以互相通路。方案對上層平台透明,比如 VTraining 訓練平台不需要改動即可使用雲主機的算力。
落地實踐
注冊叢集
首先需要将自建的叢集注冊到阿裡雲。注意使用的 VPC 的網段不能和叢集的 Service CIDR 沖突,否則無法注冊。VPC 的虛拟交換機和 Pod 虛拟交換機的 CIDR 也不能和機房内使用的網段重合,否則會有路由沖突。注冊成功後,需要部署 ACK Agent。它的作用是主動建立從機房到阿裡雲的長連結,接收控制台的請求并轉發給 apiserver。對于沒有專線的環境,此機制可以避免将 apiserver 暴露在公網。控制台到 apiserver 的鍊路如下:
阿裡雲 ACK 控制台 <<-->> ACK Stub(部署在阿裡雲) <<-->> ACK Agent(部署在 K8s) <<-->> K8s apiserver
控制台到叢集的請求是安全可控的。Agent 連接配接 Stub 時,會帶上配置的 token 和證書;連結采用了 TLS 1.2 協定,保證資料加密;可以通過 ClusterRole 來配置控制台對 K8s 的通路權限。
容器網絡配置
K8s 的容器網絡要求 Pod 和 Pod、Pod 和主控端之間通訊正常,平台采用了 Calico + Terway 的網絡方案。機房内的工作節點采用 Calico BGP,Route Reflector 會将 Pod 的路由資訊同步給交換機,實體機和雲主機都能正常通路 Pod IP。阿裡雲上的工作節點會采用 Terway 共享網卡模式,Pod 會從 Pod 虛拟交換機配置的網段中配置設定到 IP,該 IP 在機房内可以通路。平台給雲主機打上标簽,配置 calico-node 元件的 nodeAffinity,不排程到雲主機上;同時配置 Terway 元件的 nodeAffinity,讓其隻運作在雲主機上。這樣實作了實體機和雲主機使用不同的網絡元件。在部署和使用 Terway 中,我們遇到并解決了以下三個問題:
1、terway 容器建立失敗,報/opt/cni/bin 目錄不存在。
通過修改 terway daemonset 中該路徑的 hostPath 的 type,從 Directory 改為 DirectoryOrCreate 可以解決上述問題。
2、業務容器建立失敗,報找不到 loopback 插件。
terway 沒有像 calico-node 一樣在/opt/cni/bin/目錄下部署 loopback 插件(建立回環網絡接口)。我們給 terway daemonset 添加了 InitContainer 來部署 loopback 插件,解決了問題。
3、業務容器配置設定的 IP 是屬于主機交換機網段。
這是因為在使用中,我們新增了一個可用區,但是沒有把可用區的 Pod 虛拟互動機的資訊配置給 terway。通過在 terway 配置的 vswitches 字段新增可用區的 Pod 虛拟交換機資訊,可以解決問題。
雲主機加入叢集
将雲主機加入叢集的流程和實體機基本一緻。首先通過公司雲平台申請雲主機,然後通過 VContainer 的自動化平台将雲主機初始化并加到叢集中。最後給雲主機打上雲主機專有的标簽。關于自動化平台的介紹,可以參見vivo AI 計算平台雲原生自動化實踐。
降低專線壓力
機房到阿裡雲的專線是公司所有業務共用的,如果平台占用過多專線帶寬,會影響到其他業務的穩定性。在落地時我們發現深度學習訓練任務從機房的存儲叢集拉取資料,确實對專線造成壓力,為此平台采取了以下措施:
1、監控雲主機的網絡使用情況,由網絡組協助監控對專線的影響。
2、使用 tc 工具對雲主機 eth0 網卡的下行帶寬進行限流。
3、支援業務使用雲主機的資料盤,将訓練資料進行預加載,避免反複從機房拉取資料。
落地效果
數個業務方臨時需要大量的算力用于深度學習模型的訓練。通過混合雲的能力,平台将數十台 GPU 雲主機加入到叢集,提供給使用者在 VTraining 訓練平台上使用,及時滿足了業務的算力需求。使用者的使用體驗和之前完全一緻。這批資源根據不同業務的情況,使用周期在一個月到數個月。經過估算,使用費用大大低于自行采購實體機的費用,有效降低了成本。
未來展望
混合雲的建設和落地取得了階段性的成果,在未來我們會持續完善功能機制和探索新特性:
- 支援 AI 線上服務通過混合雲能力部署到雲主機,滿足線上業務臨時算力需求。
- 建立一套簡單有效的資源申請、釋放、續期的流程機制,提升跨團隊的溝通協作效率。
- 針對雲主機的成本、使用率進行度量和考核,促使業務方使用好資源。
- 将雲主機申請、加入叢集整個流程自動化,減少人工操作,提高效率。
- 探索雲上的進階特性,提升大規模分布式訓練的性能。
緻謝
感謝阿裡雲容器團隊的華相、建明、流生等和公司基礎平台一部的楊鑫、黃海廷、王偉等對混合雲方案的設計和落地過程中提供的大力支援。
作者介紹:
劉東陽,vivo AI 研究院計算平台組的資深工程師,曾就職于金蝶、螞蟻金服等公司;關注 k8s、容器等雲原生技術。
吳梓洋,vivo AI 研究院計算平台組的資深工程師,曾就職于 Oracle、Rancher 等公司;kube-batch, tf-operator 等項目的 contributor;關注雲原生、機器學習系統等領域。
文内相關連結:
1)vivo AI 計算平台實戰:
https://www.infoq.cn/theme/932)AWS Outpost:
https://aws.amazon.com/cn/outposts/3)GEC Anthos:
https://cloud.google.com/anthos4)ACK 混合雲:
https://help.aliyun.com/document_detail/121609.html?spm=a2c4g.11186623.6.1038.6bfe3fd39IEFEt5)AI 高性能存儲CPFS:
https://www.alibabacloud.com/help/zh/doc-detail/111755.htm6)深度學習加速引擎AIACC:
https://market.aliyun.com/products/57742013/cmjj032323.html7)vivo AI 計算平台雲原生自動化實踐:
https://www.infoq.cn/article/9vB93vFIa9qHVMYOj6lD點選下方連結,深入了解阿裡 ACK 混合雲!