执行摘要
- 一句话:BFCL评估脚本默认使用贪婪解码
- 推荐动作:该 PR 简单直接,无需深入审查。但可注意文件参数索引的调整(原第 6 个参数 output_dir 变为第 7 个),确保兼容性。
功能与动机
之前 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。同时,非零温度带来随机性,影响结果可复现性。
实现拆解
- 在脚本头部添加注释和变量声明:
BFCL_TEMPERATURE - Temperature (default: 0.0) 并读取环境变量 TEMPERATURE="${BFCL_TEMPERATURE:-0.0}"。
- 在调用评估 Python 脚本时,将温度作为第 6 个命令行参数传入:
python3 - "$MODEL" "$TEST_CATEGORY" "$NUM_THREADS" "$PORT" "$API_TYPE" "$TEMPERATURE" "$OUTPUT_DIR" 并调整后续参数索引。
- 在 Python 内联脚本中将该参数转为浮点数,并传递给
generate() 函数的 gen_kwargs["temperature"]。
关键文件:
.buildkite/scripts/tool_call/run-bfcl-eval.sh(模块 CI脚本;类别 other;类型 core-logic): 核心变更文件:新增环境变量 BFCL_TEMPERATURE,默认贪婪解码,传递到生成函数。
关键符号:未识别
关键源码片段
.buildkite/scripts/tool_call/run-bfcl-eval.sh
核心变更文件:新增环境变量 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)可能也使用默认温度导致结果目录不匹配,但作者 yzong-rh 回复 evaluate 并不使用 temperature 参数,该顾虑已解除。
- 评估步骤是否也需要设置温度 (correctness): 作者回复 evaluate 不使用 temperature 参数,无需修改。
风险与影响
- 风险:评估脚本仅修改 CI 脚本,不影响 vLLM 核心运行时。风险极低:默认温度改为 0.0 可能使部分原本依赖随机性的模型在 BFCL 评估上表现略有不同,但这是作者希望达到的修复效果。
- 影响:影响范围限定在 BFCL CI 评估流程:
- 消除此前 0.001 温度引发的数值警告。
- 默认贪婪解码减少 run-to-run 方差,使评估结果更稳定。
- 通过环境变量 BFCL_TEMPERATURE 保留灵活性。
- 风险标记:暂无
关联脉络
参与讨论