字節跳動基礎架構團隊基于火山引擎機器學習平臺 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 模型服務器的支持,會在近期完成。
支持的模型格式
- SavedModel
- ONNX
- GraphDef
- NetDef
- TensorRT with GPU
- TorchScript
- PMML
服務訪問方式
部署為模型服務之后,用戶如何通過 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
作者:字節跳動基礎架構
來源:微信公眾號: K8sMeetup社區
出處:https://mp.weixin.qq.com/s?__biz=Mzg3ODAzMTMyNQ==&mid=2247488231&idx=1&sn=e8155a2be9135c5d88a011dc78c8d057