MLOps platform
Giới thiệu
MLOps platform là nền tảng cung cấp các công cụ cần thiết để phát triển, quản lý và triển khai các dự án ML. Trong một số tài liệu khác MLOps platform còn có tên là AI platform hoặc ML platform. Ở khóa học này chúng ta sẽ sử dụng một MLOps platform với các thành phần và công cụ tương ứng như sau:
Tên thành phần | Ý nghĩa | Tool sử dụng |
---|---|---|
Source control | Quản lý các phiên bản về mã nguồn và dữ liệu | Git & Github |
Feature store | Lưu trữ, quản lý và tương tác với các tính năng (feature) | Feast (PostgreSQL & Redis backend) |
Experiment tracking | Lưu trữ thông tin và quản lý các thí nghiệm (experiments) | MLFlow |
Model registry | Lưu trữ và quản lý các mô hình | MLFlow |
ML metadata Store | Lưu trữ thông tin (artifact) của các luồng (pipeline) | MLFlow |
Workflow orchestrator | Xây dựng và quản lý các luồng quy trình | Airflow |
Monitoring | Theo dõi tài nguyên hệ thống, hiệu năng của mô hình và chất lượng dữ liệu trên production | Prometheus & Grafana & ELK |
CI/CD | Tự động hóa quá trình test và deploy | Jenkins |
Info
Chúng ta có thể sử dụng một công cụ cho nhiều mục đích khác nhau, ví dụ MLFlow, với mục đích sử dụng tối thiểu các công cụ cần thiết mà vẫn đảm bảo được 9 MLOps Principles, 9 MLOps Components và 5 MLOps Workflows được áp dụng (xem lại bài Tổng quan MLOps). Việc sử dụng quá nhiều công cụ có thể dẫn tới việc vận hành MLOps platform trở nên phức tạp, đồng thời khiến người dùng dễ bị choáng ngợp do không biết sử dụng và quản lý một cách hiệu quả.
Architecture
Kiến trúc MLOps platform của chúng ta sẽ như sau:
Các tương tác chính trong MLOps platform:
1. Data Pipeline kéo và xử lý dữ liệu từ file source
2. Dữ liệu sau khi xử lý bởi Data Pipeline sẽ được đẩy vào Feature Store
3. Data Scientist (DS) kéo feature từ Feature Store để thực hiện các thí nghiệm trên notebook
4. Training Pipeline kéo feature về để train model
5. Metadata của các experiment, ví dụ như hyperparameters và metrics, ... được lưu vào Metadata Store
6. Metadata của Training Pipeline cũng được lưu vào Metadata Store
7. Model sau khi train sẽ được lưu trữ ở Model Registry
8. Batch Serving Pipeline và Online Serving API kéo model từ Model Registry về để serve
9. Logs và metrics được scrape từ Online Serving API
10. 11. 12. 13. DS push code lên Github kích hoạt triển khai tự động (CI/CD) cho các pipelines và Online Serving API
14. Ngoài data source ở dạng tĩnh (static data), streaming data từ Kafka sẽ ghi liên tục vào Feature Store để cập nhật feature
Các tương tác và các công cụ được nhắc đến ở trên sẽ được hướng dẫn cụ thể xuyên suốt cả khoá học.
Sử dụng platform
Start
Để start các services trong MLOps platform, bạn làm theo các bước sau.
- Clone code mlops-crash-course-platform tại đây
- Cài Docker theo hướng dẫn tại đây
-
Cài Docker Compose version v2.10.2 theo hướng dẫn tại đây
Warning
Series bài giảng này sử dụng docker-compose v2.10.2 với command
docker-compose
(thay vì compose plugin của Docker với commanddocker compose
). Sử dụng version khác v2.10.2 có thể gây ra nhiều lỗi không mong muốn. -
Start services
-
Cách 1: Start tất cả services một lúc (nếu máy bạn có cấu hình mạnh):
Info
Mỗi bài học tiếp theo sẽ hướng dẫn cách start các service liên quan đến bài học đó. Do vậy, bạn không cần phải start tất cả các services cùng một lúc.
-
Cách 2: Start từng nhóm service một:
- Start các service liên quan đến feast
Bug
Khi start các service, nếu bạn gặp lỗi
port is already allocated
tương tự như sau:có nghĩa là đang có một service khác chạy ở portError response from daemon: driver failed programming external connectivity on endpoint mlflow-mlflow-1 (2383a7be19ea5d2449033194211cabbd7ad13902d8d4c2dd215a63ab78038283): Bind for 0.0.0.0:5000 failed: port is already allocated
5000
vàmlflow
không thể sử dụng port đó nữa, khi đó bạn sẽ thay bằng port khác như bên dưới đây. Bạn sẽ xử lý tương tự với các service khác.mlops-crash-course-platform/mlflow/mlflow-docker-compose.yml - Thay bằng
"another_port:5000"
, ví dụ""5001:5000"
. Khi đó, sau khi start servicemlflow
bạn sẽ truy cập service này tạihttp://localhost:5001
.
-
Stop
Để stop các services trong MLOps platform, bạn làm theo các cách sau.
-
Cách 1: Stop tất cả service mà không làm mất docker volumes liên quan
-
Cách 2: Stop một nhóm service mà không làm mất docker volumes liên quan
-
Cách 3: Stop service và docker volumes liên quan tới service
cd mlops-crash-course-platform bash run.sh feast down --volumes # (1) bash run.sh all down --volumes # (2)
- Stop service
feast
và docker volumes liên quan tới service này - Stop tất cả services và docker volumes liên quan
- Stop service
Warning
Sử dụng cách 3 sẽ không xoá data nằm trong các local folders mà được mount với các docker containers của các services. Để xoá hoàn toàn data liên quan tới services, bạn cần xoá các local folders này thủ công. Các bạn làm các bước sau:
- Trong repo
mlops-crash-course-platform
, mở folder tương ứng với service bạn muốn xoá data, ví dụ folderairflow
- Xoá toàn bộ folders/files trong folder
airflow/run_env
, trừ file.gitkeep
Restart
Để restart các services trong MLOps platform, bạn làm như dưới đây.
- Restart service
feast
- Restart tất cả services
Cấu trúc code
Để tiện cho việc code đồng thời quản lý các service trong MLOps platform thì bạn đặt repo mlops-crash-course-platform
và mlops-crash-course-code
trong cùng 1 folder như sau:
Trong đó:
- Repo
mlops-crash-course-platform
: chứa docker-compose files để triển khai MLOps platform - Repo
mlops-crash-course-code
: chứa code của dự án ML mà chúng ta sẽ phát triển và sử dụng MLOps platform
Warning
Trong mỗi module ở mlops-crash-course-code/
ví dụ như: data_pipeline
và model_serving
sẽ đều có 1 file là dev_requirements.txt
. Bạn hãy tạo một môi trường mới tương tự như bên dưới trước khi cài đặt các thư viện để tránh xung đột thư viện với các dự án khác:
Infra layer
Phần này cung cấp cho bạn một cái nhìn tổng quan hơn nữa về MLOps platform khi được đặt trong cơ sở hạ tầng IT của một tổ chức.
Thông thường, một tổ chức sẽ có một nhóm các kỹ sư hạ tầng (Infra engineer) làm nhiệm vụ xây dựng Infra layer. Chức năng chính của Infra layer là quản lý, cung cấp tài nguyên tính toán, lưu trữ cho các ứng dụng ở các layer trên nó. Infra layer có thể được xây dựng đơn giản sử dụng docker-compose, Docker Swarm hoặc phức tạp hơn như Kubernetes. Trong khoá học này, giả sử rằng chúng ta sử dụng docker-compose ở Infra layer để quản lý các containers và cung cấp tài nguyên tính toán, lưu trữ cho các service.
Trên Infra layer là Application layer hay chính là nơi mà các engineer khác xây dựng các ứng dụng cho chính tổ chức đó. Các ứng dụng này có thể là môi trường Jupyter notebook, Gitlab server, Jenkins server, monitoring platform, v.v. MLOps platform mà chúng ta đang xây dựng cũng nằm trên Application layer này.
Tổng kết
Sau khi đã trả lời một loạt các câu hỏi về hệ thống ML ở bài trước và định nghĩa MLOps platform ở bài này, chúng ta đã có một cái nhìn kĩ lưỡng hơn về hệ thống cần được phát triển. Trong bài tiếp theo, bạn sẽ được tìm hiểu về các công việc và cách hoạt động cũng như triển khai một dự án POC.