在上文我们介绍了如何使用腾讯云的GPU部署大模型,我们使用了FastChat框架部署了ChatGLM3-6B的模型。
但是通常我们在对模型选型时,还需要对大模型进行评测。
在评估AI模型时,我们除了要关注模型本身的性能指标外,还需考虑提供的模型服务性能、吞吐量以及并发性等方面。本文将介绍如何利用JMeter进行压力测试,并获取关键的QPS指标,以便后续的模型选择和性能优化。
一 JMeter介绍
JMeter 是一种开源的测试工具,用于评估和预测Web应用程序的性能。它支持多种负载测试技术,包括静态测试和动态测试。JMeter的主要优点如下:
- 跨平台支持:JMeter可以在Windows、Linux和macOS等操作系统上运行,同时支持多种语言。
- 多种测试类型:JMeter支持多种测试类型,包括负载测试、性能测试、稳定性测试和并发测试等。
- 易于使用:JMeter的界面友好且易于使用,使得用户可以快速上手。
二 安装Jmeter
2.1 安装JDK
首先去官网下载JDK
https://www.oracle.com/technetwork/java/javase/downloads/jdk13-downloads-5672538.html
这里需要注意一点:
之前的 jdk1.8 版本压缩包下载解压后直接运行会生成 jdk、jre 两个目录文件,但从 Java11 之后,只有 jdk 目录文件生成,没有 jre 目录文件,这时我们可以通过命令行方式手动生成 jre。
下载安装包后,管理员权限运行cmd,切换到 jdk 安装目录,执行如下命令:
代码语言:javascript复制binjlink.exe --module-path jmods --add-modules java.desktop --output jre
现在就和jdk1.8一样具有jdk和jre两个文件了,在环境变量中添加配置。
Java 回车,显示出 java 的相关信息;Javac 回车,显示出Java 编译的相关信息,表示安装成功。
2.2 安装JMeter
从官网下载:http://jmeter.apache.org/download_jmeter.cgi
选择binaries文件下载,下载后解压即可。
选择zip文件下载后,解压压缩包即可。然后添加环境变量:
我的电脑----属性----高级----环境变量----在系统变量
(1)JMETER_HOME
代码语言:json复制D:apache-jmeter-5.2.1apache-jmeter-5.2.1
(2)CLASSPATH
代码语言:javascript复制%JMETER_HOME%libextApacheJMeter_core.jar;%JMETER_HOME%libjorphan.jar;%JMETER_HOME%liblogkit-2.0.jar;
2.3 启动Jmeter
在bin目录下找到jmeter.bat文件,双击运行就可以了,会打开以下两个界面,不要关闭命令行界面
三 使用Jmeter
安装并启动Jmeter后,我们就可以测试我们的模型服务了,根据之前文章的介绍,我们现在已经有一个ChatGLM3的模型服务。
下面我们对服务进行压测:
3.1 设置语言
3.2 增加线程组
右击测试计划--添加--线程--线程组
添加线程组后可以看到有三个属性:
线程数:就是启动的线程个数。
Ramp-Up时间(秒):所有线程在时间段内把请求发送完(循环次数是1),而且请求的时间间隔是固定的=Ramp-Up time/线程数。
比如1秒10个线程数就是在1秒内开启10个线程;
比如5秒10个线程数就是每秒开启2个线程;
循环次数:就是每秒的线程数循环启动多少次。
比如线程数(5),ramp-up time(1), 循环次(2),就是每秒10个线程,总共10个线程;
比如线程数(10),ramp-up time(2), 循环次(2),就是每秒10个线程,总共20个线程;
所以并发个数是由这三个属性值一起设定的。
对这三个参数的深入理解和使用可以参考文章。
3.3 添加HTTP请求
3.4 添加HTTP请求header
3.5 添加结果树
添加查看结果树可以看到请求的返回信息,比如点击运行(绿色小三角),就能看到返回
3.6 添加常量吞吐量定时器
常数吞吐量定时器可以让JMeter以指定数字的吞吐量(即指定TPS,只是这里要求指定每分钟的执行数,而不是每秒)执行。
只有此线程:控制每个线程的吞吐量,选择这种模式时,总的吞吐量为设置的目标吞吐量乘以该线程的数量
所有活动线程:设置的目标吞吐量将分配在每个活跃线程上,每个活跃线程在上一次运行结束后等待合理的时间后再次运行。活跃线程指同一时刻同时运行的线程。
当前线程组中的所有活动线程:与所有活动线程的选项基本相同。唯一区别是,每个活跃线程都会在所有活跃线程上一次运行结束后等待合理的时间后再次运行。
所有活动线程(共享):设置的目标吞吐量将分配在当前线程组的每一个活跃线程上,当测试计划中只有一个线程组时,该选项和所有活动线程选项的效果完全相同。
当前线程组中的所有活动线程(共享):与当前线程组中的所有活动线程基本相同,唯一的区别是,每个活跃线程都会在所有活跃线程的上一次运行结束后等待合理的时间后再次运行。
这里设置的是目标吞吐量,结合3.2中的参数,我们预设1秒钟10个线程,那1分钟就是600个,所以这里我的目标吞吐量设置为600.
3.7 添加汇总报告
3.8 生成html报告
生成jtl文件
代码语言:javascript复制 E:program filesapache-jmeter-5.6.2apache-jmeter-5.6.2bin> .jmeter -n -t HTTP请求.jmx -l result.jtl
生成html
代码语言:javascript复制 E:program filesapache-jmeter-5.6.2apache-jmeter-5.6.2bin> .jmeter -g result.jtl -o .result
可以看到我们通过以上步骤,得到了比较完整的测试报告~通过报告我们可以分析出服务的TPS,最大响应时间等信息,再结合你的GPU使用率,就可以得出基本的结论,下一步就是思考怎么提升服务性能增加qps了~
我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!