Sebelum mengunduh model untuk dijalankan secara lokal, pertanyaannya adalah apakah model itu muat di memori. Perkiraannya adalah penjumlahan tiga suku, lalu dibandingkan dengan memori yang benar-benar bisa diberikan mesin kepada model:

need = weights + KV cache + overhead fits if need <= 0.8 × usable memory 

Angka-angka di bawah mengikuti perkiraan yang dipakai peramban model lokal di aplikasi desktop osFoundry, dan dicocokkan dengan yang ditampilkan aplikasi itu untuk MacBook M3 16GB.

Perkiraan per kuantisasi untuk Qwen2.5 14B di Mac 16GB

Weights

Ukuran weights adalah jumlah parameter dikali byte per weight, dan byte per weight itu bergantung pada kuantisasi:

Kuantisasi Byte per weight
FP16 / BF16 2.0
Q8_0 1.0
Q6_K 0.82
Q5_K_M 0.69
Q4_K_M 0.56
Q3_K_M 0.44
Q2_K 0.31

Q4_K_M bernilai 0.56, bukan 0.5, karena K-quant menyimpan satu skala untuk setiap blok kecil weights, sehingga hasilnya sekitar 4.5 bit per weight.

Untuk model 14B di Q4_K_M: 14 × 10⁹ × 0.56 = 7.84 × 10⁹ byte, atau sekitar 7.3 GiB.

Kalau tidak mengenali nama kuantisasinya, anggap saja FP16. Itu pilihan paling pesimistis, jadi Anda tidak akan menyimpulkan sesuatu muat padahal tidak.

KV cache

Saat generasi, model menyimpan key dan value untuk setiap token di konteks. Ukurannya:

2 × layers × kv_heads × head_dim × context_tokens × bytes_per_element 

Qwen2.5 14B punya 48 layer, 8 KV head (memakai grouped-query attention), dan dimensi head 128. Dengan cache FP16:

  • Konteks 4K: 2 × 48 × 8 × 128 × 4096 × 2 byte = 768 MiB
  • Konteks 32K: 6 GiB

Cache tumbuh linear terhadap panjang konteks, jadi model yang muat dengan lega di 4K bisa berhenti muat di 32K. Perkiraan yang tidak menyebut panjang konteks tidak banyak berguna; yang ada di tangkapan layar mengasumsikan 4K.

Overhead

llama.cpp juga membutuhkan buffer komputasi dan ruang kerja sementara. Kasarnya, sisihkan 10% dari weights ditambah sekitar 200 MB. Untuk model 14B, itu sekitar 0.9 GB.

Kalau weights, cache, dan overhead dijumlahkan, model 14B di Q4_K_M ada di kisaran 8 sampai 9 GB. Aplikasi menampilkan 8.4 GB.

Memori yang bisa dipakai

Bagian inilah yang paling sering keliru.

  • GPU diskret: VRAM kartu adalah batas atasnya. Kartu 12 GB berarti 12 GB, berapa pun RAM sistemnya.
  • Apple Silicon: memorinya unified, tetapi GPU tidak bisa memakai semuanya dan OS juga butuh bagiannya. Menghitung 75% dari total RAM adalah angka kerja yang masuk akal, jadi 16 GB kira-kira jadi 12 GB.

Lalu bandingkan:

  • need ≤ 80% memori yang bisa dipakai: muat, dengan sisa untuk OS dan aplikasi lain
  • 80% sampai 100%: mepet; model termuat, tetapi tutup aplikasi lain dulu
  • di atas 100%: memori dipindah ke disk dan jadi lambat sampai tidak bisa dipakai

Di Mac 16GB, hasilnya: Q4_K_M 8.4 GB (70%, muat), Q5_K_M 10.4 GB (87%, mepet), Q6_K 12.3 GB dan Q8_0 14.9 GB (melebihi).

Perkiraan yang sama diterapkan pada daftar model

Diterapkan ke beberapa model di Q4_K_M, batasnya di mesin ini jatuh antara 20B (11.9 GB, mepet) dan 27B (15.9 GB, terlalu besar).

Kecepatan mengikuti angka yang sama

Untuk menghasilkan setiap token, semua weights harus dibaca dari memori satu kali, jadi batas atas kecepatan generasi adalah bandwidth memori dibagi ukuran model. M3 dasar punya sekitar 100 GB/s, sehingga model 8.4 GB mentok di sekitar 12 token per detik, dan model 8B 4.9 GB di sekitar 20. Angka nyatanya lebih rendah, tetapi perbandingan antarmodel cukup akurat.

14B dan 8B pada prompt yang sama

Jadi perkiraan ukuran ini menjawab dua pertanyaan sekaligus: apakah modelnya bisa dimuat, dan kira-kira seberapa cepat ia menulis setelah termuat.