问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

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

创作时间:
作者:
@小白创作中心

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

引用
1
来源
1.
http://m.zhiding.cn/article/3160596.htm

随着大模型在各行各业中的广泛应用,对其性能的准确评估变得至关重要。本文将深入探讨大模型性能测试中的关键指标:TTFT(首Token时间)、Latency(延时)、TPOT(平均Token时间)和TPS(平均每秒Token数),并提供具体的测量方法和代码示例。

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

这里这张图非常的清晰,借鉴至这篇文章(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 时间和。

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

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

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

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

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

计算方式

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

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

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

计算方式

作用:直接衡量模型的生成速度 (还是指 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 小模型测性能差别非常之大。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号