Khởi tạo VPS trong 60 giây · Hoàn tiền trong 7 ngày · Hỗ trợ kỹ thuật 24/7
Bitech Bitech
Hướng dẫn

Cách khắc phục p99 latency tăng cao trong vLLM bằng Chunked Prefill và Scheduling

Tìm hiểu nguyên nhân khiến độ trễ p99 của vLLM tăng vọt trong môi trường thực tế và cách tối ưu hóa bằng Chunked Prefill và lập lịch.

Nguyên nhân khiến p99 latency bùng nổ trong vLLM

Trong quá trình vận hành mô hình ngôn ngữ lớn (LLM) ở môi trường production với vLLM, nhiều kỹ sư gặp phải hiện tượng độ trễ trung bình (p50) rất tốt nhưng độ trễ ở đuôi (p99 latency) lại tăng vọt đột ngột. Điều này gây ra trải nghiệm gián đoạn nghiêm trọng cho người dùng cuối.

Nguyên nhân gốc rễ nằm ở sự chênh lệch bản chất giữa hai giai đoạn xử lý LLM:

  • Giai đoạn Prefill: Xử lý toàn bộ prompt đầu vào song song. Giai đoạn này đòi hỏi năng lực tính toán cực lớn (compute-bound).
  • Giai đoạn Decode: Sinh từng token tiếp theo theo chuỗi. Giai đoạn này phụ thuộc nhiều vào băng thông bộ nhớ (memory-bandwidth bound).

Khi một request có prompt quá dài đi vào hệ thống, vLLM mặc định sẽ dành ưu tiên GPU để hoàn tất Prefill cho request đó. Việc này vô tình làm cản trở (block) quá trình Decode của tất cả request khác đang chạy, khiến các token sinh ra bị trì hoãn và làm p99 latency tăng vọt.

Giải pháp: Chunked Prefill và Lập lịch tối ưu

Để khắc phục vấn đề nghẽn cổ chai này, giải pháp hiệu quả nhất là kết hợp cơ chế Chunked Prefill và tinh chỉnh bộ lập lịch (Scheduler) của vLLM.

1. Cơ chế hoạt động của Chunked Prefill

Kỹ thuật Chunked Prefill chia nhỏ các prompt đầu vào dài thành nhiều đoạn (chunk) nhỏ hơn. Thay vì bắt hệ thống phải tính toán hết một prompt dài trong một bước duy nhất, vLLM sẽ thực hiện từng chunk Prefill xen kẽ với các bước Decode của những request khác.

Nhờ đó, tiến trình sinh token (Decode) cho người dùng không bị gián đoạn quá lâu, giúp hạ thấp đáng kể và giữ ổn định chỉ số p99 latency.

2. Các bước cấu hình Chunked Prefill trên vLLM

Bạn có thể bật tính năng này trực tiếp bằng cách bổ sung các cờ tham số khi khởi chạy vLLM server.

Bước 1: Khởi chạy vLLM với cờ --enable-chunked-prefill

python3 -m vllm.entrypoints.openai.api_server \
    --model meta-llama/Llama-3-8B-Instruct \
    --enable-chunked-prefill \
    --max-num-batched-tokens 512

Bước 2: Tinh chỉnh thông số lập lịch (Scheduling parameters)

  • --max-num-batched-tokens: Tham số quan trọng nhất để điều khiển kích thước của chunk. Đặt tham số này ở mức 512 hoặc 1024 giúp cân bằng giữa throughput (băng thông phục vụ) và latency (độ trễ). Nếu đặt quá cao (ví dụ 4096), thời gian block GPU sẽ tăng trở lại.
  • --max-num-seqs: Giới hạn số lượng chuỗi (sequence) được xử lý đồng thời trong một bước batching để tránh quá tải VRAM GPU.

Kết quả thu được

  • Kiểm soát độ trễ đuôi: Xóa bỏ hiện tượng p99 latency tăng bất thường khi gặp prompt dài.
  • Tối ưu Continuous Batching: Tăng hiệu suất sử dụng GPU mà vẫn duy trì tính thời gian thực cho phản hồi.
  • Trải nghiệm người dùng mượt mà: Thời gian nhận token đầu tiên (TTFT) và khoảng cách giữa các token (ITL) ổn định hơn.

Áp dụng Chunked Prefill cùng cấu hình Scheduler hợp lý là chìa khóa để đưa dịch vụ LLM dựa trên vLLM đạt trạng thái sẵn sàng cao trên sản phẩm thực tế.


Ngày phát hành: 17/07/2026
Nguồn: www.digitalocean.com