LLM服务性能测试(未上线)
更新时间:2025-04-18
功能介绍
千帆 Python SDK 提供了基于locust工具的对大模型服务进行快速压测以及性能评估的功能。
安装准备
压测需要使用以下方式进行依赖安装:
pip install 'qianfan[dataset_base]'
注意事项
- 当前无法使用notebook进行压力测试
- 对于mac用户安装
qianfan[dataset_base]
可能碰到的以下问题,请在运行的终端中运行以下命令可临时解决:
export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES
调用示例
准备好测试用的数据集,调用stress_test接口启动压测任务。
import os
from qianfan.dataset import Dataset
# 压力测试需设置为true
os.environ['QIANFAN_ENABLE_STRESS_TEST'] = "true"
# 使用安全认证AK/SK鉴权,通过环境变量方式初始化;替换下列示例中参数,安全认证Access Key替换your_iam_ak,Secret Key替换your_iam_sk
os.environ["QIANFAN_ACCESS_KEY"] = "your_iam_ak"
os.environ["QIANFAN_SECRET_KEY"] = "your_iam_sk"
# 需要初始化一个数据集对象
ds = Dataset.load(data_file="...")
ds.stress_test(
users=1,
workers=1,
spawn_rate=128,
model="ERNIE-Bot",
model_type="ChatCompletion"
)
返回示例
运行过程中会实时输出已发送请求的聚合指标。 运行结束后会输出任务的日志路径,以及整体的聚合数据。 整体聚合数据内容示例如下:
QPS: 0.35
Latency Avg: 5.39
Latency Min: 4.58
Latency Max: 6.59
Latency 50%: 5.0
Latency 80%: 6.6
FirstTokenLatency Avg: 1.14
FirstTokenLatency Min: 1.12
FirstTokenLatency Max: 1.18
FirstTokenLatency 50%: 1.12
FirstTokenLatency 80%: 1.2
InputTokens Avg: 3.0
OutputTokens Avg: 61.0
SuccessRate: 100.0%
数据格式
可用于stress_test的数据集目前支持以下三种格式:
jsonl格式示例
这种格式主要用于多轮对话的场景,其中一个括号就是一段对话。最后的回答会在输入中被忽略。
[{"prompt": "请根据下面的新闻生成摘要, 内容如下:新华社受权于18日全文播发修改后的《中华人民共和国立法法》,修改后的立法法分为“总则”“法律”“行政法规”“地方性法规、自治条例和单行条例、规章”“适用与备案审查”“附则”等6章,共计105条。\n生成摘要如下:"}]
[{"prompt": "请根据下面的新闻生成摘要, 内容如下:一辆小轿车,一名女司机,竟造成9死24伤。日前,深圳市交警局对事故进行通报:从目前证据看,事故系司机超速行驶且操作不当导致。目前24名伤员已有6名治愈出院,其余正接受治疗,预计事故赔偿费或超一千万元。\n生成摘要如下:"}]
json格式示例
[
{"prompt": "地球的自转周期是多久?", "response": "大约24小时"},
{"prompt": "人类的基本单位是什么?", "response": "人类"}
]
txt格式示例
人体最重要的有机物质是什么?
化学中PH值用来表示什么?
第一个登上月球的人是谁?
参数说明
请求参数
名称 | 类型 | 必填 | 描述 |
---|---|---|---|
workers | int | 是 | 指定发压使用的worker数目,每个worker为1个进程。 |
users | int | 是 | 指定发压使用的总user数,必须大于worker数目;每个worker负责模拟users/workers个虚拟用户。 |
runtime | string | 否 | 指定发压任务的最大运行时间,压测任务启动后会一直运行到数据集内所有数据都请求完毕,或到达该参数指定的最大运行时间,格式为带时间单位的字符串,例如('300s', '20m', '3h', '1h30m'),说明: 该参数默认值为'0s',表示不设最大运行时间。 |
spawn_rate | int | 是 | 指定每秒启动的user数目 |
model | string | 是 | 指定需要压测服务的模型名称。该参数与endpoint只能指定一个 |
endpoint | string | 是 | 指定需要压测服务的url路径。该参数与model只能指定一个 |
model_type | string | 是 | 指定被测服务的模型类型。 目前只支持'ChatCompletion'与'Completion两类',说明: 若不指定,默认值为'ChatCompletion' |
hyperparameters | list[dict] | 否 | 指定压测时使用的超参数 |
返回参数
名称 | 类型 | 描述 |
---|---|---|
QPS | float | 服务每秒实际处理的请求数。 |
Latency Avg | float | 全长时延的平均值。 |
Latency Min | float | 全长时延的最小值。 |
Latency Max | float | 全长时延的最大值。 |
Latency 50% | float | 全长时延的50分位值。 |
Latency 80% | float | 全长时延的80分位值。 |
FirstTokenLatency Avg | float | 首句时延的平均值。 |
FirstTokenLatency Min | float | 首句时延的最小值。 |
FirstTokenLatency Max | float | 首句时延的最大值。 |
FirstTokenLatency 50% | float | 首句时延的50分位值。 |
FirstTokenLatency 80% | float | 首句时延的80分位值。 |
InputTokens Avg | float | 单次请求输入的token长度平均值。 |
OutputTokens Avg | float | 单次请求输出的token长度平均值。 |
SuccessRate | float | 请求成功率。 |