中文 | English
⭐ 如果你喜欢这个项目,请点击右上角的 "Star" 按钮支持我们。你的支持是我们前进的动力!
EvalScope是魔搭社区官方推出的模型评测与性能基准测试框架,专为多样化的模型评估需求而设计。它支持广泛的模型类型,包括但不限于大语言模型、多模态模型、Embedding 模型、Reranker 模型和 CLIP 模型。
EvalScope还适用于多种评测场景,如端到端RAG评测、竞技场模式和模型推理性能压测等,其内置多个常用测试基准和评测指标,如MMLU、CMMLU、C-Eval、GSM8K等。此外,通过与ms-swift训练框架的无缝集成,可一键发起评测,为模型训练和评测提供全链路支持🚀
架构介绍
-
Model Adapter: 模型适配器,用于将特定模型的输出转换为框架所需的格式,支持API调用的模型和本地运行的模型。
-
Data Adapter: 数据适配器,负责转换和处理输入数据,以便适应不同的评测需求和格式。
-
Evaluation Backend:
- Native:EvalScope自身的默认评测框架,支持多种评测模式,包括单模型评测、竞技场模式、Baseline模型对比模式等。
- OpenCompass:支持OpenCompass作为评测后端,对其进行了高级封装和任务简化,您可以更轻松地提交任务进行评测。
- VLMEvalKit:支持VLMEvalKit作为评测后端,轻松发起多模态评测任务,支持多种多模态模型和数据集。
- RAGEval:支持RAG评测,支持使用MTEB/CMTEB进行embedding模型和reranker的独立评测,以及使用RAGAS进行端到端评测。
- ThirdParty:其他第三方评测任务,如ToolBench。
-
Performance Evaluator: 模型性能评测,负责具体衡量模型推理服务性能,包括性能评测、压力测试、性能评测报告生成、可视化。
-
Evaluation Report: 最终生成的评测报告,总结模型的性能表现,报告可以用于决策和进一步的模型优化。
-
Visualization: 可视化结果,帮助用户更直观地理解评测结果,便于分析和比较不同模型的表现。
请扫描下面的二维码来加入我们的交流群:
Discord Group | 微信群 | 钉钉群 |
---|---|---|
- 🔥 [2024.12.13] 模型评测优化,不再需要传递
--template-type
参数;支持evalscope eval --args
启动评测,参考📖使用指南 - 🔥 [2024.11.26] 模型推理压测工具重构完成:支持本地启动推理服务、支持Speed Benchmark;优化异步调用错误处理,参考📖使用指南
- 🔥 [2024.10.31] 多模态RAG评测最佳实践发布,参考📖博客
- 🔥 [2024.10.23] 支持多模态RAG评测,包括CLIP_Benchmark评测图文检索器,以及扩展了RAGAS以支持端到端多模态指标评测。
- 🔥 [2024.10.8] 支持RAG评测,包括使用MTEB/CMTEB进行embedding模型和reranker的独立评测,以及使用RAGAS进行端到端评测。
- 🔥 [2024.09.18] 我们的文档增加了博客模块,包含一些评测相关的技术调研和分享,欢迎📖阅读
- 🔥 [2024.09.12] 支持 LongWriter 评测,您可以使用基准测试 LongBench-Write 来评测长输出的质量以及输出长度。
- 🔥 [2024.08.30] 支持自定义数据集评测,包括文本数据集和多模态图文数据集。
- 🔥 [2024.08.20] 更新了官方文档,包括快速上手、最佳实践和常见问题等,欢迎📖阅读。
- 🔥 [2024.08.09] 简化安装方式,支持pypi安装vlmeval相关依赖;优化多模态模型评测体验,基于OpenAI API方式的评测链路,最高加速10倍。
- 🔥 [2024.07.31] 重要修改:
llmuses
包名修改为evalscope
,请同步修改您的代码。 - 🔥 [2024.07.26] 支持VLMEvalKit作为第三方评测框架,发起多模态模型评测任务。
- 🔥 [2024.06.29] 支持OpenCompass作为第三方评测框架,我们对其进行了高级封装,支持pip方式安装,简化了评测任务配置。
- 🔥 [2024.06.13] EvalScope与微调框架SWIFT进行无缝对接,提供LLM从训练到评测的全链路支持 。
- 🔥 [2024.06.13] 接入Agent评测集ToolBench。
我们推荐使用conda来管理环境,并使用pip安装依赖:
- 创建conda环境 (可选)
# 建议使用 python 3.10
conda create -n evalscope python=3.10
# 激活conda环境
conda activate evalscope
- pip安装依赖
pip install evalscope # 安装 Native backend (默认)
# 额外选项
pip install evalscope[opencompass] # 安装 OpenCompass backend
pip install evalscope[vlmeval] # 安装 VLMEvalKit backend
pip install evalscope[rag] # 安装 RAGEval backend
pip install evalscope[perf] # 安装 模型压测模块 依赖
pip install evalscope[all] # 安装所有 backends (Native, OpenCompass, VLMEvalKit, RAGEval)
Warning
由于项目更名为evalscope
,对于v0.4.3
或更早版本,您可以使用以下命令安装:
pip install llmuses<=0.4.3
使用llmuses
导入相关依赖:
from llmuses import ...
- 下载源码
git clone https://github.com/modelscope/evalscope.git
- 安装依赖
cd evalscope/
pip install -e . # 安装 Native backend
# 额外选项
pip install -e '.[opencompass]' # 安装 OpenCompass backend
pip install -e '.[vlmeval]' # 安装 VLMEvalKit backend
pip install -e '.[rag]' # 安装 RAGEval backend
pip install -e '.[perf]' # 安装 模型压测模块 依赖
pip install -e '.[all]' # 安装所有 backends (Native, OpenCompass, VLMEvalKit, RAGEval)
在指定的若干数据集上使用默认配置评测某个模型,本框架支持两钟启动评测任务的方式:使用命令行启动或使用Python代码启动评测任务。
在任意路径下执行eval
命令:
evalscope eval \
--model Qwen/Qwen2.5-0.5B-Instruct \
--datasets gsm8k arc \
--limit 5
使用python代码进行评测时需要用run_task
函数提交评测任务,传入一个TaskConfig
作为参数,也可以为python字典、yaml文件路径或json文件路径,例如:
使用Python 字典
from evalscope.run import run_task
task_cfg = {
'model': 'Qwen/Qwen2.5-0.5B-Instruct',
'datasets': ['gsm8k', 'arc'],
'limit': 5
}
run_task(task_cfg=task_cfg)
更多启动方式
使用TaskConfig
from evalscope.run import run_task
from evalscope.config import TaskConfig
task_cfg = TaskConfig(
model='Qwen/Qwen2.5-0.5B-Instruct',
datasets=['gsm8k', 'arc'],
limit=5
)
run_task(task_cfg=task_cfg)
使用yaml
文件
config.yaml
:
model: Qwen/Qwen2.5-0.5B-Instruct
datasets:
- gsm8k
- arc
limit: 5
from evalscope.run import run_task
run_task(task_cfg="config.yaml")
使用json
文件
config.json
:
{
"model": "Qwen/Qwen2.5-0.5B-Instruct",
"datasets": ["gsm8k", "arc"],
"limit": 5
}
from evalscope.run import run_task
run_task(task_cfg="config.json")
--model
: 指定了模型在ModelScope中的model_id
,可自动下载,例如Qwen/Qwen2.5-0.5B-Instruct;也可使用模型的本地路径,例如/path/to/model
--datasets
: 数据集名称,支持输入多个数据集,使用空格分开,数据集将自动从modelscope下载,支持的数据集参考数据集列表--limit
: 每个数据集最大评测数据量,不填写则默认为全部评测,可用于快速验证
+-----------------------+-------------------+-----------------+
| Model | ai2_arc | gsm8k |
+=======================+===================+=================+
| Qwen2.5-0.5B-Instruct | (ai2_arc/acc) 0.6 | (gsm8k/acc) 0.6 |
+-----------------------+-------------------+-----------------+
若想进行更加自定义的评测,例如自定义模型参数,或者数据集参数,可以使用以下命令,启动评测方式与简单评测一致,下面展示了使用eval
命令启动评测:
evalscope eval \
--model Qwen/Qwen2.5-0.5B-Instruct \
--model-args revision=master,precision=torch.float16,device_map=auto \
--generation-config do_sample=true,temperature=0.5 \
--dataset-args '{"gsm8k": {"few_shot_num": 0, "few_shot_random": false}}' \
--datasets gsm8k \
--limit 10
--model-args
: 模型加载参数,以逗号分隔,key=value
形式,默认参数:revision
: 模型版本,默认为master
precision
: 模型精度,默认为auto
device_map
: 模型分配设备,默认为auto
--generation-config
: 生成参数,以逗号分隔,key=value
形式,默认参数:do_sample
: 是否使用采样,默认为false
max_length
: 最大长度,默认为2048max_new_tokens
: 生成最大长度,默认为512
--dataset-args
: 评测数据集的设置参数,以json
格式传入,key为数据集名称,value为参数,注意需要跟--datasets
参数中的值一一对应:few_shot_num
: few-shot的数量few_shot_random
: 是否随机采样few-shot数据,如果不设置,则默认为true
参考:全部参数说明
EvalScope支持使用第三方评测框架发起评测任务,我们称之为评测后端 (Evaluation Backend)。目前支持的Evaluation Backend有:
- Native:EvalScope自身的默认评测框架,支持多种评测模式,包括单模型评测、竞技场模式、Baseline模型对比模式等。
- OpenCompass:通过EvalScope作为入口,发起OpenCompass的评测任务,轻量级、易于定制、支持与LLM微调框架ms-wift的无缝集成:📖使用指南
- VLMEvalKit:通过EvalScope作为入口,发起VLMEvalKit的多模态评测任务,支持多种多模态模型和数据集,支持与LLM微调框架ms-wift的无缝集成:📖使用指南
- RAGEval:通过EvalScope作为入口,发起RAG评测任务,支持使用MTEB/CMTEB进行embedding模型和reranker的独立评测,以及使用RAGAS进行端到端评测:📖使用指南
- ThirdParty: 第三方评测任务,如ToolBench、LongBench-Write。
一个专注于大型语言模型的压力测试工具,可以自定义以支持各种数据集格式和不同的API协议格式。
参考:性能测试📖使用指南
支持wandb记录结果
支持Speed Benchmark
支持速度测试,得到类似Qwen官方报告的速度基准:
Speed Benchmark Results:
+---------------+-----------------+----------------+
| Prompt Tokens | Speed(tokens/s) | GPU Memory(GB) |
+---------------+-----------------+----------------+
| 1 | 50.69 | 0.97 |
| 6144 | 51.36 | 1.23 |
| 14336 | 49.93 | 1.59 |
| 30720 | 49.56 | 2.34 |
+---------------+-----------------+----------------+
EvalScope支持自定义数据集评测,具体请参考:自定义数据集评测📖使用指南
竞技场模式允许多个候选模型通过两两对比(pairwise battle)的方式进行评测,并可以选择借助AI Enhanced Auto-Reviewer(AAR)自动评测流程或者人工评测的方式,最终得到评测报告。参考:竞技场模式📖使用指南
- RAG evaluation
- VLM evaluation
- Agents evaluation
- vLLM
- Distributed evaluating
- Multi-modal evaluation
- Benchmarks
- GAIA
- GPQA
- MBPP
- Auto-reviewer
- Qwen-max