Kubeflow là một open-source ML platform với rất nhiều tính năng có sẵn. Tuy nhiên, tuỳ vào các bài toán cụ thể của công ty mà phát sinh nhu cầu deploy thêm các công cụ khác, ví dụ MLFlow và Seldon Core, .v.v.
Bài blog này sẽ hướng dẫn mọi người sử dụng Helm để deploy MLFlow lên cluster kubeflow.
1. Helm là gì?
Helm là một công cụ cho phép install, upgrade, rollback và remove một ứng dụng trên nền tàng k8s một cách dễ dàng. Helm chart là tập hợp các file YAML template và config cần thiết để cài đặt ứng dụng.
2. Deploy MLFlow sử dụng helm
Helm chart cho MLFlow sẽ bao gồm các file sau, trong đó folder templates bao gồm các YAML file cho các k8s resource của ứng dụng:
1 | . |
Để cài đặt MLFlow chỉ cần sử dụng command sau:
1 | helm upgrade --install mlflow -f values.yaml . |
Để gỡ cài đặt
1 | helm uninstall mlflow |
Một số command hữu ích khác:
- rollback về version nào đó, ví dụ bên dưới là rollback về mlflow version 6
1
helm rollback mlflow 6
- kiểm tra các ứng dụng đã deploy bằng helm (còn gọi là release)
1
helm ls
3. Quản lý nhiều helm charts với helmfile
Khi chúng ta có nhiều helm charts thì làm sao để thiết kế CI/CD tự động install/upgrade các ứng dụng mỗi khi có thay đổi ở các YAML file? Helmfile giúp đơn giản hoá công việc này với command như sau:
1 | helmfile -e nonprod apply |
Command trên sẽ install/upgrade tất cả các ứng dụng định nghĩa trong helmfile.yaml
. Argument -e nonprod
được sử dụng để chỉ định apply cho môi trường nonprod (hay còn gọi là môi trường dev).
Cấu trúc của một repo với helmfile và nhiều helm charts có thể thiết kế như sau, trong đó mỗi một folder trong contrib (ví dụ folder mlflow) sẽ là helm chart của 1 ứng dụng.
1 | . |
helmfile.yaml
của MLFlow sẽ như sau, trong đó có 2 folder config là nonprod và prod tương ứng với 2 môi trường để deploy MLFlow. Config định nghĩa trong backendStore
sẽ ghi đè lên config mặc định (file values.yaml
) ở mỗi môi trường.
1 | releases: |
Source code
https://github.com/quan-dang/deploy-mlflow
References
[1] https://stackoverflow.com/questions/46719082/helm-helpers-tpl-calling-defined-templates-in-other-template-definitions
[2] https://helm.sh/
[3] https://github.com/dlabsai/mlflow-for-gcp
[4] https://github.com/roboll/helmfile