第一次接触LLM推理时,最让我困惑的就是那一堆参数到底该怎么调。就像新手司机面对汽车中控台上密密麻麻的按钮,既不知道每个旋钮的作用,也不清楚怎么组合才能获得最佳驾驶体验。经过半年多的实践踩坑,我总结出这套参数调优方法论。
温度值(temperature)可能是最直观的参数。它控制着模型输出的随机性程度,就像调节烹饪火候:设为0时完全确定性输出(类似文火慢炖),设为1时标准随机性(中火烹饪),超过1则变得天马行空(大火爆炒)。实际工作中,问答类场景通常用0.3-0.7保持适度创造性,而代码生成则建议0.2-0.5确保稳定性。
这两个参数经常需要配合使用。温度值调整输出分布的整体形状,而Top-p(又称核采样)则动态控制候选词范围。举个例子:当设置top_p=0.9时,模型会从累计概率达90%的最小词集合中采样,这比固定选择top_k更智能。
实测发现,creative writing场景适合temperature=0.8配合top_p=0.95,而法律文书生成则需要temperature=0.3加top_p=0.7的组合。有个容易忽略的细节:当temperature趋近0时,top_p实际上会失效,因为此时模型永远选择概率最高的token。
重复惩罚参数(repetition_penalty)是我调试最久的参数。设置1.0表示无惩罚,1.2就能显著减少重复,但超过1.5可能导致语句不连贯。有个实用技巧:对于长文档生成,可以动态调整该参数——前500token用1.1,后续逐步提升到1.3。
max_new_tokens需要根据应用场景精心设计。对话系统建议128-256,文档生成可能需要512-1024。最近发现一个有趣现象:当同时设置max_new_tokens和min_new_tokens时,模型会在指定区间内自主决定最佳长度,这种动态效果往往比固定长度更自然。
经过多个项目验证,我整理出这些经典配置:
特别提醒:beam_search虽然能提高一致性,但会显著增加计算成本。当num_beams>3时,推理时间可能呈指数增长,生产环境要谨慎使用。
在开发智能写作助手时,我实现了根据用户输入实时调整参数的策略:
最近遇到个棘手案例:模型总是过早结束生成。排查发现是top_p设置过高(0.99)导致遇到低概率词时就停止。解决方案是:
另一个常见问题是输出过于平淡。这时可以:
绘制了主要参数的相互关系:
建议调试时每次只修改1-2个参数,并使用相同的prompt进行AB测试。我通常会准备10个标准测试prompt来评估参数变化效果。
在部署7B模型时发现:
关键公式:显存占用 ≈ 模型参数 × (精度位数/8) × (序列长度/1024)²。例如13B模型在fp16下处理2048token大约需要:13×10⁹×2×(2048/1024)² ≈ 52GB
使用GPTQ量化时要注意:
在A100上对比发现,4bit量化后推理速度提升3倍,但输出质量下降约15%。解决方案是组合使用量化+参数补偿:在4bit下将temperature提高0.15,同时设置top_k=40。