Cách tự động hóa pipeline ML với Airflow và Hugging Face: Từ training đến deployment model trên Kubernetes

Chào mừng các bạn đến với hành trình “phiêu lưu” xây dựng một pipeline ML tự động hoàn chỉnh! Nếu bạn từng mơ tưởng về một hệ thống có thể tự động train model, deploy model mà không cần phải thức đêm canh chừng như một “ông bảo vệ” thì bài viết này chính là “chìa khóa vàng” mà bạn đang tìm kiếm.

Tại sao lại cần tự động hóa pipeline ML?

Hãy tưởng tượng bạn là một data scientist, mỗi ngày phải thực hiện hàng chục tasks từ việc tiền xử lý dữ liệu, training model, đánh giá performance, đến deploy model lên production. Nếu làm manual, chắc chắn bạn sẽ “cháy” não trước khi model được deploy thành công!

Đó chính là lý do tại sao chúng ta cần Apache Airflow – một “thầy phù thủy” giúp orchestrate các workflow phức tạp. Kết hợp với Hugging Face cho việc quản lý model và Kubernetes cho deployment, chúng ta có một bộ ba “siêu anh hùng” của MLOps.

Thiết lập môi trường: Bước đầu “sinh tử”

Trước khi bắt đầu cuộc phiêu lưu, chúng ta cần chuẩn bị “hành trang” đầy đủ. Theo nghiên cứu về MLflow và Airflow, việc setup environment bao gồm:

  • Apache Airflow cho orchestration
  • Docker và Docker Compose để containerize
  • MLflow cho experiment tracking
  • Hugging Face Transformers library
  • Kubernetes cluster (có thể dùng Minikube để test)

Cài đặt các thư viện cần thiết

Đầu tiên, chúng ta cần cài đặt các package cơ bản:

pip install apache-airflow mlflow transformers torch kubernetes

Tiếp theo là setup Docker environment. Tạo một Dockerfile đơn giản:

FROM python:3.9-slim

WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .

CMD ["python", "app.py"]

Xây dựng Airflow DAG: “Bản nhạc” của pipeline

DAG (Directed Acyclic Graph) trong Airflow giống như một “bản nhạc” mà dàn nhạc sẽ biểu diễn. Mỗi task là một “nốt nhạc”, và chúng phải được sắp xếp theo thứ tự logic để tạo ra một “bản symphony” hoàn hảo.

Cấu trúc DAG cơ bản

from airflow import DAG
from airflow.operators.python_operator import PythonOperator
from datetime import datetime, timedelta

default_args = {
    'owner': 'daileit',
    'depends_on_past': False,
    'start_date': datetime(2024, 1, 1),
    'email_on_failure': False,
    'email_on_retry': False,
    'retries': 1,
    'retry_delay': timedelta(minutes=5)
}

dag = DAG(
    'ml_pipeline_dag',
    default_args=default_args,
    description='ML Pipeline với Hugging Face và Kubernetes',
    schedule_interval=timedelta(days=1),
    catchup=False
)

Các task chính trong pipeline

Pipeline của chúng ta sẽ bao gồm các task sau:

  1. Data Ingestion: Lấy dữ liệu từ nguồn
  2. Data Preprocessing: Tiền xử lý và làm sạch dữ liệu
  3. Model Training: Training model với Hugging Face
  4. Model Evaluation: Đánh giá performance
  5. Model Registration: Đăng ký model trong MLflow
  6. Model Deployment: Deploy model lên Kubernetes

Tích hợp Hugging Face: “Kho báu” model AI

Hugging Face là như một “kho báu” chứa hàng nghìn pre-trained model. Việc tích hợp nó vào pipeline giúp chúng ta tiết kiệm “núi thời gian” training từ đầu.

Fine-tuning model với Hugging Face

def train_huggingface_model(**context):
    from transformers import AutoTokenizer, AutoModelForSequenceClassification, Trainer, TrainingArguments
    
    # Load pre-trained model và tokenizer
    model_name = "bert-base-uncased"
    tokenizer = AutoTokenizer.from_pretrained(model_name)
    model = AutoModelForSequenceClassification.from_pretrained(model_name, num_labels=2)
    
    # Training arguments
    training_args = TrainingArguments(
        output_dir='./results',
        num_train_epochs=3,
        per_device_train_batch_size=16,
        per_device_eval_batch_size=64,
        warmup_steps=500,
        weight_decay=0.01,
        logging_dir='./logs',
    )
    
    # Initialize trainer
    trainer = Trainer(
        model=model,
        args=training_args,
        train_dataset=train_dataset,
        eval_dataset=eval_dataset,
    )
    
    # Train model
    trainer.train()
    
    # Save model
    model.save_pretrained('./trained_model')
    tokenizer.save_pretrained('./trained_model')
    
    return "Model training completed successfully!"

Deployment trên Kubernetes: “Sân khấu” cuối cùng

Kubernetes là “sân khấu” cuối cùng nơi model của chúng ta sẽ “trình diễn” trước người dùng. Theo hướng dẫn deployment trên EKS, chúng ta có thể sử dụng nhiều công cụ khác nhau như KServe, Seldon Core, hoặc custom deployment.

Tạo Docker image cho model

Đầu tiên, chúng ta cần đóng gói model vào Docker container:

FROM python:3.9-slim

WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt

COPY trained_model ./trained_model
COPY app.py .

EXPOSE 8000
CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "8000"]

Kubernetes Deployment YAML

apiVersion: apps/v1
kind: Deployment
metadata:
  name: ml-model-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: ml-model
  template:
    metadata:
      labels:
        app: ml-model
    spec:
      containers:
      - name: ml-model
        image: your-registry/ml-model:latest
        ports:
        - containerPort: 8000
        resources:
          requests:
            memory: "1Gi"
            cpu: "500m"
          limits:
            memory: "2Gi"
            cpu: "1"

Service để expose model

apiVersion: v1
kind: Service
metadata:
  name: ml-model-service
spec:
  selector:
    app: ml-model
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8000
  type: LoadBalancer

Monitoring và Auto-scaling: “Người bảo vệ” pipeline

Một pipeline tốt cần có hệ thống monitoring để theo dõi performance và auto-scaling để đảm bảo khả năng phục vụ. Kubernetes cung cấ Horizontal Pod Autoscaler (HPA) để tự động scale pods dựa trên CPU/Memory usage.

Thiết lập HPA

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: ml-model-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: ml-model-deployment
  minReplicas: 2
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 70

MLflow Integration: “Sổ nhật ký” của experiments

MLflow giúp chúng ta track các experiments, so sánh models và quản lý model lifecycle. Tích hợp MLflow vào Airflow DAG giúp tự động hóa việc logging metrics và artifacts.

def log_model_metrics(**context):
    import mlflow
    import mlflow.transformers
    
    with mlflow.start_run():
        # Log parameters
        mlflow.log_param("model_name", "bert-base-uncased")
        mlflow.log_param("epochs", 3)
        mlflow.log_param("batch_size", 16)
        
        # Log metrics
        mlflow.log_metric("accuracy", 0.95)
        mlflow.log_metric("f1_score", 0.93)
        
        # Log model
        mlflow.transformers.log_model(
            transformers_model=model,
            artifact_path="model",
            registered_model_name="sentiment-classifier"
        )

Kết luận: Pipeline ML như một “dây chuyền sản xuất”

Việc tự động hóa pipeline ML với Airflow, Hugging Face và Kubernetes giống như xây dựng một “dây chuyền sản xuất” hoàn chỉnh. Mỗi bước đều được tự động hóa, từ việc lấy dữ liệu, training model, đến deployment và monitoring.

Lợi ích của việc này không chỉ là tiết kiệm thời gian mà còn đảm bảo tính nhất quán, reproducibility và scalability. Khi dữ liệu mới đến, pipeline sẽ tự động retrain model và deploy version mới mà không cần sự can thiệp của con người.

Hãy nhớ rằng, xây dựng một pipeline hoàn chỉnh không phải là “một ngày Rome được xây dựng”. Bắt đầu với một version đơn giản, sau đó từ từ thêm các tính năng phức tạp hơn. Quan trọng nhất là phải test kỹ lưỡng mỗi component trước khi đưa vào production.

Chúc các bạn thành công trong việc xây dựng pipeline ML tự động của riêng mình!

SEO Keywords: Airflow ML pipeline, Hugging Face automation, Kubernetes model deployment, MLOps Airflow, Machine Learning pipeline automation, Hugging Face Transformers deployment, Kubernetes ML serving, Apache Airflow MLflow, Docker ML pipeline, MLOps automation, Airflow DAG machine learning, Kubernetes autoscaling ML, Hugging Face Kubernetes integration, ML pipeline orchestration, automated machine learning deployment

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

31 − = 27
Powered by MathCaptcha