通過EvalScope測試推理性能的操作指南
更新時間 2025-05-12 14:53:10
最近更新時間: 2025-05-12 14:53:10
分享文章
一、引言
1.1 工具概述
EvalScope是一款專為大模型部署后性能評估設計的壓力測試工具,支持多并發場景下的吞吐量、延遲、穩定性等核心指標測試。通過配置輸入/輸出Token長度、并發數等參數,可模擬真實業務負載,驗證模型服務在不同上下文場景下的性能表現。工具基于Apptainer容器化部署,確保環境一致性,降低依賴沖突風險。
注意:該工具只有X86架構適配版(適用于NVIDIA GPU),無法直接在arm架構(昇騰 910B)下使用,因此實際測試時需要在X86架構機器上通過ssh執行。
1.2 使用須知
- 環境依賴:需預先安裝Apptainer(若物理機使用Galaxy鏡像,默認已集成),如需安裝,具體安裝指南見。
- 網絡配置:被測模型服務需暴露HTTP接口(如
//{IP}:{PORT}/v1/chat/completions),確保工具可通過IP和端口正常訪問。 - 資源要求:測試過程可能產生高I/O和網絡負載,建議在獨立測試環境中執行,避免影響生產服務。
1.3 應用場景
- 模型部署驗證:確認模型服務在指定并發和上下文長度下的響應能力。
- 性能瓶頸定位:通過多并發和Token配置組合,識別吞吐量下降或延遲突增的臨界點。
- 服務穩定性測試:長時間高負載下驗證服務是否存在內存泄漏、連接超時等異常。
二、測試過程
2.1 環境準備
2.1.1 安裝Apptainer(Galaxy相關鏡像環境默認已安裝,可跳過此步驟)
根據操作系統類型選擇對應安裝方式(以Ubuntu為例):
# 安裝依賴
sudo apt-get update && sudo apt-get install -y libseccomp-dev squashfs-tools
# 下載并安裝Apptainer
wget //github.com/apptainer/apptainer/releases/download/v1.2.8/apptainer_1.2.8-1_amd64.deb
sudo dpkg -i apptainer_1.2.8-1_amd64.deb
2.1.2 下載測試工具
創建工作目錄并獲取EvalScope容器鏡像:
mkdir -p /root/ctyun/log
cd /root/ctyun
wget //xxx/evalscope-ctyun.sif (需聯系公有云事業部,獲取sif文件)
2.2 全量測試腳本配置與執行
2.2.1 腳本參數說明
編輯 run.sh腳本(vim run.sh,可按需調整參數):
#!/bin/bash
# 定義日志輸出路徑
log_dir="/root/ctyun/log" # 請替換為實際的日志存儲路徑
mkdir -p "$log_dir" # 如果目錄不存在,則創建
# 定義parallel的取值
parallel_values=(1 10 20 32 40 64 128)
# 定義inputtokens和outputtokens的取值
token_pairs=("255 256" "255 1024" "255 2048" "511 512" "511 1024" "1023 1024" "1023 2048" "2047 2048" "4095 1024" "4095 4096")
#token_pairs=("20480 8192")
# 獲取當前時間戳,格式為 YYYYMMDD_HHMMSS
timestamp=$(date +"%Y%m%d_%H%M%S")
# 外循環:遍歷inputtokens和outputtokens的取值
for tokens in "${token_pairs[@]}"; do
# 將inputtokens和outputtokens分開
inputtokens=$(echo $tokens | awk '{print $1}')
outputtokens=$(echo $tokens | awk '{print $2}')
# 定義日志文件名,格式為 inputtokens_outputtokens_timestamp.log
log_file="${log_dir}/${inputtokens}_${outputtokens}_${timestamp}.log"
# 清空日志文件(如果存在)
> "$log_file"
echo "Running tests for inputtokens=$inputtokens, outputtokens=$outputtokens"
echo "Logging to $log_file"
# 內循環:遍歷parallel的取值
for parallel in "${parallel_values[@]}"; do
echo "Running with parallel=$parallel" | tee -a "$log_file"
# 執行apptainer命令,并將輸出追加到日志文件
apptainer exec evalscope-ctyun.sif evalscope perf \
--url "//127.0.0.1:8000/v1/completions" \
--parallel "$parallel" \
--model /model/deepseek-r1 \
--dataset-repeat "$parallel" \
--dataset-input-length "$inputtokens" \
--connect-timeout 6000 \
--read-timeout 6000 \
--max-tokens "$outputtokens" \
--min-tokens "$outputtokens" \
--api openai \
--dataset speed_benchmark 2>&1 | tee -a "$log_file"
done
echo "Completed tests for inputtokens=$inputtokens, outputtokens=$outputtokens"
echo "----------------------------------------" | tee -a "$log_file"
done
echo "All tests completed. Logs are stored in $log_dir"
- 并發配置:
parallel_values定義并發數梯度(如1, 10, 20, 32, 40, 64, 128),覆蓋低負載到高負載場景。 - Token配置:
token_pairs定義輸入/輸出Token組合,格式為"輸入長度 輸出長度",支持多組上下文場景(如"255 256"表示輸入255 Token,輸出256 Token)。 - 日志路徑:
log_dir指定測試日志存儲目錄,日志文件命名規則為輸入長度_輸出長度_時間戳.log。
2.2.2 執行全量測試
啟動后臺測試任務,避免終端斷開影響:
nohup sh run.sh &
測試日志自動生成至 /root/ctyun/log/目錄,包含各并發和Token組合的詳細輸出。
2.3 簡易快速測試(單場景驗證)
針對特定場景(如輸入1023 Token,輸出1024 Token,并發64),在evalscope-ctyun.sif所在目錄,直接執行命令:
apptainer exec evalscope-ctyun.sif evalscope perf \
--url "//{IP}:{PORT}/v1/chat/completions" \ # 模型服務API地址
--model DeepSeek-R1 \ # 模型名稱(需與服務端一致)
--api openai \ # API協議類型(適配OpenAI格式)
--dataset speed_benchmark \ # 測試數據集(固定值)
--max-tokens 1024 \ # 最大輸出Token數(與最小一致以固定輸出長度)
--min-tokens 1024 \
--dataset-input-length 1023 \ # 輸入Token數(實際輸入為該值+1,需預留起始Token)
--dataset-repeat 64 \ # 總請求數(建議≥并發數,通常設為并發數倍數)
--parallel 64 \ # 并發數
--connect-timeout 6000 \ # 連接超時時間(ms)
--read-timeout 6000 \ # 讀取超時時間(ms)
2.4 核心參數詳解
| 參數名 | 描述 | 示例值 |
|---|---|---|
--url |
模型服務API端點,需包含協議、IP、端口和路徑 | |
--parallel |
并發數,模擬同時發起的請求量 | 32 |
--dataset-input-length |
輸入Token長度(實際輸入為該值+1,因包含起始Token) | 1023 |
--max-tokens |
單請求最大輸出Token數 | 2048 |
--dataset-repeat |
總請求次數,控制測試樣本量(建議≥并發數以覆蓋全鏈路壓力) | 64 |
--model |
模型標識(需與服務端返回的 model字段一致) |
DeepSeek-R1 |
三、結果分析
3.1 關鍵指標解讀
-
Throughput(吞吐量):單位時間內成功處理的請求數(req/s),反映服務負載能力,越高表明性能越優。
-
Latency(延遲):
- Mean Latency:平均響應時間,關注是否隨并發升高而顯著增加。
- P95/P99 Latency:高百分位延遲,衡量服務穩定性(如P95表示95%請求的響應時間低于該值)。
-
Error Rate(錯誤率):超時、服務異常等失敗請求占比,理想值為0%,超過1%需排查問題。
四、注意事項
- 測試耗時:全量測試包含多組并發和Token組合,耗時可能長達數小時,建議通過
nohup或任務調度工具執行。 - 資源監控:同步使用
nmon、htop等工具監控服務器CPU、內存、網絡帶寬,排除硬件瓶頸對測試結果的干擾。 - API兼容性:確保
--api參數與模型服務協議一致(當前支持OpenAI格式),請求體結構需符合對應API規范。 - 輸入Token修正:
--dataset-input-length設置值需比實際輸入Token數少1(工具自動添加起始Token),例如預期輸入1024 Token時,該參數應設為1023。
五、附錄
- 工具文檔:EvalScope詳細使用說明見。
- 日志示例:各測試場景的輸出日志包含完整請求響應數據,可通過文本分析工具(如Grep、Excel)進行多維度對比。
本指南適用于大模型服務性能評估,旨在為技術人員提供標準化測試流程。實際操作中請根據具體環境調整參數,并結合業務負載特征設計測試用例。