大模型测评手段多样,旨在全面评估模型的性能和能力。以下是一些主要的测评方法和维度:
大模型评测方法分类表
评测维度 | 评测类型 | 具体方法/数据集 | 备注 |
---|---|---|---|
基础能力 | 语言理解 | GLUE, SuperGLUE, CLUE (中文) | 包含中英文语境评测 |
知识掌握 | MMLU (多学科), ARC (科学推理) | 需覆盖STEM/人文领域 | |
数学推理 | GSM8K (小学数学), MATH (竞赛数学) | 考察逐步推理能力 | |
编程能力 | HumanEval (代码生成), MBPP (Python) | 需测试代码可执行性 | |
安全对齐 | 偏见检测 | BiasBench, StereoSet | 性别/种族/文化偏见 |
毒性评估 | ToxiGen, RealToxicityPrompts | 仇恨/暴力内容识别 | |
对抗攻击 | AdvGLUE, ANLI (对抗性NLI) | 鲁棒性压力测试 | |
专项能力 | 多模态能力 | VQA (视觉问答), ImageNet (图像分类) | 跨模态理解评估 |
工具使用 | ToolBench (API调用), WebArena (网页操作) | 实际工具调用成功率 | |
长文本处理 | LRA (长范围建模), LongBench (中英文) | 支持>8k tokens上下文 | |
前沿趋势 | 认知能力 | Theory of Mind测试, 创造性写作 | 高阶心智能力评估 |
持续学习 | COVID-19时效知识测试, 灾难性遗忘检测 | 动态知识更新能力 |
一、evalscope介绍
1.1 概述
EvalScope 是魔搭社区(ModelScope)推出的大模型评测与性能基准测试框架,专注于为大型语言模型(LLM)提供多维度、自动化的评测能力。其核心目标是通过标准化测试流程和丰富的评测指标,帮助开发者全面评估模型能力、优化部署性能,并支持从学术研究到工业落地的完整生命周期管理。
1.2 核心功能
功能模块 | 详细说明 | 典型应用场景 |
---|---|---|
多模型评测 | 支持 LLM、多模态 LLM、Embedding 模型、Reranker 模型等类型 | 模型选型对比、微调效果验证 |
多维度指标 | - 能力评估:MMLU、C-Eval、GSM8K 等 - 性能压测:吞吐量、延迟、显存占用 - 稳定性:高并发容错 |
生产环境性能优化、硬件适配验证 |
RAG 评测 | 端到端评估检索增强生成流程,支持独立模块评估(命中率、NDCG)和端到端评估(忠实度、正确性) | 多模态检索系统优化 |
长推理分析 | 检测模型思考过程中的过度思考(Overthinking)与思考不足(Underthinking)现象 | 长上下文模型优化 |
可视化工具 | 提供 Gradio 界面,支持多模型对比、问题回答详情查看 | 结果分析与汇报 |
1.3 优势与局限
优势 | 局限 |
---|---|
- 开箱即用,内置 20+ 主流评测基准 | - 依赖模型服务 API,无法直接评测本地私有模型 |
- 支持从单模型评测到生产级压力测试的全链路 | - 部分高级功能需配置 Docker 环境 |
- 提供可视化报告与 Gradio 界面 | - 对自定义数据集的格式要求严格 |
二、使用说明
安装部署
Docker
CPU环境镜像(python3.11):
modelscope-registry.cn-beijing.cr.aliyuncs.com/modelscope-repo/modelscope:ubuntu22.04-py311-torch2.3.1-1.24.1
modelscope-registry.cn-hangzhou.cr.aliyuncs.com/modelscope-repo/modelscope:ubuntu22.04-py311-torch2.3.1-1.24.1
modelscope-registry.us-west-1.cr.aliyuncs.com/modelscope-repo/modelscope:ubuntu22.04-py311-torch2.3.1-1.24.1
GPU环境镜像(python3.11):
modelscope-registry.cn-beijing.cr.aliyuncs.com/modelscope-repo/modelscope:ubuntu22.04-cuda12.1.0-py311-torch2.3.1-tf2.16.1-1.24.1
modelscope-registry.cn-hangzhou.cr.aliyuncs.com/modelscope-repo/modelscope:ubuntu22.04-cuda12.1.0-py311-torch2.3.1-tf2.16.1-1.24.1
modelscope-registry.us-west-1.cr.aliyuncs.com/modelscope-repo/modelscope:ubuntu22.04-cuda12.1.0-py311-torch2.3.1-tf2.16.1-1.24.1
针对LLM和AIGC模型的运行环境
modelscope-registry.cn-beijing.cr.aliyuncs.com/modelscope-repo/modelscope:ubuntu22.04-cuda12.4.0-py311-torch2.5.1-1.24.1-LLM
modelscope-registry.cn-hangzhou.cr.aliyuncs.com/modelscope-repo/modelscope:ubuntu22.04-cuda12.4.0-py311-torch2.5.1-1.24.1-LLM
modelscope-registry.us-west-1.cr.aliyuncs.com/modelscope-repo/modelscope:ubuntu22.04-cuda12.4.0-py311-torch2.5.1-1.24.1-LLM
本地安装
- Python 3.8+
- CUDA 11.7+
- Docker(可选,用于离线环境)
安装命令
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[app]' # 安装 可视化 相关依赖
pip install 'evalscope[all]' # 安装所有 backends (Native, OpenCompass, VLMEvalKit, RAGEval)
模型评测
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 Name | Dataset Name | Metric Name | Category Name | Subset Name | Num | Score | +=======================+================+=================+=================+===============+=======+=========+ | Qwen2.5-0.5B-Instruct | gsm8k | AverageAccuracy | default | main | 5 | 0.4 | +-----------------------+----------------+-----------------+-----------------+---------------+-------+---------+ | Qwen2.5-0.5B-Instruct | ai2_arc | AverageAccuracy | default | ARC-Easy | 5 | 0.8 | +-----------------------+----------------+-----------------+-----------------+---------------+-------+---------+ | Qwen2.5-0.5B-Instruct | ai2_arc | AverageAccuracy | default | ARC-Challenge | 5 | 0.4 | +-----------------------+----------------+-----------------+-----------------+---------------+-------+---------+
参数说明
参数名称 | 类型 | 默认值 | 说明 |
---|---|---|---|
--model |
String | - | 被评测的模型名称。指定为本地路径或模型 ID。 |
--model-id |
String | - | 模型的别名,用于报告展示,默认为模型的最后一部分。 |
--model-args |
String | - | 模型加载参数,以逗号分隔,key=value形式,解析为字典。 |
--generation-config |
String | - | 生成参数,以逗号分隔,key=value形式,解析为字典。 |
--chat-template |
String | None | 模型推理模板,默认为 None,支持 Jinja 模板字符串。 |
--api-url |
String | None | 模型 API 端点,默认为 None。 |
--api-key |
String | EMPTY | 模型 API 端点密钥,默认为空。 |
--timeout |
Int/Float | None | 模型 API 请求超时时间,默认为 None。 |
--stream |
Bool | False | 是否使用流式传输,默认为 False。 |
--datasets |
String | - | 数据集名称,支持输入多个数据集,使用空格分隔。 |
--dataset-args |
String | - | 评测数据集的设置参数,以 JSON 字符串格式传入,解析为字典。 |
--dataset-dir |
String | ~/.cache/modelscope/datasets | 数据集下载路径,默认为缓存目录。 |
--dataset-hub |
String | modelscope | 数据集下载源,默认为 modelscope,可选 huggingface。 |
--limit |
Int | - | 每个数据集最大评测数据量,默认为全部评测。 |
--eval-batch-size |
Int | 1 | 评测批量大小,默认为 1;在 eval-type=service 时,表示并发评测的请求数,默认为 8。 |
--eval-stage |
String | all | 评测阶段,可选 all, infer, review,默认为 all。 |
--eval-type |
String | checkpoint | 评测类型,可选 checkpoint, custom, service,默认为 checkpoint。 |
--eval-backend |
String | Native | 评测后端,可选Native, OpenCompass, VLMEvalKit, RAGEval, ThirdParty,默认为Native |
--eval-config |
String | - | 使用非 Native 评测后端时需要传入的参数。 |
--judge-strategy |
String | auto | 使用裁判模型的策略,默认为 auto。 |
--judge-worker-num |
Int | 1 | 裁判模型并发数,默认为 1。 |
--judge-model-args |
String | - | 设置裁判模型参数,以 JSON 字符串格式传入,解析为字典。 |
--work-dir |
String | ./outputs/{timestamp} | 模型评测输出路径,默认为当前目录下的 outputs 文件夹。 |
--use-cache |
String | None | 使用本地缓存的路径,默认为 None。 |
--seed |
Int | 42 | 随机种子,默认为 42。 |
--debug |
Bool | false | 是否开启调试模式,默认为 false。 |
--dry-run |
Bool | false | 预检参数,不进行推理,只打印参数,默认为 false。 |
模型API服务评测
、evalscope eval \
--api-url http://10.1.30.50:40000/v1/chat/completions \
--model deepseek-r1-channel-int8 \
--api-key EMPTY --eval-type service \
--datasets gsm8k arc hellaswag humaneval --limit 10
针对数学问题、考试、常识推理、代码生成做的评测
+--------------------------+-----------+-----------------+------------------+-------+---------+---------+
| Model | Dataset | Metric | Subset | Num | Score | Cat.0 |
+==========================+===========+=================+==================+=======+=========+=========+
| deepseek-r1-channel-int8 | arc | AverageAccuracy | ARC-Easy | 10 | 1 | default |
+--------------------------+-----------+-----------------+------------------+-------+---------+---------+
| deepseek-r1-channel-int8 | arc | AverageAccuracy | ARC-Challenge | 10 | 1 | default |
+--------------------------+-----------+-----------------+------------------+-------+---------+---------+
| deepseek-r1-channel-int8 | gsm8k | AverageAccuracy | main | 10 | 1 | default |
+--------------------------+-----------+-----------------+------------------+-------+---------+---------+
| deepseek-r1-channel-int8 | hellaswag | AverageAccuracy | default | 10 | 0.8 | default |
+--------------------------+-----------+-----------------+------------------+-------+---------+---------+
| deepseek-r1-channel-int8 | humaneval | Pass@1 | openai_humaneval | 10 | 1 | default |
+--------------------------+-----------+-----------------+------------------+-------+---------+---------+
离线评测
# 数据集下载或者从modelscope下载
wget https://modelscope.oss-cn-beijing.aliyuncs.com/open_data/benchmark/data.zip
unzip data.zip
git lfs install
git clone https://www.modelscope.cn/datasets/modelscope/MMLU-Pro.git
# 下载模型
git lfs install
git clone https://www.modelscope.cn/Qwen/Qwen2.5-0.5B-Instruct.git
执行评测任务
evalscope eval \
--model /path/to/workdir/Qwen2.5-0.5B-Instruct \
--datasets arc \
--dataset-args '{"arc": {"local_path": "/path/to/workdir/data/arc"}}' \
--limit 10
自定义评测数据集
大语言模型仅支持选择题和问答题,同时对格式有要求
选择题MCQ:适合用户是选择题的场景,评测指标为准确率(accuracy)。格式如下:
mcq/
├── example_dev.csv # (可选)文件名组成为`{subset_name}_dev.csv`,用于fewshot评测
└── example_val.csv # 文件名组成为`{subset_name}_val.csv`,用于实际评测的数据
其中csv文件需要为下面的格式:
id,question,A,B,C,D,answer
1,通常来说,组成动物蛋白质的氨基酸有____,4种,22种,20种,19种,C
2,血液内存在的下列物质中,不属于代谢终产物的是____。,尿素,尿酸,丙酮酸,二氧化碳,C
id是序号(可选字段)、question是问题、A, B, C, D等是可选项,最大支持10个选项、answer是正确选项
问答题格式(QA):适合用户是问答题的场景,评测指标是ROUGE和BLEU。
qa/
└── example.jsonl
{"system": "你是一位地理学家", "query": "中国的首都是哪里?", "response": "中国的首都是北京"}
{"query": "世界上最高的山是哪座山?", "response": "是珠穆朗玛峰"}
{"query": "为什么北极见不到企鹅?", "response": "因为企鹅大多生活在南极"}
system是系统prompt(可选字段)、query是问题(必须)、response是正确回答(必须)
脚本执行命令:(可转换命令执行)
from evalscope import TaskConfig, run_task
task_cfg = TaskConfig(
model='qwen/Qwen2-0.5B-Instruct',
datasets=['general_qa'], # 数据格式,选择题格式固定为 'general_qa'
dataset_args={
'general_qa': {
"local_path": "custom_eval/text/qa", # 自定义数据集路径
"subset_list": [
"example" # 评测数据集名称,上述 *.jsonl 中的 *
]
}
},
)
run_task(task_cfg=task_cfg)
推理性能压测
# 在线推理压测
evalscope perf --parallel 20 \
--url http://10.1.30.50:40000/v1/chat/completions \
--model deepseek-r1-channel-int8 \
--log-every-n-query 10 --connect-timeout 600 \
--read-timeout 600 --dataset random \
--tokenizer-path meituan/DeepSeek-R1-Channel-INT8 \
--max-prompt-length 1048 \
--min-prompt-length 512 --stream --api openai -n 500
# 使用prompt
evalscope perf \
--url 'http://127.0.0.1:8000/v1/chat/completions' \
--parallel 2 \
--model 'qwen2.5' \
--log-every-n-query 10 \
--number 20 \
--api openai \
--temperature 0.9 \
--max-tokens 1024 \
--prompt '写一个科幻小说,请开始你的表演'
# 本地文件作为prompt
evalscope perf \
--url 'http://127.0.0.1:8000/v1/chat/completions' \
--parallel 2 \
--model 'qwen2.5' \
--log-every-n-query 10 \
--number 20 \
--api openai \
--temperature 0.9 \
--max-tokens 1024 \
--prompt @prompt.txt
- 输出示例:
Benchmarking summary:
+-----------------------------------+-----------------------------------------------------+
| Key | Value |
+===================================+=====================================================+
| Time taken for tests (s) | 10.739 |
+-----------------------------------+-----------------------------------------------------+
| Number of concurrency | 1 |
+-----------------------------------+-----------------------------------------------------+
| Total requests | 15 |
+-----------------------------------+-----------------------------------------------------+
| Succeed requests | 15 |
+-----------------------------------+-----------------------------------------------------+
| Failed requests | 0 |
+-----------------------------------+-----------------------------------------------------+
| Throughput(average tokens/s) | 324.059 |
+-----------------------------------+-----------------------------------------------------+
| Average QPS | 1.397 |
+-----------------------------------+-----------------------------------------------------+
| Average latency (s) | 0.696 |
+-----------------------------------+-----------------------------------------------------+
| Average time to first token (s) | 0.029 |
+-----------------------------------+-----------------------------------------------------+
| Average time per output token (s) | 0.00309 |
+-----------------------------------+-----------------------------------------------------+
| Average input tokens per request | 50.133 |
+-----------------------------------+-----------------------------------------------------+
| Average output tokens per request | 232.0 |
+-----------------------------------+-----------------------------------------------------+
| Average package latency (s) | 0.003 |
+-----------------------------------+-----------------------------------------------------+
| Average package per request | 232.0 |
+-----------------------------------+-----------------------------------------------------+
| Expected number of requests | 15 |
+-----------------------------------+-----------------------------------------------------+
| Result DB path | ./outputs/20250416_194204/qwen2.5/benchmark_data.db |
+-----------------------------------+-----------------------------------------------------+
Percentile results:
+------------+----------+----------+-------------+--------------+---------------+----------------------+
| Percentile | TTFT (s) | TPOT (s) | Latency (s) | Input tokens | Output tokens | Throughput(tokens/s) |
+------------+----------+----------+-------------+--------------+---------------+----------------------+
| 10% | 0.0202 | 0.0027 | 0.1846 | 41 | 50 | 270.8324 |
| 25% | 0.0209 | 0.0028 | 0.2861 | 44 | 83 | 290.0714 |
| 50% | 0.0233 | 0.0028 | 0.7293 | 49 | 250 | 335.644 |
| 66% | 0.0267 | 0.0029 | 0.9052 | 50 | 308 | 340.2603 |
| 75% | 0.0437 | 0.0029 | 0.9683 | 53 | 325 | 341.947 |
| 80% | 0.0438 | 0.003 | 1.0799 | 58 | 376 | 342.7985 |
| 90% | 0.0439 | 0.0032 | 1.2474 | 62 | 424 | 345.5268 |
| 95% | 0.0463 | 0.0033 | 1.3038 | 66 | 431 | 348.1648 |
| 98% | 0.0463 | 0.0035 | 1.3038 | 66 | 431 | 348.1648 |
| 99% | 0.0463 | 0.0037 | 1.3038 | 66 | 431 | 348.1648 |
+------------+----------+----------+-------------+--------------+---------------+----------------------+
- 指标说明
指标名称 | 说明 |
---|---|
Time taken for tests (s) |
测试所用的时间(秒)。 |
Number of concurrency |
并发数量。 |
Total requests |
总请求数。 |
Succeed requests |
成功的请求数。 |
Failed requests |
失败的请求数。 |
Throughput (average tokens/s) |
吞吐量(平均每秒处理的 token 数)。 |
Average QPS |
平均每秒请求数(Queries Per Second)。 |
Average latency (s) |
平均延迟时间(秒)。 |
Average time to first token (s) |
平均首次 token 时间(秒)。 |
Average time per output token (s) |
平均每个输出 token 的时间(秒)。 |
Average input tokens per request |
每个请求的平均输入 token 数。 |
Average output tokens per request |
每个请求的平均输出 token 数。 |
Average package latency (s) |
平均包延迟时间(秒)。 |
Average package per request |
每个请求的平均包数。 |
Expected number of requests |
预期的请求数。 |
Result DB path |
结果数据库路径。 |
Percentile |
数据被分为 100 个相等部分,第 n 百分位表示 n% 的数据点在此值之下。 |
TTFT (s) |
Time to First Token,首次生成 token 的时间(秒)。 |
TPOT (s) |
Time Per Output Token,生成每个输出 token 的时间(秒)。 |
Latency (s) |
延迟时间,指请求到响应之间的时间(秒)。 |
Input tokens |
输入的 token 数量。 |
Output tokens |
输出的 token 数量。 |
Throughput (tokens/s) |
吞吐量,指每秒处理 token 的数量。 |
- 参数说明
参数名称 | 类型 | 默认值 | 说明 | ||
---|---|---|---|---|---|
--model |
String | - | 测试模型名称。可以是模型文件路径或模型 ID。 | ||
--url |
String | - | 指定 API 地址。仅在使用 openai 或 dashscope 时需要。 | ||
--name |
String | - | WandB 数据库结果名称,默认为: {model_name}_{current_time} | ||
--api |
String | - | 指定服务 API,目前支持[openai|dashscope | local | local_vllm] |
--port |
Int | 8877 | 本地推理服务端口,默认为 8877,仅对 local 和 local_vllm 有效。 | ||
--attn-implementation |
String | None | Attention 实现方式,可选[flash_attention_2|eager | sdpa],仅在api为local时有效 | |
--api-key |
String | - | API 密钥,可选。 | ||
--debug |
Bool | False | 输出调试信息,默认为 False。 | ||
--connect-timeout |
Int | 600 | 网络连接超时,默认为 600秒。 | ||
--read-timeout |
Int | 600 | 网络读取超时,默认为 600秒。 | ||
--headers |
String | - | 额外的 HTTP 头,格式为 key1=value1 key2=value2,用于每个查询。 | ||
--number |
Int | 1000 | 发出的请求总数量,默认为 None,表示基于数据集数量发送请求。 | ||
--parallel |
Int | 1 | 并发请求的数量,默认为 1。 | ||
--rate |
Float | -1 | 每秒生成的请求数量,默认为 -1,表示所有请求将在时间 0 生成,没有间隔。 | ||
--log-every-n-query |
Int | 10 | 每 n 个查询记录日志,默认为 10。 | ||
--stream |
Bool | False | 使用SSE流输出,默认为False。需要设置stream参数以测量Time to First Token (TTFT)指标 | ||
--max-prompt-length |
Int | 131072 | 最大输入 prompt 长度,默认为 131072,大于该值时,将丢弃 prompt。 | ||
--min-prompt-length |
Int | 0 | 最小输入 prompt 长度,默认为 0,小于该值时,将丢弃 prompt。 | ||
--prefix-length |
Int | 0 | prompt 的前缀长度,默认为 0,仅对于 random 数据集有效。 | ||
--prompt |
String | - | 指定请求 prompt,一个字符串或本地文件,使用优先级高于 dataset。 | ||
--query-template |
String | - | 指定查询模板,一个 JSON 字符串或本地文件。 | ||
--dataset |
String | - | 可以指定数据集模式,如 openqa、longalpaca、flickr8k、line_by_line、random。 | ||
--dataset-path |
String | - | 数据集文件的路径,与数据集结合使用。 | ||
--tokenizer-path |
String | - | 指定分词器权重路径,用于计算输入和输出的 token 数量。 | ||
--frequency-penalty |
Float | - | frequency_penalty 值。 | ||
--logprobs |
Float | - | 对数概率。 | ||
--max-tokens |
Int | - | 可以生成的最大 token 数量。 | ||
--min-tokens |
Int | - | 生成的最少 token 数量,不是所有模型服务都支持该参数,请查看对应 API 文档。 | ||
--n-choices |
Int | - | 生成的补全选择数量。 | ||
--seed |
Int | 42 | 随机种子,默认为 42。 | ||
--stop |
String | - | 停止生成的 tokens。 | ||
--stop-token-ids |
String | - | 设置停止生成的 token 的 ID。 | ||
--temperature |
Float | - | 采样温度。 | ||
--top-p |
Float | - | top_p 采样。 | ||
--top-k |
Int | - | top_k 采样。 | ||
--wandb-api-key |
String | - | WandB API 密钥,如果设置,则度量将保存到 WandB。 | ||
--outputs-dir |
String | ./outputs | 输出文件路径,默认为 ./outputs。 |
速度基准测试
模型在单个请求下的标准速度,类似Qwen官方报告的速度基准
evalscope perf \
--parallel 1 \
--url http://10.1.30.50:40000/v1/completions \
--model deepseek-r1-channel-int8 \
--log-every-n-query 1 \
--connect-timeout 6000 \
--read-timeout 6000 \
--max-tokens 2048 \
--min-tokens 2048 \
--api openai \
--dataset speed_benchmark \
--debug
可以使用 --dataset [speed_benchmark|speed_benchmark_long]来指定速度测试的数据集:
speed_benchmark: 测试[1, 6144, 14336, 30720]长度的prompt,固定输出2048个token。
speed_benchmark_long: 测试[63488, 129024]长度的prompt,固定输出2048个token。
RAG评测
two_stage_task_cfg = {
"eval_backend": "RAGEval",
"eval_config": {
"tool": "MTEB", # 评测工具
"model": [
{
"model_name_or_path": "AI-ModelScope/m3e-base", # 模型名称或路径,支持从modelscope仓库自动下载模型
"is_cross_encoder": False, # 模型是否为交叉编码器,默认为 False;reranking模型需设置为True
"max_seq_length": 512, # 最大序列长度,默认为 512
"model_kwargs": {"torch_dtype": "auto"}, # 模型的关键字参数,默认值为 {"torch_dtype": "auto"}
"encode_kwargs": {
"batch_size": 64,
},
},
{
"model_name_or_path": "OpenBMB/MiniCPM-Reranker",
"is_cross_encoder": True,
"max_seq_length": 512,
"prompt": "为这个问题生成一个检索用的表示", # 用于检索任务在模型前的提示,默认为空字符串
"model_kwargs": {"torch_dtype": "auto"},
"encode_kwargs": {
"batch_size": 32,
},
},
],
"eval": {
"tasks": ["T2Retrieval"], # 任务名称,可选https://evalscope.readthedocs.io/zh-cn/latest/user_guides/backend/rageval_backend/mteb.html#id2
"verbosity": 2, # 选取前 K 个结果,检索任务使用
"output_folder": "outputs",
"overwrite_results": True,
"top_k": 5,
"limits": 100,
},
},
}
from evalscope.run import run_task
run_task(task_cfg=two_stage_task_cfg)
ms-swift集成
ms-swift是魔搭社区提供的大模型与多模态大模型训练部署框架,现已支持450+大模型与150+多模态大模型的训练(预训练、微调、人类对齐)、推理、评测、量化与部署。模型开发者可以在ms-swift框架中一站式完成围绕大模型的各类需求。目前ms-swift的主要能力包含:
🍎 模型类型:支持450+纯文本大模型、150+多模态大模型以及All-to-All全模态模型、序列分类模型、Embedding模型训练到部署全流程。
数据集类型:内置150+预训练、微调、人类对齐、多模态等各种类型的数据集,并支持自定义数据集。
硬件支持:CPU、RTX系列、T4/V100、A10/A100/H100、Ascend NPU、MPS等。
🍊 轻量训练:支持了LoRA、QLoRA、DoRA、LoRA+、ReFT、RS-LoRA、LLaMAPro、Adapter、GaLore、Q-Galore、LISA、UnSloth、Liger-Kernel等轻量微调方式。
分布式训练:支持分布式数据并行(DDP)、device_map简易模型并行、DeepSpeed ZeRO2 ZeRO3、FSDP等分布式训练技术。
量化训练:支持对BNB、AWQ、GPTQ、AQLM、HQQ、EETQ量化模型进行训练。
RLHF训练:支持纯文本大模型和多模态大模型的DPO、GRPO、RM、PPO、KTO、CPO、SimPO、ORPO等人类对齐训练方法。
🍓 多模态训练:支持对图像、视频和语音不同模态模型进行训练,支持VQA、Caption、OCR、Grounding任务的训练。
界面训练:以界面的方式提供训练、推理、评测、量化的能力,完成大模型的全链路。
插件化与拓展:支持自定义模型和数据集拓展,支持对loss、metric、trainer、loss-scale、callback、optimizer等组件进行自定义。
🍉 工具箱能力:除了对大模型和多模态大模型的训练支持外,还支持其推理、评测、量化和部署全流程。
推理加速:支持PyTorch、vLLM、LmDeploy推理加速引擎,并提供OpenAI接口,为推理、部署和评测模块提供加速。
模型评测:以EvalScope作为评测后端,支持100+评测数据集对纯文本和多模态模型进行评测。
模型量化:支持AWQ、GPTQ和BNB的量化导出,导出的模型支持使用vLLM/LmDeploy推理加速,并支持继续训练。
常见问题
问题现象 | 解决方案 |
---|---|
CUDA out of memory |
减少 --max-tokens 或启用 --tensor-parallel-size 分片 |
响应延迟波动大 | 检查 --connect-timeout 和 --read-timeout 参数,优化网络配置 |
自定义数据集解析失败 | 确保 JSONL 格式符合规范,使用 evaluator.inspect_dataset() 预检查 |
LLM全链路最佳实践
modelscope 提供模型、数据集下载能力
data-juicer 提供数据集处理能力
ms-swift 提供模型训练、推理能力
evalscope 提供模型评测能力
百炼模型评测: https://help.aliyun.com/zh/model-studio/model-evaluation-overview