引數掃描¶
線上基準測試¶
基本¶
vllm bench sweep serve 會自動啟動 vllm serve 並執行 vllm bench serve 來評估 vLLM 在多種配置下的效能。
請按照以下步驟執行指令碼
- 構建
vllm serve的基礎命令,並將其傳遞給--serve-cmd選項。 - 構建
vllm bench serve的基礎命令,並將其傳遞給--bench-cmd選項。 -
(可選)如果您想改變
vllm serve的設定,請建立一個新的 JSON 檔案,並填入您想測試的引數組合。將檔案路徑傳遞給--serve-params。- 示例:調優
--max-num-seqs和--max-num-batched-tokens
[ { "max_num_seqs": 32, "max_num_batched_tokens": 1024 }, { "max_num_seqs": 64, "max_num_batched_tokens": 1024 }, { "max_num_seqs": 64, "max_num_batched_tokens": 2048 }, { "max_num_seqs": 128, "max_num_batched_tokens": 2048 }, { "max_num_seqs": 128, "max_num_batched_tokens": 4096 }, { "max_num_seqs": 256, "max_num_batched_tokens": 4096 } ] - 示例:調優
-
(可選)如果您想改變
vllm bench serve的設定,請建立一個新的 JSON 檔案,並填入您想測試的引數組合。將檔案路徑傳遞給--bench-params。- 示例:為隨機資料集使用不同的輸入/輸出長度
-
確定您希望儲存結果的位置,並將其傳遞給
--output-dir。
示例命令
vllm bench sweep serve \
--serve-cmd 'vllm serve meta-llama/Llama-2-7b-chat-hf' \
--bench-cmd 'vllm bench serve --model meta-llama/Llama-2-7b-chat-hf --backend vllm --endpoint /v1/completions --dataset-name sharegpt --dataset-path benchmarks/ShareGPT_V3_unfiltered_cleaned_split.json' \
--serve-params benchmarks/serve_hparams.json \
--bench-params benchmarks/bench_hparams.json \
-o benchmarks/results
重要
如果同時傳遞了 --serve-params 和 --bench-params,指令碼將迭代它們之間的笛卡爾積。您可以使用 --dry-run 來預覽將要執行的命令。
我們只為每個 --serve-params 啟動一次伺服器,並讓它執行多個 --bench-params。在每次基準測試執行之間,我們呼叫 /reset_prefix_cache 和 /reset_mm_cache 端點,以獲得一個乾淨的狀態以進行下一次執行。如果您使用的是自定義 --serve-cmd,您可以透過設定 --after-bench-cmd 來覆蓋用於重置狀態的命令。
注意
預設情況下,每個引數組合會執行 3 次,以使結果更可靠。您可以透過設定 --num-runs 來調整執行次數。
提示
如果其中一次執行失敗,您可以使用 --resume 選項來繼續引數掃描。
SLA 自動調優器¶
vllm bench sweep serve_sla 是 vllm bench sweep serve 的一個封裝,它透過調整請求速率或併發度(使用 --sla-variable 選擇)來滿足 --sla-params 給定的 SLA 約束。
例如,為了確保 99% 的請求的端到端延遲在不同的目標值之內
[
{
"p99_e2el_ms": "<=200"
},
{
"p99_e2el_ms": "<=500"
},
{
"p99_e2el_ms": "<=1000"
},
{
"p99_e2el_ms": "<=2000"
}
]
示例命令
vllm bench sweep serve_sla \
--serve-cmd 'vllm serve meta-llama/Llama-2-7b-chat-hf' \
--bench-cmd 'vllm bench serve --model meta-llama/Llama-2-7b-chat-hf --backend vllm --endpoint /v1/completions --dataset-name sharegpt --dataset-path benchmarks/ShareGPT_V3_unfiltered_cleaned_split.json' \
--serve-params benchmarks/serve_hparams.json \
--bench-params benchmarks/bench_hparams.json \
--sla-params benchmarks/sla_hparams.json \
--sla-variable max_concurrency \
-o benchmarks/results
調整 SLA 變數的演算法如下
- 以無限 QPS 執行基準測試,並使用相應的指標來確定變數的初始值。
- 例如,初始請求速率設定為無限 QPS 下的併發度。
- 如果 SLA 仍然滿足,則將值加倍,直到 SLA 不再滿足。這會給出一個相對狹窄的視窗,其中包含 SLA 剛好滿足的點。
- 在視窗上應用二分查詢,以找到仍滿足 SLA 的最大值。
重要
SLA 調優應用於 --serve-params、--bench-params 和 --sla-params 的每個組合。
對於給定的 --serve-params 和 --bench-params 組合,我們在 --sla-params 之間共享基準測試結果,以避免使用相同的 SLA 變數值重新執行基準測試。
視覺化¶
基本¶
vllm bench sweep plot 可用於繪製引數掃描結果的效能曲線。
示例命令
vllm bench sweep plot benchmarks/results/<timestamp> \
--var-x max_concurrency \
--row-by random_input_len \
--col-by random_output_len \
--curve-by api_server_count,max_num_batched_tokens \
--filter-by 'max_concurrency<=1024'
提示
您可以使用 --dry-run 來預覽要繪製的圖形。
帕累託圖¶
vllm bench sweep plot_pareto 有助於選擇平衡使用者吞吐量和 GPU 吞吐量的配置。
更高的併發度或批處理大小可以提高 GPU 效率(每 GPU),但會增加每個使用者的延遲;較低的併發度可以提高每個使用者的速率,但會低效利用 GPU;帕累託前沿顯示了在您的執行中可達到的最佳對。
- x 軸:tokens/s/user =
output_throughput÷ concurrency (--user-count-var,預設為max_concurrency,回退為max_concurrent_requests)。 - y 軸:tokens/s/GPU =
output_throughput÷ GPU 數量 (如果設定了--gpu-count-var;否則 gpu_count 是 TP×PP*DP)。 - 輸出:在
OUTPUT_DIR/pareto/PARETO.png處生成一張圖。 - 使用
--label-by(預設為max_concurrency,gpu_count) 顯示每個資料點使用的配置。
示例