這邊要提到MLOps,是因為我們接下來要為ROS系統設計的虛實整合環境,需要一個自動化的部署流程,方便我們去做AI model的training以及訓練後資料的收集。這個在PAIA平台上已有實現,可參考此處。
(文章來自:https://cd.foundation/blog/2020/05/29/mlops-an-introduction/)
我們都知道Machine Learning(ML)的流程大致如下:
(文章來自:https://www.twblogs.net/a/5c016050bd9eee7aed33b95d)
其中後段的modeling到development需要強大運算量的電腦,才能完成。因此這個部份我們必須設計一個自動的operation流程,將這樣的運算量交給雲端服務的電腦(可能是GPU)去協助運算。
主要架構如下:
而這流程需要下列幾項工具的協助:
Kubernetes(K8S):
Kubernetes是一個用於自動部署、擴充和管理「容器化應用程式(如Docker)」的開源系統。已經是業界DevOps的標準工具,網路上有很多介紹,這裡就不多介紹了。
方便透過Kubernetes指令管理眾多containers與分配其使用資源(VM, CPU, Memory)。
Jenkins:
老牌CI/CD工具,選用它也是因為它歷史悠久,整合性資源較多。雖然介面不盡理想,但透過其他整合工具可以加強它的易控性。並有提供透過SSH+VPN設定串連多台主機(node),協助一起執行CI/CD。
ArgoCD:
藉由其與Kubernetes極高的整合與優秀的監控介面,可以讓Jenkins更方便在持續部署(CD)上。
架設好ArgoCD與設定好憑證後,只要在Jenkins中用以下指令來控制Kubernetes的更版與部署。
# Deploy to ArgoCD
ARGOCD_SERVER=$ARGOCD_SERVER argocd --grpc-web app sync $APP_NAME --force
ArgoCD彌補了Jenkins在Kubernetes上CD的不足,而CI的部份如何補強,我們將在接下來的文章中解釋。