1. Yêu cầu phần cứng và tài nguyên đám mây
Để xây dựng nền tảng DataOps ổn định, bạn cần xác định rõ các thông số tài nguyên tối thiểu cho từng thành phần trong cụm Kubernetes.
Node Master (Control Plane) chịu trách nhiệm quản lý trạng thái cụm, yêu cầu ít nhất 2 vCPU và 4GB RAM. Các Node Worker chạy container huấn luyện mô hình cần tối thiểu 4 vCPU và 8GB RAM. Nếu sử dụng GPU để huấn luyện Deep Learning, mỗi Node Worker cần có ít nhất 1 GPU (ví dụ: NVIDIA T4 hoặc A10) và cài đặt driver tương thích.
Dung lượng lưu trữ cần tối thiểu 100GB SSD cho hệ thống, 200GB cho cache Docker, và 500GB+ cho Data Lake (nơi lưu dữ liệu thô và artifacts của DVC). Nếu dùng cloud (AWS/Azure/GCP), hãy chọn instance type có khả năng mở rộng GPU (như g4dn hoặc Standard_NC) và đảm bảo Network Bandwidth > 1Gbps để truyền tải dữ liệu nhanh.
Để kiểm tra tài nguyên hiện tại của server, chạy lệnh sau:
free -h && nvidia-smi --query-gpu=name,memory.total --format=csv
Kết quả mong đợi: Hiển thị tổng RAM và Swap available. Nếu có GPU, dòng đầu tiên sẽ hiện tên card (ví dụ: Tesla T4) và tổng bộ nhớ. Nếu không có GPU, lệnh nvidia-smi sẽ báo lỗi "command not found", đây là bình thường cho môi trường CPU-only.
2. Cài đặt Docker, kubectl và công cụ CLI
Bước đầu tiên là chuẩn bị môi trường chạy container và công cụ quản lý Kubernetes trên tất cả các node.
Cài đặt Docker Engine phiên bản mới nhất để đảm bảo tính tương thích với các image MLflow và DVC. Sau đó, cài đặt kubectl (client CLI cho Kubernetes) để điều khiển cụm. Cuối cùng, cài đặt các công cụ hỗ trợ như helm (package manager) và dvc (data version control).
Thực thi các lệnh cài đặt trên Ubuntu/Debian (áp dụng cho cả Master và Worker nodes):
curl -fsSL https://get.docker.com -o get-docker.sh && sh get-docker.sh && systemctl enable --now docker
Kết quả mong đợi: Docker Engine được cài đặt thành công và service tự động khởi động. Lệnh `docker info` sẽ trả về thông tin phiên bản và trạng thái running.
Cài đặt kubectl bằng cách tải binary chính thức từ Kubernetes và đặt vào thư mục PATH:
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" && chmod +x kubectl && sudo mv kubectl /usr/local/bin/
Kết quả mong đợi: Lệnh `kubectl version --client` trả về phiên bản kubectl mới nhất.
Cài đặt Helm để quản lý các chart phức tạp như MLflow và DVC trong tương lai:
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
Kết quả mong đợi: Lệnh `helm version` hiển thị phiên bản Helm đã cài đặt.
Cài đặt DVC và các backend storage plugin cần thiết (s3fs cho S3, gcsfs cho GCS) bằng pip:
pip install dvc dvc-s3 dvc-gs
Kết quả mong đợi: Lệnh `dvc version` trả về phiên bản DVC hiện tại.
3. Khởi tạo kho Git và cấu hình Remote Repository
Trước khi triển khai Kubernetes, cần thiết lập kho mã nguồn trung tâm để lưu trữ code, pipeline YAML và file cấu hình DVC.
Tạo một thư mục mới cho dự án và khởi tạo kho Git. Cấu hình tên người dùng và email để cam kết (commit) có hiệu lực. Bước này là bắt buộc để DVC hoạt động, vì DVC lưu trữ metadata (.dvc files) trong Git.
Thực hiện các lệnh khởi tạo:
mkdir -p ~/dataops-project && cd ~/dataops-project && git init
git config user.name "SysAdmin" && git config user.email "admin@example.com"
Kết quả mong đợi: Thư mục `.git` được tạo ra và cấu hình người dùng được lưu vào file `.gitconfig`.
Cấu hình remote repository (ví dụ: GitHub hoặc GitLab) để đồng bộ code. Thay thế YOUR_REPO_URL bằng đường dẫn thực tế của repo bạn đã tạo trên cloud.
git remote add origin YOUR_REPO_URL
Kết quả mong đợi: Lệnh `git remote -v` hiển thị đường dẫn đến remote origin.
Tạo file `.gitignore` để loại trừ các thư mục dữ liệu nặng, cache Docker và file môi trường nhạy cảm khỏi việc commit lên Git. DVC sẽ quản lý dữ liệu này riêng biệt.
Tạo file `/home/sysadmin/dataops-project/.gitignore` với nội dung hoàn chỉnh:
# DVC
.dvc
.dvc/cache
.dvc/tmp
.dvc/.dvcignore
*.lock
# Data
data/
models/
artifacts/
# Environment
.env
.env.local
# Docker
.docker/
# Logs
*.log
logs/
Kết quả mong đợi: File `.gitignore` được tạo. Lệnh `git status` sẽ không hiển thị các file trong thư mục `data/` hay `models/`.
Commit cấu hình ban đầu lên Git:
git add . && git commit -m "Initial commit: Setup project structure and gitignore"
Kết quả mong đợi: Thông báo "1 file changed, 11 insertions(+)" và commit hash được tạo thành công.
4. Giới thiệu kiến trúc DataOps với DVC, MLflow và Kubernetes
Kiến trúc tổng thể được thiết kế để tách biệt quy trình phát triển, huấn luyện và triển khai, đảm bảo tính tái sản xuất (reproducibility) và khả năng mở rộng (scalability).
Thành phần DVC (Data Version Control) đóng vai trò quản lý phiên bản dữ liệu và artifacts. DVC lưu trữ metadata (pointer) trong Git và dữ liệu thực tế trên object storage (S3/GCS). Điều này giúp Git repo nhẹ và cho phép rollback dữ liệu về phiên bản cũ bất kỳ lúc nào.
Thành phần MLflow đóng vai trò quản lý vòng đời mô hình (Model Registry), theo dõi các tham số huấn luyện (tracking experiments), và lưu trữ mô hình đã huấn luyện. MLflow sẽ chạy trên Kubernetes dưới dạng service, cho phép nhiều người dùng truy cập đồng thời.
Thành phần Kubernetes đóng vai trò nền tảng hạ tầng (Infrastructure). Nó chịu trách nhiệm orchestration các container huấn luyện (Training Jobs) và container phục vụ mô hình (Serving Pods). Kubernetes sẽ tự động scale số lượng pod dựa trên tải và tài nguyên GPU.
Quy trình dữ liệu: Dữ liệu thô được upload lên Object Storage -> DVC tạo version -> Code huấn luyện đọc dữ liệu qua DVC -> MLflow ghi log metrics và artifacts -> Kubernetes chạy container huấn luyện -> MLflow lưu model vào Registry -> Kubernetes deploy model vào serving pod.
Để minh họa kiến trúc, tạo file thiết kế `architecture.md` tại `/home/sysadmin/dataops-project/architecture.md`:
# DataOps Architecture Overview
## Components
- **Git**: Stores code, pipelines, and DVC metadata (.dvc files).
- **Object Storage (S3/GCS)**: Stores raw data, processed datasets, and model artifacts managed by DVC.
- **DVC**: Handles data versioning and pipeline orchestration logic.
- **MLflow**: Tracks experiments, registers models, and provides model serving API.
- **Kubernetes**: Orchestrates training jobs and serving deployments.
## Data Flow
1. Data Ingestion -> Object Storage
2. Versioning -> DVC (metadata in Git, data in Storage)
3. Training -> Kubernetes Pod (pulls data via DVC, logs to MLflow)
4. Model Registry -> MLflow (stores trained model)
5. Deployment -> Kubernetes (pulls model from MLflow for inference)
Kết quả mong đợi: File `architecture.md` được tạo. Đây là tài liệu tham chiếu cho các phần tiếp theo của series.
Commit file thiết kế lên Git để hoàn tất bước chuẩn bị:
git add architecture.md && git commit -m "Add architecture overview document"
Kết quả mong đợi: Commit thành công với thông báo thay đổi file. Lúc này môi trường đã sẵn sàng cho Phần 2: Quản lý dữ liệu phiên bản với DVC.
Điều hướng series:
Mục lục: Series: Xây dựng nền tảng DataOps với DVC, MLflow và Kubernetes cho vòng đời AI
Phần 2: Quản lý dữ liệu phiên bản với DVC »