上周三凌晨两点,我盯着监控屏幕上的QPS曲线,心里直打鼓。公司新上的那个垂直领域大模型,号称能处理十万级并发,结果刚上线半小时,延迟直接飙到8秒,用户骂声一片。那一刻我才明白,纸上谈兵全是扯淡,真正的地狱在压测现场。很多同行问我,到底该如何压测大模型才能避开这些坑?今天我不讲那些高大上的理论,就说说我这15年踩过的坑和实打实的经验。
首先,你得明白,压测不是跑个脚本就完事了。很多新手上来就用JMeter或者Locust,对着接口疯狂发请求,最后发现服务器CPU没满,内存爆了,或者GPU显存溢出,根本不知道问题出在哪。第一步,别急着压,先做“静态画像”。你得清楚你的模型架构,是纯LLM还是RAG?如果是RAG,向量数据库的检索速度往往比大模型推理更慢。我见过太多案例,大模型本身响应只要200毫秒,但向量检索花了2秒,结果全怪大模型慢。所以,先拆解链路,把Prompt工程、向量检索、LLM推理、后处理这几个环节单独拎出来测,搞清楚瓶颈到底在哪。
第二步,设计真实的流量模型。别搞那种均匀分布的简单请求,那太假了。真实场景是脉冲式的,比如早上9点上班高峰期,或者双11那种瞬间爆发。我在做压测时,会模拟用户打字速度,而不是瞬间发完所有字符。比如,一个用户平均每秒输入3个字,模型开始流式输出,你就要模拟这种“长尾”效应。如果只测首字延迟(TTFT),忽略了完整回复的耗时,上线后用户会觉得卡顿。记住,如何压测大模型,关键在于模拟真实的交互节奏,而不是单纯的吞吐量。
第三步,资源监控要细到颗粒度。光看服务器整体负载没用,得看GPU的SM利用率、显存占用、PCIe带宽。有一次我们发现,虽然GPU利用率只有60%,但延迟很高。后来查日志发现,是CPU在预处理Prompt时卡住了,导致GPU一直在等数据。这就是典型的CPU瓶颈。所以,压测时不仅要监控GPU,还要看CPU、内存、网络IO,甚至磁盘读写速度。特别是对于大模型,Prompt拼接和Token解码非常吃CPU资源,别忽视了这一点。
第四步,逐步加压,观察拐点。别一上来就满负荷。从10 QPS开始,每5分钟增加10 QPS,观察延迟和错误率的变化。当延迟开始非线性增长,或者错误率突然飙升时,那个点就是系统的极限。这时候,记录下当时的资源使用情况,看看是GPU显存满了,还是并发连接数达到了上限。这个拐点比你跑满100%负载更有参考价值,因为真实用户不会一直卡在极限状态。
最后,压测不是一次性的工作。模型迭代、Prompt优化、硬件升级,都会影响性能。建议建立常态化的压测机制,每次发布前都跑一遍基准测试。这样,当你发现性能下降时,能迅速定位是代码问题还是模型问题。
说了这么多,其实核心就一点:别迷信工具,要懂业务,懂架构。压测是为了发现问题,而不是为了刷数据好看。如果你还在为如何压测大模型而头疼,或者不知道如何设计更真实的测试场景,欢迎随时来聊聊。我不卖课,也不推销产品,就是希望能帮你少踩几个坑,早点下班。毕竟,做技术这行,头发掉得够多了,就别再让焦虑折磨自己了。