type
Post
status
Published
date
Mar 11, 2025
slug
summary
tags
category
icon
password
前言:
本片文章对大模型接口的调用效率进行测试。
都2025年啦,不会还在用同步的方式一条一条的调用大模型接口吧,效率太低了,在任务中批量调用大模型接口属IO密集型任务,通过多线程或者异步方式可以显著提高效率。
测试数据是138条问题,大模型的任务是每条测试数据生成10个泛化问题,大模型采用Qwen2.5-72b量化版,使用vllm部署在4张L20显卡上。
📝 异步批量一次调用
不推荐这种方式
这种方式相当于同时向大模型接口服务发送了len(data)次请求。
同时发送大量请求给基础大模型接口服务存在以下两个弊端:
- 请求会发生异常

- 每个请求的响应时间都会变长。
对于普通公司普通家庭来说,GPU就那么点,每秒产生的token数量是有限制的,同时处理大量请求,每个请求的token甚至几秒才会gerenate一个,导致每个请求的处理时间都会变长。
🫥 异步队列
推荐
- 将所有待处理的数据放到异步队列中
- num_workers个任务从队列中取数据,然后调用大模型接口服务
worker数量 | 时间(单位:秒) |
1 | 838.02 |
5 | 183.93 |
10 | 114.39 |
🍖 多线程
将每个调用大模型接口的任务放入线程池中进行执行
线程池数量 | 耗时(单位:秒) |
1 | 824.72 |
5 | 180.45 |
10 | 125.61 |
📎 结论
由于基座大模型服务也有其他任务在执行,对我们的测试结果会有一定的影响,在我们的测试中异步和多线程耗时并没有很明显的区别,为什么?这就涉及到对异步和多线程理解的问题了。
在我们的测试中,不管是异步任务还是多线程任务,都是调用API,没有涉及到其他任务,然而调用API得到响应结果是一个必须要等待的过程,不管你的计算机有多快,发了138次请求,就必须要等待目标服务器处理完了之后才能响应。所以不管是异步队列处理还是多线程处理,要等待的时长都是一样的。
异步我们可以理解成一个任务分成多少个步骤做,在一个线程中的,多线程理解成多少个人在同时做任务。例如做早餐这么一个任务
同步的方式:(用时15分钟)
1.取出鸡蛋,面包和锅,然后打开炉子。 2.弄碎鸡蛋并将其倒入锅中。 3.等待鸡蛋煎好。 4.取出鸡蛋并加入调味料。 5.将面包放入烤面包机。 6.等待烤面包机烤完。 7.拿出烤面包。
异步的方式:(用时8分钟)
- 取出鸡蛋,面包和锅,然后打开炉子。
- 弄碎鸡蛋并将其倒入锅中。
- 等待鸡蛋煎好。
- 将面包放入烤面包机。
- 等待烤面包机烤完。
- 鸡蛋煎熟后,取出鸡蛋,然后添加调味料。
- 面包烤熟后,取出烤面包。
多线程方式:(用时8分钟)
有可能是凯文执行,有可能是佩奇执行
1.取出鸡蛋,面包和锅,然后打开炉子。 2.弄碎鸡蛋并将其倒入锅中。 1. 凯文将面包放进烤面包机。 3.等待鸡蛋煎好。 2. 凯文等待面包烤完。 4.取出鸡蛋并加入调味料。 3. 凯文拿出面包。
有问题,欢迎您在底部评论区留言,一起交流~