Skip to content

22 · P50, P95, P99 và phương sai ​

Nguồn: fanout.sh / inference-eng / 04-05 · ~6 phút

Ghi chú

Biết percentile là gì thì dễ; dùng nó trên một server LLM mà không tự lừa mình thì không. Trước hết hãy hỏi P99 của cái gì: metric nào, và tập dữ liệu nào (theo request hay theo token, một kiểu lưu lượng hay một hỗn hợp). Độ trải đến từ xếp hàng, độ dài, ảnh hưởng chéo trong batch, preemption, cache hit, và phần cứng. Một client chờ từng câu trả lời mắc lỗi coordinated omission: nó báo P99 = 50 ms trong khi thực tế là ≈ 1,5 s. Percentile không lấy trung bình được (1,3 s so với thực tế 2,7 s): hãy gộp histogram. Trung vị gần như không đổi giữa các lần chạy (54,0; 53,8; 54,0 ms) nhưng phần đuôi thì trôi dạt, nên hãy chạy lặp lại và báo cáo độ trải.

1. P99 của cái gì? ​

Các metricTTFT, TPOT, khoảng cách giữa các token và E2E mỗi cái có phần đuôi riêng, do những phần khác nhau của server chi phối.

  • Tập dữ liệu là quan trọng. P99 của TPOT trên các request đếm mỗi request một lần. P99 của khoảng cách giữa các token trên mọi token thì bị các câu trả lời dài chi phối, và bắt được những lần khựng mà trung bình theo request làm mờ đi.
  • Đừng trộn các tập dữ liệu. Prompt ngắn và tài liệu dài trong cùng một histogram tạo ra hai cái bướu.

Hỗn hợpP99 của hỗn hợp (1,61 s khi 40% là tài liệu dài) dịch chuyển mỗi khi tỷ lệ lưu lượng thay đổi, kể cả khi không có gì chậm đi.

Quan trọng

Phân nhóm trước (theo độ dài prompt, theo model, theo việc prompt có được cache hay không), rồi mới lấy percentile trong từng nhóm.

2. Độ trải đến từ đâu ​

Các nguồn

NguồnĐiều gì xảy ra
Xếp hàngRequest đến giữa một đợt dồn phải chờ sau những request khác
Độ dàiPrompt dài hơn → prefill lâu hơn; câu trả lời dài hơn → request lâu hơn
Ảnh hưởng chéo trong batchPrompt dài của người khác chiếm một bước; token tiếp theo của bạn phải chờ
PreemptionHết KV cache: engine tạm dừng hoặc thậm chí tính lại một request
Cache hitMột prefix prompt đã cache bỏ qua phần lớn prefill
Phần cứngXung nhịp GPU bị hạ do nhiệt hoặc giới hạn công suất; mạng

Biết mình đang thấy nguồn nào là đã sửa được một nửa.

3. Coordinated omission ​

Một bộ tạo tải chờ từng response rồi mới gửi request tiếp theo. Server khựng 2 giây. Bộ tạo tải ghi lại một request chậm, và không bao giờ gửi 20 request lẽ ra phải gửi trong lúc khựng: đúng những request lẽ ra sẽ chậm.

Coordinated omissionCứ 50 s khựng 2 s: client chờ đo được P99 = 50 ms; bấm giờ từ lúc mỗi request lẽ ra phải được gửi, P99 thật là ≈ 1,5 s.

Quan trọng

Tạo tải theo lịch và đo latency từ thời điểm dự định gửi. Coi timeout là kết quả chậm, không phải dữ liệu bị thiếu.

4. Percentile không lấy trung bình được ​

Một dashboard lưu một giá trị P99 mỗi 5 phút. Mười một cửa sổ trông ổn; một cửa sổ, trong lúc có sự cố, thì tệ hại.

Lấy trung bìnhTrung bình của 12 giá trị P99: 1,3 s. P99 thật của cả giờ: 2,7 s.

Quan trọng

Percentile không cộng hay lấy trung bình được. Hãy giữ toàn bộ phân phối dưới dạng histogram, gộp histogram giữa các cửa sổ và các máy, và lấy percentile ở bước cuối cùng.

5. Phương sai giữa các lần chạy ​

Nhiễu giữa các lần chạyMột nghiên cứu đã công bố trên H100 (PrefixBench-H100, arXiv 2609.19657) đo trung vị TTFT là 54,0; 53,8 và 54,0 ms qua ba lần chạy: độ trải dưới 1%. Phần đuôi phụ thuộc vào một nhúm sự kiện hiếm, nên trôi dạt nhiều hơn hẳn.

  • Lặp lại mỗi cấu hình vài lần.
  • Báo cáo trung vị của các lần chạy kèm độ trải.
  • Chỉ tin một chênh lệch ở phần đuôi khi nó lớn hơn độ trải đó.

6. Tóm tắt ​

Thẻ tóm tắt bài 22