To operasjoner, én økt (⊥ R7), begge ren metadata-normalisering (verdi aldri fabrikkert). Premiss-korreksjon (ground truth 2026-07-07): roadmap sa «27 none + 4 ai-act». Målt: 29 mangler bold **Status:** = 25 rene none + 4 ai-act (plain Status: GA). De «27» inkluderte 2 for mye — 2 filer (custom-dashboards-ai-operations, zero-trust-ai-services) har bold **Status:** KUN forbi byte 500 (present for full-fil-audit, usynlig for 500B header-parser) → egen header-slanking-residual (§8-register), utenfor Enhet 3. Op A — Status-backfill 25 rene none: utvidet backfill-status.mjs MANIFEST 14→39 (samme statusForFile + insertMetaField + hard per-fil-invariant, idempotent skip på de 14 R21-gjorte). Alle 25 → **Status:** Established Practice (ingen matcher template|matrix|benchmarks|register). Diff +25/-0. Op B — ai-act dual-header-dedup (4 filer): ny driver dedup-plain-header.mjs + 2 rene primitiver i transform.mjs — boldifyPlainField (plain→bold, verdi bevart byte-eksakt, header-scoped, idempotent) + dropRedundantPlainField (sletter plain KUN når bold m/ identisk verdi beviser redundans; kaster ved avvik/manglende bold). Per fil: plain Last updated: + Status: GA → bold (2026-06-18/2026-02, GA bevart), redundant plain Category: fjernet. Hard per-fil-invariant (net -1 linje, begge felt bold m/ bevart verdi, ingen plain-header igjen, body byte-identisk). Diff -12/+8. Verifisering: test-backfill-status 8/8 + test-dedup-plain-header 13/13; audit Missing Status 29→0, Missing English Last updated 4→0; skills-diff 29 filer +33/-12 (kun **Status:** + 8 bold-swaps), diff-kontekst inspisert per fil; begge drivere idempotent (re-run 0 writes); suite 806/806 exit 0; none=8 uendret (Enhet 4).
577 lines
23 KiB
Markdown
577 lines
23 KiB
Markdown
# Kostnadsoptimalisering i MLOps-pipelines
|
||
|
||
**Last updated:** 2026-04
|
||
**Category:** MLOps & GenAIOps
|
||
**Relevans:** Azure Machine Learning, MLOps-implementering, FinOps for AI
|
||
**Type:** reference
|
||
**Source:** https://learn.microsoft.com/azure/machine-learning/concept-ml-pipelines
|
||
**Status:** Established Practice
|
||
|
||
## Innhold
|
||
|
||
- [Introduksjon](#introduksjon)
|
||
- [Kjernekomponenter](#kjernekomponenter)
|
||
- [Arkitekturmønstre](#arkitekturmønstre)
|
||
- [Beslutningsveiledning](#beslutningsveiledning)
|
||
- [Integrasjon med Microsoft-stakken](#integrasjon-med-microsoft-stakken)
|
||
- [Offentlig sektor (Norge)](#offentlig-sektor-norge)
|
||
- [Kostnad og lisensiering](#kostnad-og-lisensiering)
|
||
- [For arkitekten (Cosmo)](#for-arkitekten-cosmo)
|
||
- [Kilder og verifisering](#kilder-og-verifisering)
|
||
|
||
## Introduksjon
|
||
|
||
Kostnadsoptimalisering i MLOps-pipelines handler om å maksimere verdien av ML-investeringer gjennom strategisk ressursbruk. Med kontinuerlig trening, retrening og utvikling av maskinlæringsmodeller kan compute-kostnadene raskt eskalere — særlig for deep learning-modeller på GPU-er. En systematisk tilnærming til kostnadsoptimalisering sikrer at organisasjoner kan skalere ML-operasjoner uten at budsjettet sprekker.
|
||
|
||
**Nøkkelinnsikt (høy konfidensgrad):** Azure Machine Learning pipelines er designet for kostnadsreduksjon gjennom to hovedmekanismer: (1) gjenbruk av output fra uendrede steg, og (2) mulighet til å kjøre hvert steg på den mest kostnadseffektive compute-ressursen for oppgaven.
|
||
|
||
## Kjernekomponenter
|
||
|
||
### 1. Compute-optimalisering
|
||
|
||
**AmlCompute clusters (managed compute)**
|
||
|
||
Azure Machine Learning-brukere bør som standard bruke AmlCompute (Azure Machine Learning compute cluster) fremfor ukontrollerte VM-instanser. AmlCompute tilbyr:
|
||
|
||
- Enterprise-grade sikkerhet, compliance og governance
|
||
- Automatisk skalering basert på workload
|
||
- Støtte for både GPU og CPU i ulike størrelser
|
||
- Integrert støtte for Reserved VM Instances (opptil 72% rabatt)
|
||
|
||
**Autoskalering av treningsklynger (kritisk for kostnadsreduksjon):**
|
||
|
||
```python
|
||
from azure.ai.ml.entities import AmlCompute
|
||
|
||
# Best practice: min_instances=0 for å unngå kostnader når ingen jobber kjører
|
||
cluster = AmlCompute(
|
||
name="cost-optimized-cluster",
|
||
type="amlcompute",
|
||
size="STANDARD_DS3_V2",
|
||
min_instances=0, # KRITISK: skaler ned til 0 når idle
|
||
max_instances=4,
|
||
idle_time_before_scale_down=120, # 120 sek = default, vurder 60-180 basert på workload
|
||
tier="Dedicated"
|
||
)
|
||
ml_client.compute.begin_create_or_update(cluster).result()
|
||
```
|
||
|
||
**Viktige konfigurasjoner:**
|
||
|
||
- **`min_instances=0`** — obligatorisk for å unngå kostnader når ingen jobber kjører. Enhver verdi > 0 holder noder kjørende selv når de ikke brukes.
|
||
- **`idle_time_before_scale_down`** — default 120 sekunder. Reduser til 60 sek for mindre iterativ eksperimentering, øk til 180+ sek for høyiterativ dev/test for å unngå konstant skalering opp/ned.
|
||
- **`tier="LowPriority"`** — for batch-workloads som ikke er tidskritiske, bruk low-priority VMs (preemptible, men vesentlig billigere). Egnet for batch-inferens og deep learning-trening med checkpointing.
|
||
|
||
### 2. Compute instance-schedulering
|
||
|
||
Compute instances forblir på som standard, og akkumulerer kostnad kontinuerlig. To strategier (begge nå GA): Verified (MCP 2026-04)
|
||
|
||
- **Idle shutdown:** Automatisk avslutning når VM har vært idle i spesifisert periode
|
||
- **Scheduled start/stop:** Planlegg start/stopp basert på kjente arbeidstider
|
||
|
||
**Bruk når:** Utviklere bruker notebooks i forutsigbare arbeidstider (f.eks. 08:00-16:00 norsk tid).
|
||
|
||
### 3. Reserved VM Instances
|
||
|
||
For stabil, forutsigbar ML-workload: kjøp 1-årig eller 3-årig reserved instances.
|
||
|
||
- Rabatt: opptil 72% av pay-as-you-go-pris
|
||
- Automatisk anvendt på AmlCompute-forbruk
|
||
- Beste case: organisasjoner med langsiktig, jevn treningslast (ikke sporadisk eksperimentering)
|
||
|
||
**Konfidensvurdering (medium):** Microsoft dokumenterer "opptil 72%", men faktisk rabatt avhenger av VM-type og region. Typisk: 30-50% i Norge-regioner (West Europe, North Europe) basert på januar 2026-priser.
|
||
|
||
### 4. Parallellisering av trening
|
||
|
||
ParallelComponent i Azure ML lar deg kjøre oppgaver på mange små noder i parallell (horisontal skalering).
|
||
|
||
```python
|
||
from azure.ai.ml.entities import ParallelComponent
|
||
|
||
# Eksempel: kjør datasett-prosessering på 4 mindre noder i stedet for 1 stor
|
||
# Trade-off: parallelisering har overhead, men kan være kostnadseffektiv
|
||
```
|
||
|
||
**Når det fungerer:**
|
||
- Oppgaver som kan deles opp naturlig (f.eks. datasett-splitting, hyperparam-tuning)
|
||
- Mange små VMs er billigere enn én stor GPU-VM for oppgaven
|
||
|
||
**Når det ikke fungerer:**
|
||
- Oppgaver med høy inter-node-kommunikasjon (distribuert deep learning med små batch-størrelser)
|
||
- Overhead ved parallelisering overstiger tidsbesparelsen
|
||
|
||
### 5. Job termination policies
|
||
|
||
**Hyperparameter tuning:**
|
||
|
||
```python
|
||
from azure.ai.ml import automl
|
||
|
||
# Early termination policies: Bandit, Median stopping, Truncation selection
|
||
training_node = automl.forecasting(
|
||
training_data=train_data,
|
||
target_column_name="target",
|
||
primary_metric="normalized_root_mean_squared_error",
|
||
n_cross_validations="auto"
|
||
)
|
||
|
||
training_node.set_limits(
|
||
timeout_minutes=120, # Maks total kjøretid
|
||
trial_timeout_minutes=30, # Maks per trial
|
||
max_concurrent_trials=4, # Parallelitet
|
||
enable_early_stopping=True # Stop dårlige kjøringer tidlig
|
||
)
|
||
```
|
||
|
||
**RunConfiguration:**
|
||
|
||
```python
|
||
# max_run_duration_seconds for å stoppe runaway jobs
|
||
run_config.max_run_duration_seconds = 3600 # 1 time maks
|
||
```
|
||
|
||
### 6. Pipeline output-gjenbruk (reuse)
|
||
|
||
Azure ML pipelines gjenbruker automatisk output fra uendrede komponenter:
|
||
|
||
**Scenario:** Du har en 4-stegs pipeline (data prep → feature engineering → training → evaluation). Hvis kun evaluation-koden endres, gjenbrukes output fra de tre første stegene — kun siste steg kjører på nytt.
|
||
|
||
**Kostnadsbesparelse:** Kan redusere pipeline-kjøretid og -kostnad med 50-90% i iterative utviklingsfaser.
|
||
|
||
**Debugging reuse-problemer:** Bruk pipeline graph comparison-funksjonen i Azure ML Studio for å sammenligne to pipeline-kjøringer og identifisere hvilke steg som endret seg. Se også `how-to-debug-pipeline-reuse-issues` guide fra Microsoft Learn. Typiske årsaker til at gjenbruk ikke skjer: endringer i data, kode, miljø eller compute-konfigurasjon. Verified (MCP 2026-04).
|
||
|
||
### 7. Data retention og sletting
|
||
|
||
Hver pipeline-kjøring genererer intermediate datasets. Over tid fyller disse storage-kontoen.
|
||
|
||
**Løsning:** Azure Blob Storage lifecycle management policies.
|
||
|
||
```json
|
||
{
|
||
"rules": [
|
||
{
|
||
"enabled": true,
|
||
"name": "delete-old-pipeline-artifacts",
|
||
"type": "Lifecycle",
|
||
"definition": {
|
||
"actions": {
|
||
"baseBlob": {
|
||
"delete": {
|
||
"daysAfterModificationGreaterThan": 90
|
||
}
|
||
}
|
||
},
|
||
"filters": {
|
||
"blobTypes": ["blockBlob"],
|
||
"prefixMatch": ["azureml/pipeline-runs/"]
|
||
}
|
||
}
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
**Best practice (høy konfidensgrad):** Slett intermediate artifacts eldre enn 90 dager, behold kun final models og metrics.
|
||
|
||
### 8. Regionsplassering
|
||
|
||
**Regel:** Deploy alle ressurser (workspace, compute, storage, data) i samme Azure-region.
|
||
|
||
**Hvorfor:** Cross-region data transfer koster (Azure outbound bandwidth charges). Latency øker også.
|
||
|
||
**For Norge:** West Europe (Amsterdam) eller North Europe (Dublin) er vanlige valg. Vurder Norway East/West hvis data residency-krav krever det (men dyrere compute).
|
||
|
||
### 9. Managed online endpoints autoscaling
|
||
|
||
For inference-endepunkter:
|
||
|
||
```python
|
||
# Azure Monitor autoscaling rules
|
||
- Metrics-based: CPU utilization > 70% → scale up
|
||
- Schedule-based: scale opp kl. 08:00, ned kl. 17:00
|
||
- Kombinasjon av begge
|
||
```
|
||
|
||
**Konfigurasjon:** Bruk Azure Monitor autoscale feature, integrert med managed online endpoints.
|
||
|
||
### 10. Feilet deployments cleanup
|
||
|
||
Feilet deployments kan fortsatt ha allokert compute (VMs for managed endpoints).
|
||
|
||
**Aksjon:** Slett feilet deployments umiddelbart etter debugging for å stoppe kostnadspåløp.
|
||
|
||
### 11. Workspace-level quotas
|
||
|
||
Sett kvoter per VM-familie på workspace-nivå for å unngå ukontrollert ressursforbruk:
|
||
|
||
```plaintext
|
||
Azure Portal → ML Workspace → Support + Troubleshooting → Usage + quotas
|
||
→ Set workspace-level quota by VM family
|
||
```
|
||
|
||
**Bruk:** Begrens antall GPU-instanser per workspace for dev-miljøer, høyere quota for prod.
|
||
|
||
## Arkitekturmønstre
|
||
|
||
### Mønster 1: Development → Staging → Production med kostnadsdifferensiering
|
||
|
||
**Development:**
|
||
- Små compute clusters (max 2-4 noder)
|
||
- Low-priority VMs der mulig
|
||
- Aggressive idle shutdown (60 sek)
|
||
- Små datasett (sampling/anonymisering)
|
||
|
||
**Staging:**
|
||
- Medium clusters (max 10 noder)
|
||
- Dedicated VMs
|
||
- Standard idle shutdown (120 sek)
|
||
- Full data, men begrenset retrening-frekvens
|
||
|
||
**Production:**
|
||
- Auto-scaling clusters (0 til 50+ noder)
|
||
- Reserved instances for baseline-load
|
||
- Spot/low-priority for burst-kapasitet
|
||
- Lifecycle policies for artifact cleanup
|
||
|
||
### Mønster 2: Cost-aware pipeline routing
|
||
|
||
Bruk Azure ML compute context selection per pipeline-steg:
|
||
|
||
```python
|
||
@pipeline()
|
||
def cost_optimized_pipeline():
|
||
# CPU-intensiv data prep → low-priority CPU cluster
|
||
prep_step = prep_component(...)
|
||
prep_step.compute = "cpu-lowpri-cluster"
|
||
|
||
# GPU-trening → reserved GPU cluster (baseline) eller spot GPU (burst)
|
||
train_step = train_component(prep_step.outputs.data)
|
||
train_step.compute = "gpu-reserved-cluster"
|
||
|
||
# Evaluation → serverless compute (pay-per-execution)
|
||
eval_step = eval_component(train_step.outputs.model)
|
||
eval_step.compute = "serverless"
|
||
```
|
||
|
||
### Mønster 3: Progressive model development
|
||
|
||
**Fase 1 (exploration):** Små modeller, små datasett, CPU compute → lav kostnad, rask iterasjon
|
||
**Fase 2 (optimization):** Full datasett, hyperparameter tuning, GPU compute med early termination
|
||
**Fase 3 (production training):** Full pipeline, optimalisert compute, scheduled retraining
|
||
|
||
**Kostnadseffekt:** Unngå å bruke dyre GPU-ressurser i tidlig eksperimentering.
|
||
|
||
## Beslutningsveiledning
|
||
|
||
### Scenario 1: Daglig retrening av forecasting-modell
|
||
|
||
**Kontekst:** 1 GB datasett, 30 min treningtid på STANDARD_DS3_V2.
|
||
|
||
**Anbefaling:**
|
||
- **Compute:** AmlCompute cluster, min=0, max=1, dedicated
|
||
- **Scheduling:** Azure ML scheduled pipeline (daily 02:00 UTC)
|
||
- **Cost optimization:** Reserved instance (1-year) for predictable daglig kjøring → ~40% besparelse vs. pay-as-you-go
|
||
- **Total monthly cost (estimat, medium konfidensgrad):** ~NOK 800-1200 (basert på West Europe pricing jan 2026)
|
||
|
||
### Scenario 2: Iterativ deep learning-eksperimentering
|
||
|
||
**Kontekst:** Computer vision, trenger GPU, 10-20 eksperimenter/dag, variabel kjøretid.
|
||
|
||
**Anbefaling:**
|
||
- **Compute:** AmlCompute GPU cluster, min=0, max=4, low-priority
|
||
- **Termination:** Early stopping med Bandit policy (aggressive)
|
||
- **Reuse:** Enable pipeline caching for data prep-steg
|
||
- **Cost optimization:** Low-priority VMs → ~70-80% billigere enn dedicated GPU
|
||
- **Risk mitigation:** Checkpointing hver 15 min for å håndtere preemption
|
||
|
||
**Total cost (estimat, lav konfidensgrad):** Varierer sterkt (NOK 2000-10000/måned avhengig av GPU-type og eksperiment-varighet).
|
||
|
||
### Scenario 3: Produksjons-inference med variabel load
|
||
|
||
**Kontekst:** Managed online endpoint, 100-10000 req/time, latency-kritisk.
|
||
|
||
**Anbefaling:**
|
||
- **Compute:** Managed endpoint med autoscaling
|
||
- **Baseline:** 2 instanser (reserved) for forutsigbar load
|
||
- **Burst:** Scale up til 20 instanser ved load > 70% CPU
|
||
- **Schedule:** Scale ned til 1 instans 22:00-06:00 (hvis trafikkdata støtter det)
|
||
|
||
**Kostnadsreduksjon:** 30-50% vs. statisk 20-instans deployment.
|
||
|
||
## Integrasjon med Microsoft-stakken
|
||
|
||
### Azure Cost Management + Budgets
|
||
|
||
**Setup:**
|
||
|
||
1. Opprett budget på subscription eller resource group-nivå
|
||
2. Sett alerts ved 50%, 80%, 100% av budsjett
|
||
3. Definer action groups (e-post til team lead, webhook til automatisering)
|
||
|
||
**ML-spesifikk filtering:**
|
||
|
||
```plaintext
|
||
Cost Management → Budgets → Create budget
|
||
→ Filter: Service name = "Virtual Machines", "Machine Learning", "Storage"
|
||
→ Alert thresholds: 50%, 80%, 100%
|
||
→ Action group: email team + Logic App (auto-shutdown dev clusters ved 90%)
|
||
```
|
||
|
||
**Best practice (høy konfidensgrad):** Separate budgets per miljø (dev/stage/prod) og per team/prosjekt.
|
||
|
||
### Azure Monitor metrics
|
||
|
||
**Key metrics for cost tracking:**
|
||
|
||
- `Active Cores` (workspace-level) — identifiser idle compute
|
||
- `Quota Utilization` — unngå overprovisioning
|
||
- `Pipeline Duration` — optimaliser for kortere kjøretid = lavere kostnad
|
||
|
||
**Alert-eksempel:**
|
||
|
||
```plaintext
|
||
If ActiveCores > 0 for > 2 timer AND no pipeline runs → alert + auto-shutdown
|
||
```
|
||
|
||
### Power BI / Excel cost dashboards
|
||
|
||
**Export cost data:**
|
||
|
||
```bash
|
||
az costmanagement export create \
|
||
--name "ml-cost-export" \
|
||
--scope "/subscriptions/{sub-id}" \
|
||
--storage-account-id "{storage-id}" \
|
||
--storage-container "cost-exports" \
|
||
--recurrence Daily \
|
||
--recurrence-period from="2026-01-01" to="2026-12-31"
|
||
```
|
||
|
||
**Analyse i Power BI:** Knytt kostnad til pipeline runs, modeller, teams — identifiser "top spenders".
|
||
|
||
### Azure Machine Learning registries (MLOps across environments)
|
||
|
||
**Cost-fordel:** Gjenbruk av komponenter og modeller på tvers av dev/stage/prod-workspaces reduserer duplikering av eksperimenter.
|
||
|
||
**Mønster:** Tren modell i dev-workspace (små data), deploy til prod-workspace uten retrening → spar prod-compute.
|
||
|
||
## Offentlig sektor (Norge)
|
||
|
||
### Budsjett- og rapporteringskrav
|
||
|
||
**Utredningsinstruksen (§ 6):** Kostnadsvurdering skal inkludere både initiale og driftskostnader.
|
||
|
||
**For ML-prosjekter:**
|
||
|
||
- **Initial cost:** Workspace setup, compute provisioning, data migration
|
||
- **Driftskostnad (årlig):**
|
||
- Compute for trening og retrening
|
||
- Inference-compute (hvis managed endpoints)
|
||
- Storage for data og modeller
|
||
- Overvåkning og logging (Application Insights, Log Analytics)
|
||
|
||
**Estimat-template (for utredning):**
|
||
|
||
| Kostnadselement | Beregningsgrunnlag | Årlig kostnad (NOK) |
|
||
|-----------------|---------------------|---------------------|
|
||
| ML workspace | Fast pris | 0 (gratis) |
|
||
| Compute (trening) | 8 timer/dag × 250 dager × DS3_v2 pris | ~50 000 |
|
||
| Compute (inference) | 2 instanser × 24/7 × DS2_v2 pris | ~80 000 |
|
||
| Storage | 500 GB × blob storage pris | ~1 000 |
|
||
| Overvåkning | Log Analytics ingestion + retention | ~10 000 |
|
||
| **Total** | | **~141 000** |
|
||
|
||
**Konfidensgrad:** Medium (± 30%) — faktisk kostnad avhenger sterkt av modellkompleksitet og retrening-frekvens.
|
||
|
||
### Digdir cloud-strategi alignment
|
||
|
||
**Relevante prinsipper:**
|
||
|
||
- **Brukerorientering:** Kostnadsoptimalisering frigjør budsjett til bedre brukeropplevelse (raskere modeller, hyppigere oppdateringer)
|
||
- **Åpenhet:** Publiser cost metrics i ML-dashboards for transparens
|
||
- **Deling og gjenbruk:** Bruk Azure ML registries for å dele komponenter på tvers av etater (reduserer duplikatkostnad)
|
||
|
||
### NSM Grunnprinsipper for IKT-sikkerhet
|
||
|
||
**Prinsipp: Kjenn dine verdier**
|
||
|
||
Compute-ressurser er verdier — ukontrollert forbruk er et sikkerhetsrisiko (denial-of-wallet angrep).
|
||
|
||
**Mitigering:**
|
||
|
||
- **Quotas:** Begrens maks GPU-instanser per workspace
|
||
- **Alerts:** Umiddelbar varsling ved uventet kostnadsøkning (kan indikere kompromittert service principal)
|
||
- **RBAC:** Minste privilegium for compute-provisioning (kun ML engineers skal kunne opprette store clusters)
|
||
|
||
## Kostnad og lisensiering
|
||
|
||
### Azure Machine Learning workspace pricing (januar 2026)
|
||
|
||
- **Workspace:** Gratis (ingen kostnad for workspace-ressursen selv)
|
||
- **Compute:** Pay-per-use (VM-priser)
|
||
- **Storage:** Azure Blob Storage (standard rates)
|
||
- **Networking:** Data transfer out (typisk neglisjerbar for ML-workloads i samme region)
|
||
|
||
**Kritisk forståelse:** Azure ML er "bring your own compute" — du betaler for underliggende Azure-ressurser, ikke for ML-plattformen.
|
||
|
||
### Eksempel compute-priser (West Europe, jan 2026, PAYG)
|
||
|
||
| VM-type | vCPU | RAM | Pris/time (NOK) | Typisk bruk |
|
||
|---------|------|-----|-----------------|-------------|
|
||
| STANDARD_DS3_V2 | 4 | 14 GB | ~0.80 | CPU trening/prep |
|
||
| STANDARD_NC4AS_T4_V3 | 4 | 28 GB + T4 GPU | ~2.50 | GPU trening (light) |
|
||
| STANDARD_NC64AS_T4_V3 | 64 | 440 GB + 4×T4 GPU | ~20.00 | GPU trening (heavy) |
|
||
|
||
**Low-priority discount:** ~70-80% av dedicated pris.
|
||
|
||
**Reserved instance discount:** ~30-50% av PAYG for 1-year commitment.
|
||
|
||
**Konfidensgrad:** Medium (priser fluktuerer, bruk Azure Pricing Calculator for nøyaktige estimater).
|
||
|
||
### Lisensieringsvurderinger (Microsoft stack)
|
||
|
||
**Scenario 1:** Organisasjonen har Enterprise Agreement (EA) med Microsoft.
|
||
|
||
- **Fordel:** Potensielt forhandlet rabatt på Azure-forbruk
|
||
- **Aksjon:** Koordiner med innkjøpsavdeling for å maksimere EA-fordeler
|
||
|
||
**Scenario 2:** Organisasjonen bruker Azure Government (offentlig sektor).
|
||
|
||
- **Fordel:** Samme funksjonalitet som commercial Azure, compliance-ready
|
||
- **Kostnad:** Typisk 10-15% dyrere enn commercial for enkelte tjenester (men ikke alltid)
|
||
|
||
**Scenario 3:** Organisasjonen evaluerer Azure vs. on-premises GPU-cluster.
|
||
|
||
- **TCO-vurdering:**
|
||
- **On-prem:** Høy initial capex (GPU-servere), vedlikehold, strøm/kjøling
|
||
- **Azure:** Lav initial kostnad, høyere opex, men elastisk skalering
|
||
- **Break-even:** Typisk ved 60-80% utilization for on-prem GPU over 3 år (medium konfidensgrad)
|
||
|
||
## For arkitekten (Cosmo)
|
||
|
||
### Anbefalinger til klienten
|
||
|
||
**Fase 1: Etabler cost baseline**
|
||
|
||
1. **Cost Management dashboard:** Sett opp dedikert dashboard for ML-kostnader (subscription-scope eller RG-scope)
|
||
2. **Tagging-strategi:** Tag alle ML-ressurser med `Project`, `Environment`, `Owner` for granulær kostnadsfordeling
|
||
3. **Budgets:** Start med konservativt budsjett (f.eks. NOK 10 000/mnd for pilot), juster basert på faktisk forbruk
|
||
4. **Alerts:** 50% (info), 80% (warning), 100% (critical) med action groups
|
||
|
||
**Fase 2: Implementer quick wins**
|
||
|
||
1. **Autoscaling:** Sett `min_instances=0` på alle compute clusters (umiddelbar effekt)
|
||
2. **Idle shutdown:** Enable på alle compute instances
|
||
3. **Lifecycle policies:** 90-dagers sletting av intermediate pipeline artifacts
|
||
4. **Low-priority VMs:** For ikke-kritiske workloads (batch-inferens, eksperimentering)
|
||
|
||
**Estimert besparelse (medium konfidensgrad):** 30-50% av baseline-kostnad.
|
||
|
||
**Fase 3: Optimaliser arkitektur**
|
||
|
||
1. **Pipeline reuse:** Refaktorer monolittiske scripts til gjenbrukbare komponenter
|
||
2. **Compute sizing:** Benchmark ulike VM-størrelser for typiske workloads (ofte brukes for store VMs)
|
||
3. **Reserved instances:** For stabile prod-workloads (minst 6 mnd historikk før beslutning)
|
||
4. **Parallellisering:** Identifiser data-parallel workloads (f.eks. hyperparameter tuning, batch inference)
|
||
|
||
**Estimert ytterligere besparelse:** 20-30%.
|
||
|
||
**Fase 4: Kontinuerlig optimalisering**
|
||
|
||
1. **Månedlig cost review:** Analyser top spenders, identifiser anomalier
|
||
2. **FinOps-kultur:** Gjør kostnadsbevissthet til del av team-kultur (cost awareness i sprint reviews)
|
||
3. **Rightsizing:** Quarterly review av compute-størrelser basert på utilization metrics
|
||
4. **Benchmark:** Sammenlign med industry standards (f.eks. cost per model trained, cost per 1000 inferences)
|
||
|
||
### Arkitekturprinsipper for kostnadseffektiv MLOps
|
||
|
||
**Prinsipp 1: Pay for what you use**
|
||
|
||
- Compute skal alltid kunne skalere til 0 når ikke i bruk
|
||
- Unngå "always-on" ressurser uten konkret behov
|
||
|
||
**Prinsipp 2: Optimize for time-to-value, not just cost**
|
||
|
||
- Raskere eksperimentering → raskere business value → høyere ROI
|
||
- Ikke bruk underdimensjonert compute som forsinker utviklingen (falsk økonomi)
|
||
|
||
**Prinsipp 3: Leverage platform features**
|
||
|
||
- Bruk managed services (AmlCompute, managed endpoints) fremfor DIY VM-management
|
||
- Managed services har innebygd optimalisering (autoscaling, reuse, etc.)
|
||
|
||
**Prinsipp 4: Data locality matters**
|
||
|
||
- Collocate compute og data i samme region
|
||
- Vurder data transfer cost hvis data er i on-prem eller annen cloud
|
||
|
||
**Prinsipp 5: Monitor and iterate**
|
||
|
||
- Kostnadsoptimalisering er ikke "set and forget"
|
||
- Jevnlig review og justering basert på faktisk usage patterns
|
||
|
||
### Røde flagg (når kostnader løper løpsk)
|
||
|
||
1. **Compute clusters med min_instances > 0:** Identifiser og fikser umiddelbart
|
||
2. **Lange idle periods på compute instances:** Implementer scheduled shutdown
|
||
3. **Feilet pipelines som kjører i timer:** Sett max_run_duration_seconds
|
||
4. **Exponential storage growth:** Intermediate datasets slettes ikke → lifecycle policies
|
||
5. **Cross-region data transfer:** Kostnadseksponering ved feilkonfigurert networking
|
||
6. **Ukontrollerte hyperparameter sweeps:** 100+ trials uten early termination → kostnadsbombe
|
||
|
||
**Aksjon ved røde flagg:** Umiddelbar investigasjon og mitigering (ikke vent til månedsslutt).
|
||
|
||
### Diskusjonspunkter med beslutningstakere
|
||
|
||
**For IT-ledelse:**
|
||
|
||
- "Vi anbefaler 1-årig reserved instances for prod-workload → 40% besparelse, men krever commitment. Hva er organisasjonens risikoappetitt for lock-in?"
|
||
- "Low-priority VMs for dev/test gir 70% besparelse, men kan avbrytes. Er dette akseptabelt for team?"
|
||
|
||
**For økonomiavdeling:**
|
||
|
||
- "ML-kostnader er variable opex, ikke capex. Hvordan skal vi budsjettere for uforutsigbar eksperimentering vs. forutsigbar prod?"
|
||
- "Vi trenger monthly cost visibility. Kan vi få tilgang til Cost Management API for automatisert rapportering?"
|
||
|
||
**For compliance/sikkerhet:**
|
||
|
||
- "Kostnads-alerts kan indikere sikkerhetsbrudd (kompromittert service principal som spinner opp compute). Skal vi integrere med SIEM?"
|
||
- "Data retention-policies for ML artifacts — hva er juridiske krav for bevaring av modell-treningsdata?"
|
||
|
||
### Relevante ressurser for dypere dive
|
||
|
||
**Microsoft Learn-artikler (verifisert apr 2026):**
|
||
|
||
- [Manage and optimize Azure Machine Learning costs](https://learn.microsoft.com/en-us/azure/machine-learning/how-to-manage-optimize-cost)
|
||
- [Plan to manage costs for Azure Machine Learning](https://learn.microsoft.com/en-us/azure/machine-learning/concept-plan-manage-cost)
|
||
- [Azure Machine Learning pipelines - cost reduction](https://learn.microsoft.com/en-us/azure/machine-learning/concept-ml-pipelines)
|
||
- [How to debug pipeline reuse issues](https://learn.microsoft.com/en-us/azure/machine-learning/how-to-debug-pipeline-reuse-issues)
|
||
|
||
**Azure Pricing Calculator:** https://azure.microsoft.com/en-us/pricing/calculator/ (for nøyaktige estimater)
|
||
|
||
**Azure Well-Architected Framework:** Cost Optimization pillar for AI/ML workloads
|
||
|
||
## Kilder og verifisering
|
||
|
||
**Dokumentasjon (primærkilder):**
|
||
|
||
- Microsoft Learn: "Manage and optimize Azure Machine Learning costs" (sist oppdatert: 2025-Q4)
|
||
- Microsoft Learn: "Plan to manage costs for Azure Machine Learning" (sist oppdatert: 2025-Q4)
|
||
- Microsoft Learn: "What are Azure Machine Learning pipelines?" (sist oppdatert: 2025-Q4)
|
||
- Microsoft Learn: "Architecture best practices for Azure Machine Learning - Cost Optimization" (sist oppdatert: 2025-Q4)
|
||
|
||
**Kodeeksempler:** Verifisert mot azure-ai-ml Python SDK v2 (januar 2026)
|
||
|
||
**Priser:** Basert på Azure Pricing Calculator for West Europe region (januar 2026). **OBS:** Priser kan endre seg, bruk alltid Pricing Calculator for oppdaterte estimater.
|
||
|
||
**Konfidensgradering:**
|
||
|
||
- **Høy konfidensgrad:** Compute-optimalisering (autoscaling, reserved instances), pipeline reuse, data lifecycle policies
|
||
- **Medium konfidensgrad:** Kostnadsestimater (± 30%), besparelsesprosenter (varierer per organisasjon), regional pricing
|
||
- **Lav konfidensgrad:** ROI-beregninger (avhenger av business context), comparative TCO on-prem vs. cloud (mange variabler)
|
||
|
||
**Sist verifisert:** 2026-04-09
|
||
|
||
---
|
||
|
||
*Denne referansen er del av Microsoft AI Expert-kunnskapsbasen for Cosmo Skyberg. For spørsmål om implementering, kontakt arkitekt-teamet.*
|