EvalScope使用过程中的问题汇总
1. 自定义数据集使用时的KeyError问题
问题描述
使用自定义数据集评测时,配置tasks: ["CustomRetrieval"]会触发KeyError,报错信息如下:
KeyError: "KeyError: 'CustomRetrieval' not found. Did you mean: EcomRetrieval?"
背景说明
- EvalScope官方文档明确自定义数据集评测任务需指定为
CustomRetrieval; ./outputs目录下已存在CustomRetrieval相关数据集;- 个人理解:该报错不影响评测结果生成,仅导致最终评测流程的汇总表格无法输出,整体无核心影响。
相关脚本
BASE_TASK_CFG4 = {
"work_dir": "./outputs/bge_m3_T2Retrieval_eng",
"eval_backend": "RAGEval",
"eval_config": {
"tool": "MTEB",
"model": [
{
"model_name_or_path": "/gpu/huangyl3/Embedding_eval/model/bge_m3", # 循环时动态赋值
"pooling_mode": None,
"max_seq_length": 512,
"prompt": "",
"model_kwargs": {"torch_dtype": "auto"},
"encode_kwargs": {"batch_size": 128},
"hub": "modelscope"
}
],
"eval": {
"tasks": ["CustomRetrieval"],
"dataset_path": "/gpu/huangyl3/Embedding_eval/datas/T2Retrieval_eng/retrieval_data",
"verbosity": 2,
"overwrite_results": True,
"top_k": 5
},
},
}
if __name__ == "__main__":
run_task(task_cfg=BASE_TASK_CFG4)
2. 两阶段测试脚本(检索+重排)
相关脚本
from evalscope.run import run_task
two_stage_task_cfg = {
"work_dir": "./outputs/bge-reranker-v2-m3_T2Retrieval",
"eval_backend": "RAGEval",
"eval_config": {
"tool": "MTEB",
"model": [
{
"model_name_or_path": "/gpu/huangyl3/Embedding_eval/model/bge_m3",
"is_cross_encoder": False,
"max_seq_length": 512,
"model_kwargs": {"torch_dtype": "auto"},
"encode_kwargs": {
"batch_size": 64,
},
},
{
"model_name_or_path": "/gpu/huangyl3/Embedding_eval/model/bge-reranker-v2-m3",
"is_cross_encoder": True,
"max_seq_length": 512,
"prompt": "为这个问题生成一个检索用的表示",
"model_kwargs": {"torch_dtype": "auto"},
"encode_kwargs": {
"batch_size": 32,
},
},
],
"eval": {
"tasks": ["T2Retrieval"],
"verbosity": 2,
"overwrite_results": True,
"top_k": 5
},
},
}
run_task(task_cfg=two_stage_task_cfg)
3. model_kwargs中torch_dtype报错问题
问题描述
评测gte-multilingual-mlm-base、Qwen3-Embedding-0.6B、bge-m3模型(非检索数据集评测任务)时,原配置"model_kwargs": {"torch_dtype": "auto"}会触发报错;
临时解决方案:将torch_dtype: auto硬改为dtype: float可规避报错,但并非最优方案。
4. 批量评测脚本的执行报错问题
问题描述
批量循环评测多个模型时,第一个模型可正常执行,后续模型会触发报错;仅改为枚举式写法可正常批量运行,报错原因暂未明确,需指导。
相关脚本
import time
import datetime
from evalscope.run import run_task
# ===================== 配置核心参数 =====================
# 定义需要批量评测的模型列表(替换为你要测的模型名)
MODEL_LIST = [
"iic/gte-multilingual-mlm-base", # BGE系列示例
"Qwen/Qwen3-Embedding-0.6B", # 多语言嵌入模型示例
"BAAI/bge-m3" # GTE-large示例
]
# 基础配置模板(不包含model_name_or_path,循环时动态填充)
BASE_TASK_CFG = {
"work_dir": "/Users/hyl/PyCharmMiscProject/GAi/Embedding_eval/outputs",
"eval_backend": "RAGEval",
"eval_config": {
"tool": "MTEB",
"model": [
{
"model_name_or_path": "", # 循环时动态赋值
"pooling_mode": None,
"max_seq_length": 512,
"prompt": "",
"model_kwargs": {"torch_dtype": "auto"},
"encode_kwargs": {"batch_size": 128},
"hub": "modelscope"
}
],
"eval": {
"tasks": ["T2Retrieval"],
"verbosity": 2,
"overwrite_results": True,
"top_k": 5,
"hub": "modelscope"
},
},
}
# ===================== 核心逻辑:循环评测 + 晚上自动执行 =====================
def run_batch_evaluation():
# 遍历模型列表,逐个执行评测
for idx, model_name in enumerate(MODEL_LIST):
try:
# 复制基础配置,避免修改原字典
task_cfg = BASE_TASK_CFG.copy()
# 动态替换模型名
task_cfg["eval_config"]["model"][0]["model_name_or_path"] = model_name
# 打印当前评测进度
current_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
print(f"\n===== 开始评测第 {idx + 1}/{len(MODEL_LIST)} 个模型 =====")
print(f"批次时间:{current_time}")
print(f"模型名:{model_name}")
# 记录评测开始时间(精确到毫秒)
start_time = datetime.datetime.now()
print(f"评测开始时间:{start_time.strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]}") # 保留毫秒
print("===========================\n")
# 执行评测任务
run_task(task_cfg=task_cfg)
# 记录评测结束时间,计算总耗时
end_time = datetime.datetime.now()
duration = end_time - start_time
# 转换耗时为 时:分:秒 格式(总秒数转时分秒)
hours = duration.seconds // 3600
minutes = (duration.seconds % 3600) // 60
seconds = duration.seconds % 60
# 保留毫秒的耗时字符串
duration_str = f"{hours}小时{minutes}分钟{seconds}秒(总耗时:{duration.total_seconds():.2f}秒)"
# 打印完成提示 + 时间统计
print(f"\n===== 模型 {model_name} 评测完成 =====")
print(f"评测结束时间:{end_time.strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]}")
print(f"本次评测总耗时:{duration_str}")
print("===========================\n")
# 可选:模型间间隔(避免频繁请求,比如休息5分钟)
time.sleep(300)
except Exception as e:
# 单个模型评测失败,记录错误并继续下一个
end_time = datetime.datetime.now()
print(f"\n===== 模型 {model_name} 评测失败 =====")
print(f"失败时间:{end_time.strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]}")
print(f"错误信息:{str(e)}")
print("继续评测下一个模型...\n")
continue
# ===================== 启动批量评测 =====================
if __name__ == "__main__":
run_batch_evaluation()
备注
持续更新.......

浙公网安备 33010602011771号