EvalScope使用过程中的问题汇总

1. 自定义数据集使用时的KeyError问题

问题描述

使用自定义数据集评测时,配置tasks: ["CustomRetrieval"]会触发KeyError,报错信息如下:

复制代码
KeyError: "KeyError: 'CustomRetrieval' not found. Did you mean: EcomRetrieval?"

背景说明

  • EvalScope官方文档明确自定义数据集评测任务需指定为CustomRetrieval
  • ./outputs目录下已存在CustomRetrieval相关数据集;
  • 个人理解:该报错不影响评测结果生成,仅导致最终评测流程的汇总表格无法输出,整体无核心影响。

相关脚本

python 复制代码
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. 两阶段测试脚本(检索+重排)

相关脚本

python 复制代码
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-baseQwen3-Embedding-0.6Bbge-m3模型(非检索数据集评测任务)时,原配置"model_kwargs": {"torch_dtype": "auto"}会触发报错;

临时解决方案:将torch_dtype: auto硬改为dtype: float可规避报错,但并非最优方案。

4. 批量评测脚本的执行报错问题

问题描述

批量循环评测多个模型时,第一个模型可正常执行,后续模型会触发报错;仅改为枚举式写法可正常批量运行,报错原因暂未明确,需指导。

相关脚本

python 复制代码
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()

备注

持续更新.......

相关推荐
0小豆01 个月前
智能字幕校准系统实战(二):6级匹配算法从精确到模糊的全链路解析
python·nlp·算法设计·spacy·ai算法·时间序列对齐
0小豆02 个月前
【系列开篇】从零构建智能字幕校准系统:一个AI+微服务的完整实战之旅
spring boot·python·nlp·微服务架构·实战项目·spacy·ai算法
黎阳之光4 个月前
从 “视频孪生” 到 “视频动态目标三维重构”:技术演进与核心突破
数字孪生·ai算法·视频融合·视频孪生·视频动态目标实时三维重构
天天向上杰10 个月前
浅浅初识AI、AI大模型、AGI
人工智能·ai·agi·ai大模型·ai算法
小Mie不吃饭1 年前
大学生算法高等数学学习平台设计方案 (第一版)
算法·数学建模·力扣·牛客·ai算法·高级平台·实践训练平台
TSINGSEE2 年前
夏季河湖防溺水新举措:青犀AI视频智能监控系统保障水域安全
人工智能·音视频·视频监控系统·ai算法·防溺水视频智能监控方案
哈哥撩编程2 年前
31万奖金池等你挑战!IJCAI 2024 第九届“信也科技杯”全球AI算法大赛正式开赛!聚焦AI尖端赛题!
人工智能·ai·aigc·ai算法大赛·算法大赛·全球ai算法大赛·ai算法