পাঠ ১০ · ৩৩-এর মধ্যে · মডিউল ২
Home / AI Courses / MLOps / DVC

Data versioning — DVC

DVC — Data Version Control
৮ মিনিট পড়া মধ্য · Intermediate CLI + YAML

এই পাঠে যা শিখবেন

  • DVC কীভাবে কাজ করে — .dvc file ও content-addressable storage
  • Basic workflow — add, push, pull, checkout
  • DVC pipelines — stage definition + caching
  • DVC vs Git LFS vs lakeFS — কখন কোনটা

১ · কেন data version control

Code git-এ — সমস্যা নেই। কিন্তু ৫ GB-এর dataset, ১০ GB-এর model — git-এ commit করলে repo phul, GitHub block।

প্রশ্ন — "আজকের prod model কোন data-এ trained?" — এই answer-এর reproducibility-এর জন্য data version লাগে। DVCDVC (Data Version Control)Iterative.ai-এর open-source tool। Git এর সাথে integrate — large file/dataset-এর জন্য content-addressable hash-based versioning। এই সমস্যা solve করে।

২ · কীভাবে কাজ করে

  • Big file → DVC সেটার MD5/SHA hash compute করে।
  • File-কে remote storage-এ upload করে (S3 path = hash-based)।
  • Repo-তে একটি ছোট .dvc file create — hash + size store।
  • Git track করে শুধু .dvc file (small text)।
  • অন্য কেউ dvc pull দিলে — hash থেকে remote file resolve।
কী track হয়, কোথায়

Git-এ: code + .dvc file (pointers) + dvc.yaml (pipeline)।
DVC remote-এ: actual data files (hash-named)।
একটি repo clone-এ — code আসে; dvc pull-এ data আসে।

৩ · Basic workflow

Bash · DVC quickstart
# initialize
$ git init
$ dvc init
$ git commit -m "init dvc"

# remote setup (S3 example)
$ dvc remote add -d storage s3://my-ml-bucket/dvc-store
$ git commit .dvc/config -m "add s3 remote"

# track a dataset
$ dvc add data/bangla-reviews.csv
# creates: data/bangla-reviews.csv.dvc  (small pointer file)
# updates: .gitignore (data file ignored)
$ git add data/bangla-reviews.csv.dvc .gitignore
$ git commit -m "add bangla reviews v1"

# push data to remote
$ dvc push

# someone else clones + pulls
$ git clone 
$ dvc pull             # downloads actual data from S3

# update data
$ # edit data/bangla-reviews.csv
$ dvc add data/bangla-reviews.csv
$ git commit data/bangla-reviews.csv.dvc -m "v2: more samples"
$ dvc push

# rollback to v1
$ git checkout HEAD~1 -- data/bangla-reviews.csv.dvc
$ dvc checkout

    
Notice: data file কখনো git commit-এ যাচ্ছে না — শুধু .dvc pointer। Git history-তে data version-গুলো traceable, কিন্তু repo size ছোট।

৪ · DVC pipelines

Reproducible workflow — dvc.yaml-এ stage define। DVC dependency graph build করে; কী change হয়েছে শুধু সেটাই rerun হয় (caching)।

YAML · dvc.yaml
stages:
  prepare:
    cmd: python src/prepare.py data/raw data/prepared
    deps:
      - data/raw
      - src/prepare.py
    outs:
      - data/prepared

  featurize:
    cmd: python src/featurize.py data/prepared data/features
    deps:
      - data/prepared
      - src/featurize.py
    outs:
      - data/features

  train:
    cmd: python src/train.py data/features models/model.joblib
    deps:
      - data/features
      - src/train.py
    outs:
      - models/model.joblib
    metrics:
      - metrics.json:
          cache: false

  evaluate:
    cmd: python src/evaluate.py models/model.joblib data/features
    deps:
      - models/model.joblib
      - data/features
      - src/evaluate.py
    metrics:
      - eval.json:
          cache: false
    plots:
      - confusion_matrix.png

    
dvc repro সব stage chain-এ run করে। যদি শুধু train.py change হয় — prepare + featurize cached থাকে, শুধু train + evaluate rerun। ML pipeline-এর "make" tool।

৫ · DVC vs alternatives

  • DVC: hash-based, git-integrated, free OSS, pipeline support। Bangladesh team-এর জন্য common choice।
  • Git LFS: GitHub-integrated, simpler, but $-storage cost, no pipelines। Small binary files (~MB) ভাল।
  • lakeFS: "Git for data lake" — branch/merge data। S3-compatible API। Bigger team, complex data lake।
  • S3 versioning: simplest — bucket version-on। No pipelines, no diff support।
  • HuggingFace Hub: dataset/model versioning + community sharing। Public-friendly।

৬ · Hash performance & big data

DVC default MD5 use করে। Large file (GB+)-এ hashing slow হতে পারে। Optimizations:

  • dvc config core.hash_jobs N — parallel hashing।
  • Directories — DVC tree-hash; nested files efficient।
  • Symlink / reflink mode — file copy এড়ায় (cache.type)।
  • For >100 GB datasets — DVC works but think lakeFS for branching needs।

৭ · CI integration

  • CI runner-এ dvc pull — data fetch।
  • S3/GCS credentials — secrets manager।
  • dvc repro — pipeline rerun reproducibility check।
  • Cache reuse — fast re-runs।
DVC — git pointers, remote stores actual files Code in git, data in S3 Local workspace 📝 src/train.py (git) 📋 data.csv.dvc (git) 📊 data.csv (gitignored) ⚙️ dvc.yaml (git) GitHub (small) .py + .dvc + .yaml ~MB total history fast S3 / GCS (big) data files (hashed) ~GB to TB deduplicated Teammate git clone + dvc pull git push dvc push
DVC = git split: code goes to GitHub (small, fast); data goes to S3-compatible (big, hashed)। .dvc file repo-তে — hash-pointer।
Bangladesh team-এর জন্য DVC + S3 (AWS Mumbai) — most common stack। On-prem MinIO-ও DVC remote হিসেবে use। Setup ১ ঘণ্টায়, daily benefit বছরভর।

ভাবনার প্রশ্ন

প্র ০১ "DVC vs Git LFS vs lakeFS — Bangladesh ML team-এর জন্য কোনটা?"

এই তিনটি tool different problem space — choose carefully।

Git LFS:

  • GitHub-এ deeply integrated।
  • Small binary (image, PDF, model file ~MB)।
  • Free tier ১ GB, paid bandwidth।
  • No pipeline support।
  • Best for: simple ML repo with few binary artifacts।

DVC:

  • Open source, free OSS।
  • Any S3/GCS/Azure/SSH backend।
  • Pipeline support (dvc.yaml)।
  • Best for: ML team with structured pipeline + cost-sensitive।

lakeFS:

  • Git-like branch/merge for data lakes।
  • S3-compatible API — applications transparent।
  • Heavier infrastructure (manifest store, k8s deployment)।
  • Best for: data engineering team, large-scale data lake (TB+)।

Bangladesh decision matrix:

  • Single ML developer, GitHub-only → LFS।
  • Small ML team (2-5), cost-sensitive, structured pipeline → DVC।
  • Larger team (10+) with data engineers, complex data lake → lakeFS।
  • Enterprise + budget — Databricks/Snowflake-এর built-in versioning, both DVC + lakeFS replace।

Common Bangladesh setup:

  • ৮০% — DVC + S3 (Mumbai)।
  • ~১০% — Git LFS for simple repos।
  • ~৫% — lakeFS at larger orgs।
  • ~৫% — proprietary (Databricks)।

Migration possibility:

  • LFS → DVC: relatively easy। Pull files, dvc add।
  • DVC → lakeFS: data move + path update; harder।
  • Most teams stick with first choice years।

Practical advice:

  • Start with DVC unless specific reason।
  • S3 Mumbai bucket (low-latency from BD)।
  • Bandwidth cost: egress care; team in same region cheap।

মূল উপলব্ধি: Bangladesh ML team-এর majority — DVC sweet spot। Free, flexible, pipeline-aware। LFS too simple at scale, lakeFS too heavy for small team। DVC + MinIO (on-prem) compliance setup-এও extends।

প্র ০২ "Large dataset (50 GB+) hashing slow। Workflow practical?"

Hashing performance — DVC-এর scaling concern।

Default behavior:

  • MD5 hash per file। 50 GB single file → ~৩-৫ মিনিট hashing।
  • Many small files vs one big file: many small slower (per-file overhead)।
  • Network attached storage (NFS) further slow।

Optimization techniques:

(১) Parallel hashing:

  • dvc config core.hash_jobs 8 — multi-thread।
  • I/O bound, so doesn't scale linearly with cores। ৪x typical।

(২) Different hash algorithm:

  • DVC 3.0+: md5 default; sha256 available।
  • xxhash faster (custom build)।

(৩) Cache type:

  • Default: copy file to cache — slow, large disk।
  • Symlink: dvc config cache.type symlink — instant।
  • Reflink (CoW): Btrfs/APFS — best of both। On-prem-এ reflink common nowadays।

(৪) Partial dataset versioning:

  • Don't dvc-track raw 50 GB landmass。 Filter to working subset। Track that।
  • Raw data: external versioning (S3 native)। DVC tracks the prepared subset।

(৫) Directory-level vs file-level:

  • dvc add on directory — DVC computes a tree hash + per-file hashes।
  • Faster than per-file invocation।

Practical large dataset workflow:

  • Initial dvc add: one-time slow (overnight if needed)।
  • Subsequent updates: only changed files re-hash।
  • "Append-only" dataset patterns: monthly chunk add — faster।

Bandwidth concerns:

  • dvc pull 50 GB on 10 Mbps link — ১২ ঘণ্টা। Painful।
  • Solution: regional S3, faster local cache, partial pull।
  • dvc pull data/subset/ — only that subdirectory।

"Don't version huge raw, version derived":

  • Raw 500 GB photos — keep S3 versioned, not DVC।
  • Preprocessed 5 GB embeddings — DVC track।
  • Most ML iteration on derived; raw rarely changes।

Real BD example:

  • One e-commerce team: 200 GB raw images (S3 versioned), 8 GB feature vectors (DVC), models in registry।
  • Each layer right tool।

মূল উপলব্ধি: DVC theoretical limits beyond practical limits — but discipline matters। Don't dvc-add everything। Tier strategy: raw S3-native, derived DVC, models registry। Hashing slow only on first add; subsequent fast।

প্র ০৩ "DVC pipelines — কখন worth setting up vs simple Python script?"

DVC pipelines (dvc.yaml) — like Make for ML। Setup overhead vs benefit।

Simple Python script enough when:

  • One-shot training, no recurrent data prep।
  • Solo developer, small project।
  • No expensive intermediate steps to cache।

DVC pipeline worth when:

  • Multi-stage workflow (download → preprocess → feature → train → eval)।
  • Some stages expensive (preprocessing 2 hours)।
  • Iterative experimentation — change one step, others should not rerun।
  • Team — onboarding through pipeline definition।
  • Reproducibility audit need।

Caching benefit example:

  • Stage A (download): 30 min। Stage B (preprocess): 2 hours। Stage C (train): 30 min।
  • Without DVC: change train.py → 3 hours total rerun।
  • With DVC: A & B cached → 30 min only।
  • 10 iterations: 30 hour saved।

DVC vs Airflow vs Make:

  • Make: file-based dependency, simple। But no data versioning integration।
  • DVC: file + data version aware, ML-specific। Local & CI।
  • Airflow: production orchestration, schedule, distributed। Heavier।
  • Common: DVC for local dev, Airflow for production scheduled runs।

Bangladesh context — ROI tipping point:

  • Solo + simple → script।
  • 3+ engineer or pipeline > 1 hour → DVC যথেষ্ট value।
  • Production daily schedule → Airflow + DVC together।

Common pitfalls:

  • Stages not idempotent → retry breaks।
  • External dependencies not declared → cache invalidation wrong।
  • Output overlap between stages → confusing।
  • "Mega-stage" doing everything → no caching benefit।

Tip — start small:

  • First just dvc add data, no pipeline।
  • Later add 2-3 stage pipeline।
  • Don't over-engineer initial setup।

মূল উপলব্ধি: DVC pipelines — multi-stage iterative ML-এ excellent। Solo simple script — overkill। Tipping point usually at: ৩+ stages, expensive intermediate, team আকার ২+।

প্র ০৪ "PII / sensitive data — DVC-এর সাথে কীভাবে handle?"

Sensitive data versioning special care দাবি করে।

DVC-এর data flow risks:

  • Local cache (default .dvc/cache) — file copy। Disk encrypt না হলে exposed।
  • Remote storage — encryption depends on backend (S3 SSE, GCS default)।
  • Hash-as-key — hash itself doesn't leak data, but file contents in storage do।
  • Git history — .dvc file with hash; if leak, attacker knows what to try if data accessible।

Anonymization-first approach:

  • NID, mobile, email — hash before DVC track।
  • "Pseudonymization at source" — original PII never enters versioned data।
  • Bangladesh Bank guideline এর সাথে aligned।

Encryption layers:

  • S3 SSE-KMS: server-side encryption with managed keys।
  • S3 SSE-C: customer-provided keys।
  • Client-side encryption: data encrypt before upload (sodium, AES)।
  • DVC currently no built-in encryption layer; rely on backend।

Access control:

  • S3 bucket policy — least privilege। Specific IAM roles, no wildcard।
  • VPC endpoint — bucket access only from internal network।
  • MFA delete — accidental deletion prevention।

GDPR / Bangladesh-future regulation:

  • "Right to be forgotten" — versioned data complicate। Customer delete request — all versions purge।
  • Solution: customer ID-keyed storage, surgical delete possible।
  • Or: anonymize before versioning — avoid the problem।

Alternative for highly sensitive:

  • Don't DVC-version raw PII at all।
  • Version statistics + hashes; access raw data on-demand from primary store।
  • Audit log of data access।

Cache encryption (local):

  • FileVault (Mac), LUKS (Linux), BitLocker (Windows) — full disk।
  • OR DVC cache external encrypted volume।
  • Team policy: laptop encryption mandatory।

Common Bangladesh setup for sensitive data:

  • Anonymize (replace PII with hash)।
  • DVC + on-prem MinIO (data leaves not country)।
  • Encryption at rest (MinIO server-side)।
  • RBAC — bucket per project/team।

মূল উপলব্ধি: Sensitive data + DVC = anonymize first। Raw PII version-control এ rarely needed for ML। Hash-pseudonymized version DVC-friendly + privacy-friendly। On-prem MinIO + encrypted backend BD compliance নির্ভরযোগ্য।

অনুশীলন

  1. Setup: একটি local DVC repo তৈরি করুন (local filesystem-এর remote)। একটি CSV file dvc add ও commit করুন।

    dvc init && dvc remote add -d local /tmp/dvc-store && dvc add data.csv && git commit data.csv.dvc -m "v1"। দেখুন .dvc file কী contain করে — hash + size।

  2. Pipeline: উপরের dvc.yaml একটি simplified version (২ stage) তৈরি করুন। dvc repro চালান।

    প্রথম time-এ both stage execute। Second time same input — "Cached" message। শুধু code change করলে দেখবেন প্রভাবিত stage rerun।

  3. চিন্তা: আপনার একটি ৫ GB raw data আছে। Daily ১০০ MB add হয়। DVC strategy কী?

    "Append-only" pattern। Raw chunks daily-stamped folder-এ। Tree-hash দিয়ে directory track। Pipeline-এ raw filter → working subset। Working subset frequently version। Disk usage controlled।

আরও পড়ুন

পূর্ববর্তী পাঠ
পাঠ ৯ · Weights & Biases