跳到主要内容

LLM 性能基准

你可能见过 LLM 排行榜。那些格式整齐的排名表根据各种基准展示顶级 LLM。它们可以作为理解模型能力的有用参考。但如果你把它们当作选择最佳 LLM 的唯一依据,它们也可能具有误导性。

对 LLM 进行基准测试是一项复杂的任务。在公共基准上得高分并不能保证模型在你的工作负载下表现良好。你的生产环境很少会与别人 LLM 排名所用环境一致。当你想要针对特定场景进行优化时尤其如此,比如在保持端到端延迟低于 300 ms 的同时,达到 120 tokens/秒的输出吞吐量。

要为你的用例获得最优配置,你需要为 LLM 推理运行自定义的性能基准。这意味着要精心设计测试,并往往要在吞吐量、延迟和成本之间做出权衡。

什么是 LLM 基准

当人们谈论 LLM 基准时,他们通常指的是两种不同的东西:

  • 质量基准。衡量模型在回答问题、推理或遵循指令方面的表现。示例包括 MMLU、GSM8K、HumanEval 和 TruthfulQA。质量基准通常驱动你在网上看到的 LLM 排行榜。
  • 性能基准。衡量模型在真实环境中运行的速度和效率。它们关注 LLM 性能指标,例如吞吐量(token/秒)、延迟(首 token 时间、中位数、P99)、成本效率和 GPU 利用率。

这两类基准都很重要,但用途截然不同。在质量排行榜上名列前茅的模型,如果延迟太高或成本不可持续,在生产中可能仍然表现不佳。另一方面,一个推理性能出色但基准准确率较弱的模型,对于速度更重要的应用来说,可能仍然是正确的选择。

在本手册中,我们更侧重于 LLM 推理的性能基准。

何时应该运行性能基准

以下是一些自定义基准测试有意义的情况:

  • 比较不同的模型。当你在两个最佳 LLM 之间做决定时,基准测试可以揭示它们在你的工作负载下吞吐量、延迟和成本方面的差异。
  • 评估推理框架。vLLM、SGLang、MAX、TensorRT-LLM 和 Hugging Face TGI 等框架提供了不同的推理优化。基准测试可以帮助你了解哪一个能为你的配置带来最佳权衡。
  • 测试基础设施变更。从 A10G GPU 迁移到 H100 GPU,或从本地部署切换到云端,都会影响性能。基准测试可以确认其影响。
  • 衡量优化收益投机解码前缀缓存分离式服务KV 缓存卸载等推理技术,都应该用可复现的性能测试来验证。
  • 为生产流量扩容。在上线之前,在现实的请求速率和并发水平下进行基准测试,可以看出你的系统能否承受住。

简而言之,每当需要基于证据的答案来决定哪种推理配置能满足你的需求时,你都应该运行 LLM 性能基准。

何时基准测试没有帮助

以下是一些基准测试不会给你有用见解的情况:

  • 与你的工作负载不匹配。有些结果来自范围狭窄的测试集。如果你的应用有更长的提示词、更高的并发或严格的延迟预算,这些数字可能不适用。
  • 数据集不相关。有些基准测试代码,有些测试数学,还有些测试推理。如果你正在构建客服聊天机器人,GSM8K 或 HumanEval 的高分可能完全无关紧要。
  • 基础设施配置不同。你的生产硬件、框架或缓存策略永远不会与已发布的 LLM 排名所用环境完全一致。
  • 只关注单一指标。只看 token/秒或延迟会忽略权衡。
  • 忽视成本和扩展约束。即使某个模型在纸面上看起来很快,大规模运行它也可能过于昂贵或运维复杂。

请记住,把基准测试当作参考,而不是最终的决策者。

选择合适的基准测试工具

有许多测试和衡量 LLM 性能的方法,但并非所有工具都服务于相同的目的。

通用负载测试工具

LocustK6 是长期用于模拟真实流量的工具。它们专注于负载测试:产生大量并发请求,以观察你的 LLM 部署表现和扩展情况。它们有助于识别服务器容量、自动扩缩容策略、网络延迟和资源利用率方面的瓶颈。

专用的 LLM 基准测试工具

NVIDIA GenAI-PerfLLMPerf 这样的工具是为 LLM 性能基准测试而专门构建的。这些工具专注于推理层面的指标,如吞吐量和延迟。它们能提供关于模型性能的详细见解,但不同的工具可能以不同的方式定义或计算指标。

框架特定的基准测试脚本

一些推理框架,如 vLLMSGLang,提供自己的基准测试脚本、命令和使用指南。它们有助于快速实验,并理解使用该特定框架的优化时的性能。然而,一定要密切关注它们的默认参数和配置。结果可能看起来很强,但不一定能反映你的生产配置。

使用 MAX 进行端到端基准测试

MAX 包含 benchmark_serving.py,这是一个用于测量 LLM 服务端点端到端性能(吞吐量、延迟和资源利用率)的脚本。它建立在 vLLM 的测量方法之上,因此结果在各后端之间具有可比性。

使用它,你可以:

  • 对任何兼容 OpenAI 的 HTTP 端点进行基准测试,包括托管服务。
  • 同时测试 chat 和 completion API。
  • 在不同请求模式下测量详细的延迟指标。
  • 在一致的方法下比较服务后端,例如 vLLM 和 MAX。

应该对哪些指标进行基准测试

在为 LLM 推理运行性能基准时,只报告一个数字是不够的。真实世界的性能取决于多个 LLM 性能指标,每个指标都有不同的权衡。最重要的包括:

  • 吞吐量:模型每秒能处理或产生多少个 token 或请求。这衡量可扩展性和原始效率。

  • 延迟:模型响应请求的速度。关键的延迟指标包括 TTFT、ITL、中位数延迟和尾部延迟(P95、P99)。这些决定了你的 LLM 对用户来说有多响应。

    更多信息请参阅 LLM 推理指标

  • 成本:通常以每千 token 成本、每请求成本或每单位时间成本来衡量。对于自托管推理,GPU 往往是成本的最大驱动因素。许多顶级 LLM 需要大型、昂贵的 GPU 才能高效运行。

  • 资源利用率:GPU/CPU 利用率、内存分配和缓存命中率。高利用率通常意味着更好的硬件效率。这在生产中尤其重要,因为它直接决定了你每美元能获得多少性能。

你得到的结果在很大程度上取决于基准测试的运行方式。需要控制的关键参数包括:

  • 服务器参数:并行度(例如数据、张量和专家并行)、缓存策略、内存分配
  • 客户端参数:请求速率、并发限制、批大小、超时
  • 框架差异:vLLM、SGLang、MAX、TensorRT-LLM、TGI 等中的优化
  • 工作负载变化:模型选择、输入序列长度、输出长度、请求分布

在某些情况下,这些变量哪怕有很小的差异,也会极大地改变结果。

如何创建好的 LLM 性能基准

运行 LLM 性能基准比看起来更难。"200 tokens/秒"这样的数字听起来很简单,但没有上下文,它们几乎毫无意义。真正的 LLM 基准测试需要记录测试环境、工作负载和约束,以便结果可复现且相关。

下面是一个带示例数据的基准测试模板:

类别参数
模型名称meta-llama/Llama-3.1-8B-Instruct
框架vLLM 0.4.2
量化FP16
硬件GPU4 x NVIDIA A10G
GPU 内存24 GB
服务器配置张量并行度1
数据并行度4
最大批大小16
客户端配置请求速率50 req/s
并发数16
输入长度256 tokens
输出长度512 tokens
结果吞吐量98 tokens/sec
中位数 TTFT210 ms
P99 延迟1.4 s
GPU 利用率89%
每 1M token 成本$0.52

使用此模板的技巧:

  • 始终记录框架版本和硬件类型。这里的微小差异都可能极大改变结果。
  • 包含输入/输出长度。它们对吞吐量和延迟影响很大。
  • 感知到的 token/秒可以是衡量流式性能(用户看到的内容)的更好指标,而不是原始模型输出速率。
  • 保持成本指标一致,例如按请求或按每百万/千 token 计。