Skip to content

24 · Thiết lập baseline một request ​

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

Ghi chú

Mọi speedup về sau đều là tỷ số so với một con số ban đầu, nên hãy lấy con số đó cho đúng: một request cố định trên một GPU đang rảnh (Llama 3 8B, 16-bit, một H100, vLLM; 512 vào, 256 ra). Đó là latency tốt nhất người dùng có thể có và chi phí mỗi token tệ nhất. Tính mức sàn trước: TPOT ≥ 16 GB ÷ 3,35 TB/s ≈ 4,8 ms, TTFT ≥ 7,7 TFLOP ÷ 989 TFLOPS ≈ 7,8 ms, E2E ≥ 1,23 s. Đo sạch sẽ (cố định cấu hình, cố định shape, greedy, warm-up, ~30 lần lặp, batch 1). Một lần chạy sạch (minh hoạ) cho TTFT 21 ms, TPOT 6,4 ms, E2E 1,65 s: 75% băng thông bộ nhớ, khoẻ mạnh trong khoảng 60–80%. Tệ hơn nhiều nghĩa là có vấn đề cấu hình, và mức sàn là thứ cho bạn biết điều đó.

1. Vì sao cần baseline, và cái bẫy mặc định ​

Benchmark latency của vLLM (vllm bench latency) mặc định gửi một batch 8 request cùng lúc. Con số đó đo tám request dùng chung GPU và nói rất ít về một request. Nếu con số ban đầu sai, mọi tỷ số sau nó cũng sai.

Baseline một request trả lời một câu hỏi: khi GPU không có việc gì khác, một request chạy nhanh tới đâu? Ghi lại TTFT, TPOT và E2E.

Tốt nhất và tệ nhấtĐó là latency tốt nhất cấu hình này có thể cho một người dùng (không ai tranh GPU) và chi phí mỗi token tệ nhất (GPU làm ít việc hữu ích nhất có thể). Cả hai điều đó làm nó thành một điểm tham chiếu.

2. Tính mức sàn trước ​

  • Decode: mỗi bước đọc toàn bộ ~16 GB trọng số; 16 GB ÷ 3,35 TB/s ≈ 4,8 ms mỗi token. Không cách cài đặt nào xuống dưới mức này được: byte không thể đến nhanh hơn.
  • Prefill: 512 token × ~15 GFLOP mỗi token ≈ 7,7 TFLOP; ÷ 989 TFLOPS (16-bit) ≈ 7,8 ms tới token đầu tiên.
  • End to end: 7,8 ms + 255 × 4,8 ms ≈ 1,23 s.

Các mức sànMức sàn và một lần chạy sạch minh hoạ trên cùng trục. 255, không phải 256: thời gian của token đầu tiên là TTFT.

3. Đo sạch sẽ ​

Loại bỏ mọi thứ không phải là thứ bạn đang đo.

Quy tắcVì sao
Cố định cấu hình: revision model, dtype, phiên bản engine, GPU, driverNgười khác tái tạo lại được
Cố định shape: đúng 512 vào, ép 256 ra (bỏ qua EOS)Nếu không thì lần này dừng ở 40 token, lần khác ở 200
Decode greedyMỗi lần chạy cùng một đầu ra
Warm-up (vLLM: 10 lần lặp, bỏ đi)Các request đầu trả chi phí một lần: biên dịch kernel, capture CUDA graph, cấp phát bộ nhớ
Lặp lại ~30 lầnMột lần chạy gần như không nói lên gì; 30 lần cho trung vị và độ trải
Batch size 1Đó là mục đích của bài đo

Warm-up

Chạy theo hai cách:

Hai benchmarkBenchmark offline nói chuyện thẳng với engine và báo tổng latency. Benchmark serving đi qua HTTP server thật với max concurrency 1 và báo TTFT, TPOT riêng.

4. So với các mức sàn ​

Một lần chạy sạch (số minh hoạ, trong khoảng kỳ vọng): TTFT 21 ms, TPOT 6,4 ms, E2E ≈ 1,65 s.

So với mức sànDecode: 16 GB mỗi 6,4 ms ≈ 2,5 TB/s, 75% đỉnh. Databricks gọi đây là model bandwidth utilization (MBU) và báo khoảng 60% ở batch 1 trên hai H100.

  • Decode ở 60–80% MBU nghĩa là engine đang làm đúng việc.
  • Prefill nằm xa mức sàn hơn (21 so với 7,8 ms). Bình thường với prompt ngắn: 500 token không đủ việc để giữ mọi đơn vị tính toán bận, và chi phí cố định chiếm tỷ trọng lớn hơn.

5. Khi số trông bất thường ​

Thước đoGiả sử TPOT là 20 ms, khoảng 4 lần mức sàn. Đó là một triệu chứng.

Nghi phạmĐiều gì xảy ra
Eager mode (--enforce-eager)Không có CUDA graph hay biên dịch: CPU launch từng op GPU nhỏ một, ở mọi bước
Trọng số FP3232 GB phải chuyển: bản thân mức sàn tăng gấp đôi lên 9,6 ms
GPU bị nhiễuMột process khác, một notebook còn sót lại, hoặc xung nhịp bị hạ do công suất hay nhiệt
Chỉ TTFT bất thườngBỏ qua warm-up, hoặc client bấm giờ cả mạng và tokenize
Độ trải rộng giữa các lần chạyĐừng tin con số nào cho tới khi biết lý do

6. Ghi lại ​

TrườngVí dụ
Cấu hìnhRevision model, dtype, engine, driver
Shape512 vào / 256 ra, greedy, bỏ qua EOS
Metric (trung vị và độ trải)TTFT 21 ms · TPOT 6,4 ms · E2E 1,65 s
So với mức sànTPOT 1,3× mức sàn · MBU 75%
Kết luận"Decode chạy ở 75% băng thông bộ nhớ; prefill bị chi phí cố định chi phối ở độ dài prompt này."

Từ giờ đây là 1,0: mọi lần quét sau (thêm người dùng, prompt dài hơn, đầu ra dài hơn) là thay đổi tính từ đây.

Thận trọng

Hai hiểu lầm. Baseline không phải thứ người dùng thấy: nó là trường hợp tốt nhất; production thêm xếp hàng, chia sẻ và batching. Và đừng bỏ qua nó: nó là bước hiệu chuẩn, và là phép đo duy nhất bạn có thể đối chiếu với vật lý.

7. Tóm tắt ​

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