Tuần trước một độc giả hỏi vì sao file GGUF của anh thất bại trong vLLM trên máy không GPU, trong khi cùng file đó chạy ngon lành trong Ollama. Câu trả lời ngắn, trước tất cả: có, vLLM chạy được GGUF — qua một plugin chính thức, chỉ trên GPU. Plugin tên là vllm-gguf-plugin, cú pháp là repo:quant_type; bạn thử trên CPU là đã ra khỏi bảng phần cứng được hỗ trợ. Mọi thứ dưới đây lấy từ tài liệu vLLM và lịch sử repo vllm-project/vllm (hơn 92.000 sao từ tháng 2/2023) — từ tài liệu, không phải từ rig test của tôi.
Serve mô hình GGUF với vLLM bằng cách nào?
Hai bước: cài plugin, rồi trỏ vLLM vào mô hình. Hỗ trợ GGUF không còn sống trong lõi vLLM — tài liệu ghi rõ nó «đã chuyển sang vllm-gguf-plugin», nên chỉ pip install vllm là chưa đủ:
uv pip install vllm-gguf-plugin
# Trực tiếp từ Hugging Face, theo định dạng repo_id:quant_type:
vllm serve unsloth/Qwen3-0.6B-GGUF:Q4_K_M
--tokenizer Qwen/Qwen3-0.6B
# Hoặc file local đã tải sẵn:
vllm serve ./Qwen3-0.6B-Q4_K_M.gguf
--tokenizer Qwen/Qwen3-0.6B Cờ --tokenizer không phải trang trí. Tài liệu chính thức khuyên dùng tokenizer của mô hình gốc, vì việc chuyển đổi tokenizer từ GGUF «tốn thời gian và bất ổn, đặc biệt với mô hình có vốn từ vựng lớn». Bỏ qua nó là đổi một cờ một dòng lấy một khởi động dài và khó chiều.
Hai GPU, một mô hình: thêm --tensor-parallel-size 2 để chia cùng một GGUF sang cả hai card — tensor parallelism hoạt động với GGUF như với mọi định dạng khác.
Vì sao vLLM từ chối GGUF trên CPU?
Đây là phần gây bất ngờ. Tiếng tăm của GGUF là CPU trước tiên — đúng định dạng mà llama.cpp xây tên tuổi trên laptop và Raspberry Pi. Nhưng trong vLLM, vị thế đảo ngược. Bảng tương thích phần cứng chính thức đánh GGUF như sau:
| Phần cứng | GGUF trong vLLM |
|---|---|
| NVIDIA Volta / Turing / Ampere / Ada / Hopper | hỗ trợ |
| GPU AMD | hỗ trợ |
| GPU Intel | không hỗ trợ |
| CPU x86 | không hỗ trợ |
| CPU Arm | không hỗ trợ |
Nguồn: tài liệu lượng tử hóa vLLM. Lý do nằm ở kiến trúc: đường GGUF của vLLM dequantize các khối vào kernel GPU được thiết kế cho serving theo lô. Phía sau không có kernel CPU nào — vì vLLM là engine phục vụ mô hình, không phải đồ chơi laptop. Máy không có GPU thì cờ nào cũng vô dụng — dùng llama.cpp.
Cái gì gãy: danh sách giới hạn nói thẳng
Cùng trang tài liệu đó mang một cảnh báo đáng trích nguyên văn: «hỗ trợ GGUF trong vLLM còn rất thử nghiệm và chưa được tối ưu». Cụ thể:
- Độ phủ lượng tử hóa hẹp hơn llama.cpp. Các K-quant ai cũng tải (Q4_K_M và phe) thì chạy; mấy scheme xa lạ thì chưa chắc. Implementation tham chiếu của định dạng vẫn là llama.cpp.
- Hỗ trợ kiến trúc đi sau. Họ mô hình mới hạ cánh xuống llama.cpp trước; plugin theo sau.
- Không có lazy loading kiểu mmap. llama.cpp map file vào bộ nhớ; vLLM load như mọi checkpoint khác.
- Bản chất là tính năng tiết kiệm bộ nhớ. Tài liệu đặt GGUF như cách hạ mức dùng VRAM, không phải canh bạc throughput.
Không điều gì trong số này bị giấu. Tất cả nằm ngay đoạn đầu của trang GGUF chính thức — thẳng thắn hơn phần lớn tính năng thử nghiệm.
GGUF với vLLM hay llama.cpp: ai thắng?
Hai công cụ khác nhau đọc cùng một file:
| vLLM + GGUF | llama.cpp | |
|---|---|---|
| Suy luận trên CPU | không | có, hạng nhất |
| Người dùng đồng thời | continuous batching, sinh ra để làm việc đó | hạn chế |
| Độ phủ quant | tập con, thử nghiệm | chuẩn tham chiếu |
| Cài đặt | vLLM + plugin | một binary |
| Hợp nhất với | một GPU, nhiều người dùng | một người dùng, phần cứng nào cũng được |
Nếu bạn phục vụ mô hình cho cả team từ một GPU duy nhất, vLLM + GGUF cho phép tái dùng đúng những file Q4_K_M mà cả thế giới local-LLM đang chia sẻ — thêm lựa chọn trong guide lượng tử hóa GGUF của chúng tôi. So sánh trọn vẹn hai engine xem llama.cpp vs Ollama và cách chạy mô hình GGUF tại chỗ.
Quy tắc một dòng: cùng một file, bản năng trái ngược — llama.cpp coi GGUF là định dạng gốc, vLLM coi nó là một lựa chọn.
FAQ
vLLM có chạy được mô hình GGUF không?
Có. Cài vllm-gguf-plugin rồi serve bằng cú pháp repo:quant_type — nhưng chỉ trên GPU. Đường CPU của vLLM không phủ GGUF.
vLLM có chạy GGUF trên CPU không?
Không. Bảng tương thích phần cứng chính thức đánh GGUF không hỗ trợ trên CPU x86 và Arm — con đường CPU vẫn thuộc về llama.cpp hoặc Ollama.
Nên serve GGUF bằng vLLM hay llama.cpp?
vLLM khi một GPU phải phục vụ nhiều người dùng đồng thời; llama.cpp khi máy không có GPU hoặc bạn muốn độ phủ lượng tử hóa rộng nhất.
— mrsaynothing
— mrsaynothing
Ghi chú thực địa về AI, Linux và self-hosting.
Nhận how-to tiếp theo qua email
Một email mỗi bài viết. Sửa xong rồi đi tiếp.
cái này là gì?128k ngữ cảnh trên desktop là dối lòng. KV cache nuốt hết rồi.
Thích kiểu viết này? Tôi build như vậy để kiếm sống. thuê tôi