Giới thiệu Khi đưa mô hình ngôn ngữ lớn (LLM) vào sản xuất, độ trễ và throughput là hai chỉ số quyết định trải nghiệm người dùng. Ba kỹ thuật cốt lõi — KV Cache, PagedAttention và Continuous Batching — đã trở thành tiêu chuẩn trong các inference engine hiện đại như vLLM, TGI hay TensorRT‑LLM. Bài viết tổng hợp quy trình áp dụng chúng từ môi trường phát triển đến triển khai thực tế. Các khái niệm cốt lõi - KV Cache: lưu trữ key/value của các token đã sinh để tránh tính toán lại ở mỗi bước decode. - PagedAttention: chia KV Cache thành các trang (page) cố định, cho phép chia sẻ bộ nhớ giữa các request và giảm fragmentation. - Continuous Batching: thêm/bỏ request vào batch đang chạy mà không cần chờ batch hiện tại kết thúc, tối đa hóa occupancy GPU. Quy trình triển khai thực tế 1. Chọn inference engine phù hợp - vLLM (Python, hỗ trợ PagedAttention mặc định). - TensorRT‑LLM (C++/Python, tích hợp KV Cache tối ưu cho H100/A100). 2. Cấu hình KV Cache - Xác định max_seq_len và max_batch_size theo VRAM. - Bật `enable_prefix_caching` nếu nhiều prompt chia sẻ prefix (ví dụ system prompt). 3. Kích hoạt PagedAttention - Đặt `block_size` (thường 16 hoặc 32 token). - Tính số block tối đa: `num_blocks = VRAM_available / (block_size * hidden_size * 2 * num_layers)`. 4. Bật Continuous Batching - Thiết lập `max_num_seqs` và `max_num_batched_tokens`. - Sử dụng scheduler `policy: "fcfs"` hoặc `"priority"` tùy SLA. 5. Benchmark và tinh chỉnh - Chạy `benchmark_throughput.py` với các độ dài prompt/output đa dạng. - Quan sát `tokens/s` và `latency_p99`; điều chỉnh `block_size`/`max_num_seqs` cho đến khi GPU utilization > 90%. Mẹo và cạm bẫy thường gặp - Không đặt `max_seq_len` quá lớn so với thực tế → lãng phí KV Cache. - Quên bật `cuda_graph` (TensorRT‑LLM) hoặc `enforce_eager=False` (vLLM) → mất lợi ích graph capture. - Continuous batching có thể gây head-of-line blocking nếu request dài lấn át request ngắn → cân nhắc priority queue. - Theo dõi `torch.cuda.memory_allocated()` định kỳ để phát hiện memory leak do cache không được giải phóng. Kết luận Kết hợp KV Cache, PagedAttention và Continuous Batching giúp giảm độ trễ decode 2‑3× và tăng throughput 3‑5× so với naïve batching. Việc triển khai dần từng bước, benchmark liên tục và điều chỉnh tham số theo workload thực tế là chìa khóa để đạt hiệu suất ổn định trong production.