有效应用硬件加速技术、优化内核或实现分布式推理策略,都需要严格的验证。如果没有系统性的性能测量,就无法量化这些优化的收益,精确比较不同硬件平台,或找出剩余瓶颈。基准测试提供了这种必要的反馈,使优化工作基于实际数据。它测量特定条件下的性能。定义相关性能指标选择正确的指标是进行有意义基准测试的主要一步。对于大型语言模型(LLM),有几个主要指标可以衡量性能的不同方面:延迟: 衡量推理所需时间。它通常可以进一步细分:首个令牌生成时间 (TTFT): 从发送请求到收到第一个生成令牌的持续时间。这对于交互式应用(例如聊天机器人)来说非常重要,因为感知响应速度最为关键。令牌间延迟 (ITL) 或每输出令牌时间 (TPOT): 生成第一个令牌后,每个后续令牌的平均生成时间。较低的ITL意味着更快的响应流式输出。其计算方法是 $(总生成时间 - TTFT) / (生成令牌数量 - 1)$。总延迟: 从发送请求到收到完整响应的总时间。适用于总结长输出或批量处理。吞吐量: 衡量系统处理请求或生成令牌的速率。每秒令牌数 (TPS): 系统在所有并发请求中每秒生成的总输出令牌数。这是评估系统整体容量和效率的主要指标,尤其是在负载下。 $$ TPS = \frac{\text{总输出令牌数}}{\text{总时间}} $$每秒请求数 (RPS): 系统每秒可以处理的独立推理请求数量。这受延迟和系统处理并发连接能力的影响。资源使用率:内存使用: 推理过程中GPU/CPU内存的峰值消耗。这决定了在特定硬件上运行模型的可行性。功耗: 能源效率日益重要,以每令牌/请求的瓦特或焦耳衡量。成本: 通常表示为每百万令牌成本或每次推理请求成本,计入硬件总拥有成本(TCO)或云实例定价。主要指标的选择很大程度上取决于应用的需求。交互式系统优先考虑低TTFT,而离线批量处理通常旨在最大化TPS。建立基准测试方法有意义的基准测试需要仔细的实验设计:"1. 定义工作负载: 明确具体任务(例如文本生成、摘要),所用模型,输入提示特征(长度分布),以及输出生成参数(要生成的令牌数量、温度、top-k/p采样)。使用模仿生产流量模式的工作负载。合成工作负载(例如固定提示长度、固定输出长度)有助于隔离特定行为,但可能无法反映实际性能。" 2. 控制环境: 确保测试在相同的硬件和软件堆栈(操作系统、驱动程序、CUDA/ROCm等库、推理框架)上运行。最小化可能干扰测量的后台进程。 3. 预热阶段: 在开始测量前执行数次推理请求。这使得缓存得到预热,GPU内核得以编译(如果使用即时编译),系统达到稳定状态,从而避免初始“冷启动”带来的人为高延迟。 4. 测量点: 决定是测量客户端延迟(包含网络时间)还是服务端延迟(不含网络时间)。服务端测量能隔离模型/硬件性能,但可能遗漏系统级瓶颈。 5. 批处理策略: 大型语言模型推理性能,尤其是吞吐量,对批次大小高度敏感。应测试一系列相关批次大小(包括延迟敏感场景下的批次大小1)。动态批处理策略(即服务器将传入请求分组)会增加精确测量的难度。 6. 并发级别: 对于吞吐量测量(TPS、RPS),应模拟多个并发客户端发出请求,以了解系统在负载下的扩展能力。 7. 统计严谨性: 每种基准配置应运行多次(例如10-100次),并报告统计汇总值,如平均值、中位数(P50)、P90、P95和P99延迟。这考虑了变异性,比单次运行结果能提供更完整的视图。标准差或置信区间有助于量化不确定性。不同硬件上的基准测试性能特性在不同硬件类型之间,甚至同类型硬件的不同代次之间差异很大:CPU: 通常提供最低的吞吐量和最高的延迟,但普遍可用。基准测试应侧重于核心数、指令集(例如AVX-512)和缓存性能的影响。内存带宽通常是一个限制因素。GPU(NVIDIA、AMD、Intel): 大型语言模型训练和推理的主要计算设备。主要因素包括:显存容量 (VRAM): 决定了无需复杂卸载即可运行的最大模型尺寸。内存带宽: 对加载权重很重要,影响TTFT和整体性能,特别是对于推理受内存限制的大型模型。计算单元(CUDA核心、流处理器、Xe核心): 影响原始计算吞吐量(矩阵乘法、注意力机制)。像Tensor Cores(NVIDIA)或Matrix Cores(AMD/Intel)这样的专用单元能显著加速混合精度操作。软件堆栈: 性能很大程度上取决于优化库(cuBLAS、rocBLAS、oneMKL)和运行时(TensorRT、ROCm、OpenVINO)。基准测试必须在这些生态系统背景下比较性能。TPU (Google): 专为机器学习工作负载设计,通常擅长处理大批次和特定矩阵乘法格式(如BFloat16)。基准测试需要使用TensorFlow或JAX生态系统。专用AI加速器(NPU、定制ASIC): 来自各种供应商(Groq、Cerebras、SambaNova、移动NPU)的硬件,专为特定机器学习操作设计。对某些工作负载而言,性能可能非常出色,但通常需要专用SDK和编译工具链。基准测试需遵循供应商特定指南和工具。比较硬件时,要确保“公平比较”:尽可能使用相同的模型、精度(例如FP16、INT8)、批次大小、序列长度和软件框架。如果框架不同,应作为结果的一部分清楚地记录。常见挑战与优化做法忽视冷启动: 未能包含预热阶段会导致报告人为过高的初始延迟。使用非代表性数据: 使用与生产流量显著不同的输入/输出(例如生产中使用长提示,但基准测试使用短提示)进行测试会产生误导性结果。不公平地比较不同精度/优化: 在未说明一个测试使用了FP16而另一个使用了INT8,或者一个使用了FlashAttention而另一个没有的情况下就声称加速,这是不完整的。忽视框架开销: 某些推理框架或服务器会增加自身的延迟(请求排队、预处理/后处理)。如有需要,应将模型推理时间与总端到端时间区分开。运行次数不足: 由于系统抖动和变异性,报告单次运行的结果是不可靠的。应使用多次运行并报告统计数据。缺乏背景信息: 报告所有相关配置细节:硬件、软件版本(驱动程序、库)、模型名称、精度、批次大小、序列长度、生成参数以及具体测量的指标。结果可视化与解读清晰呈现基准测试结果非常重要。柱状图能有效比较不同硬件平台或优化级别下的P90延迟或平均TPS等指标。{ "data": [ { "type": "bar", "x": ["CPU (Xeon)", "GPU A (Mid-range)", "GPU B (High-end)", "Accelerator X"], "y": [2850, 180, 65, 45], "name": "P90 首令牌生成时间 (毫秒)", "marker": {"color": "#4263eb"} }, { "type": "bar", "x": ["CPU (Xeon)", "GPU A (Mid-range)", "GPU B (High-end)", "Accelerator X"], "y": [150, 15, 8, 5], "name": "P90 令牌间延迟 (毫秒)", "marker": {"color": "#15aabf"} } ], "layout": { "title": "大型语言模型推理延迟比较 (批次大小 1, 512 令牌)", "xaxis": {"title": "硬件平台"}, "yaxis": {"title": "延迟 (毫秒)"}, "barmode": "group", "legend": {"title": {"text": "指标"}}, "margin": {"t": 50, "b": 40, "l": 60, "r": 10} } }大型语言模型在不同硬件平台上首令牌生成时间(TTFT)和令牌间延迟(ITL)P90延迟的比较,说明了性能差异。{ "data": [ { "type": "bar", "x": ["GPU A (Mid-range)", "GPU B (High-end)", "Accelerator X"], "y": [800, 3500, 4200], "name": "批次大小 8", "marker": {"color": "#74b816"} }, { "type": "bar", "x": ["GPU A (Mid-range)", "GPU B (High-end)", "Accelerator X"], "y": [1800, 9000, 11500], "name": "批次大小 32", "marker": {"color": "#f59f00"} }, { "type": "bar", "x": ["GPU A (Mid-range)", "GPU B (High-end)", "Accelerator X"], "y": [2500, 15000, 19000], "name": "批次大小 128", "marker": {"color": "#f03e3e"} } ], "layout": { "title": "大型语言模型吞吐量比较 (令牌/秒)", "xaxis": {"title": "硬件平台"}, "yaxis": {"title": "吞吐量 (令牌/秒)"}, "barmode": "group", "legend": {"title": {"text": "批次大小"}}, "margin": {"t": 50, "b": 40, "l": 60, "r": 10} } }同一大型语言模型在不同硬件平台上,不同批次大小下的吞吐量(每秒令牌数)比较,展示了吞吐量不同的扩展方式。"解读结果不只看单一数字。需要分析权衡:硬件A在批次大小为1时可能延迟较低,而硬件B在较大批次下提供更高的吞吐量。将这些结果与具体的应用需求和成本限制关联起来,以做出明智的部署决策。严谨的基准测试是优化大型语言模型系统推理性能的根本。"