Modul 2: Versionshantering av data, modeller och kod

I denna modul utforskar vi ett av de mest grundläggande koncepten inom MLOps: versionshantering. Till skillnad från traditionell mjukvaruutveckling, där endast kod behöver versionshanteras, kräver ML-system versionshantering av tre sammanlänkade komponenter: data, modeller och kod. Vi kommer att lära oss hur man implementerar robusta versionshanteringssystem för alla dessa komponenter och hur man säkerställer spårbarhet och reproduktion av ML-experiment.

Efter denna modul kommer du att:

  • Förstå principerna för versionshantering av ML-komponenter
  • Kunna implementera dataversionering med verktyg som DVC
  • Behärska modellversionering och registrering
  • Förstå skillnaden mellan modellversionering och modellregistrering
  • Kunna implementera spårbarhet mellan kod, data och modellversioner
  • Veta hur man utformar en effektiv förvaring (repository) struktur för ML-projekt
  • Reproduktion: Möjlighet att återskapa exakt samma modell med samma data
  • Spårbarhet: Förmåga att spåra vilken modellversion som skapades med vilken kod och data
  • Samarbete: Möjliggör effektivt teamarbete och kunskapsöverföring
  • Reglering och efterlevnad: Uppfyller krav på transparens och reviderbarhet
  • Felsökning: Lättare att identifiera orsaken till prestationsförändringar
  • Rollback: Möjlighet att återgå till tidigare fungerande versioner vid problem
Dimension Vad versioneras Utmaningar Nyckelverktyg
Kod Modellalgoritmer, pipeline-kod, konfigurationer Standardutmaningar inom mjukvaruutveckling Git, GitHub, GitLab
Data Rådata, bearbetad data, features Stora filstorlekar, dataförändring över tid, datastruktur DVC, LakeFS, Git LFS
Modeller Tränade modellparametrar, hyperparametrar, evaluering Stora filstorlekar, komplexa beroenden, metadata MLflow, ModelDB, Weights & Biases
  • Användning av feature branches för experiment
  • Betydelsen av meningsfulla commit-meddelanden
  • Pull requests och kodgranskning för ML-kod
  • Hantering av konfigurationsfiler och hyperparametrar
ml-project/
├── .git/                  # Git repository
├── .dvc/                  # DVC metadatakatalog
├── data/                  # Data (raw, processed, etc.)
│   ├── raw/               # Orörda rådata
│   ├── processed/         # Bearbetad data
│   └── features/          # Extraherade features
├── models/                # Sparade modeller
├── notebooks/             # Jupyter notebooks för utforskning
├── src/                   # Källkod
│   ├── data/              # Datarelaterade skript
│   ├── features/          # Feature engineering
│   ├── models/            # Modellträning och utvärdering
│   └── visualization/     # Visualiseringsskript
├── pipelines/             # Definition av datapipelines
├── tests/                 # Testfiler
├── configs/               # Konfigurationsfiler
├── .gitignore             # Filer att ignorera i Git
├── dvc.yaml               # DVC pipeline definition
├── requirements.txt       # Python-beroenden
└── README.md              # Projektdokumentation
  • Separera modellutvecklingskod från produktionskod
  • Versionera konfigurationsfiler separat från kod
  • Använd miljövariabler för känsliga data och miljöspecifika inställningar
  • Implementera enhetstester för databearbetning och modellfunktioner
  • Använd CI/CD för att validera ML-kodändringar automatiskt
  • Stora datamängder som är svåra att hantera med traditionell Git
  • Behov av att spåra dataförändringar över tid
  • Hantering av dataversion-beroenden i modellutveckling
  • Lagring av både metadata och faktiska data
  • Hantering av distribuerade datakällor
  • Grundläggande DVC-kommandon och arbetsflöde
  • Integration av DVC med Git
  • Konfiguration av fjärrlagringsplatser för data
  • Spårning av datapipelines med DVC
# Initialisera DVC i ett Git-repository
git init
dvc init
 
# Lägg till en datakatalog till DVC
dvc add data/raw/training_data.csv
 
# Lägg till DVC-metadata till Git
git add data/raw/training_data.csv.dvc .gitignore
git commit -m "Add training data"
 
# Konfigurera fjärrlagring för data
dvc remote add -d storage s3://mybucket/dvcstore
git add .dvc/config
git commit -m "Configure remote storage"
 
# Pusha data till fjärrlagring
dvc push
 
# Hämta specifik dataversion
git checkout <commit-hash>
dvc pull
  • LakeFS: Git-liknande operationer för datalager (data lakes)
  • Git LFS: Git-utökning för stora filer
  • Delta Lake: Öppen källkod för tillförlitliga datalager
  • Pachyderm: Dataversioneringsplattform med containerstöd
  • Modellversionering: Spårning av skillnader mellan olika versioner av samma modell
  • Modellregistrering: Centralt förvar för modeller med metadata, status och livscykelhantering
  • Sparande av modellvikter och -parametrar
  • Versionshantering av modellarkitektur
  • Spårning av träningsdata och -parametrar
  • Lagring av modellutvärderingsresultat
  • Hantering av modellberoenden
import mlflow
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
 
# Starta ett experiment
mlflow.set_experiment("my-classification-model")
 
# Logga parametrar, mätvärden och modell
with mlflow.start_run():
    # Logga parametrar
    mlflow.log_param("n_estimators", 100)
    mlflow.log_param("max_depth", 10)
 
    # Träna modell
    model = RandomForestClassifier(n_estimators=100, max_depth=10)
    model.fit(X_train, y_train)
 
    # Utvärdera modell
    y_pred = model.predict(X_test)
    accuracy = accuracy_score(y_test, y_pred)
 
    # Logga mätvärden
    mlflow.log_metric("accuracy", accuracy)
 
    # Logga modell
    mlflow.sklearn.log_model(model, "random_forest_model")
  • Använd semantisk versionering för modeller (t.ex. 1.0.0, 1.0.1)
  • Spara modeller tillsammans med deras metadata och konfigurationer
  • Registrera träningsdata och evalueringsresultat med modellen
  • Implementera godkännandeprocesser för övergång mellan modellstadier
  • Etablera tydliga steg för promotion/degradering av modeller
  • Hur man länkar specifika dataversioner till modellversioner
  • Spårning av experimentresultat tillbaka till kod och data
  • Implementering av lineage tracking (härledningsspårning)
  • MLflow: För experiment tracking och modellregistrering
  • DVC: För dataversionering och pipeline-spårning
  • Kubeflow: För end-to-end ML-arbetsflödesdefinition och -spårning
  • Weights & Biases: För experiment tracking och modellövervakning

Exempel på arbetsflöde:

1. Kodändringar versioneras i Git
2. Databearbetning spåras med DVC
3. Experiment spåras med MLflow
4. Modeller registreras i ML Model Registry
5. Hela livscykeln orkestreras med Kubeflow eller Airflow

1. Implementera DVC: Konfigurera DVC för ett existerande ML-projekt 2. MLflow Tracking: Konfigurera MLflow för experiment tracking och modellregistrering 3. Integrerad spårning: Kombinera Git, DVC och MLflow för fullständig spårbarhet 4. Repository design: Skapa en optimal katalogstruktur för ett ML-projekt

  • DVC (Data Version Control): Installations- och konfigurationsguide
  • MLflow: Setup av MLflow Server och UI
  • Git LFS: Alternativ för stora filer
  • Model Registry: Konfiguration av modellregistrering
  • ”Data Versioning in Machine Learning Projects” - DVC dokumentation
  • ”ML Model Management and Deployment” - A. Burkov
  • ”Git for Data Science” - Cookiecutter Data Science
  • ”MLOps: Continuous delivery and automation pipelines in machine learning” - Google Cloud dokumentation
  • Versionshantering i ML kräver integrerad spårning av kod, data och modeller
  • Dataversionering skiljer sig fundamentalt från kodversionering och kräver specialiserade verktyg
  • Modellregistrering möjliggör kontrollerad hantering av modellövergångar från utveckling till produktion
  • Spårbarhet mellan komponenter är avgörande för reproduktion och felsökning
  • En väldesignad repository-struktur lägger grunden för effektiv ML-utveckling och -driftsättning

I nästa modul kommer vi att fokusera på automatiserade ML-pipelines, där vi kommer att lära oss hur man bygger robusta, reproducerbara arbetsflöden för databearbetning, modellträning och evaluering.