
# N-Gram投机
#### 什么是N-Gram投机
N-Gram投机是一种优化推理性能的技术，主要用于加速大语言模型（LLM）的生成过程。它通过 N-Gram 匹配 来预测后续可能的 token，减少模型的计算量，从而提高生成速度。
#### 主要应用场景
**适用场景**：
- 长文本生成（如故事、代码补全）。
- 高重复性任务（如批量问答、翻译）。
**不适用场景**：
- 短文本生成（投机收益不明显）。
- 高随机性任务（如创意写作，N-Gram 匹配率低）。
 
#### 工作原理
1. 缓存历史 N-Gram：记录已生成的 token 序列（如 \["the", "quick", "brown"\]）。
2. 匹配预测：当新的输入部分匹配某个 N-Gram 前缀时（如 \["the", "quick"\]），直接预测后续 token（如 "brown"）。
3. 投机执行：如果预测的 token 被接受，则跳过部分计算，否则回退到正常解码。
 
#### 启用N-Gram投机参数
| 配置项                  | 配置参数                   | 取值类型 | 配置说明                                                                                        |
|:---|:---|:---|:---|
| --speculative-config | num_speculative_tokens | int  | 每次预测的 token 数量，取值为大于等于1的正整数；且若设置过大会导致性能劣化，推荐根据接受率设置1/2/3，其中推荐先设置为1，若接受率高于70%，可尝试设置为2对比性能收益。 |
| --speculative-config | method                 | str  | 投机方法："ngram"。                                                                               |
| --speculative-config | prompt_lookup_min      | int  | 最小匹配长度，仅在method选择"ngram"的时生效。经验值：1 或 2。                                                     |
| --speculative-config | prompt_lookup_max      | int  | 最大匹配长度，仅在method选择"ngram"的时生效。经验值：4 \~ 16。                                                   |
   
