Cara Memperbaiki Masalah Saat AI Lokal Berhenti di Laptop 8GB
Anda mungkin pernah mengalami layar yang membeku setelah menonton YouTube dan memasukkan perintah instalasi model ke terminal. Alasan mengapa LLM lokal mogok di MacBook lama atau laptop kelas entry-level dengan RAM 8GB atau 16GB bukanlah karena kurangnya inti komputasi. Alasan sebenarnya adalah runtime mencoba membaca data yang melebihi batas dalam kondisi bandwidth memori yang sangat sempit. Dengan mengukur bandwidth perangkat dan menyesuaikan ukuran konteks, Anda dapat menjalankan dan memanfaatkan model asisten kode bahkan pada perangkat lama.
Memasang Alat Diagnostik Tanpa Mengganggu Python Sistem
macOS dan Ubuntu versi terbaru melarang pemasangan paket secara sembarangan ke Python sistem. Begitu Anda mengetik pip install, proses akan berhenti sambil memunculkan error PEP 668 (error: externally-managed-environment). Jika Anda memaksa menghapus perlindungan sistem dengan flag (--break-system-packages) karena malas, alat bawaan OS nantinya akan berantakan dan Anda harus melakukan instal ulang. Gunakan pipx yang mendukung isolasi lingkungan virtual mandiri untuk menginstal alat diagnostik.
Sebarkan alat diagnostik sumber terbuka llmfit yang dikembangkan oleh Alex Jones secara terisolasi untuk mengekstrak spesifikasi perangkat keras Anda.
`bash
Instal pipx untuk macOS (Linux: sudo apt install -y pipx)
brew install pipx
pipx ensurepath
Instal llmfit dan simpan hasil pemindaian perangkat keras
pipx install llmfit
mkdir -p ~/local-ai-workspace/{configs,logs,scripts}
llmfit --json system > ~/local-ai-workspace/logs/system_specs.json
`
Setelah menyelesaikan proses ini di terminal, kapasitas RAM perangkat dan informasi bus memori akan dirangkum dalam file system_specs.json dalam waktu 1 menit tanpa menyentuh pustaka sistem.
Menghitung Bandwidth dan Memilih Model 3B dan 7B
Proses di mana model bahasa lokal mengeluarkan teks adalah tugas berurutan untuk memprediksi kata berikutnya dengan melihat token yang dihasilkan sebelumnya. Pada setiap langkah, puluhan miliar bobot model harus dibaca secara utuh dari bus memori. Dengan kata lain, kecepatan yang dirasakan bukan ditentukan oleh angka clock GPU, melainkan oleh angka bandwidth memori.
Kecepatan keluaran token per detik (TPS) dihitung dengan rumus di bawah ini:
TPS approx rac{ ext{Memory Bandwidth (GB/s)}}{ ext{Model Weights Size (GB)} + ext{KV Cache per Step (GB)}} imes etaNilai eta dalam rumus adalah nilai efisiensi bandwidth efektif (MBU) dari runtime, yang biasanya sekitar 0,65.
Jika Anda memuat model 7B yang dikuantisasi 4-bit (sekitar 4,5GB) secara utuh ke RAM desktop DDR4 biasa dengan bandwidth tingkat 45GB/s, kecepatan komputasi akan berada di kisaran 45div4.5imes0.65approx6.5extTPS. Teks akan muncul terputus-putus satu per satu, yang sangat membuat frustrasi untuk penggunaan dukungan kerja. Di sisi lain, jika Anda memuatnya ke model RTX 4060 8GB dengan bandwidth 288GB/s atau memori terpadu seri M dengan bandwidth melebihi 100GB/s, kecepatan yang dihasilkan adalah 35 hingga 40 token per detik, yang dengan mudah melampaui kecepatan pengetikan waktu nyata.
Setelah memeriksa spesifikasi perangkat Anda, pilihannya dibagi menjadi tepat dua model:
- Penulisan Kode dan Pembuatan Tes: Muat
Qwen2.5-Coder-7B-Instruct (Q4_K_M) dengan ukuran 4,7GB. Ini mencapai lebih dari 35 TPS pada MacBook memori terpadu 16GB atau GPU diskrit VRAM 8GB.
- Ringkasan Dokumen dan Pembuatan Log Commit: Gunakan
Llama-3.2-3B-Instruct (Q4_K_M) dengan ukuran 2,0GB. Model ini menggunakan lebih sedikit RAM bahkan di lingkungan DDR4 laptop daya rendah dan secara konsisten menghasilkan sekitar 15 TPS.
Mengikat Jendela Konteks ke 4096 untuk Mencegah Error OOM
Bahkan setelah berhasil menjalankan model, proses akan mati secara senyap setelah beberapa kali tanya jawab. Exit Code 137 yang tercetak di terminal berarti kernel manajemen memori sistem operasi (Linux OOM-Killer atau macOS JetSam) telah mengakhiri proses secara paksa (SIGKILL) karena kekurangan RAM.
Situasi yang lebih merepotkan terjadi ketika menggunakan GPU eksternal, yaitu Silent CPU Fallback. Jika batas VRAM terlampaui, alih-alih menghentikan proses, sebagian lapisan komputasi didorong ke RAM sistem yang lambat, di mana penggunaan GPU anjlok dan kecepatan merosot ke tingkat 1 token per detik.
Pelaku utamanya adalah cache KV (Key-Value) yang memakan RAM seiring dengan semakin panjangnya percakapan. Berdasarkan arsitektur Llama-3, jika konteks dibiarkan terbuka hingga 32.768 (32K) token, tambahan 4.0GB murni untuk memori cache akan melekat di samping bobot 4.5GB. Pada perangkat 8GB, struktur ini pasti akan gagal. Jika panjang ini dibatasi hingga 4.096 (4K) token, kapasitas cache berkurang menjadi 512MB, sehingga tidak akan mengalami crash bahkan di lingkungan 8GB.
Berikut adalah prosedur untuk memeriksa status saat ini dan mengunci batasnya.
Pertama, masukkan ollama ps di terminal. Jika item PROCESSOR tidak menampilkan 100% GPU melainkan terpecah seperti 30%/70% CPU/GPU, VRAM Anda sudah terlampaui dan terdorong ke RAM berkecepatan rendah.
Buat file konfigurasi untuk memaku ukuran konteks. Buka ~/local-ai-workspace/configs/Modelfile.coder dan tulis konten di bawah ini.
`dockerfile
FROM qwen2.5-coder:7b
Batas atas 4096 token untuk mencegah lonjakan cache
PARAMETER num_ctx 4096
PARAMETER temperature 0.2
`
Bangun sebagai model kustom di terminal.
`bash
ollama create custom-coder:7b -f ~/local-ai-workspace/configs/Modelfile.coder
`
Setelah pembangunan selesai, masukkan sudo purge di terminal pada macOS untuk membersihkan cache disk, dan bersihkan instans WSL yang tidak digunakan pada Windows dengan wsl --shutdown untuk mengamankan ketersediaan RAM dasar setidaknya 2GB atau lebih.
Membuat Pipeline Lokal Tanpa Kebocoran Eksternal
ikat endpoint penyajian model hanya ke loopback lokal (127.0.0.1) agar kode sumber perusahaan atau proyek pribadi tidak bocor ke luar.
Buat file ~/local-ai-workspace/scripts/serve_secure.sh dan masukkan kode di bawah ini.
`bash
#!/bin/bash
export OLLAMA_HOST="127.0.0.1:11434"
export OLLAMA_ORIGINS="http://127.0.0.1:*,http://localhost:*"
ollama serve > ~/local-ai-workspace/logs/ollama_runtime.log 2>&1 &
`
Setelah menjalankan skrip, pastikan alamat penerima muncul sebagai 127.0.0.1:11434 ketika Anda memasukkan lsof -i :11434 | grep LISTEN di terminal. Jika Anda melihat 0.0.0.0:11434 yang dapat diakses dari luar, Anda harus segera menutup proses tersebut.
Untuk integrasi, gunakan Continue.dev, sebuah plugin VS Code. Buka file konfigurasi (~/.continue/config.json) untuk memisahkan model obrolan dan model pelengkapan otomatis.
`json
{
"models": [
{
"title": "Local Qwen2.5-Coder (Chat)",
"provider": "ollama",
"model": "custom-coder:7b",
"apiBase": "http://127.0.0.1:11434"
},
{
"title": "Local Llama3.2 (Summary)",
"provider": "ollama",
"model": "llama3.2:3b",
"apiBase": "http://127.0.0.1:11434"
}
],
"tabAutocompleteModel": {
"title": "Local Autocomplete",
"provider": "ollama",
"model": "qwen2.5-coder:1.5b",
"apiBase": "http://127.0.0.1:11434"
},
"allowAnonymousTelemetry": false
}
`
Tugaskan model 7B yang konteksnya baru saja dibatasi ke tanya jawab, dan tentukan model super ringan berukuran 1GB qwen2.5-coder:1.5b untuk pelengkapan otomatis tab. Penundaan pelengkapan otomatis akan hilang.
Verifikasi dilakukan dengan memutus koneksi internet. Buka terminal dalam status offline dengan Wi-Fi dimatikan dan kirimkan kueri secara langsung.
`bash
curl -s -X POST http://127.0.0.1:11434/api/generate -d '{
"model": "llama3.2:3b",
"prompt": "Uji jaringan terisolasi lokal",
"stream": false
}' | grep "response"
`
Jika respons JSON yang normal dikembalikan dalam keadaan jaringan terputus, pengaturan lingkungan pengembangan yang berjalan dengan aman hanya dalam sumber daya laptop Anda sendiri tanpa ketergantungan cloud eksternal telah selesai.