测量Transformer推理性能

测量Transformer推理性能

💡 原文英文,约3100词,阅读约需12分钟。
📝

内容提要

本文介绍如何测量Transformer模型推理性能,核心指标包括延迟、首令牌时间(TTFT)、每输出令牌时间(TPOT)、吞吐量、内存使用和每令牌成本。测量需区分预填充和解码阶段,使用墙钟计时或CUDA事件,并注意GPU同步和预热。并发请求测试可评估吞吐量,多GPU可复制或分区模型。最终需结合成本与质量评估系统效率。

🔎

延伸解读

预填充与解码阶段需分开测量

文章强调,LLM推理的延迟不能只看总时间,因为预填充(处理提示词)和解码(生成输出)的性能特征不同。例如,长提示词短输出的请求主要受预填充影响,而短提示词长输出的请求则主要受解码影响。分开测量这两个阶段,才能准确识别瓶颈,避免优化一个阶段而牺牲另一个阶段。

GPU测量需注意同步与预热

在GPU上测量推理性能时,由于GPU操作是异步的,直接使用墙钟计时可能不准确。文章建议使用torch.cuda.synchronize()确保GPU工作完成后再停止计时,或使用CUDA事件测量GPU实际执行时间。此外,首次运行可能包含初始化开销,应进行预热(warmup)并忽略前几次迭代,以获取稳态性能。

并发测试需考虑真实场景

文章指出,简单的并发线程测试不能完全模拟生产环境,因为它忽略了HTTP开销、流式传输、请求队列、批处理等。但它是单请求基准测试后的合理下一步。真实服务器基准应记录并发用户数、提示词和输出token分布、TTFT百分位数、错误率等,且分布比固定长度测试更能反映实际应用。

多GPU方案需明确目标

多GPU部署有两种主要方式:复制模型以提升吞吐量,或分区模型以支持更大模型。复制简单但每GPU需容纳完整模型,分区引入通信开销可能增加延迟。选择前需明确瓶颈是模型权重内存还是KV缓存,以及目标是低延迟还是高吞吐。基准测试应展示实际效果,而非假设增加GPU必然加速。

Q&A

Transformer推理性能有哪些关键指标?

关键指标包括延迟、首令牌时间(TTFT)、每输出令牌时间(TPOT)、吞吐量、内存使用、利用率和每令牌成本。

为什么需要分别测量预填充和解码阶段?

因为预填充和解码的计算特性不同,分别测量可以更准确地评估性能,避免因混合测量而掩盖瓶颈。

如何测量GPU上的推理时间?

可以使用CUDA事件测量GPU内核执行时间,或使用墙钟计时并配合torch.cuda.synchronize()确保GPU操作完成。

为什么基准测试需要预热?

预热可以避免首次执行时的初始化开销影响测量结果,确保测量的是稳态性能。

如何测量GPU内存使用情况?

可以使用torch.cuda.memory_allocated()和torch.cuda.memory_reserved()获取分配和保留内存,并用torch.cuda.max_memory_allocated()获取峰值内存。

如何评估并发请求下的吞吐量?

可以使用线程池并发运行多个请求,记录总输出令牌数和总时间,计算每秒输出令牌数,并统计延迟百分位数。

多GPU部署有哪些方式?

多GPU部署方式包括复制模型(每个GPU一个副本)和分区模型(如张量并行、流水线并行、上下文并行、专家并行)。

如何计算每令牌成本?

每令牌成本 = 硬件每秒成本 / 每秒输出令牌数。例如,GPU实例每小时3美元,每秒生成1000个令牌,则每令牌成本约为0.000000833美元。

🏷️

标签

➡️

继续阅读