位元組跳動基礎架構團隊基於火山引擎機器學習平臺 Clever 及其豐富的行業落地經驗,推出開源專案 Klever,以工程化的方式降低智慧技術落地門檻,助力企業快速打造智慧業務。
釋出:火山引擎雲原生
專案地址: github.com/kleveross
近年來,智慧技術不論是在學術界還是工業界都取得了突破性進展。機器學習、深度學習開始在各行各業扮演重要角色:業務上,幫助企業最佳化運營、提高效率、改善客戶體驗;管理上,參與後臺自動化運營,完成資料處理和提取等任務。
然而,隨著越來越多企業開始嘗試落地智慧技術,一個嚴峻的問題也逐漸暴露出來:從演算法技術選型到模型最終上線,這個過程涉及大量工程化任務對接。 演算法工程師們掌握著豐富的先進演算法,但演算法能力的實現通常離不開底層計算資源和系統架構的支撐,如何實現從開發、模型訓練、模型管理、模型服務全鏈路高效、敏捷、自動化管理,進而實現企業的智慧化轉型,仍是當前智慧技術領域亟待解決的問題之一。
開源機器學習平臺 Klever
針對上述問題,位元組跳動基礎架構團隊多年來就智慧技術的工程化問題進行了長期探索。
2020 年,位元組跳動旗下的數字服務與智慧科技品牌火山引擎攜我們的技術實踐落地國內某金融機構,使其模型上線效率提升了 10 倍,GPU 資源使用率提高 50%,自主創新能力大幅提高。
這類落地最佳實踐讓我們深刻認識到了智慧技術對企業業務持續增長的重要性,也讓我們瞭解到缺乏工程化工具已經成為當下企業應用智慧技術的一大掣肘。為此, 我們決定推出開源機器學習平臺 Klever 。
Klever 是一個支援 OCI(Open Container Initiative)標準儲存訓練模型、支援線上模型服務部署的雲原生機器學習平臺。演算法科學家可以使用 Klever 進行 模型管理 、 模型解析 、 模型轉換 、 模型服務 ,它已經解決了智慧技術落地流程中的如下問題:
模型的管理和分發模型解析和轉換線上模型服務部署和管理同時,基於位元組跳動在機器學習和雲原生開源社群的技術積累,Klever 提供強大、通用的開源技術標準,方便企業無縫遷移線上應用。未來,它還將進一步支援模型開發、模型訓練等一系列智慧模型開發和管理流程,降低技術落地門檻,助力企業快速打造智慧業務、全面實現智慧化轉型。
Klever 概述
系統架構
Klever 有四個自研發的元件,並依賴三個開源元件:
ormb :模型打包、解壓、上傳、下載工具(點選瞭解 ormb)model-registry :模型倉庫及模型服務 API 管理層modeljob-operator :ModelJob controller,管理模型解析、模型轉換任務klever-web :前端元件Istio :開源服務網格元件,模型服務透過 Istio 對外暴露模型服務地址,實現模型服務按內容分流和按比例分流Harbor :模型底層儲存元件,對模型配置和模型檔案進行分層儲存Seldon Core :開源模型服務管理的 Seldon Deployment CRD 的 controller,透過 SeldonDeployment CR 實現模型服務的管理使用場景
如前所述,目前機器學習平臺 Klever 率先實現的是從模型倉庫到模型服務的自動化管理,具體來說,它可以支援以下兩種應用場景:
模型管理開發的模型在團隊內外、公司內外透過 ormb + Harbor 進行管理和分發使用者如果有現成的模型檔案,但是不知道如何構建模型服務,那麼可透過將模型匯入系統,一鍵部署模型服務使用者可匯入模型,獲取模型的輸入輸出等模型內部資訊模型服務支援簡單模型服務和基於流量比例及內容分流的高階模型服務使用者可透過構建自定義映象的方式支援自定義模型服務支援 GPU 和 非 GPU 模式部署模型服務Klever 特性
Klever 有三大特性。
首先,透過與 Harbor 結合,它可以滿足 OCI 標準的模型倉庫管理,使用者可以像使用 Docker 管理映象一樣管理機器學習模型。
其次,整個系統可透過容器化的方式部署在 Kubernetes 容器管理平臺之上,使用者無需管理模型解析、模型轉換、模型服務實際執行在哪臺物理機之上,系統會自動排程和執行資源充足的機器,並在模型服務負載較高時自動彈性伸縮。
最後,由於機器學習在不同訓練過程中往往使用不同的資料集,會產生不同的模型,Klever 支援多種模型服務執行時,可將產生的模型用於提供生產環境可用的線上服務。
模型管理
ORMB 命令列管理
ORMB 是 Klever 下的一個命令列管理工具子專案,可以像 Docker 管理映象一樣管理模型。它支援 OCI 標準,可以對模型檔案和模型屬性進行分層儲存管理。
支援的命令型別:
執行 ormb save 儲存模型時,我們需要按照如下目錄格式管理模型,其中 ormbfile.yaml 檔案格式請參考 spec-v1alpha1.md
模型解析與轉換
Klever 透過自動 ModelJob CR 進行模型解析和模型轉換任務的管理,模型解析任務需要設定模型的格式及模型的 URI,模型轉換任務則需要設定模型源模型格式、目標模型格式及模型 URI。
模型解析和轉換的執行透過自定義指令碼的方式實現,每種型別的模型解析和模型轉換任務都有對應的指令碼,指令碼在 github.com/kleveross/klever-model-registry/tree/master/scripts 下集中管理。 解析內容主要包括 inputs、outputs、operators。任務透過 status 的 message 和 phase 欄位可以返回給使用者任務當前執行的狀態,並在異常時返回異常資訊。
模型拉取
模型解析和轉換任務執行之前,需要將模型檔案拉取到 Container 中並重新組織為模型伺服器需要的目錄格式,此過程透過擴充套件 ORMB 實現了一個 ormb-stororage-initializer 容器,該容器作為任務的 initContainer 存在,它將模型 pull & export 到 /mnt/input 目錄下,模型解析和轉換任務的容器和 initContainer 共享 /mnt/input 掛載點使用下載的模型。
支援的模型格式
模型服務
Klever 基於 Seldon-Core 實現模型服務,建立模型服務會首先建立一個 Seldon Deployment ,並在其 Init Container 中透過 ormb-storage-initializer 下載模型。
若模型為 PMML 格式,將使用 OpenScoring 映象啟動服務;若模型為其他 Triton Server 支援的模型格式,將使用 Triton Server 映象啟動服務.映象中會自動透過 ormbfile.yaml 中的資訊生成 Triton Server 所需要的 config.pbtxt 檔案。
模型推理執行時
當前 Klever 已支援透過 Nvidia Triton Server 模型伺服器部署深度學習模型服務,透過 OpenScoring 部署 PMML 格式的傳統機器學習模型。我們還在完善對 Spark MLlib、MLFlow 及 XGBoost 模型伺服器的支援,會在近期完成。
支援的模型格式
SavedModelONNX GraphDefNetDefTensorRT with GPUTorchScriptPMML服務訪問方式
部署為模型服務之後,使用者如何透過 API 介面進行模型服務的訪問呢?對於 Nvidia Triton Server 渲染的模型服務,訪問地址為:
對於 OpenScoring 渲染的模型服務,訪問地址為:
其中,servingName 為模型服務的名稱,在建立模型服務的時候需要指定該名稱。
部署
講到這裡,大家是否已經迫不及待地想安裝和使用 Klever 了呢?Klever 提供一鍵部署安裝的指令碼,同時也支援詳細的部署文件,你只需要有一個 Kubernetes 環境即可安裝部署。
RoadMap
當前,在位元組跳動內部,我們仍在基於各類實踐完善雲原生機器學習工程化平臺的構建想法,豐富 Klever 的功能和內涵。在外部市場,火山引擎推出的商業化版機器學習平臺 Clever 已在金融、製造、零售、能源等行業擁有成熟的解決方案,為各行業頭部客戶業務的持續增長提供賦能,也為 Klever 開源提供重要實戰經驗。
當前 Klever 僅支援模型檔案及模型元資料的基本屬性的儲存和管理,以及支援線上模型服務的功能。但是 Klever 的使命遠不止於此,未來它將完成從訓練到模型、再到模型服務的全鏈路管理。
許可權管理更完善的模型解析和轉換模型伺服器支援 XGboost支援 MLflow支援 Spark MLlib支援推理圖支援多種釋出策略,例如灰度釋出、金絲雀釋出等更完善的分流策略邊緣部署為了實現這一藍圖,我們在此呼籲開源社群開發者的力量, 歡迎更多志同道合的朋友加入我們 !
相關連結
https://github.com/kleveross/ormb
https://github.com/kleveross/klever-model-registry
https://github.com/kleveross/klever-web
https://github.com/istio/istio
https://github.com/goharbor/harbor
https://github.com/SeldonIO/seldon-core
出處:https://mp.weixin.qq.com/s?__biz=Mzg3ODAzMTMyNQ==&mid=2247488231&idx=1&sn=e8155a2be9135c5d88a011dc78c8d057