SkyForm ECP基於Kubernetes構建AIaaS平臺

2021-03-02 天雲軟體SkyForm

作者在之前的文章《在SkyForm ECP上運行深度學習框架》中介紹過深度學習框架運行在kubernetes上的優勢,以及這種實踐方式的基本架構。

社區中也出現了很多tensorflow on kubernetes的方案,比如最早使用jinja模板的方案(https://github.com/tensorflow/ecosystem/tree/master/kubernetes),以及後來的kubeflow(https://github.com/google/kubeflow)和Tensorflow/k8s(https://github.com/tensorflow/k8s),都是為了能夠更好的把tensorflow運行在kubernetes上,簡化手工搭建tensorflow集群時的繁瑣工作。

其中Tensorflow/k8s用kubernetes的CRD定義新的資源類型TFJob,可以在TFJob中定義PS、Worker和TensorBoard的信息,方便創建一個分布式的tensorflow集群。

SkyForm ECP的AIaaS方案和社區方案的一個簡單對比如下:


Tensorflow/k8s

kubeflow

AIaaS方案

深度學習框架支持

    Tensorflow

Tensorflow

Tensorflow,Mxnet,Caffe

Hybrid MPI Jobs

不支持

不支持

支持

深度學習工作流

JupyterHub,Tensorflow training,Tensorflow serving

只支持Tensorflow  training,沒有工作流

Jupyter,

Tensorflow  training,Tensorflow serving

Gangscheduling

不支持

不支持

支持,自研

任務控制器

專門針對Tensorflow的控制器

專門針對Tensorflow的控制器

自研通用的HybridJob控制器

其它

完整的多租戶、日誌、存儲、監控方案


SkyForm ECP平臺不但支持Tensorflow、Mxnet、Caffe等多種深度學習框架,而且集成了OpenFace等AI應用,以及經過嚴格測試開箱即用的算法框架。


SkyForm ECP的AIaaS方案核心技術詳解

目前Kubernetes社區關於深度學習的方案基本都僅支持單一框架,同時調度器的功能也很簡單。在實際的應用中還存在以下不足

為了解決上述問題,SkyForm ECP平臺中提出了一種HybridJob混合任務的概念,使用CRD定義HybridJob任務類型,開發了HybridJob Controller控制器對HybridJob任務進行處理。HybridJob中支持對每種任務設置最大副本數和最小副本數,以便在集群資源緊張時動態調整。

同時在SkyForm ECP中設計了新的調度器——Gang Scheduler,它在分配資源的過程中,不再將Pod單獨調度,而是把相互關聯的Pod作為一個整體來打包調度,避免只有部分Pod調度成功但是訓練任務不能正常執行,已啟動的Pod浪費集群資源的情況。具體的工作流程如下圖所示:

1 . 用戶使用kubectl或在Portal提交HybridJob資源對象,HybridJobController根據提交的HybridJob信息生成對應的pod;

2 . Gang scheduler參考集群當前資源情況,決定在minReplicas-maxReplicas範圍內運行哪些pod;

3 . 對已成功調度的pod進行bind操作,並將其提交到kubernetes集群中運行。

HybridJob Controller是SkyForm研發的一種混合任務控制器,可以在Hybridjob中同時創建PS和Worker等多種不同類型的任務。HybridJob的模型如下:

HybridJob中可以有多個ReplicaSpec,每個ReplicaSpec代表一種任務類型。每個任務類型可以自定義最小副本數minReplicas和最大副本數maxReplicas,任務實際運行的Pod數在最小副本數和最大副本數之間。其中,最小副本數是任務運行必須滿足的副本數,如果任務調度後獲得資源的Pod數目小於最小副本數,表示調度失敗,等待下個周期重新調度;最大副本數是副本數的上限。具體運行的Pod數目是根據集群的實際可用資源動態調整的。HybridJob和每個ReplicaSpec都有狀態信息記錄,可以分別查看它們的當前狀態。

Gang Scheduler是一種Pod組調度器,它保證了只有組中的minReplicas條件滿足時才會真正創建Pod。這樣的做法不僅在集群資源緊張的時候更靈活地調度資源,而且能有效防止資源死鎖。

Gang Scheduler的特性主要包括兩點:

Gang Scheduler具體的調度流程如下:

1 . 以minReplicas數目為目標分別調度每個ReplicaSpec。

2 . 調度成功後,以maxReplicas為上限分別調度每個ReplicaSpec,調度過程中考慮每個ReplicaSpec的優先級,優先級越高,其所屬Pod的調度概率就越大。

3 . 根據調度結果修改調度組的狀態,如果ReplicaSpec最終獲得資源的Pod數目小於minReplicas,則認為該任務調度失敗,調度失敗後釋放其中已調度成功的pod資源,重新添加調度組到queue;調度成功bind所有已調度成功的pod。

4 . HybridJob Controller監聽Pod的狀態,根據Pod實際運行情況修改HybridJob的狀態,刪除未綁定的多餘Pod。

本節以Tensorflow為例展示SkyForm ECP平臺,在平臺上應用Tensorflow的訓練過程如下圖所示:

1 . 上傳訓練代碼和數據:目前支持的後端存儲類型包括nfs和glusterfs。也可以創建jupyter應用在線開發。

2 . 啟動訓練任務:在應用市場選擇tensorflow,填寫存儲信息、任務啟動命名、PS的最小和最大副本數、Worker的最小和最大副本數等參數,點擊部署運行訓練任務,在以下動圖中可以看到實際運行的副本數在最小和最大副本數之間,具體數目由gang scheduler根據集群的資源使用情況動態調整;訓練過程中可以查看每個Pod的實時日誌;訓練完成後可以在存儲卷中查看生成的model信息;TensorBord提供的外部埠可訪問TensorBoard服務。

3 . 啟動Serving:在應用市場選擇serving,填寫存儲信息,model的位置,以及model的名稱信息,填寫serving的副本數及資源需求;選擇是否啟用HPA對serving服務做自動伸縮,或者在serving服務部署後手動更改serving服務的副本數。

4 . 測試Serving:在demo應用中輸入serving的服務地址及埠,進行手寫數字識別。

5 . 重新運行任務:重新運行任務支持修改任務啟動命令,傳入新的訓練參數;每次重新執行任務都會根據集群當前的資源情況進行調度,決定實際運行的Pod副本數。

SkyForm ECP平臺上實踐了多種深度學習框架,針對實際應用中存在的部分問題進行了改進,並取得了一些效果。但還有許多特殊需求和技術問題需要進一步地研究開發,主要包括:

相關焦點

  • 基於 Kubernetes 的 GPU 類型調度實現
    作者: angao來源: 才雲 Caicloud(ID:Caicloud2015)現如今,隨著企業紛紛在機器學習和深度學習上加大投入,他們開始發現從頭構建一個 AI 系統並非易事。以深度學習為例。對於深度學習來說,算力是一切的根本。
  • Kubernetes持續部署指南
    有些人將其稱為容器編排平臺,而 Kubernetes 並非唯一的此類平臺。不過,相比其它對手,其享譽已盛,且知名度仍在不斷提高;更別說你一旦習慣上它,就會發現它真的十分易用。如果你依然好奇為何有人能夠愉快地和 Kubernetes 玩耍,答案就是——簡單。Kubernetes 能夠讓部署、管理多個項目所需的大量集群變得更加容易。
  • Knative:基於 Kubernetes 的 severless 開源平臺
    Knative 是一個基於 Kubernetes 的開源平臺,為無後端服務工作的負載均衡提供構建模塊。目前已經獲得了很多項目的接受。自 0.1 版本發布以來,貢獻者數量翻了一番,每月有超十幾家公司捐款,社區捐款增加 45% 以上。這是一個非常鼓舞人的消息,證實了這個項目的是非常有需求的,同時反應了開發團隊和用戶以及貢獻者之間為該項目積極討論現象。
  • kubernetes面試題匯總
    kubernetes是什麼?Kubernetes是什麼?kubernetes,簡稱K8s,是用8代替8個字符「ubernete」而成的縮寫。是一個開源的,用於管理雲平臺中多個主機上的容器化的應用,Kubernetes的目標是讓部署容器化的應用簡單並且高效(powerful),Kubernetes提供了應用部署,規劃,更新,維護的一種機制。kubernetes面試題匯總1.kubernetes是什麼?
  • Kubernetes 將棄用 Docker
    但 Docker 作為容器鏡像構建工具的作用將不受影響,用其構建的容器鏡像將一如既往地在集群中與所有容器運行時正常運轉。官方解釋稱,Docker 作為一個完整的容器技術堆棧,在其創建之初就不是為了將其嵌入 Kubernetes 而設計的。
  • Kubernetes ELK 日誌收集
    Kubernetes EFK日誌收集Kubernetes日誌收集架構Kubernetes集群本身不提供收集日誌的解決方案,目前基於ELK日誌收集的方案主要有三種在節點運行一個agent收集日誌直接在宿主機上安裝,和在kubernetes效果一樣的。
  • 雲管理平臺(CMP)的概念與理解、發展趨勢
    在今天這個雲計算的時代,基於雲計算理念、構建在計算、存儲、網絡等基礎資源之上的雲平臺逐步大行其道; 而隨著多種雲平臺技術路線的發展,多個雲平臺開始出現在企業IT市場,需要一種統一的構建在雲平臺之上的管理平臺進行統一管控,而且在大型企業內部,異構複雜的基礎架構帶來的統一管理需求也在進一步發展,因此雲管理平臺以前所未有的速度成功深入到企業級雲市場
  • 谷歌的Janet Kuo解釋了為什麼Kubernetes能在複雜的環境中茁壯成長
    每天都在開發新的應用程式和技術平臺。這有助於提高行業競爭力,但許多基於軟體的解決方案無法持久。Kubernetes容器編配系統是一個既能生存又能發展的平臺。谷歌LLC的軟體工程師janet Kubernetes(圖右)和VMware公司的高級工程師bryan Liles(圖左)表示,儘管該平臺非常複雜,但Kubernetes在技術專家和新手中仍然很受歡迎,並且在許多類似系統不具備的地方做得很好。
  • Kubeflow 0.1 發布,基於 Kubernetes 的機器學習工具庫
    一旦有了 Python 代碼來構建模型,我們就可以構建一個 Docker 鏡像並使用 TFJob 運算符通過運行如下命令來訓練模型:來自:Docker微信公眾號  原文:https://kubernetes.io/blog/2018/05/04/announcing-kubeflow-0.1/
  • 深入解析Kubernetes service 概念
    深入解析Kubernetes service 概念Kubernetes在Kubernetes平臺上,Pod是有生命周期,為了可以給客戶端一個固定的訪問端點,因此需要在客戶端和Pod之間添加一個中間層,這個中間層稱之為ServiceService是什麼?
  • Kubernetes 1.8.0 版本發布
    在 apps/v1beta2 中,也有部分內容被棄用或者行為發生變更,這樣做的目的在於給開發者提供一個穩定且一致的 API 集合,方便開發者基於 Kubernetes 構建應用。在後續的發布中,SIG Apps 會逐步推動該版本走向穩定版本。SIG AuthSIG Auth 負責 Kubernetes 認證,授權和集群安全策略相關的工作。
  • 《蹲坑學kubernetes》之17-14:ServerAccount
    《蹲坑學kubernetes》之17-14:ServerAccountAPI Server作為Kubernetes網關,是訪問和管理資源對象的唯一入口,其各種集群組件訪問資源都需要經過網關才能進行正常訪問和管理。
  • 基於ABP框架的檔案信息資源共享平臺模型構建
    文章在解讀ABP框架及其分層架構的基礎上,從平臺構建的用戶需求出發,全面闡述了檔案信息大數據資源中心和檔案大數據管理平臺、檔案信息公共服務平臺、檔案管理業務處理平臺(即一個中心、三大平臺)模型構建思路,提出採用ABP框架實現模型快速構建檔案信息資源共享平臺並提昇平臺構建質量。
  • 北森:基於PaaS平臺的X-Recruiting 構建招聘全生態系統
    早在2015年8月,北森CEO紀偉國曾在一場招聘論壇上率先提出了X-Recruiting這一概念,基於PaaS平臺,企業可以在平臺上構建所有應用,紀偉國將此種創新的招聘模式稱為「X-Recruiting」。半年過去了,當時看似難以實現的想法正在被北森一一印證。視頻面試、個人徵信系統等等生態的構建,幫助HR解決了各種工作重點需求。
  • open-monitor 1.7.0 版本發布,基於 Prometheus 的分布式監控平臺
    open-monitor是一套基於Prometheus的分布式監控平臺,適用於wecube,WeCube通過監控插件來對資源以及應用的監控及告警
  • Kubernetes 1.17 特性:Kubernetes卷快照移至Beta版
    此外,這些Kubernetes快照作為基本的構建塊,可釋放為Kubernetes開發高級企業級存儲管理功能的能力:包括應用程式或集群級備份解決方案。Beta版有什麼新功能?隨著卷快照升級到beta版,該功能現在在標準Kubernetes部署上默認啟用,而不是選擇性啟用。
  • Kubernetes RBAC角色權限控制
    我們需要APIServer來幫助我們授權工作,而在Kubernetes項目中,負責完成授權(Authorization)的工作機制就是RBQC:基於角色的訪問控制 (Role-Based Access Control)RBAC是基於角色的訪問控制 (Role-Based Access Control) 在RBAC
  • 匯量科技陳緒:如何基於AWS構建一站式機器學習平臺
    匯量科技陳緒:如何基於AWS構建一站式機器學習平臺 匯量科技陳緒:如何基於AWS構建一站式機器學習平臺 2020-12-08 15:07:26  來源:鳳凰網匯量科技資深算法架構師陳緒應邀出席大會,與AWS資深解決方案架構師、區域經理張孝峰展開深度對話,分享了匯量科技是如何基於AWS構建一站式機器學習平臺MindAlpha來滿足日均千億次預測並推動業務飛速發展的。即日起至12月18日,用戶均可通過AWS re:Invent 活動官方頁面觀看該分享內容。
  • 基於微信公眾平臺的移動學習空間構建研究 獨家
    文章首先分析了當前國內外移動學習平臺建設情況,結合微信軟體、微信公眾平臺交互功能強、普及度高、跨平臺等優勢,探討了將微信公眾平臺用於移動教學的可行性,提出了完整的基於高校現有網絡教學系統和微信公眾平臺的移動學習空間構建方案,並研究了學習空間的功能設計及關鍵技術的實現路線。隨著4G網絡商用、網絡資費下調、Wi-Fi覆蓋範圍增加和智慧型手機價格降低,移動網際網路的普及繼續呈井噴之勢。
  • Kubernetes 1.20 發布:妙啊 - OSCHINA - 中文開源技術交流社區
    此外,這些 Kubernetes 快照基元充當基本構建塊,為 Kubernetes 增加開發高級企業級存儲管理功能的能力,包括應用程式或集群級備份解決方案。快照支持需要 Kubernetes 發行商捆綁 Snapshot 控制器、Snapshot CRD 和驗證 Webhook。還必須在群集上部署支持快照功能的 CSI 驅動程序。