localaiforum
Đăng nhập
Hướng dẫn › Chạy & phục vụ

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