Beranda Blog Store
Artificial Intelegence

Menjalankan LLM Tanpa GPU: Kuantisasi GGUF dengan llama.cpp dan Berapa RAM yang Sebenarnya Dibutuhkan

23 Agu 2026 Hartono 5 menit baca 8 Dilihat

Halo, Rekan ArtonLabs. Tulisan ini agak lebih teknis dari biasanya, untuk Anda yang ingin tahu apa yang sebenarnya terjadi di balik Ollama.

Ollama menyembunyikan banyak detail, dan itu bagus sampai Anda ingin tahu kenapa model 8B butuh 6 GB RAM, atau ingin menjalankan model yang belum ada di katalognya. Di balik Ollama ada llama.cpp, mesin inferensi yang membuat LLM bisa berjalan di CPU biasa, dan format GGUF beserta kuantisasinya. Tulisan ini membangun llama.cpp dari sumber, mengonversi model dari Hugging Face, mengkuantisasinya, dan menghitung kebutuhan RAM dengan angka sungguhan.

Daftar Isi

Apa Itu Kuantisasi dan Kenapa Penting

Bobot model biasanya disimpan sebagai angka 16-bit. Kuantisasi menyimpannya dengan bit lebih sedikit, misalnya 4 atau 5 bit per bobot, dengan sedikit kehilangan ketelitian. Hasilnya, model 8 miliar parameter yang dalam F16 berukuran sekitar 15 GB menyusut menjadi sekitar 4,6 GB pada Q4_K_M, dan bisa berjalan di laptop atau VPS biasa. Dokumentasi llama.cpp memberi angka yang jelas untuk model 8B: Q4_K_M sekitar 4,58 GiB, Q5_K_M 5,33 GiB, Q8_0 7,95 GiB, dan F16 14,96 GiB. Q4_K_M adalah pilihan seimbang yang paling populer; Q8_0 nyaris tanpa kehilangan tetapi hampir dua kali lebih besar.

Membangun llama.cpp di Linux

sudo apt install -y build-essential cmake git libssl-dev python3-venv
git clone https://github.com/ggml-org/llama.cpp
cd llama.cpp
cmake -B build
cmake --build build --config Release -j 4

Sesuaikan -j dengan jumlah inti CPU. Hasilnya ada di folder build/bin/, termasuk llama-cli, llama-server, dan llama-quantize. Tidak ada GPU yang dibutuhkan untuk build CPU ini; dukungan CUDA atau Vulkan bisa ditambahkan lewat opsi cmake kalau suatu hari Anda punya kartunya.

Menjalankan Model GGUF dari Hugging Face

llama.cpp bisa mengunduh GGUF langsung dari Hugging Face dengan opsi -hf. Contoh dari dokumentasi resmi dengan model kecil:

./build/bin/llama-cli -hf ggml-org/Qwen3.5-0.8B-GGUF

Untuk berkas lokal, pakai -m jalur/model.gguf. Opsi yang sering kami pakai: -c 8192 untuk panjang konteks, -t 4 untuk jumlah thread, dan -n 512 untuk batas token jawaban. Amati baris statistik di akhir; di situ tertulis token per detik untuk pemrosesan prompt dan untuk pembangkitan jawaban, dua angka yang berbeda dan sama-sama penting.

Mengonversi Model Sendiri ke GGUF

Kalau model yang Anda inginkan hanya tersedia dalam format Hugging Face, konversi dulu ke GGUF dengan skrip yang disertakan:

python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
python convert_hf_to_gguf.py --outfile model-bf16.gguf --outtype bf16 --remote nama-org/nama-model

Opsi --remote mengambil langsung dari Hugging Face; tanpa itu, berikan jalur folder model yang sudah diunduh. --outtype menerima f32, f16, bf16, q8_0, atau auto. Konversi ke bf16 dulu, baru dikuantisasi, adalah jalur yang disarankan.

Mengkuantisasi

./build/bin/llama-quantize model-bf16.gguf model-q4_k_m.gguf q4_k_m 4

Argumen kedua adalah berkas keluaran, ketiga tingkat kuantisasi (huruf besar atau kecil sama saja), dan yang terakhir jumlah thread. Jalankan llama-quantize --help untuk daftar lengkap tingkat yang didukung, termasuk varian IQ untuk ukuran sangat kecil. Prosesnya memakan beberapa menit untuk model 8B dan membutuhkan RAM setidaknya sebesar berkas masukan. Setelah itu, jalankan keduanya dengan prompt yang sama dan bandingkan jawabannya; untuk kebanyakan pemakaian, perbedaan antara Q4_K_M dan F16 sulit dirasakan, sementara perbedaan kecepatannya sangat terasa.

Berapa RAM yang Sebenarnya Dibutuhkan

Rumus kasar yang kami pakai: ukuran berkas GGUF ditambah kebutuhan cache konteks ditambah sekitar 0,5 GB untuk proses. Cache konteks (KV cache) tumbuh sebanding dengan panjang konteks dan ukuran model; untuk model 8B, konteks 8K memakan kira-kira 1 GB, dan 32K sekitar 4 GB, tergantung arsitektur modelnya. Jadi model 8B Q4_K_M dengan konteks 8K butuh sekitar 6 GB, dan dengan konteks 32K mendekati 9 GB. Model 3B Q4_K_M dengan konteks 8K masuk di bawah 3 GB. Model 1B masuk di VPS 2 GB.

Kalau RAM kurang, sistem akan memakai swap, dan kecepatannya jatuh dari beberapa token per detik menjadi beberapa detik per token. Dalam praktik, lebih baik model lebih kecil yang sepenuhnya di RAM daripada model lebih besar yang setengahnya di disk.

Menjalankan sebagai Server

./build/bin/llama-server -m model-q4_k_m.gguf -c 8192 -t 4 --host 127.0.0.1 --port 8080

llama-server menyediakan API yang kompatibel dengan format OpenAI di /v1/chat/completions, jadi pustaka klien yang sudah ada bisa langsung dipakai dengan mengganti base URL. Seperti Ollama, ia tidak punya autentikasi; jaga di localhost dan bungkus dengan API Anda sendiri. Jalankan sebagai layanan systemd agar hidup setelah reboot.

Memilih Tingkat Kuantisasi dengan Uji, Bukan Perasaan

llama.cpp menyertakan llama-perplexity untuk mengukur seberapa "terkejut" model terhadap teks uji; angka yang lebih rendah lebih baik, dan selisih antar tingkat kuantisasi langsung terlihat:

./build/bin/llama-perplexity -m model-q4_k_m.gguf -f teks-uji.txt -c 2048
./build/bin/llama-perplexity -m model-q8_0.gguf  -f teks-uji.txt -c 2048

Pakai teks uji berbahasa Indonesia dari domain Anda sendiri, beberapa ratus kilobyte sudah cukup. Dalam pengalaman kami, Q4_K_M biasanya hanya sedikit di atas Q8_0, sementara Q3 dan di bawahnya mulai terasa menurun, terutama pada bahasa selain Inggris. Kalau RAM memungkinkan Q5_K_M, itu titik tengah yang nyaman. Dan ukur juga kecepatannya pada perangkat keras yang sama; kuantisasi yang lebih kecil biasanya lebih cepat karena lebih sedikit byte yang harus dibaca dari memori per token.

Satu catatan praktis: model yang dikuantisasi oleh pihak lain di Hugging Face kadang dibuat dari versi model yang berbeda atau dengan matriks kalibrasi (imatrix) yang meningkatkan kualitas pada ukuran kecil. Baca kartu modelnya, dan kalau ragu, kuantisasi sendiri dari sumber resmi seperti di atas.

"model mana untuk server ini" menjadi hitungan, bukan tebakan. Untuk pemakaian sehari-hari Ollama tetap lebih praktis, tetapi saat Anda perlu model yang tidak ada di katalognya, konteks yang tidak lazim, atau kendali penuh atas thread dan memori, llama.cpp adalah alat yang sebenarnya selama ini bekerja di belakang layar.

Terima kasih sudah bertahan sampai bagian hitung-hitungan RAM, Rekan ArtonLabs. Kalau angkanya di server Anda berbeda jauh, kabari kami; kami ingin memperbarui tabelnya.