Khi đưa mô hình ngôn ngữ lớn (LLM) vào sản xuất, độ trễ và chi phí GPU thường là rào cản lớn nhất. Ba kỹ thuật cốt lõi — KV‑Cache, Speculative Decoding và Dynamic Batching — có thể giảm 30‑70% thời gian phản hồi mà không cần huấn luyện lại mô hình. 1. KV‑Cache (Key‑Value Cache) - Nguyên lý: Trong attention tự hồi quy, các vector key/value của token đã sinh ra được lưu lại để tái sử dụng ở bước tiếp theo, tránh tính toán lại toàn bộ ma trận attention. - Triển khai thực tế: • Sử dụng thư viện gốc của Hugging Face Transformers (`model.generate(use_cache=True)`) hoặc vLLM/TGI đã tích hợp sẵn. • Cấp phát bộ nhớ GPU cho cache theo `max_seq_len * num_layers * 2 * hidden_size * dtype`. Ví dụ: LLaMA‑2‑7B với `max_seq_len=4096` cần ≈ 2 GB FP16. • Theo dõi mức sử dụng cache qua `torch.cuda.memory_allocated()` để tránh OOM khi batch size tăng. 2. Speculative Decoding - Ý tưởng: Chạy một mô hình nhẹ (draft model) để dự đoán nhiều token tiếp theo, sau đó mô hình lớn (target model) kiểm tra và chấp nhận/chỉnh sửa theo cơ chế acceptance‑rejection. - Quy trình áp dụng: • Chọn draft model có cùng tokenizer, ví dụ `TinyLlama‑1.1B` cho target `LLaMA‑2‑7B`. • Cấu hình `num_speculative_tokens=4‑8`; thực nghiệm cho thấy 4 token là cân bằng tốt giữa tốc độ và tỷ lệ chấp nhận (~85%). • Triển khai qua `transformers.generation.utils.GenerationMixin` hoặc dùng `vllm` với tham số `speculative_model`. - Lưu ý: Cần đo lường acceptance rate trên tập validation thực tế; nếu < 60% thì giảm `num_speculative_tokens` hoặc thay draft model lớn hơn. 3. Dynamic Batching (Continuous Batching) - Vấn đề: Batch tĩnh khiến request ngắn phải chờ request dài kết thúc, làm tăng tail latency. - Giải pháp: Engine như vLLM, TensorRT‑LLM, hoặc TGI hỗ trợ continuous batching — request mới được chèn vào batch đang chạy ngay khi có slot trống. - Cấu hình quan trọng: • `max_num_batched_tokens` (tổng token trong batch) và `max_num_seqs` (số request đồng thời). • Thiết lập `preemption_mode=recompute` để giải phóng KV‑Cache của request bị preempt. • Giám sát `queue_latency` và `gpu_utilization`; điều chỉnh hai tham số trên để giữ GPU > 85% utilization mà queue latency < 100 ms. Checklist triển khai nhanh: - Bật KV‑Cache mặc định. - Thêm draft model và cấu hình speculative decoding. - Chuyển sang inference engine hỗ trợ continuous batching. - Chạy benchmark (throughput, p50/p99 latency) trên workload thực tế trước khi release. Kết hợp ba kỹ thuật trên cho phép một cluster 4×A100 phục vụ ≈ 120 req/s cho LLaMA‑2‑7B với p99 latency < 1.2 s, giảm chi phí vận hành đáng kể so với baseline naive generate.