Máy tính VRAM GPU cho LLM cục bộ

Mô hình 7B ở 4 bit cần khoảng 3,3 GiB cho trọng số, và mô hình cỡ Llama 3.1 8B thêm khoảng 1 GiB KV cache cho mỗi 8.192 token ngữ cảnh.

Chỉ là ước tính. VRAM dùng thực tế thay đổi theo framework, kernel và cài đặt cache.

Công cụ có giúp được bạn không?
Ưu tiên chúng tôi trên Google

Cách dùng

  1. Chọn một mô hình có sẵn để điền tham số, số lớp, số đầu KV và kích thước đầu, hoặc chọn Tùy chỉnh rồi nhập các giá trị trong config.json của mô hình.
  2. Đặt số bit lượng tử hóa của trọng số (4 cho Q4, 16 cho FP16) và độ chính xác của KV cache.
  3. Nhập độ dài ngữ cảnh theo token và kích thước batch, tức số chuỗi chạy cùng lúc.
  4. Xem tổng và phần chia thành trọng số, KV cache và phần dư. Bảng cho biết mô hình vừa những cỡ GPU phổ biến nào.

Cách tính

Bộ nhớ trọng số = tham số × bit ÷ 8 byte. Mô hình 7 tỷ tham số ở 4 bit chiếm 7.000.000.000 × 0,5 = 3,5 GB, tức 3,26 GiB. Ở 16 bit là 14 GB, khớp với quy tắc 2 GB cho mỗi tỷ tham số ở bfloat16 trong hướng dẫn Hugging Face "Optimizing LLMs for Speed and Memory".

KV cache = 2 × số lớp × số đầu KV × kích thước đầu × độ dài ngữ cảnh × kích thước batch × byte mỗi giá trị. Số 2 là key và value. Hugging Face đưa dạng theo từng token, 2 × 2 × số lớp × số đầu KV × kích thước đầu cho giá trị 16 bit, trong bài "Unlocking Longer Generation with Key-Value Cache Quantization".

Phần dư được nhập dưới dạng phần trăm của trọng số cộng KV cache. Nó thay cho ngữ cảnh CUDA, bộ đệm kích hoạt và phân mảnh bộ nhớ. Mặc định 10 phần trăm là giả định, không phải số đo.

Mọi kết quả tính bằng GiB (1 GiB = 1.073.741.824 byte). Nhà sản xuất GPU ghi "24 GB" cho card 24 GiB, nên bảng so tổng trực tiếp với 8, 12, 16, 24, 48 và 80. Đây là ước tính. Mức dùng thực tế khác nhau theo framework (llama.cpp, vLLM, Ollama, Transformers), kernel và cách cấp phát cache.

Cái gì chiếm VRAM

Hai thứ chiếm chủ yếu. Trọng số cố định ngay khi đã chọn mô hình và lượng tử hóa. KV cache tăng theo từng token trong ngữ cảnh và từng chuỗi trong batch, nên với ngữ cảnh dài hoặc nhiều người dùng song song, mô hình từng "vừa" bỗng nhiên không còn vừa.

Mô hình dùng grouped query attention (GQA) có ít đầu KV hơn đầu attention, giúp cache nhỏ đi nhiều lần. Vì vậy ô số đầu KV quan trọng hơn số đầu attention. Hãy xem num_key_value_heads trong config.json của mô hình.

Kích thước trọng số cho mỗi tỷ tham số

Bit mỗi trọng sốGiB cho mỗi 1 tỷ tham sốVí dụ: mô hình 8B
16 (FP16 / BF16)1,8614,90 GiB
8 (INT8 / Q8)0,937,45 GiB
6 (Q6)0,705,59 GiB
5 (Q5)0,584,66 GiB
4 (Q4)0,473,73 GiB
3 (Q3)0,352,79 GiB
2 (Q2)0,231,86 GiB

Nguồn của các mô hình có sẵn

  • config.json của từng kho: huggingface.co/Qwen/Qwen2.5-{7B,14B,32B,72B}, huggingface.co/Qwen/Qwen3-{8B,32B}, huggingface.co/mistralai/Mistral-7B-v0.3, huggingface.co/mistralai/Mistral-Nemo-Base-2407, huggingface.co/microsoft/phi-4.
  • Llama 3.1 8B và 70B: config.json của Meta trên Hugging Face cần được cấp quyền, nên giá trị lấy từ Bảng 3 trong bài báo của Meta "The Llama 3 Herd of Models" (arXiv 2407.21783). Gemma 2 9B và 27B: Bảng 1 trong báo cáo của Google "Gemma 2" (arXiv 2408.00118).
  • Số tham số là tổng safetensors mà API Hugging Face hiển thị cho từng kho. Nếu config.json không có head_dim, công cụ dùng hidden_size ÷ số đầu attention.

Câu hỏi thường gặp

Mô hình 7B ở 4 bit cần bao nhiêu VRAM?

Khoảng 3,3 GiB chỉ riêng trọng số. Với ngữ cảnh 8.192 token ở mô hình cỡ Llama 3.1 8B, KV cache thêm khoảng 1 GiB, nên hãy tính chừng 5 GiB kể cả phần dư. Card 8 GB chạy được và còn dư chỗ cho ngữ cảnh dài hơn.

Card 24 GB có chạy được mô hình 32B không?

Ở 4 bit thì được. Qwen2.5 32B có khoảng 32,76 tỷ tham số, nên trọng số chiếm khoảng 15,3 GiB. Ở ngữ cảnh 8.192 token, KV cache là 2 GiB, cộng 10 phần trăm phần dư thì tổng khoảng 19 GiB.

Vì sao mức dùng thực tế của tôi khác ước tính?

Mỗi framework có phần dư khác nhau. vLLM giữ trước phần lớn GPU cho KV cache và tạm hoãn yêu cầu khi hết chỗ, llama.cpp cấp phát cache cho toàn bộ ngữ cảnh ngay từ đầu, còn K-quant của GGUF lưu thêm giá trị scale nên số bit thực tế cao hơn số danh nghĩa. Hãy tăng bit hoặc phần dư nếu gặp lỗi hết bộ nhớ.

Có dùng được cho mô hình mixture of experts không?

Trọng số vẫn phải nằm hết trong bộ nhớ, nên hãy nhập tổng số tham số chứ không phải số tham số hoạt động. KV cache chỉ phụ thuộc các lớp attention, nên dùng số lớp và đầu KV trong config. Các mô hình có sẵn ở đây đều là mô hình dense.

Gemma 2 dùng cửa sổ trượt. Ước tính có thấp hơn không?

Gemma 2 xen kẽ các lớp cục bộ với cửa sổ 4.096 token và các lớp toàn cục. Công cụ tính đủ ngữ cảnh ở mọi lớp, nên với Gemma 2 đây là giới hạn trên khi ngữ cảnh dài hơn cửa sổ.