基於 WDS Prophecis 與 KubeSphere 構建雲原生機器學習平臺

KubeSphere 開源社區的小夥伴們,大家下午好。我是微衆銀行大數據平臺的工程師周可,接下來我會給大家分享基於 WeDataSphereKubeSphere 這兩個開源產品構建一個開源的雲原生機器學習平臺 Prophecis

Prophecis 是什麼?

首先我介紹一下什麼是 Prophecis (Prophecy In WeDataSphere)?它的中文含義就是預言的意思。


Prophecis 是微衆銀行大數據平臺團隊開發的一站式機器學習平臺,我們是基於 KubeSphere 管理的這一套多租戶的容器化的高性能計算平臺之上,搭建了我們提供給數據科學和算法工程師,以及我們的 IT 運維去使用的機器學習平臺。在交互界面層,大家可以看到最上面我們是有面向普通用戶的一套機器學習應用開發界面,以及面向我們運維管理員的一套管理界面,其中管理員的界面基本上就是基於 KubeSpehre 之上做了一些定製和開發;中間的服務層是我們機器學習平臺的幾個關鍵服務,主要爲:

  • Prophecis Machine Learning Flow:機器學習分佈式建模工具,具備單機和分佈式模式模型訓練能力,支持Tensorflow、Pytorch、XGBoost等多種機器學習框架,支持從機器學習建模到部署的完整Pipeline;
  • Prophecis MLLabis:機器學習開發探索工具,提供開發探索服務,是一款基於Jupyter Lab的在線IDE,同時支持GPU及Hadoop集羣的機器學習建模任務,支持Python、R、Julia多種語言,集成Debug、TensorBoard多種插件;
  • Prophecis Model Factory:機器學習模型工廠,提供機器學習模型存儲、模型部署測試、模型管理等服務;
  • Prophecis Data Factory:機器學習數據工廠,提供特徵工程工具、數據標註工具和物料管理等服務;
  • Prophecis Application Factory:機器學習應用工廠,由微衆銀行大數據平臺團隊和 AI 部門聯合共建,基於青雲(QingCloud) 開源的 KubeSphere 定製開發,提供 CI/CD 和 DevOps 工具,以及 GPU 集羣的監控及告警能力。

最底層的基礎平臺就是 KubeSphere 管理的高性能容器化計算平臺。

我們去構建這樣一套面向我們當前金融場景或者互聯網場景的機器學習平臺的時候,我們有兩個考慮的點:

第一個點是一站式,就是工具要全,從整個機器學習應用開發的整體的Pipeline去提供一個完整的生態鏈工具給到用戶去使用;

另外一個關注點是全聯通,我們去做我們去做機學習應用開發的時候有一個很大的痛點,大家可能之前看到 Google 有一張圖,可能 90% 的工作都是在做機器學習之外的工作,然後真正去做模型調參這些東西的時候,可能就 10% 的工作。

因爲前面的數據處理其實是有很大工作量的。我們去做的一個工作就是,通過插件化接入的方式把我們的 Prophecis 的服務組件,跟我們 WeDataSphere 上面目前已經提供的調度系統 Schedulis、數據中間件 DataMap、計算中間件 Linkis、還有面向數據應用開發門戶的 DataSphere Stduio 這一整套工具鏈進行打通,構建一個全聯通的機器學習平臺

Prophecis 功能組件簡介

接下來,簡單介紹一下我們機器學習平臺 Prophecis 的各個組件的功能。

機器學習開發環境 MLLabis

第一個是我們目前已經放到開源社區的組件叫 MLLabis,其實跟 AWS 的提供給機器學習開發人員去用的 SageMaker Studio 差不多。

我們在 Jupyter Notebook 做了一些定製開發,總體的架構其實就是左上角的這張圖,其實主要的核心有兩個組件,一個是 Notebook Server (Restful Server),提供 Notebook 生命週期管理的各種API接口;另外一個是 Notebook Controller (Jupyter Notebook CRD),管理 Notebook 的狀態。

用戶創建 Notebook 的時候,他只需要選擇有權限的命名空間 (Kubernetes Namespace),然後去設置 Notebook運行時需要的一些參數,比如說 CPU、內存、 GPU 或者是它要掛載的存儲,如果一切正常,這個 Notebook 容器組就會在對應的 Namespace 啓動並提供服務。

我們在這裏做了一個比較加強的功能,就是提供一個叫 LinkisMagic 的組件。我們 WeDataSphere 開源產品中有個組件叫 Linkis,它提供大數據平臺計算治理能力,打通各個底層的計算、存儲組件,然後給到上層去構建數據應用。

LinkisMagic 通過調用 Linkis 的接口,就可以將 Jupyter Notebook 中寫好的數據處理的代碼提交到大數據平臺上去執行;我們可以把處理好的特徵數據通過 Linkis 的數據下載接口拉到 Notebook 的掛載存儲中去,這樣我們就可以在我們的容器平臺裏面用 GPU 去做一些加速的訓練。存儲方面,目前 MLLabis 提供兩種數據存儲,一種是 Ceph;一種是我們的大數據平臺 HDFS,關於 HDFS 這裏提一句,我們其實就是把 HDFS Client 和 HDFS 的配置文件通過 Mount 到容器中,並且控制好權限,就可以在容器內跟 HDFS 交互了。

以上是我們 MLLabis 的 Notebook 列表頁面;

以上是我們從列表頁面進到 Notebook 的界面。

機器學習分佈式建模服務 MLFLOW

接下來,介紹我們另外一個組件 MLFlow

我們構建了一個分佈式的機器學習實驗管理服務。它既可以管理單個建模任務,也可以通過跟我們 WeDataSphere 一站式數據開發門戶 DataSphere Studio 打通,構建一個完整的機器學習實驗。這裏的實驗任務通過 Job Controller (tf-operator、pytorch-operator、xgboost-operator 等)管理運行在容器平臺上,也可以通過 Linkis 提及到數據平臺運行。

這裏再說明一下,MLFlow 與 DataSphere Studio 之間通過 AppJoint 的方式交互,這樣既可以複用 DSS 已經提供的工作流管理能力,又可以將 MLFlow 實驗作爲子工作流接入到 DSS 這個大的數據工作流中去,這樣構建一個從數據預處理到機器學習應用開發的 Pipeline。

這個是我們數據處理和機器學習實驗組成的完成數據科學工作流。

這個是 MLFlow 的機器學習實驗 DAG 界面,目前提供 GPU 和 CPU 兩種任務類型,支持 TensorFlow、PyTorch、xgboost 等機器學習框架任務的單機和分佈式執行。

機器學習模型工廠 Model Factory

接下來給大家介紹我們的機器學習模型工廠:Model Factory。我們模型建好之後,我們怎麼去管理這些模型,它的模型的版本怎麼管理,它的部署怎麼管理,模型的校驗怎麼做,我們用的就是 Model Factory。

這個服務我們主要是基於 Seldon Core 進行二次開發,提供模型解釋、模型存儲、模型部署三塊的能力。要強調的一點是這一塊的服務接口我們也可以接入到 MLFlow 中去,作爲一個 Node 接入到機器學習實驗中,這樣訓練好的模型,可以通過界面配置快速部署,然後進行模型驗證。另外一個要說明的是,如果我們只是單模型的驗證,我們主要是使用 MF 提供的基於 Helm 的部署能力。如果是構建一個複雜的生產可用的推理引擎,我們還是會用 KubeSphere 提供的 CI/CD、微服務治理能力去構建和管理模型推理服務

機器學習數據工廠 Data Factory

接着要介紹的組件是我們數據工廠 Data Factory

關於數據工廠我們是通過數據發現服務從 Hive、MySQL、HBase、Kafka 等數據組件中獲取基礎的元數據,並提供數據預覽數據血緣分析能力,告訴我們數據科學和建模人員,他要使用的數據是長什麼樣子的,可以怎麼用。未來也會提供一些數據標注的工具,或者是數據衆包的工具,讓我們的數據開發同學來完成數據標註的這塊的工作。

機器學習應用工廠 Application Factory

最後一個要介紹的組件,就是機器學習應用工廠 Application Factory。

正如剛纔所說,我們如果對一些複雜的模型去構建一些複雜的 Inference Sevice 的時候,其實我們用一個簡單的單容器服務其實是不夠的,我們要去構成一整套的類似於 DAG 的一個推理的過程,這個時候其實我們就需要更復雜的容器應用的管理的能力。

Application Factory 這一塊我們就是基於 KubeSphere 去做的,我們在前面做好這些模型的準備之後,我們會使用 KubeSphere 提供的 CI/CD 工作流去完成整體的模型應用發佈流程,模型服務上線之後,使用 KubeSphere 提供的各種 OPS 工具去運維和管理各個業務方的服務。

KubeSphere 應用實踐

接下來進入到 KubeSphere 在我們微衆銀行應用實踐部分。

使用 KubeSphere 前我們面對的問題

我們在引入 KubeSphere 之前,其實我們面對的問題,主要還是一些運維的問題。當時,我們內部也有用我們自己寫的一些腳本或者是 Ansible Playbook 去管理我們這一套或者幾套 K8s 集羣,包括我們在公有云上面的開發測試集羣,以及行內私有云的幾套生產 K8s 集羣。

但是這一塊由於我們的運維人力有限,去管理這塊東西的時候其實是非常複雜的;我們的建好的模型是面向銀行業務使用,有的是跟風控相關的,對於整體服務的可用性的要求還是很高的,我們如何做好各個業務方的租戶管理、資源使用管控、以及怎麼去構成一個完整的監控體系,也是我們去需要重點關注的;還有就是本身 Kubernetes Dashboard 基本上沒什麼可以管理的能力,所以我們還是希望有一套好用的管理界面給了我們的運維人員,讓他們的運維效率更高一些。

以 KubeSphere 爲底座開發機器學習容器平臺

因此,我們選擇了構建一個以 KubeSphere 爲基礎運維管理基座的機器學習容器平臺

整體的服務架構基本是跟 KubeSphere 當前的 API 架構差不多,用戶的請求進來之後,它通過 API Gateway 定位要訪問服務,這些服務就是剛纔介紹那些組件,Gateway 將請求分發到對應的微服務當中去。各個服務依賴的那些容器平臺的管理,就是 KubeSphere 全棧平臺去給我們提供的能力:CI/CD、監控、日誌管理,還有代碼掃描工具等,然後我們在這一套解決方案之上做了一些改造點,但總體來說改造的東西也不是特別多,因爲當前開源的 KubeSphere 提供的這些能力基本上能滿足我們的需求。

我們內部使用的版本是 KubeSphere 的 v2.1.1,我們改造主要如下:

  • 監控和告警:我們把 KubeSphere Notification 和我們行內的監控告警系統進行了打通,同時將容器實例的配置信息和我們的 CMDB 系統中管理的業務信息進行關聯,這樣某個容器出現異常就可以通過我們告警信息發出告警消息,並告訴我們影響的是哪個業務系統;

  • 資源管理:我們在 KubeSphere Namespace 資源配額管理上做了一點小小的拓展,支持 Namespace 的 GPU 資源配額管理,可以限制各個租戶可以用使用的基礎 GPU 資源和最大 GPU 資源;

  • 持久化存儲:我們將容器的內的關鍵服務存儲都掛載到我們行內的高可用的分佈式存儲 (Ceph) 和數據庫 (MySQL) 上,保障數據存儲的安全性和穩定性。

這是我們測試環境的一個管理界面。

其實這裏我們主要做了兩個事情,第一我們把整個監控的對象跟我們行內的這一套 CMDB 系統進行結合

系統發生告警的時候,我們通過跟這套 CMDB 系統去做配置關聯的,我們可以知道這一個告警實例它影響了的業務系統是哪些,然後一旦出現異常的時候,我們就會通過調用我們的告警系統,這裏是一個企業微信的一個告警信息,當然它也可以發微信,也可以打電話,也可以發郵件。

以上這一塊是我們做的 GPU 資源配額定製

這一塊是我們基於 KubeSphere 的日誌查詢界面

未來展望

接下來說下未來的展望。由於我們當前因爲我們人力非常有限,然後各個組件開發的壓力也比較大,目前,我們還是基於之前的 KubeSphere v2.1.1 的版本去做的,我們接下來考慮把 KubeSphere 3.0 這塊的東西去跟我們現有開發的一些能力做結合和適配。

第二,目前 KubeSphere 還沒有 GPU 監控和統計指標管理的一些能力,我們也會考慮去把我們之前做的一些跟 GPU 監控與配額管理等功能遷移到 KubeSphere Console 裏面去

最後一個是我們整個 WeDataSphere 各個的組件基於 KubeSphere 的容器化適配和改造,我們最終是希望各個組件都完成容器化,進一步降低運維管理成本和提升資源利用率

關於 WeDataSphere

說到這裏,我就簡單再介紹一下我們微衆銀行大數據平臺 WeDataSphere。

WeDataSphere 是我們大數據平臺實現的一整套金融級的一站式機器學習大數據平臺套件。它提供從數據應用開發、到中間件、在到底層的各個組件功能能力,還有包括我們的整個平臺的運維管理門戶、到我們的一些安全管控、還有運維支持的這塊一整套的運營管控能力。

目前,這些組件當中沒有置灰的這部分已經開源了,如果大家感興趣可以在 GitHub 關注一下。

社區合作

再展望一下,我們 WeDataSpehre 跟 KubeSphere 的未來,目前我們兩個社區已經官宣開源合作。

我們計劃把我們 WeDataSphere 大數據平臺這些組件全部能容器化,然後貢獻到 KubeSpehre 應用商店中,幫助我們用戶去快速和高效的完成我們這些組件與應用的生命週期管理、發佈。

歡迎大家關注我們 Prophecis 這個開源項目以及我們 WeDataSphere 開源社區助手,如果大家對這套開源的雲原生機器學習平臺有任何問題,可以跟我們進一步交流,謝謝大家。

 KubeSphere

KubeSphere (https://kubesphere.io)是在 Kubernetes 之上構建的開源容器混合雲,提供全棧的 IT 自動化運維的能力,簡化企業的 DevOps 工作流。

KubeSphere 已被 Aqara 、紫金保險、中通、中國人保壽險、中國太平保險、中移金科、Radore、ZaloPay 等海內外數千家企業採用。KubeSphere 提供了開發者友嚮導式操作界面和豐富的企業級功能,包括Kubernetes DevOps (CI/CD) (Service Mesh)、審計事件、GPU support 等功能,幫助企業快速構建一個強大和功能豐富的容器雲平臺。

✨ GitHub :https://github.com/kubesphere
💻 官網(中國站) :https://kubesphere.com.cn
👨‍💻‍  微信羣:請搜索添加羣助手微信號  kubesphere


本文分享自微信公衆號 - KubeSphere(gh_4660e44db839)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章