AI Sözlüğü
Local AI
Apple Silicon native

MLX

Apple Silicon için yerel framework

Genel bakış

MLX, Apple'ın 2023'te yayınladığı, Apple Silicon için sıfırdan tasarlanmış array framework'ü. PyTorch/JAX'a benzeyen Python API + Swift API. Unified memory'yi sömürür: CPU/GPU arasında veri kopyalamaz, çekirdekler doğrudan aynı belleği görür.

İki katman: düşük seviye `mlx` (numpy benzeri), üst seviye `mlx-lm` (LLM çalıştırma + fine-tune). Mac'te Llama, Mistral, Qwen vs. çalıştırmak için en hızlı yol — llama.cpp'den genelde %20-40 daha hızlı.

Kurulum

# Python 3.9+, sadece Apple Silicon
pip install mlx mlx-lm

# Veya tüm ekosistem
pip install mlx mlx-lm mlx-vlm mlx-data

# Doğrula
python -c "import mlx.core as mx; print(mx.metal.is_available())"
# True dönmeli

Yapılandırma

Model çalıştır (CLI)bash
# mlx-community HF organizasyonu MLX'e dönüştürülmüş
# 200+ model barındırır

# Tek komutla generate
mlx_lm.generate \
  --model mlx-community/Llama-3.1-8B-Instruct-4bit \
  --prompt "Selam, kendini tanıt" \
  --max-tokens 256 \
  --temp 0.3

# OpenAI uyumlu sunucu (port 8080)
mlx_lm.server \
  --model mlx-community/Llama-3.1-8B-Instruct-4bit \
  --port 8080
Python APIPython
from mlx_lm import load, generate

model, tokenizer = load("mlx-community/Llama-3.1-8B-Instruct-4bit")

response = generate(
    model, tokenizer,
    prompt="Selam!",
    max_tokens=256,
    temp=0.3,
    verbose=True,  # tps yazar
)
print(response)
LoRA fine-tune (Mac'te eğitim!)bash
# JSONL veriyi hazırla (data/train.jsonl, data/valid.jsonl)

mlx_lm.lora \
  --model mlx-community/Llama-3.1-8B-Instruct-4bit \
  --train \
  --data ./data \
  --batch-size 2 \
  --num-layers 16 \
  --iters 600 \
  --lora-rank 8

# Sonra adapter ile inference
mlx_lm.generate \
  --model mlx-community/Llama-3.1-8B-Instruct-4bit \
  --adapter-path ./adapters \
  --prompt "..."

Donanım hızlandırma

MLX yalnız Apple Silicon'da çalışır — Intel Mac, NVIDIA, AMD desteği yok. Ama burada eşi yok: tüm Apple Silicon GPU çekirdeklerini ve Neural Engine'i tek API üzerinden kullanır. Unified memory sayesinde KV cache CPU/GPU arasında taşınmaz.

Apple Silicon (M1/M2/M3/M4)Native — Metal Performance Shaders + ANE
Intel Mac
NVIDIA / AMD
iOS / iPadOSVar (Swift API)
Unified memoryTüm RAM'i model + KV cache için kullan
Eğitim (training)Var — LoRA, QLoRA fine-tune Mac'te çalışır

Model formatları & quantization

Format: MLX'in kendi safetensors varyantı. mlx-community organizasyonu (Hugging Face) 200+ popüler modeli MLX formatına dönüştürdü. Quantization: INT4, INT8, FP16.

Kendi modelini MLX'e dönüştürbash
# HF safetensors → MLX (FP16)
mlx_lm.convert \
  --hf-path meta-llama/Llama-3.1-8B-Instruct \
  --mlx-path ./Llama-3.1-8B-Instruct-mlx

# 4-bit quantize ederek dönüştür
mlx_lm.convert \
  --hf-path meta-llama/Llama-3.1-8B-Instruct \
  --mlx-path ./Llama-3.1-8B-Instruct-4bit \
  -q --q-bits 4 --q-group-size 64

# Hub'a yükle
mlx_lm.convert \
  --hf-path meta-llama/Llama-3.1-8B-Instruct \
  --upload-repo your-username/Llama-3.1-8B-mlx
FP16Kayıpsız, en kaliteli
INT8Kalite ile boyut arasında iyi denge
INT4 (group size 64)Standart 'Q4' karşılığı, en yaygın
INT4 (group size 32)Biraz daha kaliteli, biraz daha büyük
GGUF

API

OpenAI uyumlu (Python)Python
# mlx_lm.server'ı başlattıktan sonra
from openai import OpenAI

client = OpenAI(base_url="http://localhost:8080/v1", api_key="sk-no-key")

resp = client.chat.completions.create(
    model="mlx-community/Llama-3.1-8B-Instruct-4bit",
    messages=[{"role": "user", "content": "Selam"}],
    stream=True,
)
for c in resp:
    print(c.choices[0].delta.content or "", end="", flush=True)
Düşük seviye MLX (numpy gibi)Python
import mlx.core as mx

a = mx.array([1, 2, 3, 4])
b = mx.array([10, 20, 30, 40])

c = a * b + a.mean()
mx.eval(c)              # lazy → tetikle
print(c)                # array([12.5, 22.5, ...])

# GPU/CPU device manuel:
mx.set_default_device(mx.gpu)

Performans

M2 Max, Llama-3.1-8B 4bit~75 tok/s
M3 Max, Llama-3.1-8B 4bit~95 tok/s
M3 Ultra, Llama-3.1-70B 4bit~18 tok/s
llama.cpp'ye karşı (aynı donanım)%20-40 daha hızlı
Eğitim (LoRA, 8B 4bit)M2 Max'te ~4 saatte 600 iter
RAM tavanıUnified memory'nin ~%75'i (sistem ihtiyacı için pay)

Sık yapılan hatalar

  • Sadece Apple SiliconIntel Mac, NVIDIA, Linux — hiçbiri yok. Multi-platform desteği gerekiyorsa llama.cpp veya vLLM.
  • GGUF yüklemiyorMLX kendi safetensors formatını kullanır. llama.cpp/Ollama'dan kalan GGUF'ları çalıştıramazsın — mlx_lm.convert ile yeniden dönüştürmek gerek.
  • Unified memory tavanı16 GB Mac'te 8B Q4 (~5 GB) rahat ama 70B sığmaz. macOS varsayılan olarak GPU'ya RAM'in %66'sını verir; sudo sysctl iogpu.wired_limit_mb=N ile artırabilirsin.
  • Lazy evaluation kafa karıştırıcıMLX hesaplamaları lazy yapar — mx.eval() ya da yazdırma tetiklemezse hiçbir şey çalışmaz. PyTorch'tan geçenler için ilk gün şaşırtıcı.

Kaynaklar