一、大语言模型(LLM,Large Language Model)相关
来源
https://zhuanlan.zhihu.com/p/720829470
大语言模型的推理过程主要基于生成式模型的概率分布来逐步生成输出。在推理过程中,模型通过预测下一个最可能的词(或子词),一步一步生成整个句子。这一过程受到一些关键参数的影响,如 温度(temperature)、Top-K、Top-P(又称核采样)等。
1. 概率分布和预测
在每个推理步骤中,模型会计算每个词或子词的条件概率分布。给定先前生成的内容 y1,y2,…,yt−1y1,y2,…,yt−1,模型会为第 tt 个位置生成可能的下一个词 ytyt,它的概率分布如下:
P(yt∣y1,y2,…,yt−1)=softmax(zt)P(yt∣y1,y2,…,yt−1)=softmax(zt)
其中,ztzt 是模型在第 tt 步对词的 logits(未归一化的得分),经过 softmax 函数转换为概率分布:
P(yt=i)=ezt,i∑jezt,jP(yt=i)=∑jezt,jezt,i
2. 温度(Temperature)
温度是一个参数,用于控制模型输出的随机性。它通过缩放 logits 来调节生成过程中的不确定性。
当引入温度 TT 时,模型生成的概率分布变为:
P(yt=i)=ezt,i/T∑jezt,j/TP(yt=i)=∑jezt,j/Tezt,i/T
当 T=1T=1,生成过程是标准的 softmax,没有变化。
当 T<1T<1,模型的输出更加确定,偏向于选择概率较高的词。此时 logits 的差异被放大,概率分布变得更加尖锐,模型趋于生成更确定的输出。
当 T>1T>1,模型输出的概率分布变得更加平滑,较不确定的词也有可能被选中,从而增加生成的多样性。
3. Top-K 采样
Top-K 采样是在每一步生成中,仅保留概率最高的 KK 个词,并从这些词中进行随机采样。Top-K 的机制是通过限制候选词的数量,来避免选择概率过低的词。
具体过程如下:
对所有词的概率进行排序,选择前 KK 个词;
对这 KK 个词的概率进行归一化,使它们的总和为 1;
从归一化后的概率分布中进行采样。
Top-K 采样的公式为:
P′(yt=i)={P(yt=i)∑j∈TopKP(yt=j)if i∈TopK,0if i∉TopK.P′(yt=i)={∑j∈TopKP(yt=j)P(yt=i)0if i∈TopK,if i∈/TopK.
Top-K 采样通过减少候选词的数量,使得生成的内容更加连贯,但也可能会减少输出的多样性。
4. Top-P(核采样)
Top-P 采样又称为 核采样(Nucleus Sampling),与 Top-K 不同的是,它不限制候选词的固定数量,而是选择一个累积概率达到某一阈值 PP 的词子集。具体来说,先按照概率对词排序,然后依次累加这些词的概率,直到累积概率超过给定的阈值 PP。
公式描述为:
P′(yt=i)={P(yt=i)∑j∈TopPP(yt=j)if i∈TopP,0if i∉TopP.P′(yt=i)={∑j∈TopPP(yt=j)P(yt=i)0if i∈TopP,if i∈/TopP.
Top-P 采样比 Top-K 更灵活,因为它根据每个生成步骤中词的概率分布动态选择候选词,适应性更强。
5. 示例与总结
假设模型在某一步生成时,给出了下列未归一化的 logits 值:
z=[2.0,1.0,0.5,0.1,−1.0]z=[2.0,1.0,0.5,0.1,−1.0]
温度调整:
T=0.5T=0.5 时,分布会变得更尖锐,生成倾向于选择高概率的词。
T=1.5T=1.5 时,分布会变得更平滑,生成词的多样性增加。
Top-K 和 Top-P:
Top-K = 3 时,仅从前 3 个概率最高的词(即 logits 为 [2.0, 1.0, 0.5] 的词)中进行采样。
Top-P = 0.9 时,可能只需要选择前 3 个词,因为它们的累积概率可能已经超过 0.9。
除了 温度、Top-K 和 Top-P,大语言模型的推理过程中还有其他重要的超参数,影响模型的生成方式和性能。以下是常见的一些超参数及其作用:
1. 重复惩罚(Repetition Penalty)
重复惩罚(Repetition Penalty)是为了避免模型在生成过程中反复重复同一个词或短语的机制。它通过降低已经生成过的词的概率,减少重复。
其数学表达如下:
P′(yt=i)=P(yt=i)rfiP′(yt=i)=rfiP(yt=i)
其中 fifi 是词 ii 的出现频次,rr 是重复惩罚系数。通常,r>1r>1 时,惩罚加大已生成词的概率,使其更难再次生成。
2. 长度惩罚(Length Penalty)
长度惩罚 是控制生成文本长度的参数,主要用于调节生成文本时对短句或长句的偏好。其目的在于平衡模型生成的句子长度。
生成的总得分 SS 通常会乘以一个长度惩罚项:
S=1(5+∣Y∣)α/(5+1)αS=(5+∣Y∣)α/(5+1)α1
其中,∣Y∣∣Y∣ 是生成文本的长度,αα 是长度惩罚系数:
α>1α>1 会倾向于生成更长的句子。
α<1α<1 会倾向于生成较短的句子。
3. Beam Search 参数
Beam Search 是一种广泛使用的生成策略,用于在生成过程中保留多个候选路径,从而找到全局最优的生成结果。它引入了两个重要的超参数:
1)Beam Width(束宽)
束宽是指每一步保留的候选路径的数量。如果 beam width BB 较大,模型会探索更多的生成路径,最终生成的文本质量更高,但计算开销也更大。
例如:
如果 B=1B=1,则相当于贪心搜索(greedy search),每次只保留概率最高的路径;
如果 B=5B=5,则保留 5 条路径,并在下一步中继续扩展这些路径。
2)长度正则化(Length Normalization)
长度正则化用于 Beam Search 中平衡不同长度生成文本的得分。较长的句子可能会累积更高的总概率,因此需要通过长度正则化来平衡短句和长句的得分。
长度正则化的公式如下:
S(Y)=1∣Y∣α∑t=1∣Y∣logP(yt∣y1,y2,…,yt−1)S(Y)=∣Y∣α1t=1∑∣Y∣logP(yt∣y1,y2,…,yt−1)
其中 ∣Y∣∣Y∣ 是生成序列的长度,αα 是正则化参数。此方法可以避免模型总是生成较长句子的偏好。
二、性能压测指标说明
指标 |
英文名称 |
解释 |
公式 |
---|---|---|---|
测试总时长 |
Time taken for tests |
整个测试过程从开始到结束所花费的总时间 |
最后一个请求结束时间 - 第一个请求开始时间 |
并发数 |
Number of concurrency |
同时发送请求的客户端数量 |
预设值 |
总请求数 |
Total requests |
在整个测试过程中发送的所有请求的数量 |
成功请求数 + 失败请求数 |
成功请求数 |
Succeed requests |
成功完成并返回预期结果的请求数量 |
直接统计 |
失败请求数 |
Failed requests |
由于各种原因未能成功完成的请求数量 |
直接统计 |
输出吞吐量 |
Output token throughput |
每秒钟处理的平均标记(token)数 |
总输出token数 / 测试总时长 |
总吞吐量 |
Total token throughput |
每秒钟处理的平均标记(token)数 |
总输入token数 + 总输出token数 / 测试总时长 |
请求吞吐量 |
Request throughput |
每秒钟成功处理的平均请求数 |
成功请求数 / 测试总时长 |
总延迟时间 |
Total latency |
所有成功请求的延迟时间总和 |
所有成功请求的延迟时间之和 |
平均延迟 |
Average latency |
从发送请求到接收完整响应的平均时间 |
总延迟时间 / 成功请求数 |
平均首token时间 |
Average time to first token |
从发送请求到接收到第一个响应标记的平均时间 |
总首chunk延迟 / 成功请求数 |
平均每输出token时间 |
Average time per output token |
生成每个输出标记所需的平均时间(不包含首token) |
总每输出token时间 / 成功请求数 |
平均输入token数 |
Average input tokens per request |
每个请求的平均输入标记数 |
总输入token数 / 成功请求数 |
平均输出token数 |
Average output tokens per request |
每个请求的平均输出标记数 |
总输出token数 / 成功请求数 |
平均数据包延迟 |
Average package latency |
接收每个数据包的平均延迟时间 |
总数据包时间 / 总数据包数 |
平均每请求数据包数 |
Average package per request |
每个请求平均接收的数据包数量 |
总数据包数 / 成功请求数 |
百分位指标 (Percentile)
以单个请求为单位进行统计,数据被分为100个相等部分,第n百分位表示n%的数据点在此值之下。
指标 |
英文名称 |
解释 |
---|---|---|
首次生成token时间 |
TTFT (Time to First Token) |
从发送请求到生成第一个token的时间(以秒为单位),评估首包延时 |
输出token间时延 |
ITL (Inter-token Latency) |
生成每个输出token间隔时间(以秒为单位),评估输出是否平稳 |
每token延迟 |
TPOT (Time per Output Token) |
生成每个输出token所需的时间(不包含首token,以秒为单位),评估解码速度 |
端到端延迟时间 |
Latency |
从发送请求到接收完整响应的时间(以秒为单位):TTFT + TPOT * Output tokens |
输入token数 |
Input tokens |
请求中输入的token数量 |
输出token数 |
Output tokens |
响应中生成的token数量 |
输出吞吐量 |
Output Throughput |
每秒输出的token数量:输出tokens / 端到端延时 |
总吞吐量 |
Total throughput |
每秒处理的token数量:(输入tokens + 输出tokens) / 端到端延时 |