feat(ultraplan-local): v1.6.0 — /ultraresearch-local deep research command
Add /ultraresearch-local for structured research combining local codebase analysis with external knowledge via parallel agent swarms. Produces research briefs with triangulation, confidence ratings, and source quality assessment. New command: /ultraresearch-local with modes --quick, --local, --external, --fg. New agents: research-orchestrator (opus), docs-researcher, community-researcher, security-researcher, contrarian-researcher, gemini-bridge (all sonnet). New template: research-brief-template.md. Integration: --research flag in /ultraplan-local accepts pre-built research briefs (up to 3), enriches the interview and exploration phases. Planning orchestrator cross-references brief findings during synthesis. Design principle: Context Engineering — right information to right agent at right time. Research briefs are structured artifacts in the pipeline: ultraresearch → brief → ultraplan --research → plan → ultraexecute. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
commit
baa2d0220b
488 changed files with 213221 additions and 0 deletions
|
|
@ -0,0 +1,562 @@
|
|||
# Kostnadsoptimalisering i MLOps-pipelines
|
||||
|
||||
**Dato:** 2026-02-04
|
||||
**Kategori:** MLOps & GenAIOps
|
||||
**Relevans:** Azure Machine Learning, MLOps-implementering, FinOps for AI
|
||||
|
||||
## 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 i preview per jan 2025):
|
||||
|
||||
- **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 `how-to-debug-pipeline-reuse-issues` guide fra Microsoft Learn for å identifisere hvorfor gjenbruk ikke skjer (typisk: endringer i data, kode, miljø eller compute-konfigurasjon).
|
||||
|
||||
### 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 jan 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-02-04
|
||||
|
||||
---
|
||||
|
||||
*Denne referansen er del av Microsoft AI Expert-kunnskapsbasen for Cosmo Skyberg. For spørsmål om implementering, kontakt arkitekt-teamet.*
|
||||
Loading…
Add table
Add a link
Reference in a new issue