# Azure Local for Edge AI Workloads

**Last updated:** 2026-02
**Status:** GA
**Category:** Hybrid Cloud & Edge AI

---

## Introduksjon

Azure Local (tidligere Azure Stack HCI) er Microsofts hyperkonvergerte infrastrukturlosning for a kjore Azure-tjenester lokalt. For AI-arbeidsbelastninger tilbyr Azure Local GPU-akselerasjon, Kubernetes-stotte via AKS enabled by Arc, og lokal tilgang til Azure-tjenester — alt administrert fra Azure Portal.

For norsk offentlig sektor representerer Azure Local en unik mulighet: organisasjoner kan plassere AI-infrastruktur i egne datarom eller hos godkjente driftspartnere, samtidig som de far tilgang til Azures ML-plattform, overvaking og governance-verktoy. Dette gir data residency i Norge uten a ga pa kompromiss med moderne AI-kapabiliteter.

Azure Local stotter et bredt utvalg av NVIDIA GPU-er for AI-inferens og trening, inkludert T4, A2, A16, L4, L40 og L40S. Sammen med AKS enabled by Arc og KAITO (Kubernetes AI Toolchain Operator) kan organisasjoner kjore open-source LLM-er som Phi-4, Mistral og Llama direkte pa egen infrastruktur.

---

## Arkitekturoversikt

```
┌───────────────────────────────────────────────┐
│              Azure Control Plane               │
│  Azure Portal │ ML Workspace │ Azure Monitor  │
└───────────────────────┬───────────────────────┘
                        │ Azure Arc
                        │
┌───────────────────────▼───────────────────────┐
│              Azure Local Cluster               │
│  ┌─────────────────────────────────────────┐  │
│  │          AKS enabled by Arc             │  │
│  │  ┌──────────┐  ┌──────────┐            │  │
│  │  │ CPU Node │  │ GPU Node │            │  │
│  │  │ Pool     │  │ Pool     │            │  │
│  │  │          │  │ NVIDIA   │            │  │
│  │  │ Services │  │ T4/A2/L4 │            │  │
│  │  └──────────┘  └──────────┘            │  │
│  └─────────────────────────────────────────┘  │
│  ┌───────────────┐  ┌─────────────────────┐  │
│  │ Azure Arc VMs │  │ Storage Spaces      │  │
│  │ (DDA/GPU-P)   │  │ Direct (S2D)        │  │
│  └───────────────┘  └─────────────────────┘  │
└───────────────────────────────────────────────┘
```

---

## GPU-stotte i Azure Local

### GPU-tilordningsmetoder

Azure Local stotter to metoder for GPU-bruk:

| Egenskap | Discrete Device Assignment (DDA) | GPU Partitioning (GPU-P) |
|----------|----------------------------------|--------------------------|
| Ressursmodell | Hel GPU til en VM | Delt GPU mellom flere VM-er |
| VM-tetthet | Lav (1 GPU = 1 VM) | Hoy (1 GPU = mange VM-er) |
| Appkompatibilitet | Full (DX12, OpenGL, CUDA) | Full (DX12, OpenGL, CUDA) |
| VRAM | Opp til full GPU VRAM | Per partisjon |
| Driver i gjest | Leverandor-driver (NVIDIA) | Leverandor-driver (NVIDIA) |
| AKS-stotte | Ja | Nei (kun VM-er) |
| Best for | AI-trening, stor inferens | Lettere inferens, delt bruk |

### Stottede NVIDIA GPU-er

| GPU-modell | DDA (Arc VMs) | DDA (AKS) | GPU-P (VMs) | Typisk bruk |
|------------|---------------|-----------|-------------|-------------|
| NVIDIA T4 | Ja | Ja | Nei | Inferens, lette modeller |
| NVIDIA A2 | Ja | Ja | Ja | Inferens, mellomstore modeller |
| NVIDIA A10 | Ja (unmanaged) | Nei | Ja | Trening og inferens |
| NVIDIA A16 | Ja | Ja | Ja | Multi-bruker inferens |
| NVIDIA A40 | Ja (unmanaged) | Nei | Ja | Tung trening |
| NVIDIA L4 | Ja | Ja | Ja | Moderne inferens |
| NVIDIA L40 | Ja | Ja | Ja | Stor modell-inferens |
| NVIDIA L40S | Ja | Ja | Ja | High-end AI workloads |

### GPU-klargjoring

```powershell
# Sjekk GPU-status pa Azure Local-noder
Get-PnpDevice | Select-Object Status, Class, FriendlyName, InstanceId |
  Where-Object { $_.FriendlyName -match "Nvidia" }

# Installer mitigation driver for DDA
# (Kreves for Azure Local 23H2+)
pnputil /add-driver oem_mitigation.inf /install

# Verifiser GPU er dismounted og klar for DDA
Get-VMHostAssignableDevice
```

---

## Cluster-felles ML Stack

### AKS enabled by Azure Arc pa Azure Local

AKS pa Azure Local gir en fullt administrert Kubernetes-opplevelse med GPU-stotte:

**Oppretting av klynge med GPU:**

```bash
# Opprett AKS-klynge pa Azure Local
az aksarc create \
  --resource-group ai-edge-rg \
  --name ai-edge-cluster \
  --custom-location my-custom-location \
  --vnet-ids /subscriptions/.../virtualNetworks/ai-vnet

# Legg til GPU node pool
az aksarc nodepool add \
  --cluster-name ai-edge-cluster \
  --name gpu-pool \
  --resource-group ai-edge-rg \
  --node-count 2 \
  --node-vm-size Standard_NC4_A2 \
  --os-type Linux
```

**GPU VM SKU-er tilgjengelige:**

| VM SKU | GPU | vCPU | Minne (GB) | GPU-minne |
|--------|-----|------|------------|-----------|
| Standard_NK6 | T4 (1x) | 6 | 56 | 16 GB |
| Standard_NC4 | A2 (1x) | 4 | 28 | 16 GB |
| Standard_NC8 | A2 (1x) | 8 | 56 | 16 GB |
| Standard_NC16 | A16 (1x) | 16 | 112 | 16 GB |
| Standard_NC32 | A16 (2x) | 32 | 224 | 32 GB |

### KAITO pa Azure Local

Kubernetes AI Toolchain Operator (KAITO) kjorer som en cluster extension:

```bash
# Opprett klynge med KAITO aktivert
az aksarc create \
  --resource-group ai-edge-rg \
  --name ai-kaito-cluster \
  --custom-location my-custom-location \
  --vnet-ids /subscriptions/.../virtualNetworks/ai-vnet \
  --enable-ai-toolchain-operator

# Aktiver KAITO pa eksisterende klynge
az aksarc update \
  --resource-group ai-edge-rg \
  --name ai-edge-cluster \
  --enable-ai-toolchain-operator
```

**Deploy LLM med KAITO:**

```yaml
# workspace-phi4-mini.yaml
apiVersion: kaito.sh/v1alpha1
kind: Workspace
metadata:
  name: workspace-phi-4-mini
spec:
  resource:
    instanceType: Standard_NC8
    labelSelector:
      matchLabels:
        apps: llm-inference
  inference:
    preset:
      name: phi-4-mini-instruct
```

```bash
# Deploy modellen
kubectl apply -f workspace-phi4-mini.yaml

# Sjekk status
kubectl get workspace -w

# Test inferens
export SERVICE_IP=$(kubectl get svc workspace-phi-4-mini \
  -o jsonpath='{.spec.clusterIP}')

kubectl run -it --rm curl --image=curlimages/curl -- \
  curl -X POST http://$SERVICE_IP/v1/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "phi-4-mini-instruct",
    "prompt": "Forklar fordelene med edge AI for offentlig sektor",
    "max_tokens": 200
  }'
```

---

## Local Azure Services

### Azure-tjenester som kjorer lokalt

Azure Local gir tilgang til et voksende utvalg Azure-tjenester direkte pa lokale servere:

| Tjeneste | Tilgjengelighet | AI-relevans |
|----------|-----------------|-------------|
| AKS (Arc) | GA | Container-basert ML og inferens |
| Azure Arc VMs | GA | GPU-akselererte VM-er for AI |
| Azure Monitor | GA | Overvaking av AI-arbeidsbelastninger |
| Azure Policy | GA | Governance for AI-deployments |
| Azure Key Vault | GA | Hemmelighetshaandtering for modeller |
| Azure Container Registry | Preview | Lokal container-lagring (disconnected) |
| Azure Arc Data Services | GA | SQL og PostgreSQL for AI-data |

### Lokal Container Registry for disconnected drift

```bash
# Opprett lokal ACR for disconnected miljoer
# (Azure Local med autonome operasjoner)
az acr create \
  --name myedgeregistry \
  --resource-group ai-edge-rg \
  --location autonomous \
  --sku Standard
```

---

## Storage-optimalisert inferens

### Storage Spaces Direct (S2D)

Azure Local bruker S2D for distribuert lagring med hoy ytelse:

| Lagringstype | Best for | Ytelse |
|-------------|----------|--------|
| NVMe + SSD tiered | Modell-lasting | <100ms load for 7B modell |
| All-flash NVMe | Real-time inferens | Sub-ms I/O |
| SSD + HDD tiered | Modell-arkiv, batch | Kostnadsoptimalt |

### Persistent Volume for ML-modeller

```yaml
# persistent-volume-claim.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: ai-model-storage
  namespace: ai-workloads
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: azure-local-ssd
  resources:
    requests:
      storage: 100Gi
---
# Pod med modell-lagring
apiVersion: v1
kind: Pod
metadata:
  name: model-server
  namespace: ai-workloads
spec:
  containers:
    - name: inference
      image: myregistry/model-server:v1
      volumeMounts:
        - name: model-data
          mountPath: /models
      resources:
        limits:
          nvidia.com/gpu: 1
  volumes:
    - name: model-data
      persistentVolumeClaim:
        claimName: ai-model-storage
```

### Caching-strategier for modeller

| Strategi | Beskrivelse | Fordel |
|----------|-------------|--------|
| Pre-load til NVMe | Last modeller ved oppstart | Raskest cold start |
| Shared PVC | ReadWriteMany for flere pods | Effektiv lagring |
| InitContainer | Last modell for main container starter | Paalitelig sekvensering |
| Model sidecar | Egen container for modell-lasting | Separasjon av ansvar |

---

## Hybrid Resilience Patterns

### High Availability for AI pa Azure Local

```
┌─────────────────────────────────────────┐
│        Azure Local HA Cluster           │
│                                         │
│  Node 1 ────────── Node 2              │
│  GPU: L4           GPU: L4              │
│  AI Workload       AI Workload          │
│  (Active)          (Standby)            │
│       │                │                │
│       └──── S2D ───────┘                │
│       Replicated Storage                │
└─────────────────────────────────────────┘
```

| Resilience-moenster | Beskrivelse | RTO |
|---------------------|-------------|-----|
| Active-Passive GPU | Standby node med GPU ready | 2-5 min |
| Active-Active load balanced | Inferens fordelt pa noder | 0 (graceful) |
| N+1 redundancy | Ekstra node for failover | 1-3 min |
| Stretched cluster | Klynge over to lokasjoner | Automatisk |

### Failover-konfigurasjon

```powershell
# Konfigurer VM failover med GPU re-assignment
# Krever at GPU-er er tilgjengelige pa failover-noden

# Sett foretrukket eier for AI VM
Set-ClusterGroup -Name "AI-Inference-VM" `
  -PreferredOwner "Node1", "Node2"

# Aktiver automatisk failback
(Get-ClusterGroup "AI-Inference-VM").AutoFailbackType = 1
```

### Cloud-fallback for Azure Local

Nar lokal kapasitet er utilstrekkelig:

```yaml
# Hybrid inference med sky-fallback
apiVersion: v1
kind: ConfigMap
metadata:
  name: inference-config
data:
  routing: |
    primary:
      endpoint: http://local-model-svc:8080/v1/completions
      timeout: 5s
    fallback:
      endpoint: https://my-foundry.openai.azure.com/v1/completions
      condition: local_gpu_util > 95% OR local_unavailable
```

---

## Nettverksarkitektur

### Anbefalte nettverkstopologier

| Topologi | Bruk | Krav |
|----------|------|------|
| Converged | Enkle deployments | Min 10 Gbps |
| Hyper-converged | Standard AI-klynge | 25 Gbps + RDMA |
| Switched | Stor skala, mange noder | 25-100 Gbps fabric |

### Minimum nettverkskrav for AI

| Trafikk | Minimum | Anbefalt |
|---------|---------|----------|
| Management (Arc) | 1 Gbps + internett | 10 Gbps |
| Storage (S2D) | 10 Gbps RDMA | 25 Gbps RDMA |
| Compute (GPU) | 10 Gbps | 25 Gbps |
| Client (inferens) | 1 Gbps | 10 Gbps |

---

## Sizing-guide for AI-arbeidsbelastninger

### Anbefalte konfigurasjoner

| Arbeidsbelastning | Noder | GPU per node | Minne per node | Lagring |
|-------------------|-------|-------------|----------------|---------|
| Liten inferens (Phi-3) | 2 | 1x A2 | 64 GB | 1 TB NVMe |
| Medium inferens (Phi-4, Mistral-7B) | 3 | 1x A16 | 128 GB | 2 TB NVMe |
| Stor inferens (Llama-70B) | 4 | 2x L40S | 256 GB | 4 TB NVMe |
| Trening + inferens | 4+ | 2x A40/L40S | 512 GB | 8 TB NVMe |

### Kostnadsestimat (Azure Local)

| Komponent | Estimert kost (NOK) |
|-----------|---------------------|
| 3-node Azure Local cluster | 300,000 - 600,000 |
| NVIDIA A2 GPU (per stk) | 15,000 - 25,000 |
| NVIDIA L4 GPU (per stk) | 25,000 - 40,000 |
| NVIDIA L40S GPU (per stk) | 80,000 - 120,000 |
| Azure Local lisens | Inkludert i Azure-abonnement |
| Azure Arc management | Inkludert (basis) |
| Azure ML extension | Inkludert |

**Merk:** Priser er estimater og varierer med leverandor og konfigurasjon.

---

## For Cosmo

- **Azure Local er den primaere plattformen for on-premises AI i Microsoft-okosystemet** — fullt integrert med Azure Arc for sentralisert styring, men med all databehandling pa egen infrastruktur.
- **GPU-stotten er bred med NVIDIA T4/A2/A16/L4/L40/L40S** — bade DDA (hel GPU) og GPU-P (delt GPU) er tilgjengelig, noe som gir fleksibilitet fra lette inferensoppgaver til tung trening.
- **KAITO pa AKS Arc forenkler LLM-deployment drastisk** — fra GPU-klargjoring til modell-serving med OpenAI-kompatibelt API pa noen fa kubectl-kommandoer.
- **For norsk offentlig sektor gir Azure Local data residency i Norge** med full Azure-administrasjon fra Norway East-regionen — data forlater aldri lokale servere.
- **Hybrid resilience med sky-fallback** sikrer at AI-tjenester forblir tilgjengelige selv ved lokal kapasitetsmangel, med automatisk routing til Azure-endepunkter.
