LLM Inference Optimization: vLLM, TGI, llama.cpp, TensorRT-LLM so sánh chi tiết

LLM Inference Optimization: vLLM, TGI, llama.cpp, TensorRT-LLM so sánh chi tiết

Sau khi huấn luyện xong LLM, phần tốn kém nhất là inference — chạy mô hình để sinh văn bản. Với các mô hình cỡ 7B-70B, inference trên 1-8 GPU đòi hỏi tối ưu từ kernel scheduling, quantization, đến batching. Bộ công cụ phổ biến hiện nay: vLLM, Hugging Face TGI, llama.cpp, TensorRT-LLM. Mỗi cái có trade-off riêng về latency, throughput, hỗ trợ hardware, và đáp ứng thời gian thực.

Tổng quan 4 công cụ inference

  • vLLM: PagedAttention kernel cho GPU, throughput cao, Python-first, phù hợp serving API.
  • TGI (Text Generation Inference): Hugging Face, đa nền tảng (GPU/CPU), tích hợp sẵn quantization + speculative decoding.
  • llama.cpp: C++ portable, CPU/GPU unified, GGUF format, inference CLI/API nhẹ, phổ biến cho edge.
  • TensorRT-LLM: NVIDIA official, kernel tự động tune cho Hopper/Ada/Ampere, FP8/INT4/INT8, phục vụ production latency-critical.

Phương pháp Quantization so sánh: GPTQ, AWQ, GGUF, FP8

Quantization là kỹ thuật giảm độ chính xác trọng số từ FP16/BF16 xuống INT8/INT4 để giảm memory bandwidth và tăng throughput. Mỗi công cụ có cách tiếp cận riêng:

  • GPTQ (vLLM, TGI): Post-training quantization, calibrate trên dataset nhỏ, bảo toàn accuracy tốt cho 4-bit. Yêu cầu GPU để calibrate.
  • AWQ (vLLM, TGI, TensorRT-LLM): Activation-aware weight quantization, không cần calibration data, nhanh hơn GPTQ, accuracy tương đương.
  • GGUF (llama.cpp): Format file gọn, hỗ trợ nhiều scheme (Q2_K, Q3_K_M, Q4_K_M, Q5_K_M, Q6_K, Q8_0), quantize trên CPU, portable mọi nền tảng.
  • FP8 (TensorRT-LLM, vLLM 0.6+): Native trên Hopper H100, 2x memory reduction vs FP16, accuracy gần như lossless, throughput tăng 1.5-2x.

Kết quả thực tế trên LLaMA 2 7B: FP8 (TensorRT-LLM) đạt throughput cao nhất, GGUF Q4_K_M (llama.cpp) cân bằng tốt accuracy/size cho edge, AWQ 4-bit (vLLM) dễ deploy nhất cho API serving.

Sơ đồ kiến trúc so sánh vLLM PagedAttention, TGI block manager, llama.cpp GGUF, TensorRT-LLM kernel graph

So sánh hiệu năng: throughput và latency

Tiêu chí vLLM TGI llama.cpp TensorRT-LLM
Ngôn ngữ chính Python (CUDA) Python + Rust C++/C (portable) C++/Python (CUDA)
Hardware tối ưu NVIDIA GPU (H100/A100/L40) NVIDIA + AMD ROCm + CPU CPU + NVIDIA + AMD + Apple Silicon NVIDIA GPU (Hopper/Ada/Ampere)
Memory management PagedAttention (page-level swap GPU→CPU) Continuous batching + Prefix caching Graph + prompt caching, mmap In-flight batching + KV cache chồng xếp
Quantization FP16, FP8, INT8, INT4 (awq/gptq) GPTQ, AWQ, FP8, bitsandbytes GGUF Q4_K_M, Q5_K_M, Q8_0, Q2_K FP8 (Hopper), INT4/INT8 (smoothquant), FP16/BF16
Speculative decoding Yes (draft model) Yes (medusa, eagel) Yes (draft model) Yes (draft model + inflight batching)
Throughput (7B Q4 req/s) Cao nhất (GPU batching) Cao (không bằng vLLM) Trung bình (CPU), cao (GPU) Cao nhất NVIDIA (kernel fuse)
Latency (TTFT) Thấp (continuous batching) Trung bình Thấp CPU, trung bình GPU Thấp nhất (kernel tuning)
Ease of use pip install vllm, OpenAI-compatible API docker + hf endpoints CLI đơn giản, quantize tự động Build phức tạp, docker có sẵn
Use case phù hợp Serving API, multi-tenant Enterprise HF, CPU inference Edge, desktop, local-first Production latency-critical
Biểu đồ throughput benchmark của 4 công cụ trên LLaMA 2 7B tại batch size 1-64

Khi nào dùng công cụ nào?

vLLM là lựa chọn mặc định cho API serving trên NVIDIA GPU nhiều card. PagedAttention giảm fragmentation, throughput cao gấp 2-4x so với Hugging Face Transformers vanilla. Tuy nhiên, support AMD ROCm còn non trẻ, quantization custom khó tune hơn TGI.

Điểm mạnh ít nói đến: vLLM 0.6+ hỗ trợ multi-LoRA serving, cho phép chạy nhiều adapter trên base model chung — tiết kiệm VRAM cho multi-tenant SaaS. Cũng có prefix caching tự động cho system prompt lặp lại.

TGI phù hợp doanh nghiệp dùng Hugging Face Hub — tự động pull model, quantize, deploy qua Docker. Hỗ trợ AMD ROCm tốt hơn vLLM. Nhược điểm: throughput thấp hơn vLLM khi batch lớn, memory không tối ưu bằng PagedAttention.

llama.cpp vua của local-first, desktop, edge. GGUF format đơn giản, quantize bằng `llama-quantize` hoặc `gguf-py`, chạy cả CPU lẫn GPU (Vulkan/CUDA/Metal). Tích hợp tốt với Ollama, LM Studio, Open WebUI. Nhược điểm: throughput GPU thấp hơn vLLM/TGI vì kernel không tối ưu batching song song.

TensorRT-LLM là công cụ NVIDIA cho production latency-critical — LLM Gateway, chatbot real-time, recommendation system. Kernel tự động tune (flash attention, paged KV, in-flight batching), FP8 trên H100 giảm memory 2x. Nhược điểm: build phức tạp, chỉ chạy NVIDIA GPU, bản build mới nhất thường cần container mới nhất.

Xu hướng: Speculative decoding, FP8, disaggregated serving

Cả 4 công cụ đều đẩy speculative decoding — dùng draft model nhỏ dự đoán token, verifier model chấp nhận hàng loạt → tăng tốc 2-3x không giảm chất lượng. FP8 trên H100/L4 đang trở thành default quantization cho throughput-maximizing. Tương lai là disaggregated serving: decode giai đoạn 1 trên 1 loạt GPU, prefill giai đoạn 2 trên loạt khác — tăng throughput 3-5x.

Một thách thức chưa được giải quyết là scheduling đa tenant: mỗi người dùng có prompt khác nhau, độ dài khác nhau, dễ gây head-of-line blocking nếu không có continuous batching và prefix caching thông minh.

Tóm lại: Chọn theo use case. Serving API multi-tenant → vLLM. Enterprise HF + AMD → TGI. Local-first/desktop/edge → llama.cpp. Production NVIDIA latency-critical → TensorRT-LLM. Benchmark với workload thực tế của bạn trước khi quyết định.

Nguồn: vLLM Paper (PagedAttention) | TGI Documentation | llama.cpp GitHub | TensorRT-LLM Docs | vLLM GitHub

Tôi là một lập trình viên IOS. Code chính là IOS nhưng thỉnnh thoảng vẫn đá sang Android hoặc web. Mặc dù không quá thông thạo nhưng tôi sẽ chia sẻ những kiến thức mà mình đã tìm hiểu, áp dụng qua.

Bài viết liên quan

SGLang là gì?

SGLang là gì? SGLang là framework serving engine dành cho LLM và multimodal models, được phát triển dưới dự án LMSYS. Framework này tập trung vào throughput cực cao và…

Xem thêm

LangGraph: Framework AI Agent trạng thái dựa trên đồ thị

LangGraph là gì? LangGraph là framework mã nguồn mở do LangChain AI phát triển, chuyên dụng để xây dựng các AI Agent có trạng thái phức tạp. Khác với các…

Xem thêm

Prompt Engineering Cơ Bản: Kỹ thuật tối ưu prompt cho LLM hiệu quả

Prompt Engineering Cơ Bản: Kỹ thuật tối ưu prompt cho LLM hiệu quả Prompt engineering là nghệ thuật viết hướng dẫn (prompt) để large language model (LLM) trả về kết…

Xem thêm
0 0 đánh giá
Article Rating
Theo dõi
Thông báo của
guest
0 Comments
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất