So sánh vLLM, TGI, Ollama và llama.cpp khi đưa model open-weight lên production
Team mình vừa chuyển một phần tải từ API thương mại sang tự host model open-weight (vì yêu cầu dữ liệu không ra ngoài). Mình đã thử 4 công cụ phục vụ model phổ biến, chia sẻ để ai đang chọn đỡ mất thời gian. BỐI CẢNH THỬ NGHIỆM - Model khoảng 8B tham số, bản gốc và bản lượng tử hoá 4-bit. - 1 máy chủ có 1 GPU 24GB và 1 máy chủ có 2 GPU 80GB. - Tải giả lập: 50 người dùng đồng thời, câu hỏi dài trung bình 800 token, trả lời khoảng 300 token. 1. vLLM Ưu điểm: - Thông lượng cao nhất trong 4 công cụ khi có nhiều người dùng đồng thời, nhờ cơ chế quản lý bộ nhớ KV cache và gộp request liên tục. - API tương thích chuẩn OpenAI, ứng dụng cũ gần như không phải sửa. - Hỗ trợ chia model trên nhiều GPU tốt. Nhược điểm: - Chiếm gần hết bộ nhớ GPU ngay khi khởi động (có thể chỉnh), khó chạy chung với dịch vụ khác. - Cấu hình nhiều tham số, cần thời gian tinh chỉnh. Phù hợp: production có nhiều người dùng, có GPU riêng. 2. TGI (Text Generation Inference) Ưu điểm: - Ổn định, có sẵn số liệu giám sát, triển khai bằng Docker rất gọn. - Hiệu năng gần với vLLM ở mức tải vừa. Nhược điểm: - Hỗ trợ model mới đôi khi chậm hơn. Phù hợp: team đã quen hệ sinh thái Hugging Face. 3. Ollama Ưu điểm: - Cài đặt và tải model chỉ bằng 1 lệnh, tuyệt vời cho máy dev và demo. - Tự quản lý việc nạp, giải phóng model. Nhược điểm: - Khi tải đồng thời cao, độ trễ tăng nhanh hơn hẳn vLLM. Trong thử nghiệm của mình, ở 50 người dùng đồng thời, thời gian chờ token đầu tiên cao gấp khoảng 4 lần. Phù hợp: môi trường dev, nội bộ ít người dùng. 4. llama.cpp (server) Ưu điểm: - Chạy được trên CPU và máy cấu hình thấp, hỗ trợ nhiều mức lượng tử hoá. - Nhẹ, ít phụ thuộc. Nhược điểm: - Thông lượng với nhiều người dùng không bằng vLLM trên GPU. Phù hợp: thiết bị biên, máy không có GPU mạnh. KẾT LUẬN CỦA TEAM MÌNH - Production: vLLM trên máy 2 GPU, đặt sau một lớp gateway để giới hạn tốc độ và ghi log. - Dev: Ollama trên máy cá nhân, cùng API chuẩn OpenAI nên đổi qua lại dễ dàng. NHỮNG ĐIỀU NÊN ĐO TRƯỚC KHI CHỌN - Thời gian ra token đầu tiên (người dùng cảm nhận rõ nhất). - Số token/giây ở mức tải thật, không phải khi chỉ có 1 người dùng. - Bộ nhớ GPU còn trống với độ dài ngữ cảnh bạn thật sự cần. - Chi phí GPU mỗi tháng so với hoá đơn API hiện tại. Với tải thấp, API thương mại thường vẫn rẻ hơn. Mọi người đang dùng gì để phục vụ model nội bộ? Có ai thử thêm SGLang chưa?