Choosing Between MLX, Core ML, and Create ML

Apple platforms have three machine learning frameworks from Apple itself: Core ML, Create ML, and MLX. Each targets a different job.

  • Core ML is for deploying trained models to run efficiently on device.
  • Create ML is for training simple models without code or with minimal Swift.
  • MLX is for research, flexible inference, and training with an array framework designed for Apple silicon.

Choosing the wrong one leads to unnecessary work. Converting a model to Core ML when MLX would work, or using MLX for a model that should be a static Core ML asset, both cost time and performance.

This guide compares the three frameworks across training, deployment, performance, and developer experience, with concrete advice for choosing.

Core ML

Core ML is Apple’s production inference framework. Core ML Tools converts models from libraries such as PyTorch and TensorFlow into Core ML models. Core ML then runs them with hardware-specific optimizations.

What it is good for

  • Static inference β€” the model architecture is fixed at build time.
  • Performance-critical deployment β€” Core ML uses the Neural Engine, GPU, and CPU selectively through the model’s execution plan.
  • App Store distribution β€” models can be bundled with the app and optionally protected with model encryption.
  • Strict latency requirements β€” real-time camera processing, audio classification, on-device decision making.

The conversion pipeline

flowchart LR
    PyTorch --> coremltools
    TensorFlow --> coremltools
    coremltools --> mlpackage
    mlpackage --> Xcode
    Xcode --> App

The conversion step (coremltools in Python) is where friction lives. Not every operation in a source model has a Core ML equivalent. Unsupported operations may require changing the model, using a supported composite operation, or adding a custom operation.

Performance characteristics

  • Neural Engine access β€” the key advantage. Core ML is the only way to run models on the ANE, which is highly power-efficient for supported operations.
  • Model compression β€” Core ML Tools supports techniques such as quantization, pruning, and palettization. The size and accuracy tradeoff depends on the model.
  • Model encryption β€” models can be encrypted so they can only run on your app. Useful for proprietary models.

When to reach for it

  • You have a fixed model that you ship with the app.
  • You need Neural Engine acceleration.
  • Model size and startup time matter (Core ML loads quickly from a compiled format).
  • You want model protection.

Create ML

Create ML is Apple’s no-code/low-code training tool. It ships with Xcode and provides a drag-and-drop interface plus a Swift API for training common model types.

What it is good for

  • Image classification β€” train a classifier from a folder of labeled images.
  • Object detection β€” train an object detector from annotated images.
  • Text classification β€” sentiment analysis, spam detection, topic tagging.
  • Tabular data β€” regression and classification from CSV data.
  • Sound classification β€” train on audio samples.
  • Recommendation systems β€” implicit and explicit feedback models.

Training workflow

The Xcode UI presents a step-by-step wizard: pick a task type, point to your data, configure training parameters, and click Train. The output is a Core ML model ready to drag into your app.

// The Swift API for the same task
import CreateML

let data = try MLImageClassifier.DataSource
    .labeledDirectories(at: URL(filePath: "/path/to/images"))

let model = try MLImageClassifier(trainingData: data)
try model.write(to: URL(filePath: "/path/to/output.mlpackage"))

Limitations

  • Limited architecture choices. Create ML chooses the model architecture for you.
  • No custom layers or architectures. If your problem does not fit one of the predefined tasks, Create ML cannot handle it.
  • Small-to-medium datasets only. For large-scale training, use PyTorch or MLX.
  • Less control over hyperparameters.

When to reach for it

  • You need a simple classifier and have labeled data.
  • You want to prototype an ML feature in minutes.
  • You are not an ML engineer and just want a model that works.

MLX

MLX is Apple’s array framework for ML, designed for Apple silicon. It is the newest of the three (open-sourced late 2023) and takes a fundamentally different approach: you work directly with array operations instead of converting models to Core ML first.

What it is good for

  • Flexible inference β€” LLMs, diffusion models, and custom architectures that benefit from an array-oriented workflow.
  • Training and fine-tuning β€” including LoRA and full model fine-tuning for supported models in MLX Swift LM.
  • Research and experimentation β€” quick iteration without conversion pipelines.
  • Running Hugging Face models directly β€” MLX Swift can load safetensors weights and run models with no conversion step.

The developer experience

import MLX
import MLXLLM
import MLXLMCommon
import MLXHuggingFace
import HuggingFace
import Tokenizers

let model = try await #huggingFaceLoadModelContainer(
    configuration: LLMRegistry.gemma3_1B_qat_4bit
)

let session = ChatSession(model)
print(try await session.respond(to: "What is the capital of Vietnam?"))

With the Hugging Face integration, the model downloads, loads into memory, and runs without a Core ML conversion step.

Performance characteristics

  • CPU and GPU execution β€” MLX operations can run on CPU or GPU streams. MLX does not target the Neural Engine.
  • Unified memory β€” MLX is designed around Apple silicon’s unified memory architecture, so CPU and GPU operations can work with the same arrays without copies between separate memory pools.
  • Lazy computation β€” arrays are materialized when needed, which supports a flexible development workflow.

When to reach for it

  • You are running an LLM or diffusion model.
  • You need general-purpose training or fine-tuning.
  • You want to iterate quickly without a conversion step.
  • The model architecture is experimental or custom.
  • You are building a research tool.

Side-by-side comparison

Core ML Create ML MLX
Purpose Deployment Training (simple) Research & dynamic inference
Training On-device updates for prepared models Yes (limited) Yes (full autodiff)
Inference Optimized Core ML model N/A Flexible, lazy execution
Neural Engine Yes N/A No
GPU Yes N/A Yes
CPU Yes N/A Yes
Model protection Built-in N/A None
Conversion needed Yes (from PyTorch etc.) No (outputs .mlpackage) No (loads weights directly)
Best for Shipped models Quick prototypes LLMs, custom models
Swift API Yes (VNCoreMLModel) Yes (CreateML) Yes (MLX Swift)
Python API coremltools No Yes (mlx)

Decision guide

Start here

Does your model need to run on the Neural Engine?
β”œβ”€β”€ YES β†’ Use Core ML
└── NO β†’ Does Create ML support your training task?
    β”œβ”€β”€ YES β†’ Use Create ML to train, then ship the Core ML model
    └── NO β†’ Do you need a flexible research or training workflow?
        β”œβ”€β”€ YES β†’ Use MLX
        └── NO β†’ Benchmark Core ML and MLX for your model

By use case

Use case Recommendation
Image classifier shipped with app Create ML β†’ Core ML
LLM chat app Benchmark Core ML and MLX
Real-time video processing Core ML
On-device model personalization Core ML for updatable models; MLX for general fine-tuning
Prototype a classifier quickly Create ML
Run a Hugging Face model on Mac MLX
Production app with static model Core ML
Research / experiment with custom architectures MLX
Model needs Neural Engine Core ML

Combining frameworks

The frameworks are not mutually exclusive. Core ML supports on-device updates for models prepared as updatable, while MLX supports broader training workflows. A common pattern:

  1. Research and prototype in MLX (fast iteration).
  2. Once the architecture is frozen, convert to Core ML if Neural Engine acceleration and Core ML’s deployment optimizations help.

Or:

  1. Train a small classifier in Create ML.
  2. Ship an LLM-powered feature using MLX Swift alongside it.

Both frameworks can coexist in the same app. MLX handles the flexible model workflow, while Core ML handles optimized deployment where it is a better fit.