极智AI | 解读大模型性能测试指标及测试方法

从业务角度来说是反映模型的初始响应速度,对于实时交互式应用非常重要,较低的TTFT可以提高用户体验,使用户感觉模型响应迅速;从算法推理角度来说,其实主要是在掐大模型推理的 Prefill 时间,更加准确一些的是上图中的 Queueing Time + Prefill Latency 时间和。
极智AI | 解读大模型性能测试指标及测试方法

这里这张图非常的清晰,借鉴至这篇文章(https://medium.com/squeezebits-team-blog/vllm-vs-tensorrt-llm-1-an-overall-evaluation-88f281bf01c7),主要就是涉及 TTFT、TPOT、Total Inference Time (Latency) 以及图中没有提及的 TPS,这几个大模型的性能指标不只是适用于纯语言大模型 LLM,也适用于多模态大模型 MLLM,所以还是比较通用。

1. TTFT (Time to First Token) ==> 首Token时间

定义:从向模型输入 prompt 开始到模型生成第一个输出 token 所花费的时间。

作用:从业务角度来说是反映模型的初始响应速度,对于实时交互式应用非常重要,较低的TTFT可以提高用户体验,使用户感觉模型响应迅速;从算法推理角度来说,其实主要是在掐大模型推理的 Prefill 时间,更加准确一些的是上图中的 Queueing Time + Prefill Latency 时间和。

极智AI | 解读大模型性能测试指标及测试方法

2. Latency (Total Inference Time) ==> 延时

定义:从输入 prompt 到模型生成完整输出所消耗的总时间。

作用:总体的响应时间,包含 TTFT 和生成所有 tokens 的时间,当然对于需要快速响应的应用,延时越低越好。

3. TPOT (Tokens Per Output Time) ==> 平均Token时间

定义:模型在输出阶段 (Decode 阶段) 每个输出 token 的延时。

计算方式

极智AI | 解读大模型性能测试指标及测试方法

作用:衡量模型生成阶段自回归蹦出来输出的效率。

4. TPS(Tokens Per Second) ==> 平均每秒Token数

定义:模型每秒生成的tokens数量。

计算方式

极智AI | 解读大模型性能测试指标及测试方法

作用:直接衡量模型的生成速度 (还是指 decode 阶段)。TPS 越高,表示模型生成文本的速度越快。

下面实操在 transformers 中测量 TTFT、TPOT、Latency 和 TPS 数据的代码。

def measure_performance(model, tokenizer, prompt, max_new_tokens=50): inputs = tokenizer(prompt, return_tensors="pt") input_ids = inputs.input_ids.to(model.device)
# 测量TTFT start_time = time.time() with torch.no_grad(): outputs = model.generate(input_ids, max_new_tokens=1) ttft = time.time() - start_time
# 测量TPOT和Latency start_time = time.time() with torch.no_grad(): outputs = model.generate(input_ids, max_new_tokens=max_new_tokens) total_time = time.time() - start_time tpot = (total_time - ttft) / max_new_tokens latency = total_time
# 计算TPS tps = max_new_tokens / latency
return ttft, tpot, latency, tps
prompt = "Once upon a time"ttft, tpot, latency, tps = measure_performance(model, tokenizer, prompt)print(f"TTFT: seconds")print(f"TPOT: seconds")print(f"Latency: seconds")print(f"TPS: tokens/second")

如果你稍微心细一些可能会发现上述的代码是在掐 max_new_tokens 的时间,而实际的输出 token 数一定会是 <= max_new_tokens,这应该很好理解。所以更加准确一些的测试方法是掐实际输出 tokens,实际输出 tokens 可以使用类似 len(tokenizer.encode(response)) 的代码进行计算。

所以可以看到大模型这种生成的模式测性能,指标和以前的 CV 小模型测性能差别非常之大。

 

来源:极智视界

0赞

好文章,需要你的鼓励

2024

10/11

11:04

分享

点赞