# Batch Processing APIs for Non-Latency-Critical Workloads

**Last updated:** 2026-02
**Status:** GA
**Category:** Cost Optimization & FinOps for AI

---

## Introduksjon

Azure OpenAI Batch API er designet for å håndtere storskala- og høyvolumsbehandling av AI-oppgaver effektivt. Ved å prosessere asynkrone grupper av requests i batch-format, fremfor én og én request, oppnår organisasjoner **50% kostnadsreduksjon** sammenlignet med standard global deployment. Batch API benytter separat enqueued token-kvote, som sikrer at batch-jobber ikke forstyrrer sanntidsapplikasjoner.

Batch-prosessering egner seg for workloads hvor latency ikke er kritisk: dokumentgenerering, dataanalyse, oversettelser, sentiment analysis, og innholdsoppretting. Med 24-timers target turnaround og mulighet for eksponensiell backoff ved store jobber, gir batch API en svært kostnadseffektiv løsning for planlagte AI-operasjoner.

Microsoft tilbyr to deployment-typer for batch: **Global-Batch** (globalt distribuert kapasitet) og **Data Zone Batch** (regionsbasert). **Dynamic quota** anbefales sterkt for å utnytte overskuddskapasitet når tilgjengelig, og unngå jobbfeil grunnet kvotebegrensninger.

## Kjernekomponenter / Nøkkelegenskaper

| Komponent | Beskrivelse |
|-----------|-------------|
| **Global-Batch deployment** | Globalt distribuert batch-kapasitet med separat enqueued token quota. Tilbyr 50% prisreduksjon mot global standard deployment. |
| **Data Zone Batch** | Regionsbasert batch-deployment for compliance-scenarier. Data prosesseres innenfor Azure geography (data at rest), men inferencing kan skje i andre Azure OpenAI-regioner. |
| **Dynamic quota** | Automatisk skalering av enqueued token quota når ekstra kapasitet er tilgjengelig. Reduserer risiko for jobbfeil. **Anbefales aktivert** på alle batch deployments. |
| **Exponential backoff** | Ny funksjonalitet for automatisk retry av store batch-jobber når quota blir tilgjengelig. Støttes i utvalgte regioner. |
| **24-timers completion window** | Batch-jobber målsettes å fullføres innen 24 timer, men jobber som tar lengre tid expires ikke. Kunden kan kansellere når som helst og betaler kun for fullført arbeid. |
| **Separate quota pool** | Batch har egen enqueued token quota, isolert fra sanntids-workloads. Ingen disrupsjon av online applikasjoner. |

### Støttede modeller (februar 2026)

| Modell | Versjon | Input format | API support |
|--------|---------|--------------|-------------|
| `o3-mini` | 2025-01-31 | text | `2025-04-01-preview` (kreves for o3-mini) |
| `gpt-4o` | 2024-08-06 | text + image | `2024-10-21` (GA), `2025-04-01-preview` |
| `gpt-4o-mini` | 2024-07-18 | text + image | `2024-10-21` (GA), `2025-04-01-preview` |
| `gpt-4o` | 2024-05-13 | text + image | `2024-10-21` (GA), `2025-04-01-preview` |

**Ikke støttet:**
- Assistants API (ingen integrasjon)
- Azure OpenAI On Your Data (ikke støttet med batch)

### Filformat og workflow

1. **Upload batch input file** (JSONL-format, purpose: "batch")
   - Kan settes expiration: 14-30 dager fra upload
2. **Create batch job** (spesifiser input_file_id, endpoint, completion_window)
3. **Monitor batch status** (polling via API eller event-driven via Azure Storage)
4. **Retrieve output** (output file i JSONL-format, kan eksporteres til Azure Blob Storage)

## Arkitekturmønstre

### 1. Pure Batch Processing

**Beskrivelse:** Alle AI-operasjoner kjøres som batch-jobber. Egnet for periodiske rapporter, dataanalyse, og planlagte workloads.

```
User submits request → Job queued → Batch API processes (24h) → Results delivered
```

**Brukstilfeller:**
- Nattlige dokumentoppsummeringer for intern rapportering
- Ukentlig sentiment analysis av kundefeedback
- Månedlig oversettelse av produktkataloger

**Fordeler:**
- Lavest mulig kostnad (50% reduksjon)
- Ingen real-time infrastruktur nødvendig
- Enkel integrasjon med schedulers (Azure Data Factory, Logic Apps)

**Ulemper:**
- Ingen sanntids-respons
- Latency på opptil 24 timer

### 2. Hybrid: Real-Time + Batch

**Beskrivelse:** Sanntids-deployment for kritiske operasjoner, batch for analytiske og repeterende oppgaver.

```
┌─────────────────────────┐
│ Real-Time Deployment    │ ← Chatbot, user-facing APIs
└─────────────────────────┘
           +
┌─────────────────────────┐
│ Batch Deployment        │ ← Data enrichment, reporting
└─────────────────────────┘
```

**Brukstilfeller:**
- Chatbot for sanntid, batch for treningsdata-generering
- Real-time oversettelse for brukere, batch for dokumentarkiv
- Live support automation, batch for historisk analyse

**Fordeler:**
- Optimal kostnadsstyring (betaler sanntidspris kun for kritiske tjenester)
- Skalerbar arkitektur
- Separate quota pools (ingen quota-konflikter)

**Ulemper:**
- Kompleksitet i deployment og orchestration
- Krever routing-logikk for å bestemme real-time vs batch

### 3. Scheduled Batch Pipelines

**Beskrivelse:** Batch-jobber trigges av schedule eller event (f.eks. ny data i Data Lake). Fullt automatisert pipeline.

```
Azure Data Factory → Trigger batch job → Monitor status → Export results → Downstream processing
```

**Brukstilfeller:**
- Daglig oppsummering av loggdata
- Event-drevet: ny PDF → batch-ekstraksjon → metadata til database
- Scheduled: hver søndag → oversett nye artikler → publiser

**Fordeler:**
- Hands-off automation
- Integrasjon med Azure ecosystem (ADF, Logic Apps, Function Apps, Event Grid)
- Kostnadseffektivt for repeterende workloads

**Ulemper:**
- Krever pipeline-utvikling og feilhåndtering
- Avhengig av Azure orchestration-tjenester

## Beslutningsveiledning

### Når brukes Batch API?

| Kriterium | Real-Time Deployment | Batch Deployment |
|-----------|---------------------|------------------|
| **Latency-krav** | < 5 sekunder | 1-24 timer OK |
| **Volum** | Varierende, on-demand | Store, forutsigbare batch-volumer |
| **Kostnadsbudsjett** | Standard pricing | 50% reduksjon |
| **Brukstilfelle** | Chatbots, user-facing APIs | Rapporter, dataanalyse, planlagte oppgaver |
| **Quota isolation** | Delt med batch (hvis ikke separat) | Separat enqueued token quota |

### Beslutningstabell: Velge deployment-type

| Scenario | Anbefaling |
|----------|-----------|
| **Nattlig rapport-generering** | Global-Batch (50% lavere kostnad) |
| **Sanntids chatbot** | Real-Time (Standard eller Provisioned) |
| **GDPR/Schrems II-krav (Norge)** | Data Zone Batch (regional processing) |
| **Ukentlig dataanalyse (store volumer)** | Global-Batch + Dynamic quota |
| **Hybrid: både sanntid og batch** | To separate deployments (1x Real-Time, 1x Batch) |

### Vanlige feil

| Feil | Årsak | Løsning |
|------|-------|---------|
| **Batch job fails: insufficient quota** | Enqueued token quota for lav | Aktiver dynamic quota, eller øk deployment quota |
| **Job takes > 24h** | Stor jobb, høy belastning | Bruk exponential backoff (støttes i utvalgte regioner) |
| **Cost overrun** | Bruker real-time for batch-workloads | Migrer ikke-latency-kritiske workloads til batch |
| **Data residency concern** | Global-Batch prosesserer globalt | Bruk Data Zone Batch for regional compliance |

### Røde flagg

- **Bruker real-time deployment for rapportering og dataanalyse** → Migrer til batch (50% kostnadskutt)
- **Batch-jobber feiler pga. quota** → Aktiver dynamic quota
- **Ingen monitoring av batch job status** → Implementer polling eller event-driven notifications
- **Hardkodet 24h timeout** → Batch-jobber expires ikke, vurder lengre tidsvindu for svært store jobber

## Integrasjon med Microsoft-stakken

| Tjeneste | Integrasjonspunkt | Brukstilfelle |
|----------|-------------------|---------------|
| **Azure Data Factory** | Pipeline activity for batch job creation + monitoring | Scheduled batch workflows, data transformations |
| **Logic Apps** | HTTP actions for batch API + polling for status | Event-driven batch triggers (nye filer → batch-prosessering) |
| **Power Automate** | Custom connectors for Azure OpenAI Batch API | Low-code automation for planlagte AI-oppgaver |
| **Azure Functions** | Python/C# SDK for batch job orchestration | Custom orchestration, retry logic, feilhåndtering |
| **Azure Blob Storage** | Input/output storage for batch files | Store JSONL input, retrieve output results |
| **Azure Event Grid** | Event-driven triggers for batch completion | Notify downstream systems when batch job completes |
| **Azure Monitor** | Metrics og logging for batch job performance | Overvåk enqueued token usage, job success rate, latency |

### Eksempel: Azure Data Factory pipeline

```
1. ADF Trigger (schedule: daily 02:00)
2. Copy activity: Data Lake → Blob Storage (JSONL format)
3. Azure Function: Upload file + create batch job
4. Until loop: Poll batch status (every 5 min)
5. Copy activity: Download output → Data Lake
6. Downstream processing (e.g., Synapse Analytics)
```

## Offentlig sektor (Norge)

### GDPR og datasuverenitet

| Krav | Global-Batch | Data Zone Batch |
|------|--------------|-----------------|
| **Data at rest** | Azure geography (Norge) | Azure geography (Norge) |
| **Inferencing location** | Kan prosesseres i andre Azure OpenAI-regioner | Regional processing (avhengig av konfigurasjon) |
| **Schrems II compliance** | Vurder Data Zone Batch for strengeste krav | Anbefales for offentlig sektor |
| **Data Processing Agreement (DPA)** | Standard Microsoft DPA | Standard Microsoft DPA |

**Anbefaling for offentlig sektor:** Bruk **Data Zone Batch** hvis datasuverenitet er kritisk (f.eks. sensitiv helseinformasjon, personopplysninger). For mindre sensitive workloads (offentlige dokumenter, åpne data), kan Global-Batch benyttes.

### EU AI Act compliance

Batch API påvirker ikke direkte AI Act-klassifisering (modell-nivå), men deployment-valg kan påvirke **transparency og accountability**:
- Logg batch job IDs og input/output for audit trail
- Implementer monitoring for bias detection (output review)
- Dokumenter beslutninger om batch vs. real-time for høyrisiko-applikasjoner

### Budsjettprosesser

Batch API gir **forutsigbar kostnad** for planlagte AI-operasjoner:
- **50% reduksjon** gjør det lettere å budsjettere store volumer
- Månedlige batch-workloads kan estimeres basert på historisk token-bruk
- Kombiner med **Azure Cost Management** for detaljert cost tracking per deployment

**Eksempel:** En kommune med månedlig rapport-generering (1M tokens/mnd):
- Real-time: ~$20 (estimat)
- Batch: ~$10 (50% reduksjon)
- **Årlig besparelse:** $120

## Kostnad og lisensiering

### Prismodell

| Deployment type | Kostnad vs. Global Standard |
|-----------------|----------------------------|
| **Global Standard** | 100% (baseline) |
| **Global-Batch** | **50%** (halv pris) |
| **Data Zone Batch** | 50% (samme som Global-Batch, men regional) |

**Verifisert:** [Azure OpenAI Pricing](https://azure.microsoft.com/pricing/details/cognitive-services/openai-service/)

### Kostnadsdrivere

1. **Token-bruk** (input + output tokens)
2. **Modellvalg** (o3-mini < gpt-4o-mini < gpt-4o)
3. **Deployment-type** (batch vs. real-time)
4. **Quota allocation** (dynamic quota reduserer overhead ved retry)

### Optimaliseringstips

| Optimering | Effekt |
|------------|--------|
| **Migrer ikke-latency-kritiske workloads til batch** | 50% kostnadskutt |
| **Bruk gpt-4o-mini for enkle oppgaver** | Lavere token-pris enn gpt-4o |
| **Aktiver dynamic quota** | Reduserer jobbfeil, minimerer retry-overhead |
| **Batch flere requests i én job** | Reduserer API overhead, bedre throughput |
| **Scheduled batch (natt/helg)** | Utnytter lavere belastning, raskere processing |
| **Monitor output quality** | Sikrer at billigere modeller (gpt-4o-mini) oppfyller kvalitetskrav |

### TCO-sammenligning (Total Cost of Ownership)

**Scenario:** 10M tokens/måned (mixed input/output)

| Deployment | Token cost/måned | Infrastruktur | Total/måned | Total/år |
|------------|------------------|---------------|-------------|----------|
| Real-Time Standard | $200 | $0 (serverless) | $200 | $2400 |
| Global-Batch | $100 | $0 (serverless) | $100 | $1200 |
| **Besparelse** | **$100/mnd** | — | **$100/mnd** | **$1200/år** |

**Note:** Estimater basert på illustrative priser. Faktiske kostnader avhenger av modell, region, og token-distribusjon.

## For arkitekten (Cosmo)

### Spørsmål å stille kunden

1. **Hva er akseptabel latency for denne workloaden?** (Hvis > 1 time → batch er et alternativ)
2. **Hva er volumet og frekvensen?** (Daglig 100K tokens → batch, ad-hoc 1K tokens → real-time)
3. **Finnes det compliance-krav (GDPR, Schrems II, AI Act)?** (Ja → vurder Data Zone Batch)
4. **Hvor kritisk er kostnadskontroll?** (Høy prioritet → batch for alt som ikke er sanntid)
5. **Er workloaden forutsigbar (scheduled)?** (Ja → batch + ADF/Logic Apps, nei → real-time)
6. **Hva skjer hvis batch-jobb feiler?** (Retry-strategi, exponential backoff, alert-system)
7. **Er det behov for both real-time og batch?** (Hybrid deployment med separate quota pools)
8. **Hvordan monitores batch-jobber?** (Polling, event-driven, dashboard i Azure Monitor)

### Fallgruver å unngå

| Fallgruve | Konsekvens | Mitigering |
|-----------|------------|------------|
| **Bruker real-time for alt** | Dobbel kostnad for batch-egnede workloads | Analyser workloads, splitt i real-time vs. batch |
| **Dynamic quota disabled** | Batch-jobber feiler pga. quota, manuell retry | **Alltid aktiver dynamic quota** |
| **Ingen monitoring** | Batch-jobber feiler stille, ingen alerting | Implementer polling + Azure Monitor alerts |
| **Manglende retry-logikk** | Transiente feil → tapt data | Bruk exponential backoff, persistent queue |
| **Hardkodet 24h timeout** | Store jobber feiler unødvendig | Batch-jobber expires ikke, ikke hardkod timeout |
| **Ikke vurdert Data Zone Batch** | Compliance-brudd (Schrems II) | Alltid vurder Data Zone for offentlig sektor |
| **Overprovisjonering av quota** | Betaler for ubrukt kapasitet | Start lavt, bruk dynamic quota, skaler ved behov |

### Anbefalinger per modenhetsnivå

| Nivå | Beskrivelse | Anbefalinger |
|------|-------------|--------------|
| **Nivå 1: Pilot** | Første batch-deployment, testing | Start med Global-Batch, dynamic quota, enkel scheduler (Logic Apps). Test output quality før scale. |
| **Nivå 2: Produksjon** | Stabile batch-workloads, noe kompleksitet | Azure Data Factory for orchestration, monitoring med Azure Monitor, retry-logikk. Vurder hybrid (real-time + batch). |
| **Nivå 3: Skalert** | Flere batch-workloads, compliance-krav | Data Zone Batch for compliance, event-driven architecture (Event Grid), advanced monitoring (cost per job), FinOps-rapportering. |

### Arkitekturvalg: Decision tree

```
Kreves respons < 5 sekunder?
├─ Ja → Real-Time deployment
└─ Nei → Batch deployment
    ├─ Compliance-krav (Schrems II)?
    │   ├─ Ja → Data Zone Batch
    │   └─ Nei → Global-Batch
    └─ Volum > 1M tokens/dag?
        ├─ Ja → Dynamic quota ON, exponential backoff
        └─ Nei → Standard batch, dynamic quota ON (anbefales alltid)
```

## Kilder og verifisering

### Microsoft Learn (Verified via MCP)

1. **Getting started with Azure OpenAI batch deployments**
   - URL: https://learn.microsoft.com/en-us/azure/ai-foundry/openai/how-to/batch
   - Konfidens: **Verified** (fetched 2026-02)
   - Innhold: Deployment types, pricing (50% reduction), dynamic quota, exponential backoff, supported models, API versions

2. **Azure OpenAI Batch API pricing**
   - URL: https://azure.microsoft.com/pricing/details/cognitive-services/openai-service/
   - Konfidens: **Verified** (referenced in Microsoft Learn)
   - Innhold: 50% cost reduction for batch vs. global standard

3. **What's new in Azure OpenAI (August 2024)**
   - URL: https://learn.microsoft.com/en-us/azure/ai-foundry/openai/whats-new#august-2024
   - Konfidens: **Verified**
   - Innhold: Batch API announcement, key use cases, GA status

4. **Azure OpenAI deployment types**
   - URL: https://learn.microsoft.com/en-us/azure/ai-foundry/openai/how-to/deployment-types
   - Konfidens: **Verified**
   - Innhold: Global-Batch vs. Data Zone Batch, dynamic quota

### Code samples (Verified via MCP)

5. **Python: Create batch job with DefaultAzureCredential**
   - URL: https://learn.microsoft.com/en-us/azure/ai-foundry/openai/how-to/batch?pivots=programming-language-python
   - Konfidens: **Verified**
   - Innhold: OpenAI Python SDK examples for batch job creation

6. **Python: Upload batch file with expiration**
   - URL: https://learn.microsoft.com/en-us/azure/ai-foundry/openai/how-to/batch?pivots=programming-language-python#upload-batch-file
   - Konfidens: **Verified**
   - Innhold: File upload with 14-30 day expiration

### Konfidensnivå per seksjon

| Seksjon | Konfidens | Kilde |
|---------|-----------|-------|
| Introduksjon | **Verified** | Microsoft Learn (batch how-to) |
| Kjernekomponenter | **Verified** | Microsoft Learn (deployment types, models, API support) |
| Arkitekturmønstre | **Baseline** | Utledet fra best practices + Microsoft guidance |
| Beslutningsveiledning | **Baseline** | Cosmo-syntese av verified sources |
| Integrasjon med Microsoft-stakken | **Baseline** | Azure dokumentasjon (ADF, Logic Apps, Function Apps) |
| Offentlig sektor | **Baseline** | GDPR/Schrems II standarder + Azure compliance |
| Kostnad og lisensiering | **Verified** | Azure pricing (50% reduction), Microsoft Learn |
| For arkitekten | **Baseline** | Cosmo-anbefaling basert på verified data |

**Samlet konfidens:** Høy (kjernedata verified, anbefalinger baseline)
