MLOps: CI/CD & Model Registry

#exam-tip

Mục lục

1. Tổng quan

CI/CD cho Machine Learning tự động hóa quá trình xây dựng, kiểm thử và triển khai các mô hình ML thông qua các pipeline có khả năng lặp lại (repeatable).

2. Luồng MLOps Pipeline Hoàn chỉnh #important

2.1 Luồng ML Pipeline End-to-End

graph TB
    subgraph "1. Data Pipeline"
        A[Dữ liệu thô trên S3] --> B[Xử lý Dữ liệu<br/>SageMaker Processing]
        B --> C[Kỹ nghệ Đặc trưng<br/>Feature Engineering]
        C --> D[Kho Đặc trưng<br/>Feature Store<br/>Online + Offline]
    end

    subgraph "2. Model Development"
        D --> E[Chia Dữ liệu<br/>Train/Val/Test]
        E --> F[Huấn luyện Mô hình<br/>SageMaker Training Job]
        F --> G[Tinh chỉnh Siêu tham số<br/>HPO Jobs]
        G --> H[SageMaker Experiments<br/>Theo dõi mọi trials]
    end

    subgraph "3. Model Evaluation"
        H --> I[Chọn Mô hình Tốt nhất]
        I --> J[Đánh giá Mô hình<br/>Metrics: Accuracy, AUC, F1]
        J --> K{Đạt<br/>Ngưỡng?}
        K -->|Không| F
    end

    subgraph "4. Model Registry"
        K -->|Có| L[Đăng ký Mô hình<br/>Model Registry]
        L --> M[Model Package<br/>Version 1.0]
        M --> N{Phê duyệt<br/>Thủ công}
        N -->|Từ chối| F
        N -->|Phê duyệt| O[Mô hình được Phê duyệt]
    end

    subgraph "5. Deployment Pipeline"
        O --> P[SageMaker Pipeline<br/>Triển khai Tự động]
        P --> Q[Môi trường Dev<br/>Kiểm thử]
        Q --> R{Vượt qua<br/>Test?}
        R -->|Không| F
        R -->|Có| S[Môi trường Staging]
        S --> T{A/B Test<br/>Thành công?}
        T -->|Không| F
        T -->|Có| U[Production Endpoint<br/>Lưu lượng Thực]
    end

    subgraph "6. Monitoring & Feedback"
        U --> V[Thu thập Dữ liệu<br/>Đầu vào + Dự đoán]
        V --> W[Model Monitor<br/>Chất lượng Dữ liệu]
        W --> X{Phát hiện<br/>Drift?}
        X -->|Có| Y[Báo động CloudWatch]
        Y --> Z[Kích hoạt Huấn luyện lại]
        Z --> F
        X -->|Không| V

        V --> AA[Nhãn Ground Truth<br/>Bị trễ]
        AA --> AB[Giám sát<br/>Chất lượng Mô hình]
        AB --> AC{Giảm<br/>Hiệu suất?}
        AC -->|Có| Y
        AC -->|Không| V
    end

    style A fill:#e1f5ff
    style D fill:#fff4e1
    style H fill:#f0e1ff
    style O fill:#e1ffe1
    style U fill:#ffe1e1
    style Y fill:#ffcccc

2.2 Ánh xạ các Thành phần Pipeline sang Dịch vụ AWS

Giai đoạn Dịch vụ AWS Mục đích
Tiếp nhận Dữ liệu (Ingestion) S3, Kinesis, Glue Thu thập và lưu trữ dữ liệu thô
Xử lý Dữ liệu SageMaker Processing, EMR, Glue Làm sạch, biến đổi, feature engineering
Feature Store SageMaker Feature Store Kho lưu trữ đặc trưng tập trung
Huấn luyện (Training) SageMaker Training Jobs Huấn luyện mô hình ở quy mô lớn
Theo dõi Thử nghiệm SageMaker Experiments Theo dõi mọi lượt chạy huấn luyện
Tinh chỉnh Siêu tham số SageMaker HPO Tối ưu hóa siêu tham số
Model Registry SageMaker Model Registry Quản lý phiên bản và phê duyệt mô hình
CI/CD Pipeline SageMaker Pipelines, CodePipeline Tự động hóa workflow
Triển khai (Deployment) SageMaker Endpoints Lưu trữ mô hình để phục vụ inference
Giám sát (Monitoring) SageMaker Model Monitor, CloudWatch Phát hiện drift và vấn đề hiệu suất

3. Model Registry & Quản lý Phiên bản #important

3.1 SageMaker Model Registry

Mục đích: Lập danh mục và quản lý các phiên bản mô hình

Tính năng:

  • Quản lý phiên bản (Model versioning) - Theo dõi mọi phiên bản của mô hình
  • Luồng phê duyệt (Approval workflow) - Pending → Approved → Rejected
  • Theo dõi Metadata - Các metrics huấn luyện, gia phả (lineage), artifacts
  • Gia phả mô hình (Model lineage) - Truy xuất ngược từ dữ liệu → huấn luyện → mô hình → endpoint
  • Tích hợp: Các pipeline CI/CD, triển khai tự động

Model Package Groups:

  • Nhóm các phiên bản mô hình có liên quan lại với nhau
  • Phê duyệt/từ chối để đưa lên production
  • Theo dõi hiệu suất mô hình theo thời gian

Trạng thái Phê duyệt (Approval Status): #exam-tip

  • PendingManualApproval - Đang chờ xem xét
  • Approved - Đã sẵn sàng để triển khai lên production
  • Rejected - Không phù hợp cho production

4. CI/CD cho ML #exam-tip

4.1 SageMaker Pipelines

Mục đích: Điều phối (Orchestrate) các workflow ML end-to-end

Thành phần:

  • Các bước (Pipeline steps):
    • Processing (chuẩn bị dữ liệu, feature engineering)
    • Training (huấn luyện mô hình)
    • Tuning (tối ưu hóa siêu tham số - HPO)
    • Model evaluation (đánh giá mô hình)
    • Conditional execution (thực thi có điều kiện)
    • Model registration (đăng ký mô hình)
  • Tham số (Parameters) - Các đầu vào có thể cấu hình cho pipeline
  • Bộ nhớ đệm (Caching) - Bỏ qua các bước không có sự thay đổi
  • Theo dõi thực thi - Giám sát các lượt chạy pipeline

Use Cases:

  • Tự động huấn luyện lại trên dữ liệu mới
  • Các workflow A/B testing
  • Kiểm định mô hình (Model validation) trước khi triển khai
  • Các workflow ML có khả năng tái tạo (Reproducible)

Tích hợp:

  • Kích hoạt thông qua EventBridge, Lambda, Step Functions
  • Tích hợp Git để kiểm soát phiên bản (version control)
  • Model Registry cho việc triển khai

4.2 SageMaker Projects #exam-tip

Mục đích: Cung cấp các template MLOps cho những workflow phổ biến

Các Template xây sẵn:

  • Xây dựng, huấn luyện, triển khai mô hình
  • Triển khai mô hình tích hợp với CI/CD
  • Triển khai đa tài khoản (Multi-account deployment)
  • Sử dụng CloudFormation, CodePipeline, CodeBuild bên dưới

Thành phần:

  • Mã nguồn (Source control) - CodeCommit/GitHub
  • Build - CodeBuild cho huấn luyện/triển khai
  • Deploy - CodePipeline cho staging/production
  • Giám sát (Monitoring) - Cài đặt tự động

4.3 SageMaker Operators cho Kubernetes #exam-tip

Mục đích: Quản lý các jobs của SageMaker từ các Kubernetes clusters (ví dụ EKS)

Tổng quan:

  • Chức năng: Cho phép bạn dùng Kubernetes để điều phối các tác vụ training, tuning, và inference của SageMaker
  • Cách hoạt động: Cài đặt các Custom Resource Definitions (CRDs) của Kubernetes để ánh xạ tới các APIs của SageMaker
  • Use case: Dành cho các team đang sử dụng Kubernetes và muốn tận dụng sức mạnh ML managed của SageMaker

Tính năng chính:

  • Quản lý tài nguyên SageMaker bằng các lệnh kubectl
  • Định nghĩa các SageMaker jobs bằng YAML manifests
  • Tích hợp Kubernetes bản địa (pods, services, ConfigMaps)
  • Giám sát jobs thông qua Kubernetes dashboard

Các Hoạt động Hỗ trợ:

  1. Training Jobs - Định nghĩa các training jobs như một resource của K8s
  2. Hyperparameter Tuning Jobs - Chạy HPO từ Kubernetes
  3. Batch Transform Jobs - Điều phối inference hàng loạt (batch inference)
  4. Hosting Endpoints - Triển khai và quản lý các SageMaker endpoints

Ví dụ Kubernetes Manifest:

apiVersion: sagemaker.aws.amazon.com/v1
kind: TrainingJob
metadata:
  name: xgboost-training
spec:
  algorithmSpecification:
    trainingImage: xgboost-container-image
  roleArn: arn:aws:iam::123456789012:role/SageMakerRole
  inputDataConfig:
    - channelName: train
      dataSource:
        s3DataSource:
          s3Uri: s3://bucket/train
  outputDataConfig:
    s3OutputPath: s3://bucket/output
  resourceConfig:
    instanceType: ml.m5.xlarge
    instanceCount: 1
    volumeSizeInGB: 30

Khi nào Nên Dùng:

  • ✅ Team đang sử dụng sẵn Kubernetes/EKS làm hạ tầng
  • ✅ Muốn có một hệ thống điều phối hợp nhất (SageMaker + các workloads khác nằm chung trong K8s)
  • ✅ Muốn tận dụng chuyên môn và công cụ sẵn có về Kubernetes
  • ✅ Cần tích hợp SageMaker vào các K8s CI/CD pipelines hiện tại

Khi nào KHÔNG NÊN Dùng:

  • ❌ Chưa có hạ tầng Kubernetes (vậy thì hãy dùng SageMaker Pipelines)
  • ❌ Team không quen thuộc với Kubernetes (làm phức tạp vấn đề)
  • ❌ Các workflows ML đơn giản (SageMaker Pipelines dễ dùng hơn)

So sánh với SageMaker Pipelines:

Tiêu chí SageMaker Operators cho K8s SageMaker Pipelines
Điều phối Kubernetes Trực tiếp trên SageMaker
Độ khó học Cao (Yêu cầu kiến thức K8s) Thấp (Tập trung vào ML)
Use case Đã có sẵn hạ tầng K8s Thuần túy là các workflow SageMaker
Tích hợp Bất kỳ workload nào của K8s Chỉ các dịch vụ của SageMaker
Phù hợp cho DevOps teams dùng K8s Data scientists / ML engineers

4.4 Các Component SageMaker cho Kubeflow Pipelines #exam-tip

Mục đích: Sử dụng SageMaker từ bên trong Kubeflow Pipelines

Tổng quan:

  • Chức năng: Cung cấp các Kubeflow pipeline components xây dựng sẵn để gọi các dịch vụ SageMaker
  • Cách hoạt động: Các Python SDK components có khả năng submit jobs lên SageMaker từ Kubeflow
  • Use case: Dành cho các team đang sử dụng Kubeflow Pipelines nhưng muốn hưởng lợi từ môi trường huấn luyện/inference managed của SageMaker

Tính năng chính:

  • Chạy SageMaker training jobs ngay từ Kubeflow pipelines
  • Tận dụng các thuật toán built-in của SageMaker trong các luồng Kubeflow
  • Không cần quản lý hạ tầng training (SageMaker lo việc đó)
  • Ghép nối các bước SageMaker vào trong các workflow lớn hơn của Kubeflow

Các Components hiện có:

  1. Training - Các SageMaker training jobs
  2. Hyperparameter Tuning - SageMaker HPO
  3. Batch Transform - Batch inference
  4. Deploy - Triển khai mô hình lên SageMaker endpoints
  5. Ground Truth - Các jobs gán nhãn dữ liệu
  6. Processing - Các SageMaker Processing jobs

Ví dụ Kubeflow Pipeline:

import kfp
from kfp import components

# Load SageMaker components
sagemaker_train_op = components.load_component_from_url(
    'https://raw.githubusercontent.com/kubeflow/pipelines/master/components/aws/sagemaker/train/component.yaml'
)

sagemaker_deploy_op = components.load_component_from_url(
    'https://raw.githubusercontent.com/kubeflow/pipelines/master/components/aws/sagemaker/deploy/component.yaml'
)

# Define pipeline
@kfp.dsl.pipeline(name='SageMaker Training Pipeline')
def pipeline():
    # Step 1: Train model in SageMaker
    training = sagemaker_train_op(
        region='us-east-1',
        algorithm_specification={
            'TrainingImage': 'xgboost-image',
            'TrainingInputMode': 'File'
        },
        role='arn:aws:iam::123:role/SageMakerRole',
        # ... more config
    )

    # Step 2: Deploy to SageMaker endpoint
    deploy = sagemaker_deploy_op(
        region='us-east-1',
        model_name=training.outputs['model_artifact']
    )

Khi nào Nên Dùng:

  • ✅ Team đang sử dụng sẵn Kubeflow Pipelines
  • ✅ Muốn dùng training managed của SageMaker mà không phải lo cấu hình máy móc
  • ✅ Cần kết hợp SageMaker với các bước pipeline khác (Spark, custom containers)
  • ✅ Chiến lược đa đám mây (Multi-cloud: Kubeflow chạy được mọi nơi, còn SageMaker chuyên lo mảng ML trên AWS)

Khi nào KHÔNG NÊN Dùng:

  • ❌ Chưa có hạ tầng Kubeflow (hãy dùng SageMaker Pipelines)
  • ❌ Môi trường thuần túy AWS/SageMaker (SageMaker Pipelines dễ hơn)
  • ❌ Team mù tịt về Kubeflow (gây thêm phiền toái)

So sánh:

Tiêu chí Kubeflow Components SageMaker Pipelines
Nền tảng Kubeflow (Dựa trên K8s) Trực tiếp trên SageMaker
Độ cơ động Đa đám mây (Multi-cloud) Chỉ dùng được trên AWS
Độ phức tạp Cao (K8s + Kubeflow) Thấp (Dịch vụ managed)
Tùy biến Cực kỳ linh hoạt Chỉ tập trung vào ML
Phù hợp cho Người đang dùng sẵn Kubeflow Các team rễ gốc ở AWS

Kịch bản Bài thi (Exam Scenarios): #exam-tip

  • “Team đang dùng Kubernetes/EKS, muốn sử dụng SageMaker” → Chọn SageMaker Operators cho Kubernetes
  • “Team đang dùng Kubeflow Pipelines, muốn tận dụng SageMaker training” → Chọn Các Component SageMaker cho Kubeflow
  • “Môi trường thuần túy AWS, muốn tự động hóa luồng ML” → Chọn SageMaker Pipelines
  • “Chưa có công cụ điều phối nào, cần xây một ML pipeline” → Chọn SageMaker Pipelines (đơn giản nhất)
  • “Cần một công cụ điều phối chung cho cả ML và các workloads phi-ML trên K8s” → Chọn SageMaker Operators cho Kubernetes

Khung ra Quyết định (Decision Framework): #exam-tip

Bạn có đang dùng Kubernetes/EKS không?
├─ Có → Bạn có đang dùng riêng thằng Kubeflow Pipelines không?
│         ├─ Có → Chọn Các Component SageMaker cho Kubeflow Pipelines
│         └─ Không → Chọn SageMaker Operators cho Kubernetes
└─ Không → Chọn SageMaker Pipelines