TPM限制的详细解释
TPM(Tokens Per Minute)限制是一种针对大语言模型(LLM)请求的限流机制,主要用于控制单位时间内处理的token数量。在您的大模型网关项目中,这是一个非常重要的控制机制。
TPM的基本概念
-
Token的定义:在大语言模型中,token是文本的基本单位,可以是单词、部分单词或标点符号。不同模型的tokenization方式可能不同,但一般来说,英文中一个token大约相当于4个字符,中文则大约一个汉字对应一个token。
-
TPM计算方式:TPM计算的是每分钟处理的token总数,包括:
- 输入token(prompt tokens):用户发送给模型的文本
- 输出token(completion tokens):模型生成的回复文本
TPM限制的实现方式
在我提供的代码实现中,TPM限制的核心逻辑如下:
-
按模型和厂商分别限制:每个模型和厂商组合都有自己的TPM限额
private boolean checkTpmLimit(String key, int tokenCount) { String tpmKey = key + ":tpm:" + (System.currentTimeMillis() / 60000); Long currentCount = redisTemplate.opsForValue().increment(tpmKey, 0); if (currentCount == null) { currentCount = 0L; } // 获取该模型的TPM限制 Integer tpmLimit = (Integer) redisTemplate.opsForValue().get(key + ":tpmLimit"); if (tpmLimit == null) { tpmLimit = DEFAULT_TPM_LIMIT; } // 检查是否超过限制 return (currentCount + tokenCount) <= tpmLimit; }
-
使用Redis实现分布式计数:通过Redis存储每分钟的token使用量,支持分布式部署
private void recordRequest(String key, int tokenCount) { String tpmKey = key + ":tpm:" + (System.currentTimeMillis() / 60000); redisTemplate.opsForValue().increment(tpmKey, tokenCount); redisTemplate.expire(tpmKey, 2, TimeUnit.MINUTES); }
TPM限制的优势
- 防止资源耗尽:通过限制处理的token数量,可以防止系统资源被耗尽
- 成本控制:大多数模型厂商按token计费,TPM限制可以控制成本
- 负载均衡:可以为不同模型设置不同的TPM限制,实现负载均衡
- 防止滥用:防止单个用户或应用占用过多资源
TPM限制与其他限流机制的结合
在您的方案中,TPM限制与基于超时比例的动态限流结合使用:
- 基础限流层:TPM限制作为第一层防护,控制总体请求量
- 自适应限流层:超时比例动态限流作为第二层防护,根据系统健康状况动态调整
- 熔断保护层:当某个模型厂商持续出现问题时,熔断器会暂时切断该厂商的请求
TPM限制的实际应用场景
- 高峰期限流:在用户请求高峰期,TPM限制可以确保系统稳定运行
- 厂商配额管理:许多模型厂商有自己的TPM限制,网关的TPM限制可以确保不超过厂商限制
- 多租户隔离:可以为不同租户设置不同的TPM限制,确保资源公平分配
- 成本预算控制:通过TPM限制,可以控制每月的API调用成本
TPM限制的调优建议
- 动态调整:根据历史使用情况和系统负载动态调整TPM限制
- 分时段设置:可以为不同时段设置不同的TPM限制,例如业务高峰期降低限制
- 优先级差异:为不同优先级的请求设置不同的TPM限制或突破机制
- 监控告警:实时监控TPM使用情况,当接近限制时发出告警
通过合理设置TPM限制,结合超时比例动态限流和熔断机制,可以有效保护您的大模型网关系统,防止因模型厂商排队导致的线程堆积和服务宕机问题。