Ngưỡng Inference
Chúng ta đã tối ưu KV cache. Chúng ta đã compile GPU. Nhưng latency và throughput inference vẫn gặp tường. Nguyên nhân? Inefficiency trong token batching.
Khi model phát triển và workload inference đa dạng, khả năng batch request hiệu quả quyết định xem cluster inference của bạn chạy nóng hay lạnh. Cải thiện 10% trong chiến lược batching có thể mang lại 30–40% throughput gain—mà không cần động tới hardware.
Tại Sao Batching Quan Trọng Bây Giờ
Trong giai đoạn prefill, GPU yêu thích công việc. Batching 32 request cùng lúc giữ compute unit bão hòa. Nhưng trong giai đoạn decode, mỗi token generation là tuần tự. Một request của user có thể làm GPU chết đói khi chờ token tiếp theo.
Dynamic batching—chấp nhận request mới giữa decode, tạm dừng request ưu tiên thấp, và sắp xếp lại—cho phép bạn lấp đầy GPU idle cycle. Toán học rất đơn giản: nhiều token mỗi giây trên GPU = chi phí thấp hơn mỗi inference.
Nút Thắt Thực Tế
Hầu hết inference server dùng static batching: khóa batch size khi startup, hy vọng nó match traffic pattern. Thực tế phức tạp hơn. Giờ cao điểm có 100 request đồng thời; giờ thấp điểm có 5. Static batching lãng phí GPU memory và tạo latency không cần thiết.
Hệ thống dynamic batching (như continuous batching của vLLM) giải quyết bằng:
- Chấp nhận request on-the-fly mà không chờ full batch
- Tạm dừng token ưu tiên thấp để ưu tiên token cao
- Sắp xếp lại compute để tối đa GPU utilization
Trade-off: Độ Phức Tạp
Dynamic batching không miễn phí. Nó yêu cầu:
- Logic scheduling tinh vi
- Quản lý memory fragmentation
- Priority queue overhead
- Tuning cẩn thận cho mỗi model/hardware combo
Tiếp Theo Là Gì
Frontier là speculative batching—dự đoán token nào user sẽ request tiếp và pre-compute chúng speculatively. Kết hợp với dynamic batching, điều này có thể mở khóa 2x throughput gain nữa.
Cho builder: nếu inference latency của bạn cảm thấy bị kẹt, batching strategy là lever đầu tiên cần kéo. Đo GPU utilization của bạn trong decode. Nếu dưới 70%, bạn đang để lại throughput trên bàn.