Tools

vLLM và PagedAttention: phục vụ LLM cho nhiều người dùng hiệu quả

Tóm tắt

vLLM phục vụ LLM hiệu quả nhờ PagedAttention (chia KV cache thành block như trang bộ nhớ) và continuous batching, thông lượng cao hơn 2–4 lần theo bài báo gốc. Là lựa chọn mặc định khi tự host cho nhiều người dùng, nhưng cần tính đủ chi phí vận hành.

Chạy một model mở cho một người dùng thì dễ. Phục vụ hàng trăm người dùng đồng thời trên vài GPU đắt tiền mới là bài toán thật: GPU nhanh nhưng thường bị "nghẹt" ở bộ nhớ, không phải ở tính toán. vLLM, ra đời từ UC Berkeley, là engine phục vụ LLM phổ biến nhất hiện nay nhờ một ý tưởng mượn từ hệ điều hành: PagedAttention.

Vấn đề: KV cache lãng phí bộ nhớ

Khi sinh văn bản, model lưu Key/Value của mọi token trước đó (KV cache) để không phải tính lại. Cache này lớn và độ dài thay đổi theo từng request. Các hệ thống trước vLLM cấp phát một khối bộ nhớ liền mạch cho độ dài tối đa có thể, dẫn tới phân mảnh và lãng phí, nên mỗi GPU phục vụ được ít request đồng thời.

PagedAttention: phân trang như bộ nhớ ảo

  • KV cache được chia thành các block kích thước cố định, không cần nằm liền nhau, giống trang bộ nhớ trong hệ điều hành.
  • Block được cấp dần khi sinh thêm token, nên lãng phí gần như chỉ còn ở block cuối.
  • Các request có chung phần đầu prompt (cùng system prompt) có thể chia sẻ block.

Bài báo PagedAttention (Kwon và cộng sự, SOSP 2023) báo cáo thông lượng cao hơn 2–4 lần so với các hệ thống hàng đầu khi đó ở cùng mức độ trễ.

Tính năng chính

Tính năngLợi ích
Continuous batchingGhép request mới vào batch ngay khi có chỗ, không đợi cả batch xong
Prefix cachingTái sử dụng KV cache của phần prompt chung
Lượng tử hoá (FP8, INT8, INT4, GPTQ, AWQ…)Chạy model lớn hơn trên ít GPU hơn
Speculative decodingGiảm độ trễ sinh token
Song song tensor, pipeline, expertChia model lớn ra nhiều GPU, hỗ trợ MoE
API tương thích OpenAI (và Anthropic Messages)Ứng dụng có sẵn chỉ cần đổi base URL

Khởi chạy server

uv pip install vllm
vllm serve <model-trên-hugging-face>

curl http://localhost:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{"model": "<model>", "messages": [{"role":"user","content":"Xin chào"}]}'

vLLM hay Ollama?

OllamavLLM
Mục tiêuMột người dùng, laptopNhiều người dùng, server GPU
Ưu tiênDễ cài, dễ dùngThông lượng, hiệu quả GPU
Vận hànhGần như không cầnCần hiểu GPU, bộ nhớ, tham số tinh chỉnh

Rủi ro và lưu ý

  • Tự host không miễn phí: GPU, vận hành, giám sát, cập nhật bảo mật. So sánh tổng chi phí với API trước khi quyết định.
  • Tinh chỉnh bộ nhớ: độ dài context tối đa và tỷ lệ bộ nhớ GPU dành cho cache ảnh hưởng trực tiếp tới số request đồng thời; đo bằng tải thật.
  • Bảo mật endpoint: server mặc định không có xác thực mạnh; đặt sau gateway có auth.
  • Dự án thay đổi nhanh: cờ và cấu hình đổi giữa các phiên bản; ghim phiên bản trong production.

Áp dụng thế nào?

  • Dev: Dùng API tương thích OpenAI để code không phụ thuộc engine; benchmark bằng công cụ đo tải với prompt thật.
  • Tech Lead: Bật prefix caching khi nhiều request chung system prompt dài; theo dõi độ trễ p95 và thông lượng.
  • PM: Chỉ cân nhắc tự host khi có yêu cầu dữ liệu, lưu lượng lớn ổn định, hoặc model mở đã đủ chất lượng cho tác vụ.

Nguồn & tham khảo

  1. vllm — vLLM project (GitHub)
  2. Efficient Memory Management for Large Language Model Serving with PagedAttention — Kwon et al. (arXiv)