So sánh các engine suy luận
Engine là chương trình biến trọng số thành token: nó nạp tệp, chạy lượt forward của transformer, và thường nói HTTP ở trên. Tin tốt là gần như mọi engine chạy cùng một mô hình với tốc độ xấp xỉ nhau trên cùng phần cứng — lựa chọn engine là về quy trình làm việc, hỗ trợ định dạng và tính đồng thời, không phải tok/s thô. Tin xấu cũng vậy: đi mua benchmark giữa chúng phần lớn là công sức bỏ đi.
Sân chơi
| Engine | Nó là gì | Định dạng | Phạm vi phần cứng | Dựng để |
|---|---|---|---|---|
| llama.cpp | lõi suy luận C/C++ kèm server tích hợp | GGUF | CPU, CUDA, ROCm, Metal, Vulkan — phạm vi rộng nhất | Nền móng; chạy gần như mọi nơi |
| Ollama | llama.cpp được bọc với thư viện mô hình, CLI và REST | GGUF | llama.cpp chạy được gì thì nó chạy được đó | Dùng desktop không ma sát |
| LM Studio | GUI bóng bẩy cộng server tương thích OpenAI | GGUF (và MLX trên Mac) | GUI Windows/macOS/Linux | Người muốn nút bấm, không phải flag |
| vLLM | engine phục vụ Python: paged attention, batching liên tục | safetensors | CUDA (cộng một số hỗ trợ ROCm/TPU) | Phục vụ đồng thời cấp trung tâm dữ liệu |
| SGLang | engine phục vụ với cache tiền tố RadixAttention | safetensors | CUDA | Đầu ra có cấu trúc nhanh; agent chia sẻ tiền tố |
| exllamav2 | loader chỉ-GPU chỉnh cho tốc độ decode | EXL2, GPTQ | chỉ CUDA | tok/s một-người-dùng tối đa trên một GPU NVIDIA tiêu dùng |
| MLX | khung mảng của Apple; mlx-lm chạy mô hình trên đó |
MLX | Apple silicon | Lối thực dụng nhanh trên Mac gần đây |
| transformers (HF) | Cài đặt tham chiếu mà mọi thứ được chuyển từ đó | safetensors | CPU, CUDA | Kiểm tra tính đúng, thí nghiệm, ống nước huấn luyện |
Một ghi chú dòng dõi: Ollama và LM Studio đều chạy llama.cpp bên dưới. So chúng với llama.cpp là so cách đóng gói, không phải suy luận.
Cũng đáng biết: llama.cpp xuất xưởng nhiều hơn một server — công cụ lượng hóa và chuyển đổi, bộ khung benchmark, và binding cho chục ngôn ngữ.
Đào sâu
vLLM sinh ra từ insight paged-attention (xem đồng thời): đối xử với bộ nhớ GPU như HĐH đối xử RAM, và nhiều request hơn hẳn vừa. Nó là câu trả lời mặc định cho "tôi có server GPU và lưu lượng thật".
SGLang cache tiền tố across các request (RadixAttention): nếu 40 agent chia sẻ cùng system prompt hai trang, prompt đó được xử lý một lần, không phải 40 lần. Nó cũng nổi tiếng với decode có ràng buộc nhanh — xem đầu ra có cấu trúc.
exllamav2 là lưỡi sắc cho đúng một ngách: một người dùng trên một GPU NVIDIA muốn nhiều tok/s nhất mỗi bit lượng hóa. Câu chuyện server và độ rộng phần cứng mỏng; ngách thì thật.
MLX là khung ML của Apple, dựng cho bộ nhớ hợp nhất. Tại thời điểm viết, mlx-lm thường thắng lối Metal của llama.cpp trên mô hình lớn hơn — đủ gần để trên Mac đáng thử cả hai (thêm ở Apple silicon).
transformers là bản tham chiếu chậm mà trung thành: khi một engine lượng hóa làm gì đó lạ, chạy cùng mô hình qua nó trả lời "đây là engine hay mô hình?". Nó cũng là ống nước dưới công cụ tinh chỉnh (xem tinh chỉnh).
Chọn theo nhu cầu
| Bạn là... | Bắt đầu với |
|---|---|
| Chat tại bàn làm việc của chính bạn | Ollama hoặc LM Studio |
| Viết script từ shell (pipe, cron, công cụ nhỏ) | REST API của Ollama, hoặc llama-server |
| Xây backend ứng dụng với lưu lượng nhẹ | llama-server — một tiến trình, không vận hành |
| Phục vụ nhiều người dùng đồng thời | vLLM hoặc SGLang |
| Chạy đội agent chia sẻ system prompt dài | SGLang hoặc vLLM; xem agent |
| Cả nhà toàn Mac | Ollama/LM Studio trước; MLX nếu muốn nhanh hơn |
Hai ghi chú về bảng:
- "Bắt đầu với" không phải "an phận với" — mọi engine desktop đọc cùng GGUF, nên thử cái thứ hai tốn năm phút, không phải một cuộc di cư.
- Khi so sánh, giữ mọi thứ cố định: cùng mô hình, cùng mức lượng hóa, cùng prompt, mô hình đã ấm.
Sự chia đôi định dạng phản chiếu sự chia đôi desktop/server
GGUF versus safetensors (xem định dạng mô hình) không chỉ là khẩu vị hộp chứa — nó quyết định engine của bạn. GGUF là định dạng một-tệp, lượng-hóa-sẵn, chạy-mọi-nơi, và toàn bộ hệ sinh thái desktop (llama.cpp, Ollama, LM Studio) dựng trên nó. safetensors là định dạng tensor-theo-mảnh của hệ sinh thái Hugging Face; các engine server thông-lượng-cao (vLLM, SGLang, transformers) tiêu thụ nó, thường lượng hóa tại chỗ (biến thể AWQ/GPTQ) thay vì đóng gói sẵn.
Nên cây quyết định thật rất ngắn: desktop và một-người-dùng → engine GGUF; server và đồng thời → engine safetensors. Mọi thứ khác là chi tiết.
Khi thứ gì đó "không chạy được", kiểm tra định dạng trước — một nửa "engine X không chạy được mô hình Y" là lệch GGUF/safetensors, không phải khoảng trống năng lực.
Phụ phí không phải câu chuyện
Trên phần cứng y hệt với mức lượng hóa y hệt, các engine đáp trong khoảng chừng 10–20% của nhau cho decode một-luồng — thường vì chúng dùng chung backend. Thứ thực sự di chuyển tốc độ trải nghiệm của bạn theo bội số, không phải phần trăm:
- Mô hình đã nạp hay chưa — một lần nạp nguội tốn vài giây đến một phút.
- Cả cuộc hội thoại có được gửi lại mỗi lượt hay không — chi phí ngữ cảnh, xem token.
- Các request có xếp hàng sau nhau hay không — xem đồng thời.
- Các tầng có ngồi trên GPU hay không — xem núm chỉnh engine.
Cùng GPU, cùng 8B Q4_K_M, một luồng (minh họa, không phải thông số):
llama.cpp / Ollama / LM Studio ~130–145 tok/s (cùng engine bên dưới)
exllamav2 EXL2 ~4bpw ~160–180 tok/s (loader chỉnh cho decode)
Cùng GPU, 8 luồng chat đồng thời:
llama-server hàng đợi tuần tự mỗi luồng chờ; tổng thông lượng phẳng
vLLM mọi luồng gần tốc độ một-luồng
Chọn engine khớp quy trình làm việc của bạn, rồi tiêu năng lượng vào khuôn mẫu I/O thay vì benchmark engine.
Một tệp, nhiều engine
Một GGUF bạn tải cho Ollama cũng chạy trực tiếp trong llama.cpp và trong LM Studio — các engine không chuyển đổi hay tải lại; bạn trỏ chúng vào cùng tệp (Ollama có thể nhập đường dẫn cục bộ bằng một dòng Modelfile). Điều tương tự phía server cho safetensors giữa vLLM và SGLang. Hệ quả thực tế: không khóa nhà cung cấp ở mức tệp, và sai về một engine chỉ tốn vài phút.
Đó là lý do trang này cứ đẩy quy trình làm việc lên trên benchmark: khi nhu cầu đổi, những mô hình bạn đã tải di chuyển cùng bạn.
Khi nào nên tốt nghiệp khỏi Ollama
Mặc định của Ollama tuyệt vời cho đến khi không còn. Chuyển sang engine phục vụ khi:
- Bạn cần tính đồng thời duy trì vượt quá một số ít luồng (xem đồng thời).
- Bạn muốn cache tiền tố across nhiều agent chia sẻ system prompt (SGLang).
- Bạn phải phục vụ trực tiếp mức lượng hóa safetensors AWQ/GPTQ từ hệ sinh thái HF.
- Bạn đang thử tải một tính năng sản phẩm trước khi phát hành.
- Bạn cần song song tensor đa-GPU để trải một mô hình lớn across các card.
Cho đến khi một điều trong số đó đúng, sự tiện nghi đáng giá hơn thông lượng.
Liên quan: Định dạng mô hình · Núm chỉnh engine · Phục vụ endpoint · Chọn mô hình