Là những người làm trong ngành công nghệ, chúng ta đã quá quen thuộc với Git để quản lý phiên bản cho mã nguồn. Mỗi thay đổi, mỗi tính năng mới, mỗi lần sửa lỗi đều được ghi lại cẩn thận. Nhưng trong thế giới Machine Learning (ML), câu chuyện phức tạp hơn rất nhiều.
Một mô hình ML không chỉ được tạo ra từ code, mà còn từ dữ liệu. Điều gì sẽ xảy ra nếu dữ liệu thay đổi? Làm sao để tái tạo lại kết quả của một mô hình đã huấn luyện 6 tháng trước? Làm sao để cả nhóm có thể làm việc hiệu quả khi mỗi người lại thử nghiệm trên một phiên bản dữ liệu khác nhau?
Đây chính là lúc MLOps (Machine Learning Operations) và cụ thể là Data Version Control (Quản lý phiên bản dữ liệu) vào cuộc. Hôm nay, chúng ta sẽ tìm hiểu tại sao quản lý code là chưa đủ và khám phá một công cụ mạnh mẽ giúp giải quyết vấn đề này: DVC.
1. Bài Toán Thực Tế: Nỗi Đau Của Người Làm Machine Learning
Hãy tưởng tượng bạn đang trong một dự án phân loại cảm xúc (Sentiment Analysis). Vòng đời của một dự án ML thường trông như thế này:
Thu thập dữ liệu -> Tiền xử lý -> Huấn luyện mô hình -> Đánh giá -> Triển khai.

Nghe có vẻ đơn giản, nhưng thực tế là một mớ hỗn độn:
-
Vô số thử nghiệm: Bạn thử nghiệm với
dataset_v1,dataset_v2_cleaned,dataset_v3_augmented. -
Nhiều phiên bản mô hình: Bạn có
model_logistic.pkl,model_bert_base.h5,model_bert_final.h5. -
Thiếu sự kết nối: Bạn không nhớ chính xác
model_bert_final.h5được huấn luyện trên phiên bản dữ liệu nào? Với những tham số nào? -
Vấn đề làm việc nhóm: Đồng nghiệp của bạn muốn chạy lại thử nghiệm của bạn. Bạn phải gửi cho họ file dữ liệu qua Google Drive, hướng dẫn họ cách đặt file vào đúng thư mục, và hy vọng họ không bị nhầm lẫn.
Những vấn đề này dẫn đến việc các thử nghiệm không thể tái tạo (reproducibility), gây lãng phí thời gian và làm chậm quá trình phát triển.
2. Lời Giải Đáp: DVC - Git Cho Dữ Liệu
DVC (Data Version Control) là một công cụ mã nguồn mở được sinh ra để giải quyết chính xác những vấn đề trên. Hãy coi nó như một lớp quản lý bổ sung, hoạt động song song với Git.
-
Git sẽ quản lý code của bạn.
-
DVC sẽ quản lý dữ liệu và mô hình của bạn.

Cách DVC hoạt động:
-
Không lưu file lớn lên Git: Thay vì commit trực tiếp các file dữ liệu/mô hình nặng hàng GB lên Git, bạn dùng lệnh
dvc add ten_file. -
Tạo file "con trỏ": DVC sẽ tạo ra một file text rất nhỏ (ví dụ:
data.csv.dvc). File này chứa thông tin metadata, như một "con trỏ" chỉ tới file dữ liệu thật. -
Commit file "con trỏ" lên Git: Bạn sẽ commit file
.dvcnhỏ gọn này lên Git. -
Đẩy dữ liệu thật lên kho lưu trữ: Dữ liệu thật sẽ được
dvc pushlên một kho lưu trữ từ xa (remote storage) như Google Drive, Amazon S3, hoặc thậm chí là một thư mục trên máy chủ của bạn.
Lợi ích:
-
Kho Git của bạn luôn nhẹ: Vì chỉ chứa code và các file metadata nhỏ.
-
Tái tạo hoàn hảo: Chỉ cần
git checkoutvề một commit cũ và chạydvc pull, bạn sẽ lấy lại được ĐÚNG phiên bản dữ liệu đã được sử dụng tại thời điểm đó. -
Kết nối code và dữ liệu: Mỗi commit trong Git giờ đây đại diện cho một trạng thái hoàn chỉnh của thử nghiệm, bao gồm cả code và dữ liệu.
3. Thử Nghiệm Với DVC
Hãy cùng xem một ví dụ thực tế về việc sử dụng DVC để quản lý hai phiên bản dữ liệu cho bài toán phân loại chữ số viết tay MNIST.
Bước 1: Khởi tạo dự án và Git
Đầu tiên, chúng ta tạo cấu trúc thư mục và khởi tạo Git repository như bình thường.
mkdir dvc-mnist-demo
cd dvc-mnist-demo
mkdir -p data/raw models scripts
git init
Bước 2: Khởi tạo DVC và thêm phiên bản dữ liệu đầu tiên (v1)
Chúng ta sẽ viết một script để tải về bộ dữ liệu MNIST đầy đủ.
# Khởi tạo DVC trong project
dvc init
# Chạy script để tải dữ liệu
python scripts/download_v1.py
# Dùng DVC để theo dõi các file dữ liệu
dvc add data/raw/x_train_v1.npy data/raw/y_train_v1.npy
Lệnh dvc add sẽ tạo ra các file *.dvc tương ứng. Bây giờ, chúng ta commit những file này vào Git.
# Thêm các file .dvc vào Git (chứ không phải file .npy)
git add data/raw/x_train_v1.npy.dvc data/raw/y_train_v1.npy.dvc .gitignore
git commit -m "Add dataset v1 (full MNIST)"
Lúc này, chúng ta đã ghi lại "phiên bản" đầu tiên của dữ liệu.
Bước 3: Huấn luyện và theo dõi mô hình v1
Sau khi huấn luyện, chúng ta có file model.h5 và metrics.json. Chúng ta cũng dùng DVC để theo dõi chúng.
python scripts/train.py --data-version v1
dvc add models/model_v1.h5 models/metrics_v1.json
git add models/model_v1.h5.dvc models/metrics_v1.json.dvc
git commit -m "Train model v1 on full dataset"
Bước 4: Thử nghiệm với phiên bản dữ liệu mới (v2)
Bây giờ, giả sử chúng ta muốn thử nghiệm xem mô hình hoạt động ra sao với một tập dữ liệu nhỏ hơn (chỉ 1000 mẫu).
# Tải về phiên bản dữ liệu nhỏ hơn
python scripts/download_v2.py
# Dùng DVC theo dõi phiên bản mới
dvc add data/raw/x_train_v2.npy data/raw/y_train_v2.npy
# Commit phiên bản dữ liệu v2
git add data/raw/x_train_v2.npy.dvc data/raw/y_train_v2.npy.dvc
git commit -m "Add dataset v2 (1000 samples)"
Chúng ta huấn luyện lại mô hình trên dữ liệu v2 và cũng commit kết quả.
Bước 5: Quay Lại Quá Khứ
Đây là lúc phép màu xảy ra. Giả sử bạn muốn kiểm tra lại kết quả của mô hình v1. Rất đơn giản:
# 1. Quay lại commit của mô hình v1
git checkout <commit_id_cua_model_v1>
# 2. Yêu cầu DVC lấy lại đúng phiên bản dữ liệu tương ứng
dvc checkout
Chỉ với hai lệnh, toàn bộ thư mục data và models của bạn sẽ được khôi phục về đúng trạng thái tại thời điểm bạn huấn luyện mô hình v1.
4. Tự Động Hóa Pipeline với dvc.yaml
DVC còn đi xa hơn khi cho phép bạn định nghĩa toàn bộ pipeline ML (các bước thực hiện) trong một file dvc.yaml.
Bạn có thể định nghĩa các "stage" như preprocess, train, evaluate cùng với các file đầu vào (deps) và đầu ra (outs) của chúng. Khi bạn chạy dvc repro (reproduce), DVC sẽ tự động kiểm tra xem code hoặc dữ liệu đầu vào đã thay đổi chưa và chỉ chạy lại những bước cần thiết. Điều này giúp tự động hóa toàn bộ quy trình thử nghiệm.
Kết Luận
Trong hệ sinh thái MLOps, Data Version Control không còn là một lựa chọn "hay thì có" mà đã trở thành một yêu cầu bắt buộc. Nó mang lại sự minh bạch, khả năng tái tạo và hiệu quả cho các dự án Machine Learning, giúp các nhà khoa học dữ liệu thoát khỏi mớ hỗn độn của các file và tập trung vào điều quan trọng nhất: xây dựng các mô hình tuyệt vời.
Nếu bạn đang bắt đầu một dự án ML, hãy dành thời gian để thiết lập DVC ngay từ đầu. Đó sẽ là một khoản đầu tư xứng đáng cho tương lai của dự án.
Chưa có bình luận nào. Hãy là người đầu tiên!