LLM GPU Calculator ← Về công cụ tính

Công thức tính VRAM

Mọi bài toán định cỡ GPU đều quy về một phương trình:

Total VRAM = Model Weights + KV Cache + Runtime Overhead

Trong đó chỉ có hai công thức thật, còn overhead là ước lượng.

1. Model Weights

Weights (GB) = Parameters (tỷ) × Bytes per Parameter
PrecisionBytes/tham sốModel 7B70B
FP324,028 GB280 GB
FP16 / BF162,014 GB140 GB
FP8 / INT81,07 GB70 GB
Q8_0~1,068,5 GB~75 GB
Q6_K~0,816,3 GB~57 GB
Q5_K_M~0,695,5 GB~48 GB
Q4_K_M ★~0,554,7 GB~38,5 GB
Q3_K_M~0,433,9 GB~30 GB
Q2_K~0,313,0 GB~22 GB

Q4_K_M là điểm ngọt: giữ khoảng 95% chất lượng, giảm gần 4 lần bộ nhớ.

MoE — điểm dễ hiểu nhầm nhất

Với model MoE phải phân biệt hai con số:

Ý nghĩaDùng để tính
Total paramsToàn bộ trọng sốVRAM — mọi expert phải nằm trong VRAM
Active paramsSố tham số dùng cho 1 tokenTốc độ — chi phí tính toán

Ví dụ Qwen3.5-35B-A3B: sinh token nhanh như model 3B, nhưng vẫn phải nạp đủ 35B vào VRAM.

2. KV Cache

KV (GB) = 2 × Layers × KV_Heads × Head_Dim × Seq × Batch × Precision / 10⁹

Để sinh token thứ 100, model phải "nhìn" cả 99 token trước. Không cache thì mỗi bước phải tính lại Key/Value cho toàn bộ lịch sử — O(n²). Cache biến nó thành O(n).

Thừa sốNghĩaGhi chú
2Key + Valueluôn là 2
LayersSố layer transformermỗi layer giữ KV riêng
KV HeadsSố head sau GQA/MQAKHÔNG phải query head
Head DimChiều mỗi head128 không còn là chuẩn — xem Cạm bẫy kiến trúc
SeqĐộ dài contexttuyến tính
BatchSố request đồng thờituyến tính

Ví dụ — Llama 3.1 8B

layers=32, kvHeads=8, headDim=128, FP16

Byte mỗi token = 2 × 32 × 8 × 128 × 2 = 131.072 byte = 128 KB/token
ContextKV Cache% của tổng (weights Q4 = 4,7 GB)
4K0,54 GB~10%
8K1,07 GB~18%
32K4,29 GB~46%
128K17,18 GB~77%

Ở 128K, KV cache lớn hơn cả trọng số model. Đây là lý do model chạy tốt ở 8K lại OOM ở 128K.

GQA tiết kiệm bao nhiêu?

Llama 3.1 8B có 32 query head nhưng chỉ 8 KV head → KV giảm 4 lần so với MHA. Công thức tự tính đúng nếu dùng đúng số KV head.

3. Runtime Overhead

Thành phầnDung lượng
CUDA context~300–500 MB
Activation memory~200–500 MB
Framework buffers~200 MB (llama.cpp) → ~1 GB (vLLM batch lớn)

Quy tắc: giữ 5–10% VRAM làm headroom. Công cụ này dùng max(1,2 GB; weights × 7%) để không quá thấp với model lớn.

4. Tốc độ sinh token

Decode là memory-bandwidth-bound: mỗi token phải đọc trọn bộ trọng số active từ VRAM. Nên công thức gốc là:

tok/s ≈ Băng_thông VRAM ÷ Số_byte_phải_đọc_mỗi_token × hệ số hiệu chỉnh

Số byte mỗi token gồm trọng số active cộng KV cache đọc lại mỗi bước — nên tốc độ giảm khi tăng context. Công cụ tính áp dụng công thức này với hệ số hiệu chỉnh rút từ số đo thật.

Kiểm chứng nhanh: RTX 4090 có băng thông 1.008 GB/s. Model dense 32B ở Q4 nặng ~17,6 GB → trần lý thuyết là 1008 ÷ 17,6 ≈ 57 token/giây cho một luồng. Không phần mềm nào vượt được con số này.