大模型api压力测试

一,压力测试

1,压测是什么

压测,即压力测试,是确立系统稳定性的一种测试方法,通常在系统正常运作范围之外进行,以考察其功能极限和隐患。主要检测服务器的承受能力,包括用户承受能力(多少用户同时玩基本不影响质量)、流量承受等。

2, 为什么要压测

压测的目的就是通过压测(模拟真实用户的行为),测算出机器的性能(单台机器的QPS),从而推算出系统在承受指定用户数(100W)时,需要多少机器能支撑得住。压测是在上线前为了应对未来可能达到的用户数量的一次预估(提前演练),压测以后通过优化程序的性能或准备充足的机器,来保证用户的体验。

3,压测类型

解释压力测试(Stress Testing)

​ 也称之为强度测试,测试一个系统的最大抗压能力,在强负载(大数据、高并发)的情况下,测试系统所能承受的最大压力,预估系统的瓶颈

并发测试(Concurrency Testing)

通过模拟很多用户同一时刻访问系统或对系统某一个功能进行操作,来测试系统的性能,从中发现问题(并发读写、线程控制、资源争抢)

耐久性测试(Configuration Testing)

通过对系统在大负荷的条件下长时间运行,测试系统、机器的长时间运行下的状况,从中发现问题(内存泄漏、数据库连接池不释放、资源不回收)

二,LLM的同步和异步

1.LLM的同步:

LLM如果只使用huggingface或者魔搭社区上的方法创建大模型时,通常你是在以同步的方式与模型进行交互。这意味着当你发送一个请求给模型(例如生成文本),你需要等待直到该请求完成并返回结果,期间你的程序会处于阻塞状态。这就是LLM的同步,同步调用可能会导致资源利用率不高,因为每次调用都会占用线程直到操作完成,代码也易于理解编写,仅仅适合适合于单用户环境或低并发需求的应用场景。

2.LLM的异步:

如果以异步方式与LLM进行交互时,可以发送多个请求而无需等待每个请求完成,这可以显著提高效率,尤其是在处理多个并发请求或长时间运行的任务时。异步引擎能够更好地利用系统资源,因为它可以在等待I/O操作完成的同时执行其他任务,从而实现更高效的多任务处理。虽然提供了更高的性能和灵活性,但编写和管理异步代码可能会增加开发的复杂性,需要开发者对异步编程有一定的了解。更适合于高并发、高性能要求的服务端应用,如在线API服务、实时聊天机器人等。

在现代软件开发中,高并发 API 测试是确保系统在高负载下稳定运行的关键步骤。本文将探讨在进行高并发 API 测试时,为什么选择协程(Coroutine)而不是线程(Thread),并提供相应的示例代码。

三,并行与并发

在深入讨论之前,有必要了解并行(Parallelism)和并发(Concurrency)的区别。

并发(Concurrency)

并发是指在同一时间段内处理多个任务的能力。并发并不一定意味着同时执行,而是指任务之间可以交替进行,从而在宏观上看起来是同时进行。

特性

任务交替执行:在单核处理器上,通过时间片轮转或任务切换实现多个任务的交替执行。

资源共享:并发任务通常共享系统资源,如 CPU、内存和 I/O 设备。

非阻塞:通过异步编程、事件驱动或多线程实现非阻塞操作,提高系统的响应能力。

并行(Parallelism)

并行是指在同一时刻同时执行多个任务。并行通常需要多核处理器或多台计算机来实现真正的同时执行。

特性

同时执行:多个任务在不同的处理器核心上同时执行。

独立任务:并行任务通常是相互独立的,不需要频繁的通信或共享资源。

提高吞吐量:通过同时执行多个任务,提高系统的整体处理能力。

线程与协程

在了解了并行与并发的区别后,我们来具体介绍线程和协程。

线程(Thread)

线程是操作系统能够进行运算调度的最小单位。它被包含在进程中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流。

特性

并行执行:多个线程可以在多核处理器上并行执行。

资源共享:同一进程内的线程共享内存和资源。

开销较大:线程的创建和上下文切换开销较大。

协程(Coroutine)

协程是一种比线程更轻量级的并发模型。协程在单线程的情况下也能实现并发操作,通过事件循环来调度任务。

特性

轻量级:协程的创建和上下文切换开销较低。

非阻塞:通过异步 I/O 操作实现非阻塞,适合 I/O 密集型任务。

单线程:协程在单线程事件循环中运行,不能利用多核处理器的并行能力。

为什么选择协程进行高并发测试?

在进行高并发 API 测试时,选择协程而不是线程有几个重要原因:

资源消耗

线程:线程的创建和上下文切换开销较大,可能导致系统资源耗尽。

协程:协程的创建和上下文切换开销较低,可以更高效地利用系统资源。

I/O 密集型任务

线程:虽然可以处理 I/O 密集型任务,但线程的高开销使其在处理大量 I/O 操作时效率不高。

协程:在处理大量 I/O 操作时表现优异,能够更高效地模拟高并发场景。

对于高并发 API 测试,协程通常是更优的选择,因为它们在处理大量 I/O 操作时更加高效,资源消耗更低。如果你的测试场景主要是 I/O 密集型(例如大量的网络请求),使用协程(如 asyncio aiohttp****)能够更有效地模拟高并发场景。

四,LLM基准测试

LLM性能的标准化基准测试可以使用许多工具完成,包括长期存在的工具(如LocustK6),以及专门用于LLM的新开源工具(如NVIDIA GenAI-PerfLLMPerf)。这些客户端工具为基于**LLM**的应用程序提供了特定的指标,但在如何定义、度量和计算不同的指标方面并不一致。本指南试图阐明常见的度量标准及其差异和局限性。还提供了一个分步指南,介绍如何使用我们首选的工具GenAI-PerfLLM应用程序进行基准测试。

值得注意的是,性能基准测试负载测试是评估大型语言模型部署的两种不同方法。

  • K6等工具所示,负载测试侧重于模拟对模型的大量并发请求,以评估其模拟真实世界流量和规模的能力。这种类型的测试有助于识别与服务器容量、自动扩展策略、网络延迟和资源利用率相关的问题。
  • 相反,如NVIDIAGenAI-Perf工具所示,性能基准测试关注的是测量模型本身 的实际性能,如吞吐量、延迟和token-level 指标。

本文主要关注这种类型的测试,并帮助识别与模型效率、优化和配置相关的问题。虽然负载测试对于确保模型能够处理大量请求至关重要,但性能测试对于理解模型高效处理请求的能力也至关重要。通过结合这两种方法,开发人员可以全面了解其大型语言模型部署的能力,并确定需要改进的地方。

五,locust框架WEB端参数

Type:请求类型

Name:请求路径

Requests:请求数量

Fails:当前失败请求数量

Median:中间值,一半服务器响应时间高于该值,一半低于该值

90%ile:90%服务器响应时间

Average:所有请求的平均响应时间

Min:请求的最少响应时间

Max:请求的最大响应时间

Average size:请求的平均大小

Current RPS:当前每秒请求数

Current Failures/s:每秒失败请求

每秒请求总数:如果上下波动较大,说明性能不稳定

响应时间:黄色为最大时间,绿色为最小时间。一般3-5秒为最佳,超过10秒为较差,最大值如果持续高位就需要进行性能优化。

虚拟用户数

GitHub压测工具:

https://github.com/lework/llm-benchmark

相关推荐
夜幕龙2 分钟前
LeRobot 项目部署运行逻辑(三)——机器人及舵机配置
人工智能·深度学习·机器人
Riseandshinexx5 分钟前
8、HTTPD服务--ab压力测试
linux·压力测试
Scc_hy9 分钟前
强化学习_Paper_2017_Curiosity-driven Exploration by Self-supervised Prediction
人工智能·python·深度学习·强化学习
硅谷秋水20 分钟前
基于视觉的自动驾驶 3D 占据预测:回顾与展望
人工智能·机器学习·计算机视觉·3d·自动驾驶
梦想画家21 分钟前
Bash 脚本:让数据库管理更高效
数据库·bash
想睡好25 分钟前
mysql约束
数据库
一键三联啊30 分钟前
GC的查看
java·jvm·python
说私域36 分钟前
基于定制开发开源AI智能名片S2B2C商城小程序的会员存量池构建策略研究
人工智能·小程序·开源·零售
远洋录1 小时前
Ethan独立开发产品日报 | 2025-04-29
人工智能·程序员·副业·独立开发·赚钱
James. 常德 student1 小时前
深度循环神经网络
人工智能·rnn·深度学习