Prhub

#41059 [CI] Add temperature to bfcl eval, default greedy

原始 PR 作者 yzong-rh 合并时间 2026-04-30 05:01 文件变更 1 提交数 3 评论 2 代码增减 +6 / -2

执行摘要

BFCL 评估脚本默认使用贪婪解码

之前 BFCL 评估使用默认温度 0.001,导致 vLLM 日志警告 temperature 0.001 is less than 0.01, which may cause numerical errors nan or inf in tensors. We have maxed it out to 0.01。同时,非零温度带来随机性,影响结果可复现性。

该 PR 简单直接,无需深入审查。但可注意文件参数索引的调整(原第 6 个参数 output_dir 变为第 7 个),确保兼容性。

讨论亮点

gemini-code-assist[bot] 指出评估步骤(evaluate)可能也使用默认温度导致结果目录不匹配,但作者 yzong-rh 回复 evaluate 并不使用 temperature 参数,该顾虑已解除。

实现拆解

  1. 在脚本头部添加注释和变量声明:BFCL_TEMPERATURE - Temperature (default: 0.0) 并读取环境变量 TEMPERATURE="${BFCL_TEMPERATURE:-0.0}"
  2. 在调用评估 Python 脚本时,将温度作为第 6 个命令行参数传入:python3 - "$MODEL" "$TEST_CATEGORY" "$NUM_THREADS" "$PORT" "$API_TYPE" "$TEMPERATURE" "$OUTPUT_DIR" 并调整后续参数索引。
  3. 在 Python 内联脚本中将该参数转为浮点数,并传递给 generate() 函数的 gen_kwargs["temperature"]
文件 模块 状态 重要度
.buildkite/scripts/tool_call/run-bfcl-eval.sh CI 脚本 modified 3.66

关键源码片段

.buildkite/scripts/tool_call/run-bfcl-eval.sh core-logic

核心变更文件:新增环境变量 BFCL_TEMPERATURE,默认贪婪解码,传递到生成函数。

# 新增环境变量定义
# BFCL_TEMPERATURE - Temperature (default: 0.0)# 读取环境变量,默认 0.0
TEMPERATURE="${BFCL_TEMPERATURE:-0.0}"# 将温度作为第 6 个参数传递给 Python 脚本
python3 - "$MODEL" "$TEST_CATEGORY" "$NUM_THREADS" "$PORT" "$API_TYPE" "$TEMPERATURE" "$OUTPUT_DIR" << 'PYEOF'
# ... 内嵌 Python 脚本中:
temperature = float(sys.argv[6])
output_dir = sys.argv[7] if len(sys.argv) > 7 and sys.argv[7] else os.getcwd()
# ... 后续生成时使用
gen_kwargs["temperature"] = temperature
generate(**gen_kwargs)
PYEOF

评论区精华

评估步骤是否也需要设置温度 正确性

gemini-code-assist[bot] 认为评估步骤可能使用默认温度导致结果目录不匹配。

结论:作者回复 evaluate 不使用 temperature 参数,无需修改。 · 已解决

风险与影响

评估脚本仅修改 CI 脚本,不影响 vLLM 核心运行时。风险极低:默认温度改为 0.0 可能使部分原本依赖随机性的模型在 BFCL 评估上表现略有不同,但这是作者希望达到的修复效果。

影响范围限定在 BFCL CI 评估流程:

  • 消除此前 0.001 温度引发的数值警告。
  • 默认贪婪解码减少 run-to-run 方差,使评估结果更稳定。
  • 通过环境变量 BFCL_TEMPERATURE 保留灵活性。

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

参与讨论