大模型调用常用参数解析
·
vllm中关于presence_penalty、frequency_penalty、repetition_penalty的具体操作(对logits):
def apply_repetition_penalties_torch(
logits: torch.Tensor, prompt_mask: torch.Tensor,
output_mask: torch.Tensor, repetition_penalties: torch.Tensor) -> None:
repetition_penalties = repetition_penalties.unsqueeze(dim=1).repeat(
1, logits.size(1))
# If token appears in prompt or output, apply, otherwise use 1.0 for no-op.
penalties = torch.where(prompt_mask | output_mask, repetition_penalties,
1.0)
# If logits are positive, divide by penalty, otherwise multiply by penalty.
scaling = torch.where(logits > 0, 1.0 / penalties, penalties)
logits *= scaling
# Apply repetition penalties as a custom op
from vllm._custom_ops import apply_repetition_penalties
apply_repetition_penalties(logits, prompt_mask, output_mask,
repetition_penalties)
# We follow the definition in OpenAI API.
# Refer to https://platform.openai.com/docs/api-reference/parameter-details
logits -= frequency_penalties.unsqueeze(dim=1) * output_bin_counts
logits -= presence_penalties.unsqueeze(dim=1) * output_mask
return logits
对于repetition_penalty而言,
若新token1在prompt或output已经出现过时,降低logits 注意(penalty>=1)
logits>0时,logits = logits/penalty
logits<0时,logits = logits*penalty
对frequency_penalty而言,
若新token1在prompt或output已经出现过时,降低logits 注意(penalty>=1)
logits = logits - c*freq(token1),其中c为配置的frequency_penalty的值。
对presence_penalty而言,
若新token1在prompt或output已经出现过时,降低logits 注意(penalty>=1)
logits = logits - c,其中c为配置的presence_penalty的值。
更多推荐
所有评论(0)