vLLM配置

SamplingParams 是用于控制采样过程的一个配置类。它允许用户设置不同的参数来影响生成文本的方式

class SamplingParams:
    def __init__(self,
                 temperature: float = 1.0,
                 top_p: float = 1.0,
                 top_k: int = 0,
                 repetition_penalty: float = 1.0,
                 max_tokens: int = 16,
                 stop: List[str] = None,
                 presence_penalty: float = 0.0,
                 frequency_penalty: float = 0.0,
                 use_beam_search: bool = False,
                 num_beams: int = 1,
                 length_penalty: float = 1.0):
        ...

下面是每个参数的详细解释:

temperature: float = 1.0

  • 含义: 控制生成文本的随机性。较高的温度会导致更多样化的输出,较低的温度会使输出更加确定。
  • 默认值: 1.0,表示不进行额外的随机性调整。
  • 范围: 通常大于 0,接近 0 的值会使模型的输出更趋向于最可能的选择。

top_p: float = 1.0

  • 含义: 控制基于累积概率的核采样(Nucleus Sampling)。top_p 表示选择可能性最高的前 p 的候选项进行采样。例如,top_p = 0.9 意味着从累计概率为 90% 的候选项中采样。
  • 默认值: 1.0,表示不进行核采样,所有可能的词都参与采样。
  • 范围: [0.0, 1.0]

top_k: int = 0

  • 含义: 控制基于词汇排名的采样。top_k 表示只从前 k 个最有可能的词中采样。较小的 top_k 会使输出更加确定。
  • 默认值: 0,表示不进行 top_k 限制,所有词汇都参与采样。
  • 范围: 0 或更大的整数。

repetition_penalty: float = 1.0

  • 含义: 用于控制重复词的惩罚系数。值大于 1.0 时会对重复的词进行惩罚,使生成的文本更加多样化;值小于 1.0 时则会鼓励重复。
  • 默认值: 1.0,即不进行重复惩罚。
  • 范围: = 1.0

max_tokens: int = 16

  • 含义: 设置生成文本的最大长度,即最多生成的 token 数。
  • 默认值: 16,表示生成的文本长度不超过 16 个 tokens。
  • 范围: 0 的整数。

stop: List[str] = None

  • 含义: 生成的文本遇到这些停止词时会终止。可以指定一组停止词,模型会在输出中遇到这些词时停止生成。
  • 默认值: None,表示没有指定停止词。
  • 类型: 字符串列表。

presence_penalty: float = 0.0

  • 含义: 控制生成文本中的词汇多样性。正值会鼓励生成新的词,而不是重复使用已有的词。
  • 默认值: 0.0,即不进行词汇多样性惩罚。
  • 范围: 实数,通常为正值。

frequency_penalty: float = 0.0

  • 含义: 控制词汇的频率惩罚。正值会降低生成频繁词的可能性,负值则会增加重复词的生成。
  • 默认值: 0.0,即不进行频率惩罚。
  • 范围: 实数,通常为正值。

use_beam_search: bool = False

  • 含义: 是否使用束搜索(Beam Search)进行生成。束搜索是一种更加确定的生成方法,可以探索多个生成路径,并选择得分最高的路径。
  • 默认值: False,即默认不使用束搜索。
  • 类型: 布尔值。

num_beams: int = 1

  • 含义: 设置束搜索的束的数量。num_beams 表示在束搜索中同时保留的生成路径数。该参数仅在 use_beam_search=True 时有效。
  • 默认值: 1,表示不进行束搜索。
  • 范围: 0 的整数。

length_penalty: float = 1.0

  • 含义: 控制生成文本长度的惩罚系数。值大于 1.0 会惩罚较长的生成文本,值小于 1.0 会鼓励生成较长的文本。
  • 默认值: 1.0,即不对生成长度进行惩罚。
  • 范围: 实数。

以下是一些常见应用场景及适合的参数配置建议:

1. 创意写作或自由生成内容

在创意写作或鼓励生成多样化内容的场景下,比如写小说、故事、诗歌等,需要生成富有创造性和多样化的文本。这时,模型可以允许更多的随机性和多样性。

temperature = 1.0  # 保持默认随机性,适度多样化
top_p = 0.9        # 核心采样,选择前90%概率的词,避免最小概率的候选词
top_k = 50         # 限制采样到前50个词,既有多样性又不至于太随机
repetition_penalty = 1.1  # 轻微惩罚重复,增加生成的多样性
presence_penalty = 0.5    # 鼓励生成新词
frequency_penalty = 0.5   # 减少频繁出现的词,增加词汇多样性
  • 适用场景: 小说生成、诗歌创作、对话生成、广告文案。

2. 问答系统

在问答系统中,生成的文本需要尽可能准确、简洁和贴切问题。此时,减少随机性,确保生成内容的准确性和一致性是优先考虑的。

temperature = 0.7  # 减少随机性,确保生成的答案更稳定
top_p = 0.95       # 选择前95%的概率词,防止采样过于随机
top_k = 20         # 限制采样到前20个词,确保答案更加准确
repetition_penalty = 1.2  # 强烈惩罚重复,确保回答简洁
presence_penalty = 0.0    # 不特别鼓励生成新词
frequency_penalty = 0.0   # 不对频率进行惩罚,允许重复常见词(如专有名词)
  • 适用场景: FAQ、智能客服、搜索引擎问答、AI 助手。

3. 技术或法律文档生成

在技术文档、法律文档等场景中,生成的文本需要严谨和连贯,容错率较低,因此需要减少生成的随机性,并且避免重复或无意义的内容。

temperature = 0.5  # 降低随机性,确保生成文本更严谨
top_p = 0.9        # 选择前90%的概率词,确保内容连贯
top_k = 10         # 只从前10个最有可能的词中采样,减少随机性
repetition_penalty = 1.5  # 严格惩罚重复,防止冗长和重复句式
presence_penalty = 0.0    # 不特别鼓励生成新词
frequency_penalty = 0.5   # 轻微惩罚频繁词,避免过度重复某些常见词
  • 适用场景: 技术文档、法律条款、合同生成、报告生成。

4. 对话系统(聊天机器人)

在对话系统中,生成的内容需要自然、连贯,同时保持一定的多样性。这类场景下,既要确保生成的内容准确,又要避免过于机械化的回答。

temperature = 0.8  # 保持一定随机性,让对话自然
top_p = 0.95       # 选择前95%的概率词,避免生成过于随机的对话
top_k = 40         # 限制到前40个词,平衡多样性与连贯性
repetition_penalty = 1.2  # 轻微惩罚重复,防止对话僵化
presence_penalty = 0.5    # 鼓励生成新词,保持对话的趣味性
frequency_penalty = 0.2   # 防止过于频繁的词汇出现,增强对话多样性
  • 适用场景: 聊天机器人、虚拟助手、社交媒体互动。

5. 新闻生成或摘要

在生成新闻或摘要时,生成的内容需要简洁、连贯、准确,因此随机性应该较低,确保生成的内容符合事实。

temperature = 0.6  # 降低随机性,确保生成内容准确
top_p = 0.9        # 选择前90%的概率词,保持内容连贯
top_k = 10         # 限制到前10个词,保证内容的准确性
repetition_penalty = 1.5  # 强烈惩罚重复,避免生成冗长的内容
presence_penalty = 0.0    # 不鼓励生成新词,保持事实一致性
frequency_penalty = 0.2   # 轻微惩罚频繁词,保持语言流畅性
  • 适用场景: 新闻生成、自动摘要、报告概述。

6. 长文本生成(如小说章节)

如果要生成较长的文本,比如小说章节或长篇文章,模型需要在保持连贯性的同时生成较多的内容,避免过度重复。

temperature = 1.0  # 保持随机性,确保长文本中的多样性
top_p = 0.9        # 核心采样,保证生成的内容多样且连贯
top_k = 50         # 允许更多可能的选词,确保内容不单调
repetition_penalty = 1.1  # 轻微惩罚重复,防止内容冗长
presence_penalty = 0.5    # 鼓励生成新词,保持长文本中的多样性
frequency_penalty = 0.5   # 控制词汇的重复出现,提升文本质量
  • 适用场景: 长篇小说、剧本、连续对话生成。

7. 精确控制生成(如数值生成或代码生成)

在生成数值、代码等高度结构化的内容时,生成的内容需要严格遵循上下文,随机性应尽量降低,确保生成结果的精确性。

temperature = 0.1  # 减少随机性,确保生成结果精确
top_p = 1.0        # 不进行核采样,确保结果符合预期
top_k = 0          # 不进行限制,所有词汇都参与采样
repetition_penalty = 1.0  # 不进行重复惩罚
presence_penalty = 0.0    # 不鼓励生成新词
frequency_penalty = 0.0   # 不惩罚频繁词汇,确保生成结构化内容
  • 适用场景: 代码生成、数学表达式、数值预测。

总结

  • 增加创造性: 增加 temperaturetop_k,设置较小的 repetition_penalty
  • 提高准确性: 减少 temperature,增加 repetition_penalty,并使用较小的 top_k
  • 减少随机性: 使用较小的 temperature 和较大的 top_p,如 top_p = 1.0
  • 控制重复: 使用较大的 repetition_penalty