- Giới thiệu
- 1. Tại sao quản lý phiên bản lại quan trọng trong dự án AI?
- 2. Tổng quan về Git Flow
- 3. Điều chỉnh Git Flow cho dự án AI
- 4. Quản lý dữ liệu và model bằng Git LFS
- 5. Tự động hoá CI/CD cho pipeline AI
- 6. Xử lý xung đột và rebase trong môi trường AI
- 7. Best Practices cho dự án AI sử dụng Git Flow
- 8. Kết luận
Giới thiệu
Trong môi trường phát triển trí tuệ nhân tạo (AI), việc quản lý mã nguồn không còn là thách thức duy nhất. Các dự án AI thường bao gồm code, dataset, model weights và notebook. Khi các thành viên trong nhóm làm việc đồng thời, việc đồng bộ hoá và duy trì lịch sử thay đổi trở nên phức tạp hơn rất nhiều so với các dự án phần mềm truyền thống. Bài viết này sẽ đi sâu vào cách Git Flow – một quy trình quản lý nhánh đã được chứng minh hiệu quả – có thể được mở rộng và tùy biến để phục vụ nhu cầu đặc thù của dự án AI.
1. Tại sao quản lý phiên bản lại quan trọng trong dự án AI?
AI không chỉ là viết code. Một mô hình học máy thường trải qua các giai đoạn:
- Thu thập và tiền xử lý dữ liệu.
- Huấn luyện mô hình và lưu lại trọng số.
- Đánh giá, tinh chỉnh siêu tham số.
- Triển khai mô hình vào môi trường production.
Mỗi giai đoạn đều tạo ra các artefact (tập tin) có kích thước lớn và có thể thay đổi nhanh chóng. Nếu không có một quy trình quản lý phiên bản chặt chẽ, chúng ta sẽ gặp phải:
- Khó tái tạo lại kết quả (reproducibility).
- Rủi ro mất mát dữ liệu hoặc model.
- Xung đột khi nhiều người cùng chỉnh sửa notebook hoặc script tiền xử lý.
Git, kết hợp với Git LFS, cung cấp nền tảng vững chắc để giải quyết các vấn đề trên, nhưng chỉ dùng master/main và một vài nhánh phụ sẽ không đủ. Đó là lúc Git Flow xuất hiện.
2. Tổng quan về Git Flow
Git Flow định nghĩa năm loại nhánh chính:
main(hoặcmaster): chứa mã nguồn đã được phát hành.develop: tích hợp các tính năng đang trong quá trình phát triển.feature/*: nhánh cho mỗi tính năng mới.release/*: chuẩn bị cho một phiên bản phát hành.hotfix/*: sửa lỗi khẩn cấp trênmain.
Quy trình này giúp tách biệt các công việc, giảm xung đột và tạo lịch sử commit sạch sẽ.
3. Điều chỉnh Git Flow cho dự án AI
Đối với dự án AI, chúng ta cần bổ sung các nhánh phụ để quản lý dữ liệu và mô hình. Dưới đây là một đề xuất thực tiễn:
data/*: chứa các script tiền xử lý và metadata của dataset.model/*: lưu trữ các file cấu hình, script training và trọng số (weights) được versioned bằng Git LFS.experiment/*: mỗi nhánh đại diện cho một thử nghiệm (experiment) với siêu tham số khác nhau.
Những nhánh này vẫn dựa trên develop để duy trì tính nhất quán.
3.1. Tạo cấu trúc nhánh ban đầu
git init git checkout -b main git commit --allow-empty -m "Initial commit on main" git checkout -b develop git push -u origin main develop
Sau khi develop được tạo, chúng ta có thể tạo các nhánh phụ:
git checkout -b feature/feature-engineering develop git checkout -b data/preprocess develop git checkout -b model/resnet50 develop
Mỗi nhánh sẽ chịu trách nhiệm cho một phần công việc cụ thể, giúp giảm thiểu xung đột khi đồng thời làm việc trên các thành phần khác nhau.
4. Quản lý dữ liệu và model bằng Git LFS
Git LFS (Large File Storage) cho phép chúng ta version các file có kích thước lớn (hồ sơ dữ liệu, model weights) mà không làm tăng kích thước repository. Đầu tiên, cài đặt Git LFS và cấu hình:
git lfs install # Đánh dấu các loại file cần lưu trữ bằng LFS cat >> .gitattributes <<EOF *.csv filter=lfs diff=lfs merge=lfs -text *.pt filter=lfs diff=lfs merge=lfs -text *.h5 filter=lfs diff=lfs merge=lfs -text EOF git add .gitattributes git commit -m "Configure Git LFS for data and model files"
Sau khi cấu hình, bất kỳ file nào khớp pattern trên sẽ tự động được đưa vào LFS khi commit.
4.1. Ví dụ thực tế: Lưu trữ model ResNet50
Giả sử chúng ta đã huấn luyện một mô hình ResNet50 và lưu lại dưới dạng resnet50.pt. Để đưa nó vào LFS:
git checkout -b model/resnet50 develop git add models/resnet50.pt git commit -m "Add ResNet50 weights (LFS)" git push origin model/resnet50
Khi đồng nghiệp pull về, Git LFS sẽ tự động tải file .pt từ server LFS, tránh việc repository trở nên nặng.
5. Tự động hoá CI/CD cho pipeline AI
GitHub Actions (hoặc GitLab CI) cho phép chúng ta tự động chạy các bước:
- Kiểm tra chất lượng code (lint, unit test).
- Huấn luyện mô hình trên môi trường CI (có thể dùng GPU trên runner).
- Đánh giá mô hình và lưu lại metric.
- Đẩy model đã được kiểm tra lên registry (Docker, S3, hoặc Model Store).
Dưới đây là một workflow mẫu cho feature/training:
name: Train Model
on:
push:
branches:
- feature/training
jobs:
train:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.10'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
pip install torch torchvision
- name: Pull LFS files
run: git lfs pull
- name: Train
run: |
python scripts/train.py --config configs/exp1.yaml
- name: Upload model artifact
uses: actions/upload-artifact@v3
with:
name: model-weights
path: outputs/*.ptWorkflow này sẽ tự động chạy mỗi khi có commit trên nhánh feature/training, giúp đội ngũ nhanh chóng nhận được feedback về chất lượng mô hình.
6. Xử lý xung đột và rebase trong môi trường AI
Trong các dự án AI, xung đột thường xảy ra ở:
- Notebook (.ipynb) – do JSON nội dung.
- Script tiền xử lý dữ liệu.
- File cấu hình (yaml, json) chứa siêu tham số.
Đối với notebook, Git không thể hiển thị diff rõ ràng. Một cách tiếp cận là chuyển notebook sang .py bằng jupytext và commit dưới dạng script. Điều này giúp git merge và git rebase hoạt động tốt hơn.
6.1. Rebase an toàn trên nhánh feature
Khi develop nhận được các commit mới, chúng ta muốn cập nhật nhánh feature mà không tạo thêm merge commit. Thực hiện:
git checkout feature/feature-engineering git fetch origin git rebase origin/develop
Nếu gặp xung đột, Git sẽ dừng lại và cho phép chỉnh sửa. Ví dụ, xung đột trong preprocess.py:
# Mở file và giải quyết xung đột # Sau khi sửa xong git add scripts/preprocess.py git rebase --continue
Sau khi rebase thành công, push với --force-with-lease để cập nhật remote:
git push --force-with-lease
Lưu ý: Không nên force push lên main hoặc release trừ khi chắc chắn không có người khác đang làm việc trên nhánh đó.
7. Best Practices cho dự án AI sử dụng Git Flow
- Commit message chuẩn: Sử dụng format
type(scope): description(ví dụ:feat(data): add new preprocessing step). Điều này giúp tự động tạo changelog. - Tag phiên bản mô hình: Khi một model được đưa vào production, tạo tag
v1.0.0-modelvà ghi chú các siêu tham số trongCHANGELOG.md. - Kiểm tra LFS quota: Theo dõi dung lượng LFS trên server để tránh vượt hạn mức.
- Review PR chi tiết: Đối với notebook, reviewer nên chạy lại toàn bộ notebook để chắc chắn không có lỗi runtime.
- Branch naming convention:
feature/*– tính năng mới.data/*– thay đổi dataset hoặc script.model/*– thay đổi kiến trúc hoặc trọng số.experiment/*– thử nghiệm siêu tham số.
- Automated testing: Viết unit test cho các hàm tiền xử lý và integration test cho pipeline training.
8. Kết luận
Áp dụng Git Flow một cách linh hoạt, kết hợp với Git LFS và CI/CD tự động, giúp các dự án AI duy trì lịch sử thay đổi rõ ràng, giảm thiểu rủi ro mất mát dữ liệu và tăng tốc độ phát triển. Khi mọi thành viên tuân thủ quy trình nhánh, review và tagging, việc triển khai mô hình vào production trở nên đáng tin cậy và có thể tái tạo được.
Để nắm vững cách thiết lập Git Flow, quản lý dữ liệu lớn và tự động hoá quy trình AI một cách bài bản, Tham khảo khóa học "Khóa học Git & Git Flow thực chiến" tại đây.






