Modul 2: Versionshantering av data, modeller och kod
Översikt
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.
Lärandemål
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
2.1 Introduktion till versionshantering i ML
Varför versionshantering är kritiskt i ML
- 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
De tre versioneringsdimensionerna
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 |
2.2 Kodversionering för ML-projekt
Git-baserade strategier för ML-kod
- 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
Effektiv repository-struktur för ML-projekt
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
Bästa praxis för kodversionering i ML
- 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
2.3 Dataversionering
Utmaningar med dataversionering
- 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
Introduktion till DVC (Data Version Control)
- 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
Praktisk implementering av dataversionering
# 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
Alternativa dataversioneringsverktyg
- 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
2.4 Modellversionering och modellregistrering
Modellversionering vs. modellregistrering
- Modellversionering: Spårning av skillnader mellan olika versioner av samma modell
- Modellregistrering: Centralt förvar för modeller med metadata, status och livscykelhantering
Komponenter i modellversionering
- Sparande av modellvikter och -parametrar
- Versionshantering av modellarkitektur
- Spårning av träningsdata och -parametrar
- Lagring av modellutvärderingsresultat
- Hantering av modellberoenden
Implementering av modellregistrering med MLflow
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")
Bästa praxis för modellversionering
- 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
2.5 Integrerad versionshantering av data, modeller och kod
Spårbarhet mellan komponenter
- Hur man länkar specifika dataversioner till modellversioner
- Spårning av experimentresultat tillbaka till kod och data
- Implementering av lineage tracking (härledningsspårning)
Verktyg för integrerad versionshantering
- 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
Implementering av ett komplett versionshanteringssystem
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
Praktiska övningar
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
Verktygsintroduktion
- 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
Läsresurser
- ”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
Nyckelinsikter
- 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
Nästa steg
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.