技术深度解析
对吞吐量的痴迷源于其简单性:它是一个可以轻松测量和比较的单一数字。但LLM推理的现实要复杂得多。模型的输出是一个token序列,每个token通过自回归采样生成。原始token速率——以每秒token数(TPS)衡量——取决于硬件(GPU内存带宽、计算核心)、模型大小(参数)、量化(FP16、INT8、INT4)和解码策略(贪婪搜索、束搜索、top-k、top-p)。在NVIDIA H100 GPU上使用TensorRT-LLM运行的7B参数模型可以达到1500+ TPS,而同样硬件上的70B模型可能只能管理200 TPS。
然而,关键洞察在于并非所有token都生而平等。一个以1500 TPS生成但幻觉率(事实错误或无意义的token)高达20%的模型,实际上每秒只产生1200个“好”token。更糟糕的是,幻觉token通常需要昂贵的下游验证或纠正。“有效吞吐”的概念——最初在网络世界中定义为可用数据的度量——现在正被应用于LLM。有效吞吐 = (生成的token总数) × (质量权重),其中质量权重由以下部分组成:
- 事实准确性:可针对可信知识库验证的声明比例。
- 连贯性与相关性:输出保持主题并遵循逻辑结构的程度。
- 任务完成度:输出是否实现用户的预期目标(例如,正确的代码、准确的摘要)。
几个开源项目正在正面解决这个问题。LM Evaluation Harness(GitHub: EleutherAI/lm-evaluation-harness,8000+星)提供了标准化基准,但仍侧重于准确性而非速度。AlpacaEval(GitHub: tatsu-lab/alpaca_eval,3000+星)引入了针对GPT-4的“胜率”,但这具有主观性。一个更有前景的方法是SelfCheckGPT(GitHub: potsawee/selfcheckgpt,1500+星),它利用模型自身的内部一致性来检测幻觉,无需外部知识库。另一个是RAGAS(GitHub: explodinggradients/ragas,4000+星),它评估检索增强生成流水线的忠实度、答案相关性和上下文精确度。
一个基准比较揭示了差距:
| 模型 | 吞吐量 (TPS, FP16, H100) | MMLU (准确性) | 幻觉率 (SelfCheck) | 有效吞吐估计 (TPS × (1 - 幻觉率)) |
|---|---|---|---|---|
| Llama 3 8B | 1,500 | 68.4 | 18% | 1,230 |
| Llama 3 70B | 200 | 82.0 | 8% | 184 |
| Mistral 7B | 1,400 | 64.2 | 22% | 1,092 |
| GPT-4o (API) | 150 (估计) | 88.7 | 5% | 142 |
数据要点: 尽管Llama 3 8B的原始吞吐量是GPT-4o的10倍,但其有效吞吐仅高出约8.6倍——这还是在考虑任务特定准确性之前。在代码生成(HumanEval pass@1)中,Llama 3 8B得分为62%,而GPT-4o得分为90%。对于代码任务,较小模型的有效吞吐会更低。行业必须采用有效吞吐调整后的指标,以避免误导性比较。
关键参与者与案例研究
向有效吞吐的转变,是由那些深受吞吐量夸大宣传之苦的云服务商和企业用户共同推动的。
Anthropic 一直是可靠性优于速度的直言倡导者。他们的Claude 3.5 Sonnet模型虽然在TPS上并非最快,但在内部基准测试中拥有95%以上的事实准确性。Anthropic的“宪法AI”训练方法明确惩罚无益或有害的输出,这自然降低了幻觉率。在一家大型金融服务公司的案例研究中,与一个更快的竞品模型相比,Claude 3.5将误报欺诈警报减少了40%,节省了数百万美元的人工审查成本。
Google DeepMind 正在通过Gemini 1.5 Pro采取不同的方法。其100万token的上下文窗口允许进行上下文学习,无需微调即可提高输出质量。在一项法律文档分析任务中,Gemini 1.5 Pro在条款提取上达到了92%的准确率,而一个高吞吐量的开源模型仅为78%。然而,由于注意力机制在长上下文中的二次复杂度,Gemini的吞吐量较低。
OpenAI 已悄然调整其API定价以 favor 有效吞吐。新的“批处理API”提供50%的成本降低,但需要24小时周转——本质上是用速度换取可靠性。OpenAI还引入了“结构化输出”(JSON模式),强制模型遵循模式,大幅减少了格式错误的输出。据其内部指标显示,使用结构化输出后,任务完成率提高了30%。
开源社区:vLLM项目(GitHub: vllm-project/vllm,30000+星)已成为高吞吐量服务的事实标准,但其重点纯粹是TPS。然而,像SGLang(GitHub: sgl-project/sglang,4000+星)这样的新项目正在整合“引导解码”,将输出约束到语法范围内,从而改善有效吞吐。