Pipeline DVC

CI/CD per Machine Learning

Ravi Bhadauria

Machine Learning Engineer

Perché serve una data pipeline

  • Versionare solo i dati serve a poco
  • È importante tracciare la lineage dei dati
    • Filtraggio, pulizia e trasformazione
    • Addestramento del modello
  • Esegui solo ciò che serve
  • Passi in un Directed Acyclic Graph (DAG)

Schema di un DAG che mostra le relazioni tra preprocessing, training e artifact del modello

CI/CD per Machine Learning

Pipeline DVC

  • Sequenza di fasi che definisce workflow ML e dipendenze

  • Definita nel file dvc.yaml

    • Dati di input e script (deps)
    • Comandi di esecuzione delle fasi (cmd)
    • Artifact di output (outs)
      • Dati speciali es. metrics e plots
  • Simile al workflow di GitHub Actions

    • Focalizzata su task ML invece che su CI/CD
    • Può essere astratta come uno step in GHA
CI/CD per Machine Learning

Definire le fasi della pipeline

  • Crea le fasi con dvc stage add
dvc stage add \
-n preprocess \
-d raw_data.csv -d preprocess.py \
-o processed_data.csv \
python preprocess.py
  • Contenuto di dvc.yaml
    stages:
    preprocess:
      cmd: python preprocess.py
      deps:
      - preprocess.py
      - raw_data.csv
      outs:
      - processed_data.csv
    
CI/CD per Machine Learning

Grafi di dipendenze

  • Aggiungi una fase di training usando l'output della fase precedente
    dvc stage add \
    -n train \
    -d train.py -d processed_data.csv \
    -o plots.png -o metrics.txt \
    python train.py
    
stages:
  preprocess:
    cmd: python preprocess.py
    deps:
    - preprocess.py
    - raw_data.csv
    outs:
    - processed_data.csv

train: cmd: python train.py deps: - processed_data.csv - train.py outs: - plots.png
CI/CD per Machine Learning

Riprodurre una pipeline

  • Riproduci la pipeline con dvc repro
-> dvc repro
Running stage 'preprocess':                                      
> python preprocess.py

Running stage 'train': > python train.py Updating lock file 'dvc.lock'
  • Viene generato un file di stato dvc.lock
    • Simile al file .dvc, registra gli hash MD5
    • Fai subito commit su Git per salvare lo stato git add dvc.lock && git commit -m "first pipeline repro"`
CI/CD per Machine Learning

Usare i risultati in cache

  • Uso dei risultati in cache per iterare più velocemente
-> dvc repro
Stage 'preprocess' didn't change, skipping
Running stage 'train' with command: ...
CI/CD per Machine Learning

Visualizzare la pipeline DVC

-> dvc dag
+------------+ 
| preprocess | 
+------------+ 
       *       
       *       
       *       
  +-------+    
  | train |    
  +-------+
1 https://dvc.org/doc/command-reference/dag
CI/CD per Machine Learning

Riepilogo

  • Le pipeline DVC sono utili per
    • Iterazione rapida grazie alla cache
    • Riproducibilità con dvc.yaml e dvc.lock
    • Abilitazione CI/CD
  • Genera le pipeline con dvc stage add
  • Riproduci/esegui con dvc repro
  • Visualizza con dvc dag
CI/CD per Machine Learning

Esercitiamoci!

CI/CD per Machine Learning

Preparing Video For Download...