On-Device AI for Apple Platforms
Architect and deploy private on-device machine learning and LLMs on Apple Silicon. Covers framework selection between Apple Foundation Models, Core ML, MLX Swift, and llama.cpp, plus model optimization and quantization.
Scope Boundary: Swift-side Core ML inference and model caching live in coreml. This skill owns backend selection, architecture, model conversion, and LLM runtimes.
Contents
Framework Selection Router
| Framework |
Best For |
Pros |
Constraints |
| Apple Foundation Models (iOS 26+) |
Text generation, structured output, tool calling |
Zero app download footprint, native system UI integration |
Requires Apple Intelligence eligible device |
| Core ML |
Computer vision, audio, classification, custom transformer models |
Best Neural Engine offload, lowest power consumption |
Fixed compute graph; slower autoregressive text generation |
| MLX Swift |
Custom open-weights LLMs/VLMs (Llama, Mistral, Gemma) |
Full control over model architecture and generation parameters |
Consumes user storage and unified RAM (high memory pressure) |
| llama.cpp |
Cross-platform C++ runtime, CPU fallback |
Broadest quantization support (GGUF), battle-tested |
Higher power usage than Neural Engine pipelines |
Apple Foundation Models
Leverage system-provided generative models on iOS 26+ without bundling model weights:
import FoundationModels
let session = LanguageModelSession()
let response = try await session.respond(to: "Summarize today's highlights in 3 bullet points.")
print(response.text)
Use @Generable to extract structured data directly from model prompts.
Core ML & Model Conversion
Convert PyTorch and Hugging Face models using Python coremltools:
import coremltools as ct
import torch
model = MyPyTorchModel().eval()
traced = torch.jit.trace(model, torch.randn(1, 3, 224, 224))
mlmodel = ct.convert(
traced,
inputs=[ct.TensorType(name="input", shape=(1, 3, 224, 224))],
compute_units=ct.ComputeUnit.ALL
)
mlmodel.save("Model.mlpackage")
MLX Swift & Open Weights
Run open-source LLMs leveraging Apple Silicon unified memory:
import MLXLLM
let model = try await LLMModelFactory.shared.load(modelName: "mlx-community/Llama-3.2-3B-Instruct-4bit")
let output = try await model.generate(prompt: "Explain relativity in simple terms.")
Model Compression & Optimization
- Quantization: Compress weights to 4-bit (int4) or 8-bit (int8) via
coremltools.optimize.coreml to reduce memory bandwidth bottlenecks.
- Palettization: Cluster weights into lookup tables for smaller download sizes.
- Pruning: Zero out non-critical weights to accelerate inference.
Common Mistakes
- Bundling massive LLMs in app bundles: Causes app review rejection or slow downloads. Use Background Assets or system Foundation Models.
- Ignoring device memory limits: Loading a 4-bit 7B LLM requires >4GB RAM, risking immediate OOM termination on devices with 6GB or 8GB unified memory.
- Running autoregressive LLMs without KV-cache: Re-evaluating the full token prompt at each step slows generation exponentially.
- Neglecting thermal throttling: Sustained GPU/CPU inference causes thermal throttling within minutes. Leverage the Neural Engine for sustained workloads.
Review Checklist
References
- Foundation Models API -- LanguageModelSession,
@Generable, tool calling, prompt design
- Core ML Conversion -- Model conversion from PyTorch, TensorFlow, other frameworks
- Core ML Optimization -- Quantization, palettization, pruning, performance tuning
- MLX Swift & llama.cpp -- MLX Swift patterns, llama.cpp integration, memory management
1---2name: apple-on-device-ai3description: Designs private on-device AI for Apple platforms with Foundation Models, Core ML, MLX Swift, or llama.cpp. Use for local LLM runtime selection, Apple Intelligence chat or tool use, Apple Silicon inference, model conversion/compression, or backend comparison; route Core ML prediction code to coreml.4---56# On-Device AI for Apple Platforms78Architect and deploy private on-device machine learning and LLMs on Apple Silicon. Covers framework selection between Apple Foundation Models, Core ML, MLX Swift, and llama.cpp, plus model optimization and quantization.910> **Scope Boundary:** Swift-side Core ML inference and model caching live in `coreml`. This skill owns backend selection, architecture, model conversion, and LLM runtimes.1112## Contents1314- [Framework Selection Router](#framework-selection-router)15- [Apple Foundation Models](#apple-foundation-models)16- [Core ML & Model Conversion](#core-ml--model-conversion)17- [MLX Swift & Open Weights](#mlx-swift--open-weights)18- [Model Compression & Optimization](#model-compression--optimization)19- [Common Mistakes](#common-mistakes)20- [Review Checklist](#review-checklist)21- [References](#references)2223## Framework Selection Router2425| Framework | Best For | Pros | Constraints |26|---|---|---|---|27| **Apple Foundation Models** (iOS 26+) | Text generation, structured output, tool calling | Zero app download footprint, native system UI integration | Requires Apple Intelligence eligible device |28| **Core ML** | Computer vision, audio, classification, custom transformer models | Best Neural Engine offload, lowest power consumption | Fixed compute graph; slower autoregressive text generation |29| **MLX Swift** | Custom open-weights LLMs/VLMs (Llama, Mistral, Gemma) | Full control over model architecture and generation parameters | Consumes user storage and unified RAM (high memory pressure) |30| **llama.cpp** | Cross-platform C++ runtime, CPU fallback | Broadest quantization support (GGUF), battle-tested | Higher power usage than Neural Engine pipelines |3132## Apple Foundation Models3334Leverage system-provided generative models on iOS 26+ without bundling model weights:3536```swift37import FoundationModels3839let session = LanguageModelSession()40let response = try await session.respond(to: "Summarize today's highlights in 3 bullet points.")41print(response.text)42```4344Use `@Generable` to extract structured data directly from model prompts.4546## Core ML & Model Conversion4748Convert PyTorch and Hugging Face models using Python `coremltools`:4950```python51import coremltools as ct52import torch5354model = MyPyTorchModel().eval()55traced = torch.jit.trace(model, torch.randn(1, 3, 224, 224))5657mlmodel = ct.convert(58 traced,59 inputs=[ct.TensorType(name="input", shape=(1, 3, 224, 224))],60 compute_units=ct.ComputeUnit.ALL61)62mlmodel.save("Model.mlpackage")63```6465## MLX Swift & Open Weights6667Run open-source LLMs leveraging Apple Silicon unified memory:6869```swift70import MLXLLM7172let model = try await LLMModelFactory.shared.load(modelName: "mlx-community/Llama-3.2-3B-Instruct-4bit")73let output = try await model.generate(prompt: "Explain relativity in simple terms.")74```7576## Model Compression & Optimization7778- **Quantization**: Compress weights to 4-bit (int4) or 8-bit (int8) via `coremltools.optimize.coreml` to reduce memory bandwidth bottlenecks.79- **Palettization**: Cluster weights into lookup tables for smaller download sizes.80- **Pruning**: Zero out non-critical weights to accelerate inference.8182## Common Mistakes8384- **Bundling massive LLMs in app bundles**: Causes app review rejection or slow downloads. Use Background Assets or system Foundation Models.85- **Ignoring device memory limits**: Loading a 4-bit 7B LLM requires >4GB RAM, risking immediate OOM termination on devices with 6GB or 8GB unified memory.86- **Running autoregressive LLMs without KV-cache**: Re-evaluating the full token prompt at each step slows generation exponentially.87- **Neglecting thermal throttling**: Sustained GPU/CPU inference causes thermal throttling within minutes. Leverage the Neural Engine for sustained workloads.8889## Review Checklist9091- [ ] Appropriate framework selected for latency, power, and storage constraints92- [ ] System Foundation Models prioritized when Apple Intelligence features suffice93- [ ] Memory footprint measured on the lowest supported physical device target94- [ ] Models quantized to 4-bit or 8-bit to fit within memory budgets95- [ ] Neural Engine dispatch verified using `MLComputePlan` or Instruments9697## References9899- [Foundation Models API](references/foundation-models.md) -- LanguageModelSession, `@Generable`, tool calling, prompt design100- [Core ML Conversion](references/coreml-conversion.md) -- Model conversion from PyTorch, TensorFlow, other frameworks101- [Core ML Optimization](references/coreml-optimization.md) -- Quantization, palettization, pruning, performance tuning102- [MLX Swift & llama.cpp](references/mlx-swift.md) -- MLX Swift patterns, llama.cpp integration, memory management