Atoms多模型同时调用如何限制请求数量
Atoms平台需在客户端统一管控多模型总并发数以避免429错误,通过全局信号量限制总请求数,并按权重或响应头动态分配子信号量。

Atoms平台能够支持同时调用多个大模型(像Qwen、GLM、DeepSeek等)来执行协同推理。可要是没有约束,多模型并行请求特别容易触发各服务商独立的QPM/TPM限流,这会让部分请求返回429错误,或者响应延迟大幅上升。必须在客户端层面统一管理总请求数量,而不是依赖单个模型SDK的内部限流。
配置全局并发信号量
打开Atoms主调度器文件scheduler.py,定位到class AtomOrchestrator初始化区域。
请先确认是否存在这样的语句:self.semaphore = asyncio.Semaphore(self.config.max_total_concurrent_requests)。要是不存在,那就得手动插入这行代码,它的位置应该在self.model_clients初始化之后,同时在self.task_queue创建之前。
在配置文件atoms_config.yaml中设置max_total_concurrent_requests: 4——
【该值必须小于所有目标模型QPM配额的最小值】
所有模型调用入口(如call_qwen()、call_glm())必须包裹在async with self.semaphore:上下文中,否则并发控制失效。
按模型类型动态分配子信号量
方法一:基于权重比例切分
若业务中Qwen承担70%流量、GLM承担30%,可在初始化时创建两个子信号量:self.qwen_sem = asyncio.Semaphore(3)、self.glm_sem = asyncio.Semaphore(1),对应总并发上限4。
方法二:按服务端响应头实时调整
监听每次响应头中的X-RateLimit-Remaining字段,当某模型剩余配额低于阈值(如<5)时,自动将该模型信号量临时降为1,持续30秒;此逻辑需写入post_request_hook()函数中。
注意:子信号量不可嵌套使用,即不能在async with self.qwen_sem:内再申请self.semaphore,否则引发死锁。
批量请求合并策略
第一步:识别可聚合任务
检查当前待发请求是否满足三个条件:①目标模型相同;②输入结构兼容(如均为chat/completions格式);③超时容忍度一致(如都允许15秒)。满足则进入合并队列。
第二步:启用批量封装器
调用BatchRequestBuilder.build_batch_payload(requests_list),传入最多8个原始请求对象;该函数会自动合并messages数组,并重设max_tokens为各请求预估输出token之和。
第三步:强制走批量接口路径
对Qwen模型,将原/v1/chat/completions请求改发至/v1/batch/chat/completions;对GLM模型,需将model参数显式改为glm-4-batch(非最新别名,Atoms内部路由映射为批量处理通道)。
这一步操作起来很简单,直接把文件拖进去就行。
-
下载
-
- 关于柯南的沙雕网名有哪些
- 角色扮演 | 1
- 网名
-
- 最新中性名字男女通用网名有哪些
- 角色扮演 | 1
- 网名
-
- 关于蓝色说唱的网名有哪些
- 角色扮演 | 1
- 网名
-
- 我好喜欢你是什么梗?
- 角色扮演 |