Skip to content

21 · Concurrency, request rate và kiểu đến của request ​

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

Ghi chú

Cách bạn tạo tải (bao nhiêu request cùng lúc, bao nhiêu mỗi giây, và chính xác chúng đến lúc nào) thay đổi mọi con số bạn đo, nên hai team có thể báo TTFT tuyệt vời và phần đuôi tệ hại trên cùng một server. Một vòng kín (closed loop) (concurrency cố định) chậm lại cùng với server; một vòng hở (open loop) (rate cố định) cứ tiếp tục đến và để lộ hàng đợi mà người dùng thật cảm nhận. Định luật Little nối hai cái: số đang xử lý = rate × thời gian trong hệ thống (4 req/s × 6 s = 24). Cùng 10 req/s trên một server bận 80%, P99 thời gian chờ đi từ 0 → 0,9 s → 2,7 s khi chuyển từ kiểu đến đều sang Poisson sang dồn cục. Thời gian trong hệ thống tăng theo 1 ÷ (1 − utilization): 2×, 5×, 10×, 20× ở 50, 80, 90, 95%. Đó là điểm gãy.

1. Vòng kín so với vòng hở ​

  • Concurrency cố định (vòng kín): ví dụ 8 người dùng ảo, mỗi người gửi, chờ câu trả lời, rồi gửi lại ngay. Luôn có đúng 8 request đang xử lý.
  • Request rate (vòng hở): request đến theo lịch, ví dụ 10 mỗi giây, dù các request trước đã xong hay chưa.

Vòng kín và vòng hởKhi server chậm lại, vòng kín gửi ít hơn (người dùng của nó đang chờ), nên không có gì dồn lại. Vòng hở cứ tiếp tục đến và hàng đợi lớn dần.

Quan trọng

Người dùng internet thật hành xử như vòng hở. Một bài test vòng kín có thể che giấu đúng phần xếp hàng mà người dùng của bạn sẽ cảm nhận.

2. Định luật Little ​

L=λ×Win flight=arrival rate×time in system

Định luật LittleMỗi giây có 4 request đến và mỗi cái mất 6 s từ đầu tới cuối, nên trung bình có 24 request đang xử lý. Đảo lại: 32 request đang xử lý, mỗi cái 6 s, nghĩa là phục vụ ≈ 5,3 req/s.

  • Nó chuyển đổi qua lại giữa bài test concurrency và bài test rate.
  • Nó cảnh báo bạn: nếu request đến nhanh hơn tốc độ hoàn thành, thời gian trong hệ thống cứ tăng mãi, và đám đông cũng vậy.

3. Các kiểu đến ​

Các kiểu đếnCùng trung bình, khác thời điểm.

KiểuTrông nhưMô hình hoá
Đều (uniform)Cứ 100 ms một cái, như máy đếm nhịpGần như không có lưu lượng thật nào
PoissonĐộc lập, ngẫu nhiên: có cặp, có khoảng trốngNhiều người dùng độc lập
Dồn cục (bursty)Từng cụmBatch job, một tính năng bỗng nổi tiếng; công cụ benchmark dùng phân phối gamma với burstiness < 1

Đưa cả ba vào cùng một server mô phỏng: 80 ms mỗi request ở 10 req/s, tức bận 80% thời gian.

Thời gian chờĐều thì không bao giờ phải chờ. Poisson: trung bình 166 ms, P99 0,9 s. Dồn cục: trung bình 636 ms, P99 2,7 s.

Quan trọng

Cùng tải trung bình: chỉ riêng kiểu đến đã làm phần đuôi thay đổi 3 lần.

4. Điểm gãy ​

Trong một hàng đợi đơn giản, thời gian trong hệ thống so với thời gian phục vụ thuần tăng theo 1 ÷ (1 − utilization).

Điểm gãyThoai thoải ở nửa tải, dựng đứng khi gần đầy tải.

  • Server LLM có batching, nên năng lực giãn ra khi tải tăng, nhưng chúng vẫn chạm cùng điểm gãy đó khi batch hoặc KV cache đầy.

Thận trọng

Một GPU bận 99% không phải là hiệu quả: đó là một hàng đợi chực chờ bùng nổ.

5. Cách tạo tải ​

Cách tạo tải

Benchmark của vLLM có đúng các núm chỉnh này:

bash
vllm bench serve \
  --request-rate 10 \
  --burstiness 0.5 \
  --max-concurrency 64

6. Tóm tắt ​

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