当前位置: 首页 > news >正文

【知识扫盲】如何由inq,ouq和totaltime计算tokens/s

1 问题

由Batchsize,In_seq ,Out_seq,Total time(s),First token time ,Non-first token time这些参数,怎么计算tokens/s?

1.1 参数解释

  • Batchsize:一个批次中包含的样本数量;
  • In_seq(输入序列长度):每个样本的输入 token 数量;
  • Out_seq(输出序列长度):每个样本生成的输出 token 数量;
  • Total time(s):整个 batch 完成推理/生成所用的总时间(单位:秒);
  • First token time:第一个输出 token 生成所需的时间;
  • Non-first token time:后续 token 的平均生成时间;

我们可以从不同角度来计算 tokens/s,具体取决于你要评估的是哪种性能指标。


✅ 场景一:整体吞吐量(Throughput)

这是衡量模型整体处理能力的常用指标,通常用于对比模型或系统在固定负载下的效率。

📌 公式:

Tokens per second = Batchsize × ( In_seq + Out_seq ) Total time \text{Tokens per second} = \frac{\text{Batchsize} \times (\text{In\_seq} + \text{Out\_seq})}{\text{Total time}} Tokens per second=Total timeBatchsize×(In_seq+Out_seq)

🔍 解释:

  • 每个样本有 In_seq 个输入 token 和 Out_seq 个输出 token;
  • 所以一个 batch 总共涉及的 token 数为:Batchsize × (In_seq + Out_seq)
  • 总时间是整个 batch 处理完所花的时间。

✅ 示例:

假设:

  • Batchsize = 8
  • In_seq = 128
  • Out_seq = 64
  • Total time = 1s

那么:
Tokens/s = 8 × ( 128 + 64 ) 1 = 1536 tokens/s \text{Tokens/s} = \frac{8 \times (128 + 64)}{1} = 1536 \text{ tokens/s} Tokens/s=18×(128+64)=1536 tokens/s


✅ 场景二:解码阶段吞吐量(仅看输出 token)

如果你只关心 生成阶段(即 decode 阶段)的 token 吞吐量(如大模型文本生成),可以这样算:

📌 公式:

Decoding Tokens per second = Batchsize × Out_seq Total time - First token time + Non-first token time × (Out_seq - 1) \text{Decoding Tokens per second} = \frac{\text{Batchsize} \times \text{Out\_seq}}{\text{Total time - First token time + Non-first token time × (Out\_seq - 1)}} Decoding Tokens per second=Total time - First token time + Non-first token time × (Out_seq - 1)Batchsize×Out_seq

这个公式更精确地考虑了每个 token 的生成时间(尤其适用于流式输出场景)。

但如果你只是粗略估算,也可以使用下面这个简化版本:

📌 简化公式:

Decoding Tokens per second ≈ Batchsize × Out_seq Total time \text{Decoding Tokens per second} ≈ \frac{\text{Batchsize} \times \text{Out\_seq}}{\text{Total time}} Decoding Tokens per secondTotal timeBatchsize×Out_seq


✅ 场景三:首 token 延迟(First Token Latency)

这通常是用户体验的重要指标,表示用户发出请求后多久能看到第一个字输出。

📌 公式:

First token latency = First token time \text{First token latency} = \text{First token time} First token latency=First token time

单位一般是毫秒(ms)。


✅ 场景四:生成 token 的平均延迟(Decode Latency)

如果你想知道每个输出 token 平均需要多少时间,可以用:

📌 公式:

Avg Decode Latency per token = Total time - First token time Batchsize × ( Out_seq − 1 ) \text{Avg Decode Latency per token} = \frac{\text{Total time - First token time}}{\text{Batchsize} \times (\text{Out\_seq} - 1)} Avg Decode Latency per token=Batchsize×(Out_seq1)Total time - First token time

或者如果知道非首 token 的平均时间:

Avg Decode Latency per token = Non-first token time \text{Avg Decode Latency per token} = \text{Non-first token time} Avg Decode Latency per token=Non-first token time


🔚 总结表格

指标公式
整体吞吐量(token/s) Batchsize × ( In_seq + Out_seq ) Total time \frac{\text{Batchsize} \times (\text{In\_seq} + \text{Out\_seq})}{\text{Total time}} Total timeBatchsize×(In_seq+Out_seq)
生成吞吐量(token/s) Batchsize × Out_seq Total time \frac{\text{Batchsize} \times \text{Out\_seq}}{\text{Total time}} Total timeBatchsize×Out_seq
首 token 延迟(ms) First token time \text{First token time} First token time
单个 token 平均延迟 Non-first token time \text{Non-first token time} Non-first token time

1.2 具体示例

如果提供以上数据,该如何计算Non-first token time(ms), Non-first token Throughput(Tokens/s), Throughput(Tokens/s) , Non-first token Throughput Average(Tokens/s), E2E Throughput Average(Tokens/s)这些指标呢?


✅ 输入参数(与前面定义一一对应):

参数名
Batchsize1
In_seq1024
Out_seq1024
Total time (s)19.88901
First token time (ms)115.74
Non-first token time (ms)19.25

🧮 计算各项指标


1️⃣ Non-first token Throughput (Tokens/s)

表示每个非首 token 的生成速度。

Non-first token Throughput = 1000 Non-first token time (ms) = 1000 19.25 ≈ 51.95 tokens/s \text{Non-first token Throughput} = \frac{1000}{\text{Non-first token time (ms)}} = \frac{1000}{19.25} ≈ 51.95 \text{ tokens/s} Non-first token Throughput=Non-first token time (ms)1000=19.25100051.95 tokens/s


2️⃣ Throughput (Tokens/s)

这是整个 batch 的吞吐量,包含输入和输出 token。

Throughput = Batchsize × ( In_seq + Out_seq ) Total time = 1 × ( 1024 + 1024 ) 19.88901 ≈ 2048 19.88901 ≈ 102.97 tokens/s \text{Throughput} = \frac{\text{Batchsize} \times (\text{In\_seq} + \text{Out\_seq})}{\text{Total time}} = \frac{1 \times (1024 + 1024)}{19.88901} ≈ \frac{2048}{19.88901} ≈ 102.97 \text{ tokens/s} Throughput=Total timeBatchsize×(In_seq+Out_seq)=19.889011×(1024+1024)19.889012048102.97 tokens/s


3️⃣ Non-first token Throughput Average (Tokens/s)

这个是上面第1项的重复,即每秒能生成多少个非首 token。

✅ 已经算出:51.95 tokens/s


4️⃣ E2E Throughput Average (Tokens/s)

端到端吞吐量,仅考虑输出 token(用于衡量文本生成能力)。

E2E Throughput = Batchsize × Out_seq Total time = 1 × 1024 19.88901 ≈ 1024 19.88901 ≈ 51.49 tokens/s \text{E2E Throughput} = \frac{\text{Batchsize} \times \text{Out\_seq}}{\text{Total time}} = \frac{1 \times 1024}{19.88901} ≈ \frac{1024}{19.88901} ≈ 51.49 \text{ tokens/s} E2E Throughput=Total timeBatchsize×Out_seq=19.889011×102419.88901102451.49 tokens/s


📊 最终结果汇总表:

指标名称值(保留两位小数)
Non-first token time (ms)19.25
Non-first token Throughput (Tokens/s)51.95
Throughput (Tokens/s)102.97
Non-first token Throughput Average51.95
E2E Throughput Average (Tokens/s)51.49

相关文章:

  • Java项目中常用的中间件及其高频问题避坑
  • Day14
  • 【WebSocket】SpringBoot项目中使用WebSocket
  • 读《创新者的窘境》二分 - 破坏性创新与延续性创新
  • 开源 vGPU 方案:HAMi,实现细粒度 GPU 切分
  • OpenAI对抗法庭命令:捍卫ChatGPT用户隐私之战
  • 开源投屏工具Escrcpy的使用教程
  • NLP学习路线图(二十八):BERT及其变体
  • GWO-LSSVM-Adaboost灰狼算法GWO优化最小二乘支持向量机LSSVM分类预测!
  • C++.OpenGL (9/64)复习(Review)
  • 【大厂机试题解法笔记】区间交集
  • 解决获取视频第一帧黑屏问题
  • [蓝桥杯]轨道炮
  • ReadWriteLock(读写锁)和 StampedLock
  • 负载均衡器》》
  • 力扣刷题(第四十九天)
  • 小黑一层层削苹果皮式大模型应用探索:langchain中智能体思考和执行工具的demo
  • sql_mode
  • Cesium使用glb模型、图片标记来实现实时轨迹
  • 采用轮询的方式实现在线人数
  • 网站建设报价清单明细/深圳搜索优化排名
  • 曰本真人性做爰免费网站/网站seo优化推广外包
  • 文案策划的网站/网络推广平台都有哪些
  • 织梦cms如何做网站/什么叫优化关键词
  • 做网站 兼职/网站设计制作公司
  • 南通网站建设价格/最近有哪些新闻