6.6.3. 性能评测指标

了解模型的性能对于优化其效率和效果至关重要。ModelZoo Qwen模型开发样例提供模型推理性能数据的展示,帮助用户了解当前模型推理性能。

6.6.3.1. 背景知识

  • Token

    Token是LLM中特有的概念,也是LLM推理性能的核心指标。它是LLM用来拆分、解析和处理自然语言的基本单位。每个LLM都有一个从数据中训练得到的专属 tokenizer,用于高效地表示输入文本。每个 token 约为1.5个中文字符。

  • 上下文长度

    上下文长度是指LLM在一次处理过程中能够理解和生成的文本的最大长度。每个LLM都有一个最大上下文长度,用于表示模型输入、输出最大token数。

  • Batch

    Batch是指能够被推理引擎同时处理的请求(session)数量。最大batch数是指推理引擎能够同时处理的最大请求数量。如果用户并发请求数量超过最大batch数,那么部分请求将需要排队等待处理。排队等待的时间未计入性能评测的计算中。

6.6.3.2. 评测指标

性能评测指标如下:

  • TTFT (Time to First Token)

    首token延迟,即从输入到输出第一个token的延迟。该指标显示用户在看到模型输出之前需要等待的时间。数值越低,意味着延迟越低,性能越好。

  • TPOT (Time per Output Token)

    每个输出token的延迟(不包括首个Token)。该指标决定了整个推理过程需要的时间。数值越低,意味着延迟越低,性能越好。

  • TPS (Tokens Per Second)

    每秒生成的tokens数量。指模型生成文本的速度,控制着完整的响应在用户界面上显示的速度。数值越高,意味着吞吐量更大,性能更快。

  • 端到端延迟 (end2end latency)

    从发送请求到接收到最终token的总时间。数值越低,意味着延迟越低,性能越好。

Qwen模型样例性能评测示例如下:

total: 460 tokens, cost 54.093 s
prefill time: 312.272 ms, 3.20 tokens/s
decode average time: 117.156 ms, 8.54 tokens/s
end2end average time: 117.594 ms, 8.50 tokens/s

其中:

  • total:从输入文本到输出文本的总输出token数(460 tokens)及总时间(54.093 s)。

  • prefill time:Prefill阶段的性能指标,即生成第一个token的TTFT(312.272 ms)和TPS(3.20 tokens/s)。

  • decode average time:Decode阶段的性能指标,即生成每个输出token(不包括首个Token)的TPOT(117.156 ms)和TPS(8.54 tokens/s)。

  • end2end average time:端到端从输入文本到输出文本,每个输出token的TPOT(117.594 ms)和TPS(8.50 tokens/s)。

6.6.3.3. 首Token延迟及TPS

首token延迟的计算是在Prefill阶段,用户输入文本后,从tokenizer开始到接收到第一个 token所需的时间,记作 prefill_time,单位为s,如下图所示:

../../_images/prefill_time.png

图 6.1 首Token延迟

在多batch场景下,prefill_time 为所有batch首token延迟的时间总和。如果输入的上下文长度比较大,Prefill过程中会对输入tokens分段,再迭代处理每段tokens。每段输入上下文长度最大为256 tokens。因此输入上下文长度越大,首token延迟会越高。

TTFT(单位为ms)

prefill_ttft = prefill_time * 1000 / prefill_tokens

prefill_tokens 表示Prefill阶段生成的token数量,在单batch场景下,生成的token数为1。在多batch场景下,为所有batch生成的总token数。

Prefill阶段TPS(单位为tokens/s)

prefill_tps = 1000 / prefill_ttft

6.6.3.4. 每个输出token的延迟及TPS

生成所有输出token的时间(不包括首个Token)是在Decode阶段,从第一个token生成后,开始迭代逐个生成输出token所需的时间,记作 decoding_time,单位为s。

../../_images/decode_time.png

图 6.2 生成所有输出token的时间(不包括首个Token)

在多batch场景下,decoding_time 为所有batch生成所有输出token(不包括首个token)的时间总和。

TPOT(单位为ms)

decoding_tpot = decoding_time * 1000 / decoding_tokens

decoding_tokens 表示Decode阶段生成的 token 数量,即为生成的总输出tokens数减去Prefill阶段生成的token数量。在单batch场景下,为生成的总输出token数减1。在多batch场景下,为所有batch在Decode阶段生成的总token数。

Decode阶段TPS(单位为tokens/s)

decoding_tps = 1000 / decoding_tpot

6.6.3.5. 端到端延迟及TPS

端到端延迟是从发送请求到接收到最终token之间的时间差,记作 total_time,单位为s。在多batch场景下,total_time 为所有batch端到端延迟的时间总和。

../../_images/e2e_time.png

图 6.3 端到端请求延迟

端到端每个输出token的延迟(单位为ms)

e2e_tpot = total_time * 1000 / tokens

tokens 为生成的总输出tokens数。在多batch场景下,为所有batch生成输出tokens数的和。

端到端TPS(单位为tokens/s)

e2e_tps = 1000 / e2e_tpot