在线服务压测指南
更新时间:2025-03-10
千帆ModelBuilder Python SDK 提供了基对推理服务V2版本大模型服务进行压测以及性能评估功能。
使用场景
千帆ModelBuilder给用户提供标准的压测工具,可以在以下或其他场景使用:
- 测试sft模型部署到算力单元后,实际的性能效果
- 对比模型压缩后的性能效果
- 测试预置服务的性能
压测流程
步骤一:安装相关依赖。
步骤二:准备压测数据。
步骤三:启动压测
安装相关依赖
压测需要使用以下方式进行依赖安装:
pip install 'qianfan[dataset_base]'
准备压测数据
用于压测的数据集,目前支持jsonl格式。
- jsonl格式示例
注意:如果导出千帆ModelBuilder data数据集,可直接作为压测数据集。
主要用于多轮对话的场景,其中一个括号就是一段对话。最后的回答会在输入中被忽略。示例如下:
[{"prompt": "请根据下面的新闻生成摘要, 内容如下:国家发展改革委、外交部、商务部联合发布《推动共建丝绸之路经济带和21世纪海上丝绸之路的愿景与行动》,省交通运输厅有关负责人表示,我省将统筹规划,全力打造海口、洋浦、三亚港口群,建成21世纪海上丝绸之路的“桥头堡”。\n生成摘要如下:"}]
[{"prompt": "请根据下面的新闻生成摘要, 内容如下:国家发展改革委、外交部、商务部联合发布《推动共建丝绸之路经济带和21世纪海上丝绸之路的愿景与行动》,省交通运输厅有关负责人表示,我省将统筹规划,全力打造海口、洋浦、三亚港口群,建成21世纪海上丝绸之路的“桥头堡”。\n生成摘要如下:"}]
启动压测
注意以下事项:
- 压测入口在Dataset对象的stress_test方法中。
- 对大模型服务进行性能测试,需要在导入 qianfan 模块之前设置环境变量 QIANFAN_ENABLE_STRESS_TEST 为 true
import os
# 设置环境变量,固定值如下
os.environ['QIANFAN_ENABLE_STRESS_TEST'] = "true"
# 设置API Key值,开发者需替换成实际值,如何获取请查看https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Um2wxbaps#步骤二-获取api-key
os.environ["QIANFAN_BEARER_TOKEN"] = "bce-v3/*******"
# 设置平台地址,固定值如下
os.environ["QIANFAN_CONSOLE_API_BASE_URL"] = "https://qianfan.baidubce.com"
# 设置调用接口,例如对话Chat固定值如下
os.environ["QIANFAN_CHAT_V2_API_ROUTE"] = "/v2/chat/completions"
from qianfan.dataset import Dataset
# 需要初始化一个数据集对象
ds = Dataset.load(data_file="./stress_test_data.jsonl")
ds.stress_test(
users=20,
workers=20,
spawn_rate=20,
#model="ep-20240529142309-kqf6s", # doubao-pro-32k
model="ernie-speed-pro-128k", # doubao-lite-4k
model_type="ChatCompletion",
log=True,
runtime="10m", # 可选参数
hyperparameters={
"headers": {"appid": "app-hq***pQ1"},# 选填,如何获取请查看V2版本应用ID,https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fllg87pck#v2版本应用id
"safety_level":"none",# 选填
"safety": {"input_level": "none"},
"_no_extra_parameters": True, # openai 不允许多余的参数,extra_parameters 默认会被传入千帆API,此处关闭SDK自动增加的extra_parameters
"stream_options":{
"include_usage":True
}
},
version=2,
)
函数列表
初始化数据集对象
- 示例
Dataset.load(data_file="./stress_test_data.jsonl")
- 请求参数
参数 | 类型 | 必填 | 描述 |
---|---|---|---|
data_file | str | 是 | 压测数据集,支持以下数据格式: · jsonl |
- 调用结果
完成初始化数据集对象。
发起压测
ds.stress_test()
- 请求参数
名称 |
类型 | 必填 | 描述 |
---|---|---|---|
users | int | 是 | 指定发压使用的总user数,也就最终的发压并发数。说明: (1)建议值:100 (2)users必须大于等于workers数目 (3)每个worker负责模拟${users}/${workers}个虚拟用户 |
workers | int | 是 | 指定发压使用的worker数目,说明: (1)建议值:10 (2)每个worker为1个进程 |
spawn_rate | int | 是 | 指定每秒真实启动的user数目,一直增长到users大小以后,不再新增启动。说明:建议值为5 |
runtime | str | 否 | 指定发压任务的最大运行时间,说明: (1)格式为带时间单位的字符串,例如:300s,20m,3h,1h,30m (2)压测任务启动后会一直运行到数据集内所有数据都请求完毕,或到达该参数指定的最大运行时间 (3)默认值为0,表示不设最大运行时间 |
model_type | str | 否 | 指定被测服务的模型类型,说明: (1)针对推理服务API V2版本,当前支持 ChatCompletion |
endpoint | str | 否 | 用于指定用户自行发布的模型服务,该参数与model只能填写一个,说明: · 如果是平台训练模型,可以通过查看服务地址获取该字段值,详情请查看新手指南-平台使用快速开始:model值为在创建服务时对应的API地址,如下图所示: ![]() |
model | str | 否 | 指定需要压测服务的模型名称,说明:该参数与endpoint只能填写一个 |
hyperparameters | Optional[Dict[str, Any]] | 否 | 说明:指定压测时使用的超参数,例如:hyperparameters={"temperature":0.5} |
- 调用结果
启动压测。