Langsung ke konten

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.

AI & Machine Learning Baca 20 menit Diperbarui Oktober 2026 Menengah

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. CoreML memanfaatkannya untuk mempercepat model lokal, sementara Ollama, llama.cpp, dan MLX menjalankan LLM di GPU M4 melalui Metal.

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 (USD, belum termasuk pajak) 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.

Perbandingan Framework LLM

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

Perbandingan Framework LLM
Ollama llama.cpp MLX
Kemudahan Penyiapan Sangat Mudah Sedang Mudah
Dukungan GPU Metal Ya (otomatis) Ya (flag) Ya (native)
Server API Bawaan Bawaan Bawaan (mlx_lm.server)
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

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

# Install Ollama with Homebrew
# (or download the macOS app from ollama.com, which starts the server for you)
brew install ollama

# Start the server and leave it running (Step 6 starts it automatically)
ollama serve

# In a second terminal, verify installation
ollama --version

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 from Step 1 listens 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 LaunchAgent: Ollama starts with your user session and restarts
# if it crashes (enable automatic login so it also returns after a reboot)
# (Homebrew on Apple Silicon installs ollama in /opt/homebrew/bin; check with: which ollama)
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>/opt/homebrew/bin/ollama</string>
        <string>serve</string>
    </array>
    <key>EnvironmentVariables</key>
    <dict>
        <key>OLLAMA_HOST</key>
        <string>127.0.0.1:11434</string>
    </dict>
    <key>RunAtLoad</key>
    <true/>
    <key>KeepAlive</key>
    <true/>
</dict>
</plist>
EOF

# First stop the server you started by hand in Step 1 (Ctrl+C in its terminal):
# the service needs port 11434

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

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

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/ggml-org/llama.cpp.git
cd llama.cpp

# Build (Metal GPU acceleration is enabled by default on macOS)
cmake -B build
cmake --build build --config Release -j

# The binaries are in ./build/bin
./build/bin/llama-cli --version

Langkah 2: Unduh Model GGUF

# Install the Hugging Face CLI (hf) for easy downloads
pip install -U huggingface_hub

# Download Llama 3 8B Instruct Q4_K_M (best quality/speed balance)
hf download \
  bartowski/Meta-Llama-3-8B-Instruct-GGUF \
  Meta-Llama-3-8B-Instruct-Q4_K_M.gguf \
  --local-dir ./models

# Download Mistral 7B Q4_K_M
hf 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
hf 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/Meta-Llama-3-8B-Instruct-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/Meta-Llama-3-8B-Instruct-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!"}]
  }'

Penyiapan dengan MLX

MLX adalah framework machine learning buatan Apple sendiri, yang dirancang khusus untuk Apple Silicon. Ia dibangun untuk memori terpadu dan berjalan di CPU serta GPU 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, stream_generate
from mlx_lm.sample_utils import make_sampler

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

# Sampling settings are passed as a sampler object
sampler = make_sampler(temp=0.7, top_p=0.9)

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

# Streaming generation: each chunk is a response object with .text
for chunk in stream_generate(
    model, tokenizer,
    prompt="Explain Docker networking:",
    max_tokens=300
):
    print(chunk.text, end="", flush=True)

Langkah 4: Bangun API Sederhana dengan MLX

# pip install fastapi uvicorn mlx-lm
# (mlx-lm also ships an OpenAI-compatible server: mlx_lm.server --model <repo>)
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 chunk in stream_generate(model, tokenizer, prompt=prompt, max_tokens=max_tokens):
        response += chunk.text

    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, add_generation_prompt=True
    )

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

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

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

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.

Benchmark Performa
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 $129
Mac Mini M4 Pro 48GB Llama 3 70B Q4 ~12 tok/s ~850ms $299
RTX 4090 (cloud) Llama 3 8B Q4 ~120 tok/s ~50ms $500+

Harga My Remote Mac: USD, belum termasuk pajak, per bulan.

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: penggunaan tanpa batas seharga $85/bln (USD, belum termasuk pajak) vs. harga API bayar-per-token yang dengan mudah bisa melebihi $500/bln.

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.

Model Mana untuk Konfigurasi Mana?
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 $129
48 GB 34B - 70B (Q4) Llama 3 70B, Mixtral 8x7B, DeepSeek 67B $299
64 GB+ 70B+ (Q4/Q6) Llama 3 70B Q6, Mixtral 8x22B, Command-R+ $449

Harga My Remote Mac: USD, belum termasuk pajak, per bulan.

# 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

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

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
./build/bin/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: set it inside an interactive session...
ollama run llama3:8b
# >>> /set parameter num_ctx 2048

# ...or as the default for every model the server loads: add it to the
# EnvironmentVariables dict of ~/Library/LaunchAgents/com.ollama.server.plist
# (Step 6), then reload the service (a variable set in a shell does not
# reach the launchd service, and a second ollama serve would clash on port 11434)
#   <key>OLLAMA_CONTEXT_LENGTH</key>
#   <string>2048</string>
launchctl unload ~/Library/LaunchAgents/com.ollama.server.plist
launchctl load ~/Library/LaunchAgents/com.ollama.server.plist

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

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 make it the server default: add OLLAMA_KEEP_ALIVE to the
# EnvironmentVariables dict of the Step 6 plist, then reload the service
#   <key>OLLAMA_KEEP_ALIVE</key>
#   <string>-1</string>
launchctl unload ~/Library/LaunchAgents/com.ollama.server.plist
launchctl load ~/Library/LaunchAgents/com.ollama.server.plist

# Check which models are loaded
ollama ps

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.

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 (USD, belum termasuk pajak).

Butuh detail lebih lanjut?

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

Buka dokumentasi →