一、引言
随着大语言模型(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 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,默认为"https://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的速度。