一、引言
隨著大語言模型(LLM)在自然語言處理(NLP)領域的廣泛應用,如何準確評估這些模型在不同配置參數下的推理性能和精度成為了一個重要的研究課題。為了滿足這一需求,我們使用了服務化的MindIE Benchmark工具。該工具通過部署昇騰服務化配套包后,以調用終端命令的方式進行測試,能夠全面評估大語言模型在各種配置下的推理表現,并將結果以直觀的表格形式展示。
1.1 工具概述
服務化的MindIE Benchmark工具不僅支持多種推理模式,還提供了詳細的統計分析功能。它能夠測量并記錄模型在各個階段的推理耗時,例如FirstTokenTime、DecodeTime等,并計算出對應時延的平均值、最小值、最大值、75分位(P75)、90分位(P90/SLO_P90)和99分位(P99)概率統計值。最終,所有計算結果將被保存到本地的CSV文件中,便于進一步分析和對比。
1.2 使用須知
在使用MindIE Benchmark之前,有幾個關鍵點需要注意:
- 路徑權限:Benchmark當前運行路徑的屬主和屬組必須與當前用戶所在組相對應。可以通過
ls -l <路徑>查看指定路徑的屬主和屬組,并使用chown <屬主>:<屬組> <路徑>更改指定路徑的屬主和屬組。日志文件、權重配置文件和用戶配置文件等通常涉及文件或目錄屬主/屬組檢驗。 - 網絡波動影響:在Client模式下,MindIE Client與Server-Endpoint之間的通信會受到網絡波動的影響,這可能會對最終統計的性能結果產生一定影響。
1.3 應用場景
MindIE Benchmark支持兩種不同的推理模式,以適應不同的應用場景需求:
- Client模式:
-
該模式通過調用MindIE Client接口與Server-Endpoint進行通信并完成測試。
-
文本模式下支持全量文本生成及流式文本生成兩種方式,分別調用MindIE Client的
.generate()和.generate_stream()接口,對應MindIE Server的兼容Triton的文本推理接口和兼容Triton的流式推理接口。 -
此模式適用于模擬多用戶并發場景,兼容TGI、Triton和vLLM等多種接口,主要用于測量服務化性能。Client測量的吞吐量為用戶真實感知的吞吐量,其計入包括網絡請求和數據處理等消耗的時間。
- Engine模式:
- 該模式通過直接調用MindIE LLM中LLM Manager提供的Python接口進行全量推理,詳細接口說明請參見《MindIE LLM開發指南》中的“API接口說明 > LLM Manager提供的Python接口”章節。
- 支持token id到token id異步推理和文本到文本的異步推理。
- 支持精度測試的數據集包括純文本數據集CEval 5-shot、GSM8K、MMLU 5-shot和多模態數據集TextVQA、VideoBench、VocalSound。性能測試的數據集則包括GSM8K、OA、CEval 5-shot、MMLU 5-shot、BoolQ、HumanEval、mtbench和cocotest,主要使用GSM8K和OA兩個數據集來測試模型的性能。
- Engine模式測量的吞吐量更接近NPU卡的真實性能,因為它是直接調用底層API并將NPU推理返回的結果暫存,當所有推理完成后由CPU處理暫存的數據。
在Engine模式中,使用的ModelName(模型名稱)和ModelPath(模型權重路徑)需要與MindIE Server的config.json配置文件中的modelName和modelWeightPath參數保持一致。此外,npuDeviceIds(NPU卡編號)和maxBatchSize(最大decode batch size)參數的值是由MindIE Server中的config.json配置文件決定的,詳情請參見配置參數說明。
MindIE Benchmark工具為評估大語言模型的推理性能和精度提供了一種高效且靈活的方式。通過詳細的統計分析和可視化展示,用戶可以輕松了解模型在不同配置下的表現,并根據實際需求進行優化調整。無論是Client模式還是Engine模式,MindIE Benchmark都能為用戶提供可靠的性能評估支持,助力大語言模型的應用與發展。
二、測試過程
2.1 環境變量配置
進入部署過程中啟動的容器內,使用以下命令配置環境變量。
2.2 導入數據集
導入文本推理數據集:test_data_gsm8k.jsonl
示例:
{"question": "<_system>你是中國電信星辰語義大模型,英文名是TeleChat,你是由中電信人工智能科技有限公司和中國電信人工智能研究院(TeleAI)研發的人工智能助手。\n<_user>\n你是一位擅長文本生成的智能助手,能夠從多輪對話中理解上下文關系并提煉出用戶的完整問題。請按照以下步驟處理用戶的對話內容:\n\n1. 【識別上下文關系】:判斷多輪對話問題之間是否存在關聯。如果對話之間存在關聯,則返回true,如果對話之間相互獨立,則返回false。用【hasContext】來表示。\n2. 【關聯對話輪次】:將相互關聯的對話輪次分組,并存儲在列表中。每組應該包含相關的對話輪次。如果沒有上下文關系,則直接返回空列表,用【mergeRound】來表示。\n3. 【總結用戶問題】:根據每組輪次的內容,概括總結出用戶的完整問題。注意總結時僅關注該組的對話內容,盡量足夠精簡不要重復,用【contextAnswer】來表示。\n4. 【構建JSON】:返回一個JSON字符串,格式如下:\n {\n \"hasContext\": \"表示是否存在上下文關系\", \n \"mergeRound\": \"表示需要合并的輪次\",\n \"contextAnswer\": \"表示概括總結的完整問題\"\n }\n\n下面是 【河北省】 用戶的多輪對話內容:\n第1輪對話:我的寬帶協議到期,8月1日。再續協議怎么辦理?\n第2輪對話:你查一下我用好多年了\n\n【輸出結果】:\n<_bot>", "answer": "{\"hasContext\": \"true\", \"mergeRound\": [[1, 2]], \"contextAnswer\": [\"寬帶到期怎么續約\"]}"}
2.3 啟動命令
2.3.1 不帶后處理性能測試樣例
Client推理模式運行時,會調用MindIE Client相應的接口向MindIE Server Endpoint發送推理請求并進行打點統計,與用戶實際使用情景一致。
benchmark \
--DatasetPath "/model/test_data_gsm8k.jsonl" \
--DatasetType "gsm8k" \
--ModelName deepseekr1 \
--ModelPath "/model/DeepSeek-R1-bf16" \
--TestType client \
--Http //主節點ip:port \
--Concurrency 20 \
--TaskKind text \
--Tokenizer True \
--MaxOutputLen 512
DatasetPath:數據集文件所在的目錄,根據數據集路徑獲取數據,解析后根據批次和分詞標識進行處理.Tokenizer為True時:采用文本推理模式,該參數應該傳入原始數據集文件夾路徑;Tokenizer為False時:采用tokenids推理模式,該參數傳入已經將數據集處理為tokenids的csv文件的路徑。(--Tokenizer為False時,數據集轉換方式參考數據集使用)
DatasetType:數據集類型,枚舉值:ceval、gsm8k、oasst1、boolq、truthfulqa、humaneval、mmlu、mtbench、cocotest和synthetic。
ModelName:模型名稱。與MindIE ServerModelConfig參數說明中的modelName參數保持一致。
ModelPath:模型路徑;傳遞模型初始化配置。與MindIE ServerModelConfig參數說明中的modelWeightPath參數保持一致。
TestType:取值為client、vllm_client、tgi_client、openai或triton_client。其中vllm_client、tgi_client或triton_client只能基于對應的三方框架上才能運行。
Http:請求url,默認為"//127.0.0.1:1025",實際請根據MindIE ServerScheduleConfig參數說明中的ipAddress和port參數進行配置。
Concurrency:并發數,限制同時發起的連接數。Client模式下,不超過endpoint所支持的最大連接數。取值范圍:[1,1000]。
TaskKind:判斷使用Client的哪種模式進行推理,默認值為stream。stream:流式推理接口;text:非流式推理接口;stream_token:token流式推理接口。
Tokenizer:分詞向量化標識,取值True或者False,默認值為True。True:輸入結果為文本;False:表示輸入結果為tokens。
MaxOutputLen:最大輸出長度,取值范圍:[1,1048576]。該參數與ScheduleConfig參數說明中的“maxlterTimes”參數取小作為最大輸出長度。當“DatasetType”取值為“synthetic”時,該參數無效,通過配置文件synthetic_config.json中的“Output”參數控制最大輸出長度。
2.4 參數調整(可選)
進入MindIE Benchmark的安裝路徑{$HOME}/{python版本}/site-packages/mindiebenchmark/config并打開“config.json”文件
例如:vim /usr/local/lib/python3.11/site-packages/mindiebenchmark/config/config.json
CA_CERT:驗簽證書文件路徑,為MindIE Server服務端證書的驗簽證書/根證書。當使用MindIE Benchmark的Client推理模式且MindIE Server的配置參數httpsEnabled為true時,必須配置。
KEY_FILE:客戶端私鑰文件路徑。當使用MindIE Benchmark的Client推理模式且MindIE Server的配置參數httpsEnabled為true時,必須配置。
CERT_FILE:客戶端證書文件路徑。當使用MindIE Benchmark的Client推理模式且MindIE Server的配置參數httpsEnabled為true時,必須配置。
CRL_FILE:客戶端吊銷列表證書文件路徑。可選配置,當使用MindIE Benchmark的Client推理模式且MindIE Server的配置參數httpsEnabled為true時,會校驗驗簽證書是否在吊銷列表內。
INSTANCE_PATH:MindIE Benchmark結果保存路徑,默認保存在./instance。
ENABLE_MANAGEMENT:MindIE Benchmark管理端口使能。MindIE Benchmark是否通過管理端口查詢服務端健康狀態。默認值:false
MAX_LINK_NUM:服務端最大連接數,默認為1000。當前支持最大連接數為1000,不可配置超過1000。
2.5 查看測試結果
其中Concurrency表示并發數(此處設置為20),
GenerateSpeedPerClient表示單用戶生成token/s的速度。