vivo AI 计算平台的 ACK 混合云实践
作者|劉東陽、吳梓洋
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/93
2)AWS Outpost:
https://aws.amazon.com/cn/outposts/
3)GEC Anthos:
https://cloud.google.com/anthos
4)ACK 混合云:
https://help.aliyun.com/document_detail/121609.html?spm=a2c4g.11186623.6.1038.6bfe3fd39IEFEt
5)AI 高性能存儲CPFS:
https://www.alibabacloud.com/help/zh/doc-detail/111755.htm
6)深度學習加速引擎AIACC:
https://market.aliyun.com/products/57742013/cmjj032323.html
7)vivo AI 計算平臺云原生自動化實踐:
https://www.infoq.cn/article/9vB93vFIa9qHVMYOj6lD
點擊下方,深入了解阿里 ACK 混合云!
https://help.aliyun.com/document_detail/121609.html?spm=a2c4g.11186623.6.1038.6bfe3fd39IEFEt
總結
以上是生活随笔為你收集整理的vivo AI 计算平台的 ACK 混合云实践的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 成本直降50%,下一代网关震撼发布
- 下一篇: 基于 RocketMQ 的基金数字化陪伴