使用千帆SDK压测千帆大模型平台上的服务

news2024/11/13 18:09:14

场景

给用户提供千帆标准的压测工具(千帆SDK)。满足以下使用场景:

  1. 测试sft模型部署到算力单元后,实际的性能效果

  2. 对比模型压缩后的性能效果

  3. 测试预置服务的性能

压测数据准备(数据格式规范说明)

可用于stress_test的数据集目前支持以下三种格式:

jsonl格式示例(兼容千帆data数据集格式)

千帆data数据集导出,可直接用于压测

这种格式主要用于多轮对话的场景,其中一个括号就是一段对话。最后的response回答字段会在输入中被忽略

[{"prompt": "请根据下面的新闻生成摘要, 内容如下:新华社受权于18日全文播发修改后的《中华人民共和国立法法》,修改后的立法法分为“总则”“法律”“行政法规”“地方性法规、自治条例和单行条例、规章”“适用与备案审查”“附则”等6章,共计105条。\n生成摘要如下:"}]
[{"prompt": "请根据下面的新闻生成摘要, 内容如下:一辆小轿车,一名女司机,竟造成9死24伤。日前,深圳市交警局对事故进行通报:从目前证据看,事故系司机超速行驶且操作不当导致。目前24名伤员已有6名治愈出院,其余正接受治疗,预计事故赔偿费或超一千万元。\n生成摘要如下:"}]

[{"prompt": "请根据下面的新闻生成摘要, 内容如下:新华社受权于18日全文播发修改后的《中华人民共和国立法法》,修改后的立法法分为“总则”“法律”“行政法规”“地方性法规、自治条例和单行条例、规章”“适用与备案审查”“附则”等6章,共计105条。\n生成摘要如下:"}]

[{"prompt": "请根据下面的新闻生成摘要, 内容如下:一辆小轿车,一名女司机,竟造成9死24伤。日前,深圳市交警局对事故进行通报:从目前证据看,事故系司机超速行驶且操作不当导致。目前24名伤员已有6名治愈出院,其余正接受治疗,预计事故赔偿费或超一千万元。\n生成摘要如下:"}]

json格式示例

[
{"prompt": "地球的自转周期是多久?", "response": "大约24小时"},
{"prompt": "人类的基本单位是什么?", "response": "人类"}
]

txt格式示例

最简单的数据集格式,降低用户数据整理成本

人体最重要的有机物质是什么?
化学中PH值用来表示什么?
第一个登上月球的人是谁?

启动压测

前置说明

如果用户想要对大模型服务进行性能测试,需要在导入 qianfan 模块之前设置环境变量 QIANFAN_ENABLE_STRESS_TESTtrue

然后准备好测试用的数据集。数据集就绪后,可调用数据集的stress_test接口启动压测任务。

如果使用macbook压测,需要先命令行设置环境变量: export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES

方法参数说明

认证参数

认证方式

参数名

参数类型

是否必须

参数描述

千帆应用认证

os.environ["QIANFAN_AK"] = ""

str

二选一

千帆控制台-应用接入-创建的应用AK,IAM认证和千帆应用认证二选一

优势:如果要使用去安全等级压测,建议使用千帆应用认证,因为开白是基于千帆应用appid开白。

劣势:只能调用千帆的推理接口API,无法调用千帆的管控面OpenAPI

os.environ["QIANFAN_SK"] = ""

str

千帆控制台-应用接入-创建的应用SK

百度智能云IAM认证

os.environ["QIANFAN_ACCESS_KEY"] = ""

str

二选一

百度智能云IAM的AccessKey,IAM认证和千帆应用认证二选一

优势:即可以调用千帆的推理接口API,也可以调用千帆的管控面OpenAPI

os.environ["QIANFAN_SECRET_KEY"] = ""

str

百度智能云IAM的SecretKey

输入数据集参数

参数名

参数类型

是否必须

参数描述

ds = Dataset.load(data_file="./stress_test_data.jsonl")

str

压测数据集,支持前面章节提到的三种数据格式:

  1. jsonl

  2. json

  3. txt

stress_test参数

参数名

参数类型

是否必须

参数描述

users

int

建议值:100。指定发压使用的总user数,也就最终的发压并发数。users必须大于等于worker数目;每个worker负责模拟${users}/${workers}个虚拟用户;

workers

int

建议值:10。指定发压使用的worker数目,每个worker为1个进程;

spawn_rate

int

建议值:5。指定每秒真实启动的user数目,一直增长到users大小以后,不再新增启动。

runtime

str

指定发压任务的最大运行时间,格式为带时间单位的字符串,例如(300s, 20m, 3h, 1h30m);压测任务启动后会一直运行到数据集内所有数据都请求完毕,或到达该参数指定的最大运行时间;该参数默认值为'0s',表示不设最大运行时间;

model_type

str

指定被测服务的模型类型。 目前只支持'ChatCompletion'与'Completion'两类;默认值为'ChatCompletion';

目前千帆大部分模型都是ChatCompletion类型,所以此参数可以不用设置。

endpoint

str

推荐使用

指定需要压测服务的url路径。该参数与model只能指定一个;

定制服务只能用endpoint。

服务的endpoint,也是uri地址。

  • 如果为用户定制服务(sft模型),服务地址url:https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/hfleeyco_test_0703,则endpoint为:hfleeyco_test_0703,如下图所示:

  • 如果为千帆预置服务,如ERNIE-3.5-8K,服务地址url:

https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions,则endpoint为:completions

model

str

指定需要压测服务的模型名称。该参数与endpoint只能指定一个;

hyperparameters

Optional[Dict[str, Any]]

  • 指定压测时使用的超参数;

  • 例如:hyperparameters={"temperature":0.5}

完整调用示例

安装千帆sdk

注意,python版本需要大于3.7,建议3.8以上版本

pip install -U qianfan["dataset_base"]

pip install -U qianfan["dataset_base"]

执行压测代码

这个调用示例包含全参数,在上面的表格当中说明了哪些是必填的。用户实际可以不需要填写全部

import os

os.environ['QIANFAN_ENABLE_STRESS_TEST'] = "true"

from qianfan.dataset import Dataset

# 接口调用认证,以下方式二选一
# iam认证
os.environ["QIANFAN_ACCESS_KEY"] = "百度智能云IAM的AccessKey"
os.environ["QIANFAN_SECRET_KEY"] = "百度智能云IAM的SecretKey"

# 千帆应用认证
os.environ["QIANFAN_AK"] = "千帆控制台-应用接入-创建的应用AK"
os.environ["QIANFAN_SK"] = "千帆控制台-应用接入-创建的应用SK"

# 需要初始化一个数据集对象
ds = Dataset.load(data_file="./stress_test_data.jsonl")

ds.stress_test(
    users=100,
    workers=10,
    spawn_rate=5,
    # model="ERNIE-Bot3.5-8K",
    endpoint="hfleeyco_test_0703", # 可选参数
    model_type="ChatCompletion", # 可选参数
    runtime="15m", # 可选参数
    hyperparameters={"temperature":0.9} # 可选参数
)

workers:启动10个进程来模拟并发请求

users:总模拟并发100

spawn_rate:每秒新增5个,一直增加到100个以后,不再新增, 后续从第11s开始,全部都按照100并发发压。

报告解读

控制台输出压测结果

[2024-07-11 14:11:15,009] [INFO] run completed.
[2024-07-11 14:11:15,018] [INFO] Log path: record/20240711T135612Z/run.log
[2024-07-11 14:11:15,020] [INFO] Load Test Statistics
QPS: 3.59
RPM: 215.4
Latency Avg: 25.47
Latency Min: 0.28
Latency Max: 46.75
Latency 50%: 24.94
Latency 80%: 30.82
FirstTokenLatency Avg: 19.06
FirstTokenLatency Min: 0.09
FirstTokenLatency Max: 27.32
FirstTokenLatency 50%: 19.27
FirstTokenLatency 80%: 21.73
InputTokens Avg: 354.86
OutputTokens Avg: 163.42
TotalQuery: 10000
SuccessQuery: 9891
FailureQuery: 109
TotalTime: 902.61
SuccessRate: 98.91%

数据整理

并发

QPS

Latency

FirstTokenLatency

InputTokens

OutputTokens

SuccessRate

avg

min

max

50%

80%

avg

min

max

50%

80%

avg

avg

100

3.59

25.47

0.28

46.75

24.94

30.82

19.06

0.09

27.32

19.27

21.73

354.86

163.42

98.91

指标意义

  • 并发:客户端的并发发压请求数量。

  • QPS:服务每秒平均处理的请求数;模型真实qps响应。

  • Latency min/max/avg/50p/80p:请求完整时延的最小值/最大值/平均值/50分位值/80分位值;

  • FirstTokenLatency min/max/avg/50p/80p:请求首字(或首句)时延的最小值/最大值/平均值/50分位值/80分位值;

  • PromptTokens avg:平均每条query输入token长度;

  • OutputTokens avg:平均每条query输出token长度;

  • SuccessRate:请求成功率;

注1:除SuccessRate外其余指标统计时均剔除了失败或异常请求;
注4:Token吞吐可以使用(OutputTokens avg+InputTokens avg)*QPS相乘来计算;【也有说用OutputTokens avg和QSP相乘来作为吞吐】

并发

TPS

QPS

Latency

FirstTokenLatency

InputTokens

OutputTokens

SuccessRate

avg

min

max

50%

80%

avg

min

max

50%

80%

avg

avg

24

=3.52*(354.66+164.46)

=1827

3.52

6.69

0.13

27.35

5.5

11.24

0.2

0.06

1.65

0.11

0.21

354.66

164.46

98.99

Locust可视化压测报告

压测完毕,在本地目录下会有record日志

找到report.html打开查看压测数据

报表化压测报告

在record目录下找到performance_table.html

打开performance_table.html查看压测表格数据

 

示例如下:

云端调用统计查看压测数据

多轮压测

在前面给出了单轮压测指南,单轮压测主要是固定一个并发数进行压测。

当用户希望一次压测任务测试不同并发下的qps,可以使用multi_stress_test进行多轮压测,然后通过performance_table.html查看不同并发下的qps

multi_stress_test参数

参数名

参数类型

是否必须

参数描述

origin_users

int

建议值:100。指定发压使用的初始用户数,也就最终的发压并发数。origin_users必须大于等于worker数目;每个worker负责模拟${users}/${workers}个虚拟用户;

workers

int

建议值:10。指定发压使用的worker数目,每个worker为1个进程;

spawn_rate

int

建议值:5。指定每秒真实启动的user数目,一直增长到users大小以后,不再新增启动。

rounds

int

指定压测轮数;multi_stress_test多轮压测场景必填

interval

int

指定压测轮之间的加压并发数;multi_stress_test多轮压测场景必填。比如interval=2,则在第1轮压测结束后,会在第2轮开始时,额外启动两个user的并发,以此类推;

first_latency_threshold

float

指定首句时延的阈值,超过该阈值会停止在本轮压测,单位为秒;

round_latency_threshold

float

指定全长时延的阈值,超过该阈值会停止在本轮压测,单位为秒;

success_rate_threshold

float

指定请求成功率的阈值,低于该阈值会停止在本轮压测,单位为百分比;

runtime

str

指定发压任务的最大运行时间,格式为带时间单位的字符串,例如(300s, 20m, 3h, 1h30m);压测任务启动后会一直运行到数据集内所有数据都请求完毕,或到达该参数指定的最大运行时间;该参数默认值为'0s',表示不设最大运行时间;

model_type

str

指定被测服务的模型类型。 目前只支持'ChatCompletion'与'Completion'两类;默认值为'ChatCompletion';

目前千帆大部分模型都是ChatCompletion类型,所以此参数可以不用设置。

endpoint

str

推荐使用

指定需要压测服务的url路径。该参数与model只能指定一个;

定制服务只能用endpoint。

服务的endpoint,也是uri地址。

  • 如果为用户定制服务(sft模型),服务地址url:https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/hfleeyco_test_0703,则endpoint为:hfleeyco_test_0703,如下图所示:

  • 如果为千帆预置服务,如ERNIE-3.5-8K,服务地址url:

https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions,则endpoint为:completions

model

str

指定需要压测服务的模型名称。该参数与endpoint只能指定一个;

hyperparameters

Optional[Dict[str, Any]]

  • 指定压测时使用的超参数;

  • 是否过安全算子在此处设置,例如:hyperparameters={"temperature":0.5,"safety_level":"none"},此处none表示不过安全。safety_level是开白参数,参考千帆安全等级调整说明&使用指南

示例代码

import os

os.environ['QIANFAN_ENABLE_STRESS_TEST'] = "true"

from qianfan.dataset import Dataset

# 百度智能云IAM认证
#os.environ["QIANFAN_ACCESS_KEY"] = "xx"
#os.environ["QIANFAN_SECRET_KEY"] = "xx"

# 千帆应用接入认证
os.environ["QIANFAN_AK"] = "xx"
os.environ["QIANFAN_SK"] = "xx"

# 需要初始化一个数据集对象

ds = Dataset.load(data_file="./stress_test_data.jsonl")


ds.multi_stress_test(
    origin_users=10,
    workers=10,
    spawn_rate=10,
    rounds=10,
    interval=5,
    #model="ERNIE-Speed-8K,
    endpoint="l94ptbaz_xuwei32tiny",
    model_type="ChatCompletion",
    runtime="30s",    
    hyperparameters={"temperature":0.9},
    #first_latency_threshold = 20,
    #round_latency_threshold = 100,
    #success_rate_threshold = 0.8,
)

查看报告

打开:performance_table.html

 

可以看到多轮压测的报告汇总

github链接

pytho代码形式:https://github.com/baidubce/bce-qianfan-sdk/blob/main/docs/stress_test.md

notebook形式:https://github.com/baidubce/bce-qianfan-sdk/blob/main/cookbook/dataset/stress_test.ipynb

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1943536.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DAY05 CSS

文章目录 1 CSS选择器(Selectors)8. 后代(包含)选择器9. 直接子代选择器10. 兄弟选择器11. 相邻兄弟选择器12. 属性选择器 2 伪元素3 CSS样式优先级1. 相同选择器不同样式2. 相同选择器相同样式3. 继承现象4. 选择器不同权值的计算 4 CSS中的值和单位1. 颜色表示法2. 尺寸表示法…

Try ubuntu core (by quqi99)

作者:张华 发表于:2024-07-20 版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明(http://blog.csdn.net/quqi99) try ubuntu core on qemu #ovmf is to ensure compatibility with the re…

电机线电流与转差率曲线理论推导

1.推导基础: #已知正转正拉电流近似为: curr_in_upward (im im*(rm(lml2)*2*np.pi*freq_in*1j)/(r2 l2*2*np.pi*freq_in*1j (1-s)/s*r2))#同工况同负载,正转反拉电流近似为: curr_in_downward (im im*(rm(lml2)*2*np.pi*f…

代码随想录第六十二天 | 739. 每日温度 , 496.下一个更大元素 I ,503.下一个更大元素II

先复习一下栈与队列。栈是先进后出,队列是先进先出。二者都属于STL容器(版本是SGI STL)中的容器适配器。底层容器完成其所有的工作,对外提供统一的接口,底层容器是可插拔的。如果没有指定底层实现的话,默认…

22-联合体与枚举

22-联合体与枚举 文章目录 22-联合体与枚举一、 联合体1.1 定义和特点1.2 语法1.3 示例1.4 联合体的使用1.5 联合体的使用:检查系统的字节序 二、 枚举2.1 定义和特点2.2 语法2.3 枚举常量的值可以手动修改 一、 联合体 1.1 定义和特点 联合体(Union&a…

扩展PyTorch视觉模型

扩展PyTorch视觉模型 目录 扩展PyTorch视觉模型 一、概述 二、扩展基本视觉模型的原因 1. 性能提升 2. 功能扩展 3. 资源管理 三、扩展PyTorch视觉模型的方法 1.修改现有架构 2.应用模型集成技术 3.量化和压缩模型 四、高级技巧与实践 1.自定义训练循环 2.深度模型…

【SpringBoot】 jasypt配置文件密码加解密

目前我们对yml配置文件中的密码都是明文显示,显然这不安全,有的程序员离职了以后可能会做一些非法骚操作,所以我们最好要做一个加密,只能让领导架构师或者技术经理知道这个密码。所以这节课就需要来实现一下。 我们可以使用jasypt…

Gitops-万字保姆级教程-小白也可以轻松学会! (Part 2)

系列文章目录 本文章分为2个部分: Part 1主要涉及Gitlab、Gitlab-Runner、Git-Ci、Sonar-qube-CI阶段 Part 2主要涉及ArgoCD阶段 Gitops-万字保姆级教程-小白也可以轻松学会! (Part 1)-CSDN博客 Gitops-万字保姆级教程-小白也可以轻松学会! (Part 2) 文章目录 目…

【测试能力提升----fastapi框架项目】需求分析

1. FastAPI框架架构 2. 场景分析 2.1 系统分类 单一用户权限系统(实用于CMS模型)多用户多权限系统(实用于多租商户类型) 2.2 功能模块 用户登录模块用户管理模块角色权限管理模块基本设置模块日志模块 2.3 需求分析 用户登录…

[米联客-安路飞龙DR1-FPSOC] FPGA基础篇连载-25 ADC模块FEP-DAQ9248采集显示波形方案

软件版本:Anlogic -TD5.9.1-DR1_ES1.1 操作系统:WIN10 64bit 硬件平台:适用安路(Anlogic)FPGA 实验平台:米联客-MLK-L1-CZ06-DR1M90G开发板 板卡获取平台:https://milianke.tmall.com/ 登录“米联客”FPGA社区 ht…

24年广东“双百社工”招聘报名流程详细步骤

还在蹲公告的宝子们注意啦!🔥24年广东双百社工公告陆续出啦!⚠️中山双百社工招聘57人,佛山双百社工招聘135人,其他地区也快了!⏰留给我们备考的时间只有一个月左右,想一次上岸的宝子抓紧备考&a…

《专题》numpy科学计算基础库——精细化讲解 <1>

一、什么是numpy库 Numpy(Numerical Python) 是科学计算基础库,提供大量科学计算 相关功能,比如数据统计,随机数生成等。其提供最核心类型为多维数组类型(ndarray),支持大量的维度数组与矩阵运算&#xff0…

Java面试题(每日更新)

每日五道!学会就去面试! 本文的宗旨是为读者朋友们整理一份详实而又权威的面试清单,下面一起进入主题吧。 目录 1.概述 2.Java 基础 2.1 JDK 和 JRE 有什么区别? 2.2 和 equals 的区别是什么? 2.3 两个对象的…

Linux ls命令详解

学习 Linux ,本质上是学习在命令行下熟悉使用 Linux 的各类命令; 1. Linux 命令通用格式 命令格式:命令 【-选项】【参数】(个别命令不遵循该格式) 短线(-)是区分选项和参数的标志,选项用来调整命令的功能…

redis的学习(一):下载安装启动连接

简介 redis的下载,安装,启动,连接使用 nosql nosql,即非关系型数据库,和传统的关系型数据库的对比: sqlnosql数据结构结构化非结构化数据关联关联的非关联的查询方式sql查询非sql查询事务特性acidbase存…

前端系列-6 使用Vue3搭建前端工程与setup语法糖介绍

背景 本文介绍如何使用vue3脚手快速搭建一个前端项目,并对生成的项目结构进行简单介绍,然后介绍setup语法糖。前端入门的同学可基于本文内容快速搭建属于自己的项目。 vue官网资料显示, vue3开发的项目相对vue2, 具有打包后体积变小,极速启动…

【网络】socket和udp协议

socket 一、六个背景知识1、Q1:在进行网络通信时,是不是两台机器在进行通信?2、端口号3、端口号vs进程PID4、目的端口怎么跟客户端绑定的呢?也就是怎么通过目的端口去找到对应的进程的呢?5、我们的客户端,怎…

textblob文本处理、词性分析与情感分析

1 前言 textBlob 是一個简单易用的 NLP库,基于 NLTK 和 pattern库, 提供了文本处理和情感分析等功能。 安装 textblob0.18.0 nltk3.8.1测试环境:Python3.10.9 使用前,先运行下面代码先下载些文件 import nltk nltk.download…

机器学习 | 阿里云安全恶意程序检测

目录 一、数据探索1.1 数据说明1.2 训练集数据探索1.2.1 数据特征类型1.2.2 数据分布1.2.3 缺失值1.2.4 异常值1.2.5 标签分布探索 1.3 测试集探索1.3.1 数据信息1.3.2 缺失值1.3.3 数据分布1.3.4 异常值 1.4 数据集联合分析1.4.1 file_id 分析1.4.2 API 分析 二、特征工程与基…

「YD-221WA无线多合一变送器」让高效监测触手可及!

前言 近年来,伴随着“中国制造2025”、“互联网”在我国的全面推进,智能无线仪表设备在工业控制领域大规模应用。“设备上云”成为众多企业实现数字化转型升级的重要策略,为提升仪表设备管理软件的网络化、智能化、易维护性等方面提供了强有…