Local large language models terasa sangat cepat pada awalnya. Anda memuat model dengan 7B atau 13B parameter, mengirimkan prompt pendek, dan token mengalir di layar dengan kecepatan yang nyaman. Kemudian Anda menempelkan blok kode yang panjang, atau riwayat obrolan Anda membengkak hingga belasan putaran, dan model mulai melambat. Perlambatan ini jarang terjadi secara bertahap. Ini adalah sebuah jurang. Sesaat GPU sedang memproduksi token; saat berikutnya, monitor sistem Anda menunjukkan tekanan memori yang meningkat dan generasi melambat hingga tersendat-sendat. Anda tidak dapat memprediksi secara tepat kapan hal ini akan terjadi dengan rumus yang rapi. Satu-satunya panduan andal Anda adalah perangkat keras itu sendiri.
Biaya Tersembunyi dari Konteks
Setiap token yang Anda hasilkan menambah status ke dalam KV cache. Cache ini menyimpan kunci (keys) dan nilai (values) yang dihitung selama fase prefill dan generasi, dan ia berada di dalam memori bersama dengan bobot model, buffer atensi, dan overhead runtime Anda. Pada GPU konsumen tipikal dengan VRAM 12 GB atau 16 GB, KV cache pada akhirnya akan berebut ruang dengan hal lainnya. Ketika memori video khusus penuh, sistem operasi tidak akan memunculkan kesalahan dan berhenti. Ia secara diam-diam menumpahkan kelebihannya ke dalam shared memory, memindahkan data antara GPU dan RAM sistem melalui bus PCIe. Bus tersebut memang cepat untuk transfer file, tetapi sangat lambat dibandingkan dengan bandwidth memori di dalam kartu grafis. Hasilnya bukan sekadar penurunan performa kecil. Ini adalah sebuah keruntuhan.
Tiga Sinyal Bahwa "Jurang" Telah Tiba
Pantau monitor perangkat keras Anda saat model berjalan. Anda akan melihat tiga sinyal jelas setelah performa mencapai titik kritis.
- Shared VRAM meningkat. Ini adalah memori yang telah didorong oleh driver GPU keluar dari VRAM khusus ke dalam kumpulan (pool) yang dikelola oleh sistem operasi host. Saat metrik ini naik di atas nol, Anda telah melewati batas.
- Penggunaan RAM sistem membengkak. Kelebihan data harus mendarat di suatu tempat, dan tujuannya adalah memori utama Anda. Jika penggunaan RAM Anda tumbuh saat model menghasilkan token, berarti data sedang dipindahkan dari GPU.
- Kecepatan eval turun setengah kali lipat atau lebih. Penurunan 10% mungkin berarti thermal throttling atau proses latar belakang. Penurunan 50%, atau lebih buruk, berarti hambatan (bottleneck) telah berpindah dari tensor cores ke bandwidth memori dan latensi PCIe. Saat Anda melihat generasi turun dari angka dua digit ke angka satu digit, Anda sudah jatuh ke dalam jurang.
Mengapa Benchmark Cepat Anda Mungkin Berbohong
Uji coba singkat (smoke test) akan memberi Anda kepercayaan diri yang palsu. Jika Anda melakukan benchmark model dengan prompt seratus token, melihat throughput yang sehat, dan menganggap tugas selesai, Anda hanya mengukur fase bulan madu. KV cache hampir kosong. Lapisan-lapisan model belum terbebani oleh prefill yang panjang. Jejak (footprint) yang sebenarnya baru akan terlihat setelah model memproses prompt yang substansial dan cache telah terisi ke ukuran kerja yang sebenarnya. Anda harus menguji dengan prefill yang dalam dan sesi generasi yang panjang. Biarkan konteks benar-benar terakumulasi. Hanya dengan begitu tekanan memori akan stabil dan menunjukkan batas yang sebenarnya kepada Anda.
Menemukan Batas Anda dengan llama.cpp
Jika Anda menjalankan model melalui llama.cpp, Anda dapat mengukur batas Anda dengan aritmatika sederhana dan uji coba yang sabar.
1. Ukur penggunaan shared memory.
Catat baseline VRAM khusus Anda dengan prompt minimal, lalu jalankan tugas konteks panjang dan catat puncaknya. Kurangi baseline dari puncak. Selisihnya adalah apa yang telah tumpah dari GPU Anda ke shared system memory.
2. Hitung delta RAM Anda.
Lakukan pengurangan yang sama untuk RAM sistem. Kurangi RAM baseline Anda dari RAM puncak selama sesi panjang. Angka ini memberi tahu Anda secara tepat seberapa banyak data yang telah didorong dari kartu video ke memori utama Anda. Ini mengukur kebocoran di sepanjang bus.
3. Waktu keruntuhan kecepatan eval.
Bandingkan tingkat token-per-detik baseline Anda dengan tingkat setelah model memproses dokumen panjang. Anda mungkin melihat model melaju pada tujuh belas token per detik saat konteks masih segar, lalu hanya memberikan dua token per detik setelah cache membengkak. Penurunan lima belas token tersebut adalah peringatan dini Anda.
Menentukan Titik Henti
Untuk memetakan kurva secara akurat, jangan hanya mengandalkan satu titik data saja. Jalankan tiga uji coba berbeda pada 16.000 token, 32.000 token, dan 65.000 token. Dua titik mungkin menunjukkan sebuah garis, tetapi dua titik hanyalah sebuah tebakan. Titik ketiga membuktikan apakah Anda sedang melihat noise pengukuran atau dinding memori (memory wall) yang nyata. Kurangi hasil antar sesi untuk menghitung berapa banyak memori tambahan yang dikonsumsi oleh setiap tambahan seribu token pada kombinasi model, lapisan kuantisasi, dan GPU spesifik Anda.
Setelah Anda mendapatkan kemiringan (slope) tersebut, Anda dapat melakukan proyeksi ke depan. Ambil biaya per token Anda, kalikan dengan panjang konteks target, bagi dengan 1024 untuk berpindah antar unit, dan tambahkan hasilnya ke beban VRAM model dasar Anda. Persamaannya terlihat seperti ini:
Beban VRAM model + (token × memori per token ÷ 1024) = Penggunaan VRAM teoretis
Proyeksi ini bukanlah ramalan. Ini adalah panduan yang berasal dari perilaku aktual. Gunakan ini untuk memperkirakan batas atas (ceiling) Anda sebelum Anda berkomitmen pada sesi produksi penuh.
Mengapa Formula di Atas Kertas Gagal, dan Apa yang Bisa Diperbaiki oleh Kuantisasi
Formula buku teks mengabaikan realitas inferensi lokal yang berantakan. Arsitektur yang berbeda mengalokasikan buffer atensi secara berbeda. Sistem operasi Anda mencadangkan VRAM untuk driver tampilan, kompositur, dan konteks CUDA. Versi driver mengubah seberapa agresif mereka menggunakan memori bersama (shared memory). Persamaan teoretis tidak dapat mengetahui berapa banyak VRAM yang sebenarnya tersedia di mesin Anda pada jam 2 siang dengan browser yang penuh dengan tab terbuka. Anda harus menjalankan model pada perangkat keras spesifik Anda dan memantau indikatornya.
Kuantisasi menawarkan sedikit keringanan. Memindahkan KV cache dari f16 ke q8_0 memangkas jejak memorinya menjadi setengahnya sambil tetap menjaga presisi yang cukup tinggi untuk hampir semua tugas praktis. Perubahan tersebut memberi Anda ruang tambahan (headroom). Itu tidak memberikan kekebalan. Cache tetap tumbuh secara linier dengan setiap token yang Anda masukkan. Pada akhirnya, ukuran yang sudah dikurangi pun akan melampaui memori khusus yang tersedia dan limpahan (spillover) ke RAM sistem akan dimulai. Tekanan hanya akan berhenti ketika jendela konteks dibatasi atau data berhenti bergerak.
Kesimpulan Utama
Jangan percaya slide pemasaran, jumlah parameter, atau perhitungan kasar. Muat modelnya. Buka monitor sistem Anda. Jalankan thread 65.000 token, perhatikan kenaikan RAM, dan hitung token per detiknya. Angka-angka yang muncul di layar spesifik Anda, pada GPU spesifik Anda, adalah satu-satunya angka yang penting. Konteks selalu menang. Tugas Anda adalah mengetahui dengan tepat kapan ia menang di mesin Anda.
