Dùng DVC kết hợp Git: Đừng để Dataset 10GB làm “nát” Repo của bạn

Git tutorial - IT technology blog
Git tutorial - IT technology blog

Nỗi ám ảnh mang tên “Git Push” dữ liệu nặng

Ngày đầu làm Machine Learning, mình từng mắc một sai lầm “kinh điển”: ném mọi thứ vào Git. Từ file code Python vài KB đến cái dataset ảnh 5GB và file model (.pth) nặng 800MB. Kết quả là lệnh git push chạy cả tiếng không xong. Cuối cùng, GitHub thẳng tay từ chối vì file vượt quá giới hạn 100MB.

Mình từng thử chữa cháy bằng git-lfs. Tuy nhiên, chi phí lưu trữ bắt đầu đội lên nhanh chóng, còn việc đồng bộ giữa các thành viên trong team thì chậm như rùa. Tệ hơn, khi cần quay lại phiên bản data cũ để debug, mình hoàn toàn mất dấu không biết code nào đi với data nào. Git sinh ra để quản lý code (văn bản), nó không được thiết kế để gánh hàng gigabyte dữ liệu nhị phân.

Tại sao Git lại “sợ” dữ liệu lớn?

Vấn đề nằm ở cơ chế snapshot. Khi bạn sửa một file text, Git chỉ lưu phần khác biệt (diff). Nhưng với file nhị phân như ảnh hay model weights, chỉ cần thay đổi 1 byte, Git sẽ lưu lại toàn bộ file mới. Repo của bạn sẽ phình to chóng mặt. Hãy tưởng tượng việc git clone một dự án mất 30 phút chỉ vì đống dữ liệu thừa từ quá khứ – đó là một cực hình thực sự.

Nhiều anh em thường chọn cách “sống mòn” như:

  • Nén data rồi quăng lên Google Drive (rất dễ nhầm lẫn phiên bản).
  • Dùng Git LFS (tốn phí và phụ thuộc server).
  • Bỏ qua luôn việc quản lý phiên bản data (cực kỳ nguy hiểm khi làm AI).

DVC (Data Version Control) – Lối thoát cho dân AI

Sau 6 tháng áp dụng DVC vào dự án thực tế, mình khẳng định đây là “mảnh ghép” hoàn hảo còn thiếu. DVC không lưu dữ liệu trực tiếp vào Git. Nó chỉ tạo ra các file meta (.dvc) siêu nhẹ – chỉ vài KB – để làm đại diện. Dữ liệu thật sẽ được đẩy lên các kho lưu trữ riêng biệt như S3, Google Drive, hoặc server nội bộ qua SSH.

Cơ chế vận hành của DVC:

  1. Data thực tế: Nằm tại máy bạn và được tự động đưa vào .gitignore.
  2. File .dvc: Chứa mã hash định danh duy nhất cho dữ liệu, file này sẽ được Git quản lý.
  3. DVC Remote: Nơi lưu trữ data thật (như một cái kho chứa đồ nặng).

Triển khai DVC từ con số 0

Hãy cùng bắt tay vào setup cho một project thực tế.

1. Cài đặt công cụ

Bạn có thể cài đặt nhanh qua pip. Đừng quên cài thêm plugin tương ứng với kho lưu trữ bạn dùng:

pip install dvc
# Nếu dùng S3
pip install "dvc[s3]"
# Nếu dùng Google Drive
pip install "dvc[gdrive]"

2. Khởi tạo môi trường

Tại thư mục gốc của dự án, hãy chạy lệnh sau:

dvc init
git commit -m "Initialize DVC"

Lúc này, DVC sẽ tạo ra thư mục cấu hình .dvc/. Mọi thứ đã sẵn sàng.

3. Quản lý dữ liệu đầu tiên

Giả sử bạn có thư mục data/raw/ nặng 2GB. Thay vì dùng lệnh Git thông thường, hãy dùng:

dvc add data/raw/

DVC sẽ tạo ra file data/raw.dvc. Đồng thời, nó tự thêm data/raw/ vào .gitignore. Bây giờ, bạn chỉ cần commit file meta lên Git:

git add data/raw.dvc .gitignore
git commit -m "Add raw dataset via DVC"

4. Cấu hình “kho chứa” (Remote Storage)

Bạn có thể dùng Google Drive cá nhân làm nơi lưu trữ dữ liệu. Dưới đây là cách thiết lập một thư mục local để giả lập server:

dvc remote add -d myremote /path/to/dvc_storage
git commit .dvc/config -m "Configure remote storage"

Để đẩy dữ liệu lên kho, bạn chỉ cần một lệnh duy nhất: dvc push.

Làm việc nhóm cực kỳ mượt mà

Khi đồng nghiệp git pull code về, thư mục data/raw/ của họ sẽ trống rỗng. Nhưng đừng lo, họ chỉ cần gõ:

dvc pull

DVC sẽ tự đọc mã hash trong file .dvc và tải đúng phiên bản dữ liệu từ remote về. Tốc độ tải thường nhanh hơn Git LFS rất nhiều vì nó tối ưu hóa việc truyền tải file lớn.

Kinh nghiệm thực chiến: Quản lý Model Weights

Mình từng mất cả buổi sáng chỉ để tìm lại file model_v2_final_fix_v3.pth. Với DVC, mọi thứ chuyên nghiệp hơn hẳn. Bạn chỉ cần gắn tag cho Git commit để đánh dấu cột mốc quan trọng.

Ví dụ: Khi train xong model đạt độ chính xác 95%:

dvc add model.pth
git add model.pth.dvc
git commit -m "Model đạt Acc 95% với LR 0.001"
git tag -a "v1.0-prod" -m "Model lên production"
dvc push

Sau này, dù code có thay đổi đến đâu, chỉ cần git checkout v1.0-prod rồi dvc checkout, bạn sẽ có ngay bộ code và model chuẩn xác của thời điểm đó. Không còn tình trạng “râu ông nọ cắm cằm bà kia”.

Những lưu ý “xương máu”

  • Luôn nhớ dvc push: Git commit chỉ lưu cái “vỏ”. Nếu bạn quên push data lên remote, đồng nghiệp sẽ không có gì để chạy.
  • Ưu tiên SSH: Nếu làm việc trong công ty, hãy dùng SSH để kết nối server chung. Tốc độ sẽ ổn định hơn nhiều so với Google Drive.
  • Tự động hóa với Pipeline: Hãy tìm hiểu thêm dvc run. Nó giúp bạn kết nối Code -> Data -> Model thành một chuỗi tự động, đảm bảo kết quả luôn có thể tái lập (reproducible).

Lời kết

Nếu dự án của bạn chỉ có vài file CSV nhẹ, Git là đủ. Nhưng khi bắt đầu làm việc với hàng ngàn tấm ảnh, video hay các file model nặng hàng trăm MB, DVC là lựa chọn bắt buộc. Nó giữ cho Repo Git của bạn luôn sạch sẽ, chuyên nghiệp và giúp việc cộng tác trong team trở nên dễ dàng hơn bao giờ hết.

Share: