Khởi tạo DVC và tích hợp với Git
Bước đầu tiên là cài đặt DVC và khởi tạo nó trong thư mục dự án hiện tại. Điều này tạo ra cấu trúc file cần thiết để DVC quản lý dữ liệu.
Chạy lệnh cài đặt và khởi tạo DVC trong thư mục gốc của dự án:
pip install dvc dvc-s3
dvc init
Kết quả mong đợi: Thư mục .dvc và file .dvcignore được tạo ra. Git sẽ tự động thêm các file cấu hình này vào tracking.
Để Git nhận diện và commit cấu hình DVC, bạn cần commit các file cấu hình vừa tạo. Điều này đảm bảo khi clone repo, DVC sẽ được cấu hình đúng.
git add .dvc .dvcignore dvc.lock
git commit -m "DVC init: Add DVC configuration files"
Kết quả mong đợi: Commit thành công với thông báo "X files changed". File .dvcignore giúp Git bỏ qua các file dữ liệu thô lớn, chỉ giữ lại các file metadata của DVC.
Cấu hình Remote Storage cho dữ liệu lớn
DVC không lưu trữ dữ liệu trong Git mà chỉ lưu metadata. Bạn cần cấu hình một "Remote Storage" để lưu file dữ liệu thực tế. Ở đây chúng ta dùng AWS S3 làm ví dụ chuẩn, nhưng logic áp dụng tương tự cho GCS hoặc Local storage.
Tạo một thư mục local để mô phỏng remote storage (dùng cho môi trường dev/test) hoặc cấu hình S3. Nếu dùng local, lệnh sẽ là:
mkdir -p /tmp/dvc-remote-storage
dvc remote add -d storage /tmp/dvc-remote-storage
Kết quả mong đợi: Remote storage được thêm vào file .dvc/config và được đánh dấu là default (mặc định).
File cấu hình DVC lưu trữ thông tin về remote. Bạn cần kiểm tra nội dung file này để đảm bảo đường dẫn chính xác.
Đường dẫn file: .dvc/config
[core]
remote = storage
[remote "storage"]
url = /tmp/dvc-remote-storage
Kết quả mong đợi: File config hiển thị remote tên là "storage" với đường dẫn URL tương ứng. Dấu -d trong lệnh add xác định đây là remote mặc định cho các lệnh push/pull.
Nếu bạn muốn dùng AWS S3 trong môi trường production, thay đổi lệnh cấu hình như sau (đảm bảo đã cài dvc-s3 và cấu hình awscli):
dvc remote add -d my-s3-bucket s3://my-bucket-name/dvc-data
Kết quả mong đợi: DVC được liên kết với bucket S3. Các file dữ liệu sau khi push sẽ nằm trên AWS S3 thay vì local.
Thực hành Add, Commit và Track Dataset
Giả sử bạn có một file dataset lớn (ví dụ: train.csv 500MB). Thay vì thêm trực tiếp vào Git, hãy dùng DVC để quản lý phiên bản.
Lệnh dvc add sẽ đọc file dữ liệu, tính toán hash checksum, lưu dữ liệu thô vào remote storage và tạo một file metadata .dvc để Git track.
dvc add data/train.csv
Kết quả mong đợi: File data/train.csv.dvc được tạo, file data/train.csv bị xóa khỏi thư mục làm việc (hoặc di chuyển sang cache) và xuất hiện trong .dvcignore. Git chỉ track file .dvc.
Commit file metadata vào Git để ghi nhận phiên bản dữ liệu này.
git add data/train.csv.dvc data/.gitignore
git commit -m "Add training dataset v1"
Kết quả mong đợi: Commit thành công. Trong lịch sử Git, bạn thấy file train.csv.dvc thay vì file dữ liệu nặng.
Để đưa dữ liệu thực tế từ cache/remote vào thư mục làm việc (ví dụ sau khi clone repo mới), dùng lệnh dvc checkout.
dvc checkout data/train.csv.dvc
Kết quả mong đợi: File data/train.csv xuất hiện lại trong thư mục dự án với nội dung đúng theo phiên bản đã commit.
Quản lý phiên bản và Rollback dữ liệu
Khi bạn cập nhật dataset (ví dụ: thêm dữ liệu mới vào train.csv), bạn cần cập nhật phiên bản DVC. Quá trình này tạo ra một hash mới và lưu vào remote.
echo "new_data_row" >> data/train.csv
dvc add data/train.csv
dvc push
git add data/train.csv.dvc
git commit -m "Update training dataset v2"
Kết quả mong đợi: File train.csv.dvc được cập nhật hash mới, dữ liệu mới được đẩy lên remote storage, và Git commit thành công.
Để xem lịch sử các phiên bản dữ liệu đã lưu trong DVC, dùng lệnh dvc data status hoặc xem file dvc.lock nếu đang dùng DVC v3+. Tuy nhiên, cách mạnh mẽ nhất là dùng dvc log hoặc kiểm tra commit history.
dvc log data/train.csv.dvc
Kết quả mong đợi: Hiển thị danh sách các commit liên quan đến file dữ liệu, bao gồm hash checksum và thời gian thay đổi.
Để rollback về phiên bản dữ liệu cũ (ví dụ: v1), bạn cần tìm commit hash của phiên bản đó và checkout lại file .dvc, sau đó chạy checkout dữ liệu.
git checkout -- data/train.csv.dvc
dvc checkout data/train.csv.dvc
Kết quả mong đợi: File data/train.csv trong thư mục làm việc quay về nội dung của phiên bản v1. Dữ liệu mới (v2) vẫn nằm trong remote nhưng không được trỏ đến bởi file metadata hiện tại.
Để verify toàn bộ trạng thái, chạy lệnh check xem dữ liệu local có khớp với remote không.
dvc data status
Kết quả mong đợi: Thông báo "Everything is up to date" nếu dữ liệu local khớp với remote, hoặc liệt kê các file cần push/pull nếu có sự khác biệt.
Đ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 1: Chuẩn bị môi trường và kiến trúc tổng quan
Phần 2: Quản lý dữ liệu phiên bản với DVC »