← Alle Beitrage

MLX auf Apple Silicon: Wenn Sie Ihr eigenes Modell brauchen, nicht Apples

Apples Foundation Models Framework reicht Ihnen genau ein Modell: das des Systems – versiegelt, kostenlos und nach Apples Zeitplan aktualisiert. Für die meiste Sprachverarbeitung auf dem Gerät ist das genau das richtige Werkzeug, und der Griff darüber hinaus wäre ein Fehler. Doch manche Aufgaben verlangen ein Modell, das Sie selbst wählen: ein bestimmtes Open-Weight-LLM, eine Version, die Sie fixieren, ein auf Ihren eigenen Daten trainiertes Feintuning oder eine Fähigkeit, die das Systemmodell nicht besitzt. Wenn Sie Ihr eigenes Modell auf dem Gerät ausführen müssen, ist MLX die Schicht unterhalb von Foundation Models1.

MLX ist Apples Array-Framework für maschinelles Lernen auf Apple Silicon, mit einer Swift-API (MLX Swift), die Sie direkt in eine App einbetten2. Es ist kein System-Framework, das Sie aufrufen; es ist eine Bibliothek, die Sie ausliefern – zusammen mit den Modellgewichten. In diesem Unterschied steckt der gesamte Handel, und ihn zu verstehen ist der Weg, um zu entscheiden, ob Sie eine Schicht tiefer steigen oder dort bleiben, wo Apple Sie platziert hat.

TL;DR

  • MLX ist ein NumPy-ähnliches Array-Framework, gebaut für Apple Silicon, mit verzögerter Auswertung, komponierbaren Funktionstransformationen und einem Metal-Backend2.
  • Das Modell des vereinheitlichten Speichers ist der Grund, warum es auf einem Telefon funktioniert. Arrays liegen in einem einzigen Speicherpool, den sich CPU und GPU teilen, sodass MLX über beide hinweg auf denselben Puffern läuft – ohne den Aufschlag fürs Kopieren zwischen Host und Gerät3.
  • Führen Sie ein Open-Weight-LLM auf dem Gerät aus mit LLMModelFactory, indem Sie auf ein quantisiertes Modell wie mlx-community/Llama-3.2-3B-Instruct-4bit zeigen, und generieren Sie dann über eine ChatSession4.
  • Feintuning mit LoRA-Adaptern: Trainieren Sie einen kleinen Adapter, liefern Sie adapters.safetensors aus, und load(into:) tauscht zur Laufzeit die Linear-Schichten des Basismodells gegen LoRALinear5.
  • Der Preis Ihres eigenen Modells: App-Größe (Gewichte sind groß), Speicherdruck, keine Systemintegration, und jede Aktualisierung liegt bei Ihnen. Foundation Models hat keine dieser Kosten, weil Apple sie trägt.

Was MLX ist und warum Apple Silicon es möglich macht

MLX gibt Ihnen Arrays und Operationen, die aussehen wie NumPy, dazu die Transformationen, die maschinelles Lernen braucht: automatische Differenzierung, Vektorisierung und verzögerte Auswertung, die einen Berechnungsgraphen aufbaut und ihn erst ausführt, wenn Sie ein Ergebnis auslesen2. Für sich genommen beschreibt das ein Dutzend Frameworks. Was MLX in die Lage versetzt, ein Modell mit mehreren Milliarden Parametern auf einem Gerät in Ihrer Hosentasche auszuführen, ist das Speichermodell.

Auf einer Desktop-GPU liegen die Daten im System-RAM, und zum Rechnen kopieren Sie sie über einen Bus in den separaten Speicher der GPU und die Ergebnisse anschließend zurück. Dieses Kopieren ist der Aufschlag, und bei einem großen Modell ist er brutal. Apple Silicon hat vereinheitlichten Speicher: einen einzigen Pool, den CPU, GPU und Neural Engine alle direkt adressieren. MLX ist um genau diese Tatsache herum gebaut3. Ein Array ist nicht „auf der CPU” oder „auf der GPU”; es liegt im Speicher, und jeder Prozessor operiert direkt darauf. Keine Kopien, kein Bus-Aufschlag. Ein Modell mit drei Milliarden Parametern, quantisiert auf 4 Bit, passt in wenige Gigabyte und läuft ohne die Hin- und Rückwege, die dieselbe Arbeit auf einer Maschine mit dedizierter GPU und vergleichbarem Speicher unpraktikabel machen würden. Die Hardware-Entscheidung, die Apple vor Jahren traf, ist der Grund, warum die Inferenz eines echten Modells auf dem Gerät überhaupt machbar ist, und die kachelbasierte Architektur mit vereinheitlichtem Speicher ist das Fundament, auf dem MLX steht.

Ein LLM auf dem Gerät ausführen

Der Weg von „Ich will ein bestimmtes Modell” bis zum Text auf dem Bildschirm ist kurz. Die LLM-Schicht von MLX Swift lädt ein quantisiertes Modell vom Hugging Face Hub und führt es aus4:

let container = try await LLMModelFactory.shared.loadContainer(
    from: HubClient.default,
    using: TokenizersLoader(),
    configuration: .init(id: "mlx-community/Llama-3.2-3B-Instruct-4bit")
)

let session = ChatSession(container)
let response = try await session.respond(to: "Summarize this in one line: \(text)")

Für eine UI, die Token für Token erscheint, generieren Sie stattdessen einen Stream und rendern die Stücke, sobald sie eintreffen4:

let input = try await container.prepare(input: UserInput(prompt: prompt))
let stream = try await container.generate(input: input, parameters: GenerateParameters())
for await event in stream {
    if case let .chunk(text) = event { /* append to UI */ }
}

Zwei Details tragen das meiste praktische Gewicht. Erstens ist das 4bit in der Modell-ID kein optionales Beiwerk: Die Quantisierung ist es, die das Modell in den Speicher passen und auf einem Gerät mit brauchbarer Geschwindigkeit laufen lässt. Sie liefern 4-Bit-Gewichte (oder noch niedriger) aus, nicht volle Präzision. Zweitens sind die Gewichte selbst quantisiert noch groß, weshalb Sie bewusst entscheiden, ob Sie sie in die App bündeln (sofort verfügbar, aber ein dicker Download) oder beim ersten Start nachladen (schlanke Binärdatei, aber eine Wartezeit und ein Fehlerpfad, den Sie behandeln müssen). Foundation Models stellt diese Frage nie, weil das Modell bereits auf dem Gerät liegt. Mit MLX sind die Gewichte Ihre Sache.

Feintuning: ein LoRA-Adapter, kein neues Modell

Der Grund, ein eigenes Modell mitzubringen, ist selten das Basismodell selbst; es ist, ihm Ihre Domäne beizubringen. Ein vollständiges Feintuning eines Modells mit mehreren Milliarden Parametern auf dem Gerät ist nicht der richtige Schritt. LoRA (Low-Rank Adaptation) hingegen schon: Sie trainieren einen kleinen Satz Adaptergewichte, die das Verhalten des Basismodells anpassen und das Basismodell dabei unangetastet lassen. Der Adapter ist Megabyte groß, nicht Gigabyte5.

MLX Swift lädt einen trainierten Adapter aus einem Ordner, der adapter_config.json und adapters.safetensors enthält, und wendet ihn dann auf ein bereits in einen Container geladenes Modell an5:

let adapter = try LoRAContainer.from(directory: adapterURL)
await container.update { context in
    try? adapter.load(into: context.model)   // swaps Linear layers for LoRALinear
}

load(into:) ersetzt die standardmäßigen Linear-Schichten des Modells durch LoRALinear-Schichten, die die Low-Rank-Deltas des Adapters einfalten, sodass die Inferenz nun Ihr Feintuning widerspiegelt. Weil das Modell innerhalb des Containers lebt, wenden Sie den Adapter über container.update an, und Sie können Adapter zur Laufzeit im laufenden Betrieb austauschen (einen mit unload(from:) entladen, einen anderen mit load(into:) laden), um einem einzigen Basismodell pro Funktion ein anderes Verhalten zu geben. Das Muster spiegelt das wider, was Apple für das Systemmodell über eigene Adapter für Foundation Models bietet: Der Unterschied ist, dass hier Ihnen das Basismodell, die Trainingspipeline und das Ergebnis gehören, statt dass Sie ein Modell anpassen, das Sie nicht sehen können.

Die Entscheidung: Foundation Models, MLX oder Cloud

Drei Schichten – und die falsche Wahl kostet Sie entweder Fähigkeit oder einen Berg vermeidbarer Arbeit.

  • Foundation Models, wenn das Systemmodell die Aufgabe bewältigen kann. Kostenlos, privat, keine Gewichte zum Ausliefern, kein Speicher, den Sie verwalten, und eine Systemintegration, die Sie umsonst bekommen. Hier ist die Voreinstellung. Die Sprachaufgaben auf dem Gerät, für die Apple es gebaut hat (zusammenfassen, klassifizieren, extrahieren, umschreiben, strukturierte Ausgabe), gehören hierher, Punkt.
  • MLX, wenn Sie ein Modell brauchen, das das System Ihnen nicht gibt: ein bestimmtes Open-Weight-LLM, eine fixierte Version, die sich unter einem OS-Update nicht verschiebt, ein Domänen-Feintuning oder eine Architektur (ein Vision-Language-Modell, ein Modell jenseits von Text) außerhalb des Bereichs von Foundation Models. Sie zahlen mit App-Größe, Speicher und Verantwortung und erkaufen sich Kontrolle.
  • Cloud, wenn das Modell tatsächlich groß sein muss: Reasoning an der Spitze, Analyse mit langem Kontext, alles, was die größten Modelle leisten und ein Modell mit wenigen Milliarden Parametern auf dem Gerät nicht kann. Auf dem Gerät ist kein Ersatz für ein Spitzenmodell; es ist ein anderer Punkt auf der Kurve.

Die ehrliche Lesart: MLX ist ein bewusster Schritt nach unten aus einem bestimmten Grund, keine bessere Voreinstellung. Wenn Sie die Fähigkeit nicht benennen können, die Foundation Models Ihrer Funktion vorenthält, brauchen Sie MLX nicht – und es auszuliefern bedeutet, Gigabyte an Gewichten und ein Speicherbudget mitzuschleppen, das Sie gar nicht hätten haben müssen.

Wann Sie nicht zu MLX greifen sollten

  • Das Systemmodell kann es bereits. Lesen Sie die Foundation-Models-Aufgaben noch einmal. Wenn Ihre auf der Liste steht, hören Sie hier auf.
  • Sie können sich die Gewichte nicht leisten. Ein quantisiertes kleines Modell ist immer noch ein großer Posten. Wenn App-Größe oder der Download beim ersten Start für Ihre Benutzer eine echte Einschränkung ist, kann diese Einschränkung die Frage allein entscheiden.
  • Sie brauchen den energiesparendsten Pfad der Neural Engine für ein festes Modell. Für ein bekanntes, ausgeliefertes Modell, das sich nicht ändert, zielen Core ML und sein Konverter mit der engsten Energie- und Latenzbilanz auf die Neural Engine. MLX glänzt bei Flexibilität und Iteration auf Forschungsniveau; Core ML glänzt bei einem festgezurrten Produktionsmodell. Es sind unterschiedliche Werkzeuge, und „ML auf dem Gerät” ist nicht eine einzige Entscheidung.
  • Sie werden es nicht pflegen. Ein eigenes Modell bedeutet, dass Ihnen seine Aktualisierungen, seine Sicherheit und seine Drift gehören. Apple aktualisiert das Systemmodell für Sie. Wenn Sie nicht aufgestellt sind, um ein Modell zu betreuen, übernehmen Sie keines.

Die Fähigkeit, die MLX belohnt, ist Zurückhaltung darüber, wann man es einsetzt. Das Framework ist wirklich bemerkenswert: ein echtes Sprachmodell, auf Ihre Domäne feinabgestimmt, vollständig auf dem Gerät laufend – ohne Server und ohne Kosten pro Token, auf Hardware, deren Speicherarchitektur für genau das gebaut wurde. Diese Fähigkeit ist es wert, danach zu greifen, wenn Sie den Grund benannt haben. Greifen Sie ohne einen danach, und Sie haben Apples kostenloses, gepflegtes, integriertes Modell gegen eine schwerere, ungepflegte Kopie eingetauscht, die nun Ihnen gehört. Das Urteilsvermögen ist die ganze Arbeit.

FAQ

Was ist Apples MLX-Framework?

MLX ist ein Array-Framework für maschinelles Lernen auf Apple Silicon, mit einer NumPy-ähnlichen API, komponierbaren Funktionstransformationen (automatische Differenzierung, Vektorisierung), verzögerter Berechnung und einem Metal-Backend2. MLX Swift ist die Swift-API, um es in Apps einzubetten, sodass Sie Ihre eigenen Modelle auf dem Gerät ausführen und feinabstimmen können.

Wie nutzt MLX den vereinheitlichten Speicher von Apple Silicon?

MLX-Arrays liegen im gemeinsam genutzten Speicher, sodass Operationen auf CPU oder GPU laufen, ohne Daten zwischen separaten Speicherpools zu kopieren3. Genau diese Null-Transfer-Eigenschaft macht die vereinheitlichte Speicherarchitektur von Apple Silicon für die Ausführung von Modellen auf dem Gerät effizient.

Kann ich mit MLX ein Open-Weight-LLM auf dem Gerät ausführen?

Ja. LLMModelFactory.shared.loadContainer(from:using:configuration:) lädt ein quantisiertes Modell wie mlx-community/Llama-3.2-3B-Instruct-4bit vom Hugging Face Hub; ChatSession gibt Ihnen respond(to:) für einzelne Aufrufe, und container.generate(input:parameters:) streamt .chunk(text)-Ereignisse für inkrementelle Ausgabe4.

Wie stimme ich ein Modell mit MLX fein ab?

Mit einem LoRA-Adapter statt mit einem neuen Modell. LoRAContainer.from(directory:) lädt einen Adapter aus einem Ordner, der adapter_config.json und adapters.safetensors enthält; angewendet über container.update, tauscht er die Linear-Schichten des Modells gegen LoRALinear-Schichten und kann Adapter zur Laufzeit im laufenden Betrieb austauschen5.

MLX, Foundation Models oder Core ML – was sollte ich verwenden?

Greifen Sie standardmäßig zu Foundation Models, wenn Apples Systemmodell die Aufgabe bewältigen kann (kostenlos, privat, keine Gewichte zum Ausliefern)1. Greifen Sie nur dann zu MLX, wenn Sie ein Modell brauchen, das das System Ihnen nicht gibt: ein bestimmtes Open-Weight-LLM, eine fixierte Version, ein Domänen-Feintuning oder eine Architektur außerhalb des Bereichs von Foundation Models. Verwenden Sie Core ML für ein festgezurrtes Produktionsmodell, das den energiesparendsten Pfad der Neural Engine braucht, und die Cloud, wenn das Modell tatsächlich von Spitzengröße sein muss.

Wann sollte ich nicht zu MLX greifen?

Wenn das Systemmodell es bereits kann, wenn Sie sich das Ausliefern von Gigabyte an Gewichten nicht leisten können, wenn ein festes Modell besser durch Core MLs energiesparendsten Neural-Engine-Pfad bedient wäre oder wenn Sie nicht aufgestellt sind, um die Aktualisierungen, Sicherheit und Drift eines Modells zu betreuen. MLX ist ein bewusster Schritt nach unten aus einem benannten Grund, keine bessere Voreinstellung.



  1. Einordnung von MLX im Verhältnis zum Foundation Models Framework: Foundation Models stellt Apples festes Systemmodell auf dem Gerät bereit (siehe Apple Foundation Models: Das LLM-Framework auf dem Gerät); MLX führt Modelle aus, die Sie selbst auswählen und feinabstimmen. Die beiden bedienen unterschiedliche Bedürfnisse auf unterschiedlichen Schichten des Stacks auf dem Gerät. 

  2. Apple Machine Learning Research, MLX und MLX Swift. MLX ist ein Array-Framework für maschinelles Lernen auf Apple Silicon mit einer NumPy-ähnlichen API, komponierbaren Funktionstransformationen (automatische Differenzierung, Vektorisierung), verzögerter Berechnung und einem Metal-Backend. MLX Swift ist die Swift-API, um es in Apps einzubetten. 

  3. MLX-Dokumentation, unified memory. MLX-Arrays liegen im gemeinsam genutzten Speicher; Operationen können auf CPU oder GPU laufen, ohne Daten zwischen separaten Speicherpools zu übertragen – genau die Eigenschaft, die die vereinheitlichte Speicherarchitektur von Apple Silicon für die Ausführung von Modellen auf dem Gerät effizient macht. Hintergrund zur Hardware: Apple Silicons TBDR und vereinheitlichter Speicher

  4. Apple Machine Learning Research, MLX Swift Examples / MLX Swift LM. LLMModelFactory.shared.loadContainer(from:using:configuration:) lädt ein quantisiertes Modell (zum Beispiel mlx-community/Llama-3.2-3B-Instruct-4bit) vom Hugging Face Hub; ChatSession bietet respond(to:) für einzelne Aufrufe, und container.generate(input:parameters:) liefert einen Stream von .chunk(text)-Ereignissen für inkrementelle Ausgabe über GenerateParameters und UserInput

  5. Apple Machine Learning Research, MLX Swift LM LoRA adapters reference. LoRAContainer.from(directory:) lädt einen Adapter aus einem Ordner, der adapter_config.json und adapters.safetensors enthält; angewendet über container.update, ersetzt adapter.load(into: context.model) die Linear-Schichten des Modells durch LoRALinear-Schichten, und unload(from:) entfernt einen, sodass Adapter zur Laufzeit im laufenden Betrieb ausgetauscht werden können. Vergleichen Sie Apples Pfad für das Systemmodell in eigene Adapter für Foundation Models

  6. Praktische Arbeit des Autors mit MLX: eine autonome ML-Forschungsschleife, die Trainingsexperimente mit festem Budget auf Apple Silicon über MLX ausführt, Architektur und Hyperparameter autonom anpasst, um die Validierungs-Bits-pro-Byte zu minimieren, und nur Verbesserungen behält. Das hier beschriebene Verhalten von vereinheitlichtem Speicher und Quantisierung spiegelt diese Experimente wider. 

Verwandte Beiträge

Apple Foundation Models: Das On-Device-LLM-Framework, erklärt

Apples Foundation-Models-Framework: LanguageModelSession, geführte Generierung mit @Generable, Tool-Aufrufe, Verfügbarke…

11 Min. Lesezeit

Core ML On-Device Inference: Die Muster, die wirklich in Produktion gehen

Core ML führt Modelle auf Neural Engine, GPU oder CPU aus. Die produktionstauglichen Muster: Modellkonvertierung, Dispat…

10 Min. Lesezeit

KI-Systeme entwickeln: Von RAG zu Agenten

Ich habe ein 3.500 Zeilen umfassendes Agentensystem mit 86 Hooks und Konsensvalidierung gebaut. Hier sind meine Erkenntn…

8 Min. Lesezeit