Panduan AI & Machine Learning

Cara Menjalankan LLM di Mac Mini M4 (Llama, Mistral, Phi)

Arsitektur unified memory Apple Silicon menjadikan Mac Mini M4 salah satu platform paling hemat biaya untuk menjalankan large language model secara lokal. Panduan ini membahas Ollama, llama.cpp, dan MLX dengan benchmark nyata dan contoh kode praktis.

Baca 20 menit Diperbarui Maret 2026 Menengah

1. Mengapa Mac Mini M4 untuk LLM?

Mac Mini M4 sangat cocok untuk menjalankan large language model berkat arsitektur Apple Silicon. Tidak seperti server GPU tradisional di mana VRAM membatasi ukuran model, unified memory M4 memungkinkan CPU, GPU, dan Neural Engine berbagi pool memori yang sama -- artinya Mac Mini 24GB dapat memuat model yang biasanya membutuhkan GPU mahal dengan VRAM 24GB.

🧠

Arsitektur Unified Memory

Tidak seperti GPU NVIDIA dengan VRAM terpisah, unified memory M4 memungkinkan GPU mengakses seluruh RAM sistem. Mac Mini 24GB secara efektif memiliki 24GB "VRAM" untuk memuat model, tanpa bottleneck bandwidth PCI-E.

Neural Engine

Neural Engine 16-core M4 memberikan performa ML hingga 38 TOPS. Framework seperti CoreML dan MLX memanfaatkannya untuk mempercepat operasi matriks yang krusial bagi inferensi transformer.

🔌

Efisiensi Daya

Mac Mini M4 hanya mengonsumsi 5-15W di bawah beban inferensi LLM yang khas, dibandingkan 300-450W untuk NVIDIA A100. Ini berarti biaya hosting yang jauh lebih rendah dan tidak memerlukan pendinginan khusus.

💰

Hemat Biaya

Mulai dari $85/bln untuk Mac Mini M4 khusus dengan 16GB, Anda mendapatkan harga yang dapat diprediksi tanpa biaya API per token. Jalankan permintaan inferensi tanpa batas 24/7 dengan biaya yang jauh lebih murah daripada harga cloud GPU.

Wawasan Utama: Untuk beban kerja inferensi (bukan pelatihan), Mac Mini M4 menawarkan rasio performa-per-dolar terbaik di industri. Anda mendapatkan hardware khusus tanpa noisy neighbor, tanpa penagihan per token, dan bandwidth memori Apple Silicon hingga 120 GB/s.

2. Perbandingan Framework LLM

Tiga framework mendominasi ekosistem LLM Apple Silicon. Masing-masing memiliki kelebihan tersendiri tergantung pada kasus penggunaan Anda.

Fitur Ollama llama.cpp MLX
Kemudahan Penyiapan Sangat Mudah Sedang Mudah
Dukungan GPU Metal Ya (otomatis) Ya (flag) Ya (native)
Server API Bawaan Bawaan Manual
Format Model GGUF (unduh otomatis) GGUF SafeTensors / MLX
Performa Baik Terbaik untuk GGUF Terbaik untuk Apple Silicon
Pustaka Model Terkurasi (ollama.com) HuggingFace GGUF HuggingFace MLX
Bahasa Go (CLI/API) C++ (CLI/API) Python
Terbaik Untuk Deployment cepat, penyajian API Kontrol maksimal, build kustom Pipeline ML Python, riset

3. Penyiapan dengan Ollama

Ollama adalah cara termudah untuk mulai menggunakan LLM di Mac Mini M4. Ia menangani pengunduhan model, kuantisasi, dan penyajian API dengan satu binary.

Langkah 1: Pasang Ollama

# Download and install Ollama
curl -fsSL https://ollama.com/install.sh | sh

# Verify installation
ollama --version
# ollama version 0.5.4

Langkah 2: Unduh Model

# Download Llama 3 8B (4.7GB, fits 16GB RAM)
ollama pull llama3:8b

# Download Mistral 7B (4.1GB)
ollama pull mistral:7b

# Download Phi-3 Mini (2.3GB, great for constrained setups)
ollama pull phi3:mini

# Download Llama 3 70B (requires 48GB+ RAM)
ollama pull llama3:70b

# List downloaded models
ollama list
# NAME            SIZE     MODIFIED
# llama3:8b       4.7 GB   2 minutes ago
# mistral:7b      4.1 GB   5 minutes ago
# phi3:mini       2.3 GB   8 minutes ago

Langkah 3: Jalankan Chat Interaktif

# Start an interactive chat session
ollama run llama3:8b

# Example interaction:
# >>> What is the capital of France?
# The capital of France is Paris. It is the largest city in France
# and serves as the country's political, economic, and cultural center.

Langkah 4: Sajikan sebagai API

Ollama secara otomatis menjalankan server REST API pada port 11434. Anda dapat mengueri-nya dari aplikasi apa pun menggunakan API yang kompatibel dengan OpenAI.

# The Ollama server starts automatically, listening on localhost:11434

# Query using curl (OpenAI-compatible endpoint)
curl http://localhost:11434/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "llama3:8b",
    "messages": [
      {"role": "system", "content": "You are a helpful coding assistant."},
      {"role": "user", "content": "Write a Python function to calculate fibonacci numbers."}
    ],
    "temperature": 0.7,
    "max_tokens": 500
  }'

# Native Ollama API endpoint
curl http://localhost:11434/api/generate \
  -d '{
    "model": "llama3:8b",
    "prompt": "Explain quantum computing in 3 sentences.",
    "stream": false
  }'

Langkah 5: Gunakan dari Python

# pip install openai
from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:11434/v1",
    api_key="ollama"  # Ollama doesn't require an API key
)

response = client.chat.completions.create(
    model="llama3:8b",
    messages=[
        {"role": "system", "content": "You are a senior Python developer."},
        {"role": "user", "content": "Write a FastAPI endpoint for user registration."}
    ],
    temperature=0.7,
    max_tokens=1000
)

print(response.choices[0].message.content)

Langkah 6: Jalankan Ollama sebagai Layanan Latar Belakang

# Create a launchd plist for auto-start on boot
cat <<EOF > ~/Library/LaunchAgents/com.ollama.server.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
  "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.ollama.server</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/local/bin/ollama</string>
        <string>serve</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>KeepAlive</key>
    <true/>
</dict>
</plist>
EOF

# Load the service
launchctl load ~/Library/LaunchAgents/com.ollama.server.plist

# Verify it's running
curl http://localhost:11434/api/tags

4. Penyiapan dengan llama.cpp

llama.cpp memberi Anda kontrol maksimal atas parameter inferensi dan sering kali memberikan performa mentah terbaik di Apple Silicon berkat backend Metal yang dioptimalkan secara manual.

Langkah 1: Clone dan Build dengan Metal

# Install dependencies
brew install cmake

# Clone the repository
git clone https://github.com/ggerganov/llama.cpp.git
cd llama.cpp

# Build with Metal GPU acceleration (Apple Silicon)
mkdir build && cd build
cmake .. -DLLAMA_METAL=ON -DCMAKE_BUILD_TYPE=Release
cmake --build . --config Release -j$(sysctl -n hw.ncpu)

# Verify Metal support
./bin/llama-cli --help | grep metal

Langkah 2: Unduh Model GGUF

# Install huggingface-cli for easy downloads
pip install huggingface_hub

# Download Llama 3 8B Q4_K_M (best quality/speed balance)
huggingface-cli download \
  TheBloke/Llama-3-8B-GGUF \
  llama-3-8b.Q4_K_M.gguf \
  --local-dir ./models

# Download Mistral 7B Q4_K_M
huggingface-cli download \
  TheBloke/Mistral-7B-Instruct-v0.2-GGUF \
  mistral-7b-instruct-v0.2.Q4_K_M.gguf \
  --local-dir ./models

# Download Phi-3 Mini Q4
huggingface-cli download \
  microsoft/Phi-3-mini-4k-instruct-gguf \
  Phi-3-mini-4k-instruct-q4.gguf \
  --local-dir ./models

Langkah 3: Jalankan Inferensi

# Run Llama 3 8B with Metal GPU offloading (all layers)
./build/bin/llama-cli \
  -m ./models/llama-3-8b.Q4_K_M.gguf \
  -ngl 99 \
  -c 4096 \
  -t 8 \
  --temp 0.7 \
  -p "Explain how transformers work in machine learning:"

# Key flags:
# -ngl 99     : Offload all layers to Metal GPU
# -c 4096     : Context window size
# -t 8        : Number of CPU threads (M4 has 10 cores)
# --temp 0.7  : Temperature for sampling

Langkah 4: Jalankan Server API

# Start OpenAI-compatible API server
./build/bin/llama-server \
  -m ./models/llama-3-8b.Q4_K_M.gguf \
  -ngl 99 \
  -c 4096 \
  --host 0.0.0.0 \
  --port 8080 \
  --parallel 4

# Test the API
curl http://localhost:8080/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "llama-3-8b",
    "messages": [{"role": "user", "content": "Hello!"}]
  }'

5. Penyiapan dengan MLX

MLX adalah framework machine learning buatan Apple sendiri, yang dirancang khusus untuk Apple Silicon. Ia menawarkan integrasi paling erat dengan GPU dan Neural Engine M4, menjadikannya ideal untuk alur kerja ML berbasis Python.

Langkah 1: Pasang MLX

# Create a virtual environment
python3 -m venv ~/mlx-env
source ~/mlx-env/bin/activate

# Install MLX and the LLM package
pip install mlx mlx-lm

# Verify installation
python3 -c "import mlx.core as mx; print(mx.default_device())"
# Device(gpu, 0)

Langkah 2: Jalankan Inferensi dengan MLX

# Run Llama 3 8B using mlx-lm CLI
mlx_lm.generate \
  --model mlx-community/Meta-Llama-3-8B-Instruct-4bit \
  --prompt "Write a Python decorator for rate limiting:" \
  --max-tokens 500 \
  --temp 0.7

# Run Mistral 7B
mlx_lm.generate \
  --model mlx-community/Mistral-7B-Instruct-v0.3-4bit \
  --prompt "Explain microservices architecture:" \
  --max-tokens 500

Langkah 3: Integrasi Python

from mlx_lm import load, generate

# Load the model (downloads on first run)
model, tokenizer = load("mlx-community/Meta-Llama-3-8B-Instruct-4bit")

# Generate text
prompt = "Write a bash script to monitor disk usage and send alerts:"
response = generate(
    model,
    tokenizer,
    prompt=prompt,
    max_tokens=500,
    temp=0.7,
    top_p=0.9
)
print(response)

# Streaming generation
from mlx_lm import stream_generate

for token in stream_generate(
    model, tokenizer,
    prompt="Explain Docker networking:",
    max_tokens=300
):
    print(token, end="", flush=True)

Langkah 4: Bangun API Sederhana dengan MLX

# pip install fastapi uvicorn mlx-lm
from fastapi import FastAPI
from fastapi.responses import StreamingResponse
from mlx_lm import load, stream_generate
import json

app = FastAPI()
model, tokenizer = load("mlx-community/Meta-Llama-3-8B-Instruct-4bit")

@app.post("/v1/completions")
async def completions(request: dict):
    prompt = request.get("prompt", "")
    max_tokens = request.get("max_tokens", 256)

    response = ""
    for token in stream_generate(model, tokenizer, prompt=prompt, max_tokens=max_tokens):
        response += token

    return {"choices": [{"text": response}]}

@app.post("/v1/chat/completions")
async def chat(request: dict):
    messages = request.get("messages", [])
    prompt = tokenizer.apply_chat_template(messages, tokenize=False)

    response = ""
    for token in stream_generate(model, tokenizer, prompt=prompt, max_tokens=512):
        response += token

    return {
        "choices": [{
            "message": {"role": "assistant", "content": response}
        }]
    }

# Run: uvicorn server:app --host 0.0.0.0 --port 8000

6. Benchmark Performa

Benchmark dunia nyata yang diukur menggunakan Ollama dengan kuantisasi Q4_K_M. Semua pengujian menggunakan prompt 512 token, generasi 256 token, dan parameter sampling default.

Hardware Model Token/detik Waktu ke Token Pertama Biaya/bln
Mac Mini M4 16GB Llama 3 8B Q4 ~35 tok/s ~180ms $85
Mac Mini M4 16GB Mistral 7B Q4 ~38 tok/s ~160ms $85
Mac Mini M4 24GB Llama 3 13B Q4 ~22 tok/s ~320ms $95
Mac Mini M4 Pro 48GB Llama 3 70B Q4 ~12 tok/s ~850ms $179
RTX 4090 (cloud) Llama 3 8B Q4 ~120 tok/s ~50ms $500+

Catatan: Meskipun GPU NVIDIA menawarkan throughput mentah yang lebih tinggi, Mac Mini M4 memberikan token/detik yang sangat baik untuk kasus penggunaan interaktif dengan biaya yang jauh lebih murah. Pada 35 tok/dtk, respons terasa seketika untuk aplikasi chat. Keunggulan sesungguhnya adalah biaya: $85/bln tanpa batas vs. harga API bayar-per-token yang dengan mudah bisa melebihi $500/bln.

7. Model Mana untuk Konfigurasi Mana?

Faktor kuncinya adalah unified memory. Dengan kuantisasi Q4, model menggunakan sekitar 0.5-0.6 GB per miliar parameter, ditambah overhead untuk konteks dan OS.

Memori Rentang Ukuran Model Contoh Model Harga/bln
16 GB 7B - 13B (Q4) Llama 3 8B, Mistral 7B, Phi-3 Mini, Gemma 7B $85
24 GB 13B - 34B (Q4) Llama 3 13B, CodeLlama 34B, Yi 34B $95
48 GB 34B - 70B (Q4) Llama 3 70B, Mixtral 8x7B, DeepSeek 67B $179
64 GB+ 70B+ (Q4/Q6) Llama 3 70B Q6, Mixtral 8x22B, Command-R+ $249+
# Quick formula to estimate memory requirements:
# Memory needed = (Parameters in B * Bits per weight / 8) + context overhead
#
# Example: Llama 3 70B at Q4 quantization
# = (70 * 4 / 8) GB = 35 GB model weights
# + ~4 GB context/overhead
# = ~39 GB total → fits in 48GB Mac Mini M4 Pro
#
# Check current memory usage while running a model:
ollama ps
# NAME          SIZE     PROCESSOR    UNTIL
# llama3:8b     5.1 GB   100% GPU     4 minutes from now

8. Kasus Penggunaan

Asisten AI Privat

Jalankan asisten mirip ChatGPT yang menyimpan semua data di server Anda. Tidak ada data yang keluar dari infrastruktur Anda. Sempurna untuk menangani dokumen sensitif, data pelanggan, atau kode kepemilikan.

Direkomendasikan: Llama 3 8B pada 16GB

Pipeline RAG

Bangun sistem Retrieval-Augmented Generation yang mencari dokumen Anda dan menghasilkan jawaban. Gunakan ChromaDB atau Qdrant untuk embedding dengan Ollama untuk generasi.

Direkomendasikan: Mistral 7B pada 16GB

Pembuatan Kode

Gunakan model coding khusus seperti CodeLlama atau DeepSeek Coder untuk autocomplete, code review, dan refactoring otomatis. Integrasikan dengan VS Code atau JetBrains melalui Continue.dev.

Direkomendasikan: CodeLlama 34B pada 48GB

Pembuatan Konten

Hasilkan copy pemasaran, artikel blog, deskripsi produk, dan template email dalam skala besar. Jalankan batch job semalaman tanpa biaya API per token yang menumpuk.

Direkomendasikan: Llama 3 70B pada 48GB

9. Tips Performa

Pilih Kuantisasi yang Tepat

Tingkat kuantisasi sangat memengaruhi kecepatan sekaligus kualitas. Q4_K_M menawarkan keseimbangan terbaik untuk sebagian besar kasus penggunaan.

# Quantization levels (from fastest to best quality):
# Q2_K  - Fastest, lowest quality, smallest size
# Q3_K  - Fast, acceptable quality
# Q4_K_M - Best balance of speed and quality (RECOMMENDED)
# Q5_K_M - Slower, better quality
# Q6_K  - Slow, near-original quality
# Q8_0  - Slowest, best quality, largest size
# F16   - Full precision, requires 2x memory

# Example: Download Q4_K_M for best balance
ollama pull llama3:8b-instruct-q4_K_M

Maksimalkan Offloading GPU Metal

Pastikan semua layer model berjalan di GPU untuk performa maksimal. Offloading sebagian ke CPU secara signifikan menurunkan throughput.

# llama.cpp: offload all layers to GPU
./llama-cli -m model.gguf -ngl 99

# Check GPU utilization
sudo powermetrics --samplers gpu_power -n 1 -i 1000

# Monitor memory pressure
memory_pressure
# System-wide memory free percentage: 45%

Optimalkan Ukuran Batch dan Konteks

Mengurangi ukuran context window membebaskan memori dan dapat meningkatkan throughput. Gunakan konteks hanya sebanyak yang benar-benar dibutuhkan aplikasi Anda.

# Default context is often 4096 or 8192 tokens
# Reduce if you don't need long context:
ollama run llama3:8b --num-ctx 2048

# For llama.cpp, set context and batch size:
./llama-server -m model.gguf -ngl 99 \
  -c 2048 \      # Context window
  -b 512 \       # Batch size for prompt processing
  --parallel 2   # Concurrent request slots

Jaga Model Tetap Panas di Memori

Memuat model dari disk memakan waktu beberapa detik. Biarkan model yang sering digunakan tetap berada di memori untuk respons seketika.

# Ollama: set keep-alive to keep model in memory indefinitely
curl http://localhost:11434/api/generate -d '{
  "model": "llama3:8b",
  "keep_alive": -1
}'

# Or set environment variable for default behavior
export OLLAMA_KEEP_ALIVE=-1

# Check which models are loaded
ollama ps

10. Pertanyaan yang Sering Diajukan

Bisakah saya menjalankan model selevel ChatGPT di Mac Mini M4?

Ya. Model seperti Llama 3 8B dan Mistral 7B memberikan kualitas yang sebanding dengan GPT-3.5 untuk banyak tugas. Untuk kualitas selevel GPT-4, Anda membutuhkan model 70B yang memerlukan unified memory 48GB+ (Mac Mini M4 Pro). Pengalamannya sangat baik untuk bantuan coding, Q&A dokumen, dan pembuatan konten.

Apakah 35 token/detik cukup cepat untuk chat real-time?

Tentu saja. Kecepatan baca rata-rata manusia sekitar 4-5 kata per detik, yang setara dengan kira-kira 5-7 token per detik. Pada 35 tok/dtk, model menghasilkan teks 5-7x lebih cepat daripada kecepatan baca manusia. Untuk aplikasi chat, ini terasa sepenuhnya seketika.

Berapa banyak pengguna bersamaan yang dapat ditangani Mac Mini M4?

Dengan model 7B, satu Mac Mini M4 dapat menangani 2-4 permintaan bersamaan dengan latensi yang dapat diterima. Untuk konkurensi lebih tinggi, Anda dapat menjalankan beberapa Mac Mini di belakang load balancer. Server Ollama dan llama.cpp keduanya mendukung antrean permintaan bersamaan.

Bisakah saya melakukan fine-tuning model di Mac Mini M4?

Ya, dengan keterbatasan. Anda dapat melakukan fine-tuning model 7B menggunakan LoRA/QLoRA pada perangkat 16GB menggunakan MLX atau pustaka Hugging Face PEFT. Fine-tuning penuh untuk model yang lebih besar membutuhkan lebih banyak memori. Untuk fine-tuning produksi model 70B+, server GPU lebih praktis.

Framework mana yang harus saya pilih: Ollama, llama.cpp, atau MLX?

Pilih Ollama jika Anda menginginkan penyiapan tercepat dan penyajian API yang mudah. Pilih llama.cpp untuk kontrol maksimal atas parameter inferensi dan performa model GGUF terbaik. Pilih MLX jika Anda membangun pipeline ML Python dan menginginkan optimasi Apple Silicon native. Banyak pengguna memulai dengan Ollama lalu beralih ke llama.cpp atau MLX seiring bertambahnya kebutuhan mereka.

Panduan Terkait

Mulai Menjalankan LLM di Apple Silicon

Dapatkan server Mac Mini M4 khusus dan jalankan Llama, Mistral, atau Phi dengan inferensi tanpa batas. Mulai $85/bln.

Butuh detail lebih lanjut?

Jelajahi dokumentasi lengkap untuk panduan langkah demi langkah, referensi konfigurasi, dan pemecahan masalah.

Buka dokumentasi →