Skip to content

Deployment targets

"Azure AI Foundry" is not one product. It is a family that spans a hosted cloud service, an on-device runtime, and a Kubernetes-native on-premises stack. This repository's methodology covers all three, and they differ in ways that matter before you pick one: they do not run the same models, they do not expose the same features, they are not governed the same way, and they are not deployed by the same mechanism.

This page compares them. Choosing a target is the same comparison as prose, for readers who want the reasoning rather than the grid.

The three targets

TargetSlugWhat it isRuns on
Azure AI Foundryazure-cloudThe hosted Azure service, Microsoft.CognitiveServices/accounts of kind AIServicesMicrosoft's Azure regions
Foundry Localwindows-serverThe on-device runtimeOne Windows Server you own, Arc-enabled
Azure Local Foundryazure-localFoundry Local at cluster scale, via the Microsoft.Foundry cluster extensionAn Arc-connected AKS Arc cluster on your own hardware

Each target is named for its Microsoft product, and the slug is its URL on this site. Those are the only two names for each target. Decision records written before ADR-0017 call these targets track 1, track 2, and track 3, numbering that comes from ADR-0011; the numbers survive in those records and in the research spikes, and map to this table in order.

How to read the cells

Every cell below is a fact with a first-party source behind it. There are no blank cells and no hedges.

As of 2026-07-30 there are no UNKNOWN cells left. Earlier revisions of this page carried UNKNOWN (SPIKE-nn) markers naming the research that would close them; that research is now written and every marker has been resolved into an answer. Several of those answers contradicted what this page previously said, most consequentially on TLS, on hardware sizing, on Azure Local Foundry's endpoint authentication, and on content safety. Where a cell says "none" or "not documented", that is a finding, not a gap in the research.

A "no" here means Microsoft does not document the capability. It does not mean the capability is impossible to build yourself.

One column is observed, two are designed

Only the Azure AI Foundry column describes something that exists. It is drawn from an environment this repository actually deployed and smoke-tested.

The Foundry Local and Azure Local Foundry columns describe designs, not systems. They are drawn from first-party research and accepted decisions, and nothing behind them has been built, deployed, or automated. Every cell in those two columns is what the documentation says should happen, not something anyone here has observed happening.

So: do not read a filled cell as a working cell. Table 1's "status in this repo" row repeats this per target, and so does every per-target page.

1. At a glance

Azure AI FoundryFoundry LocalAzure Local Foundry
Microsoft productAzure AI Foundry, Microsoft.CognitiveServices/accounts of kind AIServicesFoundry LocalFoundry Local on Azure Local, via the Microsoft.Foundry cluster extension
Where it runsAzure region (this repo: East US)One Windows Server in your own facilityAn AKS Arc cluster on Azure Local hardware in your own facility
Scale unitFoundry accountHostCluster
Azure subscription requiredYesFor Arc governance of the host, yes. The runtime itself needs none.Yes
Product maturityGA, with individual models in previewGAPublic preview, access by request. No SLA and no GA date.
Where inference actually runsIn the Azure region you choseOn your server, in your buildingOn your cluster, in your building
Region constraintPer-model region availability, and it governs where inference runsNone. It is not an Azure resource.None for inference. The Azure resource registers into one of eighteen supported regions (East US among them), which sets where its metadata and billing live, not where inference happens
Status in this repoBuilt and running. Deployed from the Bicep in this repo, live, and smoke-tested end to end.Designed on paper only. The research and the decisions are done, but nothing has been built, deployed, or automated.Designed on paper only. The research and the decisions are done, but nothing has been built, deployed, or automated.
Governing ADRs0001, 0004, 0005, 0006, 00110011, 00130009, 0011, 0014
Governing spikes01, 02, 03, 04, 0508, 1809, 19

2. Models and modalities

This is the table most readers come for, and it is where the three targets differ most. The rosters are close to disjoint. Nothing in this repository's cloud model catalog runs on either on-premises target.

CapabilityAzure AI FoundryFoundry LocalAzure Local Foundry
Text and chatYesYesYes
ReasoningYes, frontier-class hosted modelsSmall-model only, quality bounded by the hostYes, up to gpt-oss-20b class with GPU
Vision inputYesNo. No vision-capable entry in its catalogYes, and it is the only on-premises option: pixtral-12b-2409 and three nemotron-nano-12b-v2-vl variants, all vLLM and GPU only
Image generationYes. MAI-Image family and FLUX family.NoNo
Video generationNo. Evaluated and rejected; see the catalog.NoNo
Text to speechYes. MAI-Voice-2 and the Azure neural voices.NoNo
Speech to textYesYes. Five Whisper sizes plus three NVIDIA streaming ASR modelsYes. Five Whisper sizes plus one NVIDIA streaming ASR model
EmbeddingsYesNoNo
Open-weight modelsAvailable in the catalogThe only kind availableThe only kind available
Proprietary frontier modelsYesNoNo
Model sourceThe Azure model catalogThe Foundry Local catalogThe Foundry Local catalog, via ModelDeployment custom resources
Catalog size258 entries in East US alone, and it changes continuously70 entries, 35 aliases170 entries: the same 35 shared aliases plus a 100-entry vLLM roster of its own
Published hardware minimumNot applicable. Capacity is a quota and SKU question.None. Microsoft publishes no CPU, RAM, or disk minimum at all for Foundry Local on Windows; the prerequisites name an OS build, a .NET SDK, and a GPU, and nothing else (SPIKE-25)Sized by the cluster. GPU support is gated by Azure Local release number, and the release that added each NVIDIA model is published
Largest practical model, default hardwareNot host-bound.A roughly 5 GB quantized 4B-class model on CPU was measured on one 64 GB host. Treat that as one observation, not a rule: SPIKE-18's "core count, not RAM" claim is not supported by any first-party statement, and Microsoft's own troubleshooting guidance points at RAM (SPIKE-25)CPU first increment is the Phi-4-mini-instruct-generic-cpu class. GPU raises it; the vLLM roster publishes GPU memory for five entries, up to 14.793 GB for gpt-oss-20b
ExecutionHosted. Not your concern.ONNX Runtime. CPU, CUDA GPU, AMD Vitis NPU, Qualcomm QNN NPU, Intel OpenVINO, WebGPU, or TensorRT RTX.ONNX-GenAI or vLLM, CPU or NVIDIA GPU via DDA. AMD unsupported.
Models in this repo's roster22 marked deployed in the registry, 20 live on the accountNone yet (ADR-0019)None yet (ADR-0019)
Catalog pageModel catalog, and what is availableAvailable models, both on-premises targetsAvailable models, both on-premises targets

3. Features and platform capabilities

Moving a workload off the cloud silently drops every safety control

Neither on-premises target documents any content filtering or responsible-AI guardrail. Not a weaker filter, not an optional one: none. Everything ADR-0007 relies on is a property of the hosted service, and it does not travel with the model.

An adopter who moves a workload from Azure AI Foundry to either on-premises target loses prompt and completion classification, the four harm categories, the content_filter finish reason, and the HTTP 400 rejection path, and gets no warning that it happened. If content safety is a requirement, it has to be rebuilt in the application layer before that move, not after. Source: SPIKE-31 Q8.

FeatureAzure AI FoundryFoundry LocalAzure Local Foundry
OpenAI-compatible chat completionsYesYesYes
Foundry Agent ServiceYes. Prompt agents and hosted agents, needing a project rather than just an account.No. Bring your own runtime and point it at the endpointNo
MCP tool gatewayFirst-class, plus APIM governance gated to a future phase by ADR-0012No. No MCP surface documented. Tool calling works at the API level, so an agent loop can orchestrate its own toolsNo
RAG and retrievalBring your own, plus Azure AI SearchBring your ownAgentic Retrieval, which requires GPU and gpt-oss-20b
Fine-tuningYes. Supervised, DPO, and reinforcement fine-tuning, per model.No training service. You can convert and optimize a model with Olive, or bring one fine-tuned elsewhereNo training service. You can bring a custom model from an OCI registry via spec.model.custom
Batch inferenceYes, a real Batch API with its own enqueued-token quotaNo. Microsoft states plainly that continuous batching is a capability Foundry Local does not provideNo batch job API. vLLM gives serving-tier throughput, which is not the same thing
Structured outputs (json_schema)Yes, strict schema adherenceNot documented on chat completionsNot documented
Content safety and responsible AI filtersYes. Mandatory, on by default, four categories across four severity levels, per deployment (ADR-0007)None documented, at all.None documented, at all.
Quotas and rate limitsYes, per deployment and regionNone. Bounded by the host.None. Bounded by the cluster.
Concurrent multi-user servingYesNot its design pointYes, that is its design point
Disconnected or air-gapped operationNoYes, once the model cache is populatedYes, via the Azure Local disconnected operations appliance, version 2604.3.0 or later
Data residencyThe chosen Azure regionYour buildingYour building
Portal or UI surfaceAzure portal and the Foundry portalNone. CLI and API only.Azure portal via Arc for the cluster. No Foundry portal surface.
Local CLINot requiredfoundry CLIkubectl plus the Azure CLI

4. Deployment and automation

AspectAzure AI FoundryFoundry LocalAzure Local Foundry
Automation formDeclarativeImperativeDeclarative for one layer, imperative for two
LayersOneOneThree: Kubernetes prerequisites, ARM platform, Kubernetes intent
IaC surfaceBicep at subscription scope, single resource groupArc run command, with Arc SSH as fallbackBicep owns the platform layer only. kubectl and Helm own the layers above and below it.
Repo pathinfra/infra/windows-server/, pending phase Pinfra/azure-local/, pending phase P
Ordering wrapper requiredNoNoYes, and ADR-0014 calls it a first-class deliverable, not glue
Install mechanismARM deploymentMachine-wide MSIX provisioning via Add-AppxProvisionedPackage -Online. Not winget, which blocks MSIX machine-scope installs.Two cluster extensions, Microsoft.CertManagement and Microsoft.Foundry, over a Gateway API and Istio base
Idempotent redeployYes, wipe and redeploy safeYes by contract: four check-before-act stages, with the on-disk model cache as the unit of statePer layer. Not established end to end.
Drift detectionaz deployment sub what-if sees everythingArc run command cannot detect state at all, only run an action. Machine configuration is the mechanism ADR-0013 is missing (SPIKE-29)Split three ways, because what-if sees only the middle layer
PrerequisiteAn Azure subscription and two Entra security groupsArc-enable the server first. Hard prerequisite, not optional.An AKS Arc cluster, preview access granted, and a working LoadBalancer implementation, which AKS Arc does not have by default (SPIKE-28)
TeardownDelete the resource groupUninstall script, pending phase PLeaves residue, some of it by design (SPIKE-29 Q9)
Deploy gateOwner-gated. Proven.Two read-only resolutions, then one owner-authorized install test on a disposable build VMPreview access request, then a what-if test
Automation status in this repoComplete and provenNot writtenNot written

5. Identity, authentication, and secrets

AspectAzure AI FoundryFoundry LocalAzure Local Foundry
Deploy-time principalUser-assigned managed identity, federated to GitHub via OIDCSame, for the Arc run command. A service principal is accepted for Arc onboarding only.Same
Runtime identityManaged identityArc system-assigned managed identity. User-assigned is not supported on Arc machines.Managed identity
Endpoint authenticationEntra ID, or API keyNone at all. The service listens locally and is not authenticatedTwo modes, both mandatory: an Entra ID token, or an API key
Azure RBAC on the endpointYesNoOnly on the Entra path. The API-key path bypasses Azure RBAC entirely (SPIKE-31)
Key Vault pathYes, secrets referenced by nameNone by default. See the exception below.Yes
Inbound network portsAzure-managed HTTPS endpointNone opened. Arc dials out.Cluster ingress via the Gateway API. exposure: external additionally needs a LoadBalancer the cluster does not provide by default
TLS certificateAzure-managedNot applicableSelf-signed is the default and mandatory mechanism for all internal traffic: cert-manager mints a self-signed cluster root CA on first deployment and every model sidecar chains to it. A real CA certificate is needed only for the external Gateway, and only when off-cluster clients cannot be made to trust the cluster CA (SPIKE-28)
Exceptions to ADR-0005NoneOne, scoped and time-boxed: Arc run command cannot authenticate to blob storage with a managed identity, so a shared access signature of 24 hours or less is permitted for the optional blob staging path. The default path uses no blob and therefore has no secret surface at all.None
Honest summaryFull Azure governanceArc governs installing and managing the host, not the running inference endpoint. That endpoint has no Azure RBAC, no Entra, no Key Vault, no budget, and no Azure Monitor.Full Azure governance via Arc on the Entra path only. Issue an API key instead and the endpoint is outside Azure RBAC.

6. Cost model

AspectAzure AI FoundryFoundry LocalAzure Local Foundry
Billing unitPer token or per image, per deploymentNone for the runtimePer physical core of the Azure Local host, per day
Fixed or variableVariable, driven by usageFixed. Hardware you already own.Fixed, driven by core count rather than usage
Azure spend for the runtime itselfYesNo. Arc run command is free; storing scripts in Azure is not.Yes, the Azure Local host fee
Windows Server guest licensingNot applicableExisting host licence23.30 USD per physical core per month, waived by Azure Hybrid Benefit
Exact ratesPublished per modelNot applicable0.33 (L1), 0.667 (L2), 1.67 (disconnected) USD per physical core per day, roughly 9.90 / 20.01 / 50.10 per 30-day month (SPIKE-26)
Azure Hybrid BenefitNot applicableNot applicableNot a discount. It is a separate SKU rated 0.00 that waives the host fee and the guest subscription together, and it applies to L1 only
Hardware capital costNoneYoursYours
Marginal cost of one more modelA new deployment, then per-tokenDisk in the model cacheCluster resources only
Marginal cost of one more requestReal and meteredZeroZero
Budget and alertingResource-group budget with alert thresholds (ADR-0006)No Azure resource exists to cap, and no metered call exists to guard. Only the subscription spending limit transfersThe fee is set by core count and does not move with usage, so a budget rule cannot bind it. Only the subscription spending limit transfers
Where a hard cap can be enforcedAzure budget plus per-deployment capacityNowhere in Azure. The cap is the hardware.Nowhere usage-based. The cap is the core count you registered.
Cost of doing nothingZero. Idle deployments do not bill.ZeroNot zero, and it does not stop on its own: billing continues for 31 days after disconnection unless the ARM resource is deleted. A decommission step is a real control, not hygiene (SPIKE-26)

7. Observability

SignalAzure AI FoundryFoundry LocalAzure Local Foundry
Azure Monitor platform metricsYesNone. Microsoft.HybridCompute has no platform metrics at all, so even host CPU and memory need the Azure Monitor Agent, a DCR, and per-GB ingestionYes for the infrastructure. More than sixty standard Azure Local metrics at no extra cost.
Diagnostic settings to Log AnalyticsYesHost only, via AMA, billed per GBInfrastructure only. Container insights and managed Prometheus are supported, and both bill on volume
Application InsightsYesNoNo
Managed Prometheus and GrafanaYes, deployedNoSupported for the cluster, but deferred by design until a Prometheus-capable workload exists
Token-usage metricsYes, native Foundry metrics (ADR-0016)None. The product emits no metric of any kindNone. No documented Azure Monitor or Prometheus metric exists for a ModelDeployment: no request count, no latency, no token count
Request count, latency, error rateYesNoneNone
AlertingMetric, activity-log, and scheduled-query alerts, deployedHost only. No Azure surface for the service.Infrastructure only. Neither on-premises target can alert on a model.
Availability test or health probeYes, deployedfoundry service status, locally. The port is assigned dynamically at each start, so there is no static probe targetCluster-level probes only
Audit trail of deployment actionsAzure activity logArc run command instance view, output truncated to the last 4 KBAzure activity log via Arc
Who called the endpointEntra identity in the logsUnknowable. No authentication means no caller identity exists to recordEntra path only. An API-key caller is not attributable.
Prompt and content captureNot capturedMust remain metadata-only and opt-inMust remain metadata-only and opt-in
What has no Azure surface at allNothing materialThe running service, request volume, latency, errors, tokens, which model is loaded, and cache state. The entire model-usage row of the observability design is emptyThe ModelDeployment itself. Infrastructure is well covered; the model serving it is not

Neither on-premises target reaches ADR-0016's bar

ADR-0016 is built on native token-usage metrics. Those exist only on Azure AI Foundry. On Foundry Local the product emits no metric at all, and on Azure Local Foundry the infrastructure is richly instrumented while the model deployment has no documented metric of any kind. Full per-signal gap list: SPIKE-27 Q9.

8. Operations and lifecycle

AspectAzure AI FoundryFoundry LocalAzure Local Foundry
Runtime patchingMicrosoft's problemNo documented update path exists for the MSIX install mechanism ADR-0013 selected (SPIKE-29 Q1)Cluster extension versions, plus AKS Arc and Kubernetes upgrades. The generic extension mechanism is documented; the Foundry-specific one is not.
Model updatesAutomatic version upgrade, preserved by defaultRe-pull into the model cache. No version pinning at all: the CLI's "model ID" is a hardware variant, not a versionA new ModelDeployment revision
Upgrade ordering constraintsNoneNone documentedSevere, and only half documented. Install ordering is published, upgrade ordering is not. An AKS Arc upgrade is a rolling node replacement that necessarily restarts istiod, which is the exact event Microsoft's own install warning calls flaky
Preview to GA migrationPer modelNot applicableNo path is published and in-place migration is not promised. A breaking change has already landed inside the preview: three deprecated ModelDeployment endpoint fields plus an nginx-to-Gateway-API annotation migration table
Backup and restoreConfiguration is in Bicep; there is no state to back upThe model cache is rebuildableAlmost everything is rebuildable. The exceptions are the certificate material and the disconnected-operations artifacts
Scale outRaise capacity or add a deploymentBuy another serverAdd worker nodes and replicas
Failure domainAzure regionThe one host. It is a single point of failure.The cluster, with node-level redundancy
Recovery from host or node lossNot your concernReinstall and re-pullKubernetes reschedules the workload
Who operates itAzureYouYou, and you need Kubernetes skills

9. When to choose which

If your requirement isChooseWhyDo not chooseBecause
Image generationAzure AI FoundryIt is the only target with image models at allEither on-premises targetNeither generates images
Text to speechAzure AI FoundrySame reasonEither on-premises targetNeither synthesizes speech
EmbeddingsAzure AI FoundrySame reasonEither on-premises targetNeither has an embeddings model
Frontier reasoning qualityAzure AI FoundryProprietary frontier models are hosted-onlyEither on-premises targetOpen-weight small models are the only on-premises option
Content filtering is a requirementAzure AI FoundryIt is the only target with any documented content filterEither on-premises targetNeither documents one at all. You would be building it yourself.
Vision input on your own hardwareAzure Local Foundrypixtral and the nemotron-vl family, GPU onlyFoundry LocalIt has no vision-capable model
Data must never leave your buildingEither on-premises targetBoth run entirely on your hardwareAzure AI FoundryInference happens in an Azure region
Air-gapped or disconnected operationAzure Local FoundrySupported via the disconnected operations applianceAzure AI FoundryIt is a hosted service
No Azure subscription availableFoundry LocalThe runtime needs none. You lose Arc governance.The other twoBoth are Azure resources
One developer, one machine, fastest startFoundry LocalInstall, pull a model, call itAzure Local FoundryA cluster is not a workstation
A governed on-premises endpoint with real RBACAzure Local Foundry, on the Entra path onlyEntra token authentication and Azure governance via Arc. Issue an API key instead and you leave Azure RBAC behind.Foundry LocalIts endpoint has no authentication and no RBAC at all
Many concurrent users on premisesAzure Local FoundryCluster-scale serving is its design pointFoundry LocalSingle host, single point of failure, and no continuous batching
Token or usage metering on premisesNeither on-premises targetNeither emits usage metrics. If metering is required, that points back at the cloudEither on-premises targetNo request, latency, or token metric exists on either
Lowest time to a first working callAzure AI FoundryA deployment and an endpoint, no hardwareAzure Local FoundryPreview access, a cluster, and a three-layer install come first
Lowest fixed monthly costFoundry LocalZero Azure spend for the runtimeAzure Local FoundryA per-core host fee applies whether or not you infer, and continues 31 days past disconnection
No Kubernetes skills on the teamAzure AI Foundry or Foundry LocalNeither needs kubectlAzure Local FoundryTwo of its three layers are Kubernetes and Helm
A production SLAAzure AI FoundryGA with published commitmentsAzure Local FoundryPublic preview, no SLA, no GA date, and no published preview-to-GA migration path

Where to go next