1. 17:49 14/10/2026
### 1. Tại sao cần CI/CD cho Machine Learning?
Khác với phần mềm truyền thống, dự án ML còn phải quản lý dữ liệu, phiên bản mô hình và môi trường huấn luyện. Một pipeline CI/CD giúp:
- Tự động kiểm tra chất lượng code và dữ liệu mỗi khi push.
- Huấn luyện lại mô hình khi dữ liệu hoặc hyperparameter thay đổi.
- Đóng gói mô hình và triển khai nhất quán sang môi trường staging hay production.
### 2. Các thành phần chính
- **GitHub Actions**: chạy các job tự động trên mỗi sự kiện (push, pull request, schedule).
- **DVC (Data Version Control)**: theo dõi phiên bản dữ liệu và mô hình, lưu trữ artifact trên remote storage (S3, GCS, Azure Blob).
- **Docker**: đóng gói môi trường huấn luyện và serving thành image bất biến.
- **MLflow** (tuỳ chọn): ghi log experiment, lưu metric và register model.
### 3. Cấu trúc thư mục mẫu
```
project/
├─ .github/workflows/ci-cd.yml
├─ dvc.yaml
├─ params.yaml
├─ data/ # dữ liệu thô (tracked by DVC)
├─ src/
│ ├─ train.py
│ ├─ evaluate.py
│ └─ serve.py
├─ Dockerfile.train
├─ Dockerfile.serve
└─ requirements.txt
```
### 4. Ví dụ workflow GitHub Actions (ci-cd.yml)
```yaml
name: ML CI/CD
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
lint-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
- run: pip install -r requirements.txt
- run: flake8 src/
- run: pytest tests/
train:
needs: lint-test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Pull DVC data
run: |
pip install dvc[s3]
dvc pull
- name: Build train image
run: docker build -f Dockerfile.train -t ml-train .
- name: Run training
run: |
docker run --rm -v $PWD:/workspace ml-train python src/train.py
- name: Push model artifact
run: dvc push
deploy:
needs: train
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build serve image
run: docker build -f Dockerfile.serve -t ml-serve .
- name: Push to registry
run: |
echo ${{ secrets.DOCKER_PASSWORD }} | docker login -u ${{ secrets.DOCKER_USERNAME }} --password-stdin
docker tag ml-serve myregistry/ml-serve:${{ github.sha }}
docker push myregistry/ml-serve:${{ github.sha }}
```
### 5. Mẹo thực tế
- **Cache DVC cache** giữa các run bằng action `actions/cache` để tiết kiệm thời gian pull data.
- **Tách stage**: chỉ chạy `train` khi file dữ liệu hoặc `params.yaml` thay đổi (dùng `paths` trong `on.push`).
- **Sử dụng secret** cho credentials S3, Docker registry, MLflow tracking URI.
- **Giám sát**: thêm step gửi metric lên Slack hoặc Prometheus sau khi evaluate.
- **Rollback**: giữ nhiều version model trong DVC remote; khi deploy thất bại, chỉ cần `dvc checkout <tag>` và build lại image serve.
### 6. Kết luận
Việc kết hợp GitHub Actions với DVC tạo ra một quy trình tự động hóa end‑to‑end: từ kiểm tra code, version dữ liệu, huấn luyện, đến đóng gói và triển khai. Áp dụng mẫu trên giúp đội ngũ ML giảm thiểu lỗi thủ công, tăng tốc độ lặp lại thử nghiệm và đảm bảo tính tái lập (reproducibility) cho mọi bản phát hành.