1. 操作步驟
- 該腳本能夠自動搜索最優的vLLM服務器參數組合(包括max-num-seqs和max-num-batched-tokens),在滿足端到端延遲和前綴緩存命中率等要求的同時,實現吞吐量最大化。
1.1 前提條件
- 克隆 vLLM 并切到目標分支
git clone https://github.com/vllm-project/vllm.git cd vllm # git checkout <your-branch>
- 安裝運行環境
如果使用 TPU,請激活對應 conda 環境并安裝匹配版本的torch
、torch_xla
。 - 模型準備
若使用自定義模型,確保配置文件放置正確且可訪問。
1.2 配置(腳本頂部必須設置)
變量 | 說明 | 示例 |
---|---|---|
BASE | vLLM 倉庫所在目錄的絕對路徑 | "$HOME" |
MODEL | Hugging Face 模型名稱 | "meta-llama/Llama-3.1-8B-Instruct" |
SYSTEM | 硬件類型:TPU 或 GPU | "TPU" |
TP | Tensor-parallelism 大小 | 1 |
DOWNLOAD_DIR | 模型權重下載/緩存目錄 | "" (默認路徑) |
INPUT_LEN | 請求輸入長度 | 4000 |
OUTPUT_LEN | 請求輸出長度 | 16 |
MAX_MODEL_LEN | 模型最大長度 | 4096 |
MIN_CACHE_HIT_PCT | 前綴緩存命中率要求,0–100;設為 0 禁用 | 60 |
MAX_LATENCY_ALLOWED_MS | 允許的 P99 端到端延遲(ms);設極大值可忽略 | 500 |
NUM_SEQS_LIST | 待測 max-num-seqs 列表 | "128 256" |
NUM_BATCHED_TOKENS_LIST | 待測 max-num-batched-tokens 列表 | "1024 2048 4096" |
短上下文場景可適當增大
max-num-seqs
值。
1.3 運行步驟
- 配置:按上表在腳本頂部修改變量。
- 執行:
cd <腳本所在目錄> bash auto_tune.sh
注意:執行路徑中不能包含字符串
vllm
,否則pkill -f vllm
會誤殺腳本自身。
2. 要點提煉
2.1 核心目標
- 自動遍歷
max-num-seqs
與max-num-batched-tokens
組合。 - 在滿足延遲或緩存命中率約束的前提下,找到最大吞吐。
2.2 典型場景
目標 | 關鍵配置示例 |
---|---|
僅最大化吞吐 | MAX_LATENCY_ALLOWED_MS=1e11 , MIN_CACHE_HIT_PCT=0 |
吞吐 + 延遲約束 | MAX_LATENCY_ALLOWED_MS=500 |
吞吐 + 延遲 + 前綴緩存 | MAX_LATENCY_ALLOWED_MS=500 , MIN_CACHE_HIT_PCT=60 |
2.3 輸出結果
- 位于
$BASE/auto-benchmark/YYYY_MM_DD_HH_MM/
:vllm_log_*.txt
:各參數組合的 vLLM 日志bm_log_*.txt
:對應 benchmark 日志result.txt
:最優參數及吞吐匯總profile/
:最佳運行的一次 profiler trace(TPU 為.xplane.pb
,GPU 為.json
)
3. 如何調優 vLLM 運行參數(實戰指南)
3.1 調優流程(腳本內部邏輯)
- 確定最大 GPU 內存利用率
從 0.98 開始遞減,防止 OOM。 - 雙重循環遍歷
遍歷所有(max-num-seqs, max-num-batched-tokens)
組合。 - 延遲感知吞吐搜索
- 先以無限請求速率跑一輪;若 P99 延遲滿足,則記錄吞吐。
- 若延遲超限,則逐步降低請求速率,找到滿足延遲的最高吞吐。
- 記錄最優值
每次更新吞吐更高的有效組合。 - 保存性能畫像
對最佳組合保存 profiler trace,便于 TensorBoard 等工具深度分析。
3.2 手動微調建議
- 長輸入 / 長輸出場景
- 適當降低
max-num-seqs
,提高max-num-batched-tokens
,減少 padding 浪費。
- 適當降低
- 短輸入 / 短輸出場景
- 提高
max-num-seqs
,降低max-num-batched-tokens
,充分利用并發。
- 提高
- 顯存緊張
- 降低
gpu-memory-utilization
或max-model-len
。
- 降低
- 延遲敏感
- 在
MAX_LATENCY_ALLOWED_MS
范圍內,優先選擇吞吐最高的組合,若仍超限,則降低max-num-seqs
或max-num-batched-tokens
。
- 在
- 前綴緩存優化
- 若業務有大量共享前綴,可設置
MIN_CACHE_HIT_PCT>0
,腳本會過濾掉命中率不達標的結果。
- 若業務有大量共享前綴,可設置
腳本已自動化上述過程;如想手動實驗,可直接用
vllm serve
啟動并配合vllm bench serve
進行基準測試。