新闻详情

新闻详情

首页 / 资讯中心 / 详情

OpenCompass 高效评测:Partitioner 任务切分与 Runner 执行后端实战指南

发布时间:2026/9/28 9:42:23来源:尧图网络
OpenCompass 高效评测:Partitioner 任务切分与 Runner 执行后端实战指南
模型评测人工智能大模型AI 评测【免费下载链接】opencompassOpenCompass is an LLM evaluation platform, supporting a wide range of models from OpenAI, Anthropic, Gemini, Qwen, GLM, DeepSeek, etc, across 100 datasets covering knowledge, reasoning, coding, science, language, long-context, and safety.项目地址https://gitcode.com/gh_mirrors/op/opencompass点击查看免费下载本篇技术指南围绕 OpenCompass 的「高效评测」机制展开系统讲解任务切分器Partitioner与执行后端Runner两大核心模块如何在配置文件中通过infer/eval字段自定义推理与评测阶段的分片策略、并发调度方式以及如何借助本地进程、Slurm 集群或阿里云 DLC 提交大规模评测任务。读完本文你将掌握NaivePartitioner、SizePartitioner、LocalRunner、SlurmRunner、DLCRunner与OpenICLInferTask/OpenICLEvalTask的完整配置方法与底层运行原理能够按实际算力资源定制最高效的评测流水线。一、总览通过infer/eval字段自定义执行策略大语言模型推理耗时较长而评测数据集规模庞大如果串行执行整个评测任务会非常耗时。OpenCompass 支持通过自定义任务切分器Partitioner将大规模评测任务灵活切分为大量独立的子任务再配合控制任务执行平台本地机器、集群等的Runner把任务分发到海量计算节点上从而充分利用计算资源、显著加速评测过程。默认情况下OpenCompass 会向用户隐藏这些细节自动选择推荐的执行策略。但用户完全可以按需自定义工作流策略——只需在配置文件中添加infer和/或eval字段即可from opencompass.partitioners import SizePartitioner, NaivePartitioner from opencompass.runners import SlurmRunner from opencompass.tasks import OpenICLInferTask, OpenICLEvalTask infer dict( partitionerdict(typeSizePartitioner, max_task_size5000), runnerdict( typeSlurmRunner, max_num_workers64, taskdict(typeOpenICLInferTask), retry5), ) eval dict( partitionerdict(typeNaivePartitioner), runnerdict( typeLocalRunner, max_num_workers32, taskdict(typeOpenICLEvalTask)), )上述示例展示了如何为推理阶段和评测阶段分别配置执行策略推理阶段任务将被切分为多个子任务每个子任务包含约 5000 个样本随后提交到 Slurm 集群执行最多同时并行运行 64 个任务评测阶段每个「模型-数据集」组合形成一个任务在本地机器上启动 32 个进程计算指标。从源码结构看infer/eval这两个配置块会由入口脚本 run.py 解析并分别驱动 OpenICL 推理OpenICLInferTask与 OpenICL 评测OpenICLEvalTask两套流水线详见 Task Execution and Monitoring。下文将依次深入讲解涉及到的各个模块。二、任务切分Partitioner由于大语言模型推理时间较长、评测数据集规模庞大串行执行单个评测任务会相当耗时。OpenCompass 允许自定义任务切分器Partitioner把大规模评测任务划分成大量相互独立的小任务从而通过并行执行充分利用计算资源。用户可以通过infer.partitioner和eval.partitioner配置推理与评测阶段的任务切分策略。2.1 Partitioner 的底层抽象所有切分器都继承自BasePartitioner定义于 opencompass/partitioners/base.py。其核心职责是把实验配置cfg包含models、datasets、work_dir切分为一份份任务字典每个任务可独立运行结构如下{ models: [], # 模型配置列表 datasets: [[]], # 数据集配置的嵌套列表每个内层列表对应一个模型 work_dir: , # 工作目录 **add_cfg # 其他需要透传到任务配置中的公共键 }BasePartitioner还提供了keep_keys机制默认会将eval.runner.task.judge_cfg、eval.runner.task.dump_details、eval.given_pred、eval.runner.task.cal_extract_rate等关键配置从实验配置保留到任务配置中保证任务独立运行时的行为一致。切分完成后任务列表会交给Runner统一调度执行。2.2NaivePartitioner这是最基础的切分策略把每个「模型-数据集」组合作为一个独立任务派发本身没有任何额外参数。源码实现见 opencompass/partitioners/naive.py。from opencompass.partitioners import NaivePartitioner infer dict( partitionerdict(typeNaivePartitioner) # ... )从源码看NaivePartitioner实际上还支持一个可选的n参数默认n1表示每个任务中包含多少个「模型-数据集」对例如n2时会把两个数据集组合进同一个任务。此外在切分时它会调用get_infer_output_path检查输出文件是否已存在——若该模型在该数据集上的推理结果已经产出则自动跳过避免重复计算这也是-r复用结果能够生效的底层机制之一。2.3SizePartitioner截至目前SizePartitioner 尚不适用于评测任务OpenICLEvalTask。SizePartitioner依据数据集规模估算推理代价时间并乘以一个经验性扩展系数随后通过拆分大数据集、合并小数据集来构造任务尽量让每个子任务的推理代价彼此均衡。其常用参数如下from opencompass.partitioners import SizePartitioner infer dict( partitionerdict( typeSizePartitioner, max_task_size: int 2000, # 每个任务的最大规模 gen_task_coef: int 20, # 生成式任务的扩展系数 ), # ... )SizePartitioner会根据推理任务的类型估算数据集推理代价并选择不同的扩展系数对于生成式任务例如使用GenInferencer使用较大的gen_task_coef对于判别式任务例如使用PPLInferencer则使用 prompt 中的标签数量作为系数。SizePartitioner的实现位于 opencompass/partitioners/size.py其源码揭示了更多值得关注的细节默认值与文档示例的区别文档示例中max_task_size写为 2000 仅作示意源码中的实际默认值为40000gen_task_coef默认值即为 20与示例一致。切分策略strategy支持两种策略——heuristic默认大数据集拆分为多个任务、小数据集合并进同一任务追求任务规模均衡split只对大数据集进行拆分不做合并。代价估算get_factor若推理模板为生成式模板含begin/round/end键代价 样本数 ×gen_task_coef若为 PPL 模板代价 样本数 × 标签数量。此外对bbh*、gsm8k*、math*、strategyqa*、agieval-jec*、agieval-gaokao-mathcloze、agieval-math、*professional_law等推理成本更高的数据集系数还会额外放大 10 倍。数据集规模缓存dataset_size_path默认缓存到.cache/dataset_size.json避免重复加载数据集统计规模同时会考虑reader_cfg.test_range的实际切片范围只统计真正参与评测的样本数。拆分方式split_dataset通过改写reader_cfg[test_range]例如[i: istep]并给数据集abbr追加_part后缀实现数据集的分片加载无需把完整数据集载入内存。目前该切分策略仍比较粗糙尚不能精确反映生成式与判别式任务之间的计算差异。我们期待社区提出更好的切分策略 :)三、执行后端Runner在多卡、多机的集群环境中若要并行执行多个任务通常需要依赖集群管理系统如 Slurm进行任务分配与调度。在 OpenCompass 中任务分配与执行统一由Runner负责。目前它支持 Slurm 与阿里云 PAI-DLC 两类调度后端同时也提供LocalRunner在本地机器上直接启动任务。所有 Runner 都继承自BaseRunner见 opencompass/runners/base.py对外统一暴露两个阶段launch(tasks)负责并行启动任务并收集(task_name, exit_code)状态summarize(status)负责汇总失败任务日志若配置了lark_bot_url还会通过飞书Lark机器人推送「任务成功 / 失败」的汇总消息。3.1LocalRunnerLocalRunner是最基础的 Runner可以在本地机器上并行运行任务。其实现见 opencompass/runners/local.py。from opencompass.runners import LocalRunner from opencompass.tasks import OpenICLInferTask infer dict( # ... runnerdict( typeLocalRunner, max_num_workers16, # 并行运行的最大进程数 taskdict(typeOpenICLEvalTask), # 要运行的任务 ) )实际并行运行的任务数量同时受可用 GPU 资源和 worker 数量两者限制。从源码看LocalRunner的调度逻辑非常精细GPU 槽位管理它会读取CUDA_VISIBLE_DEVICES或 NPU 环境下的ASCEND_RT_VISIBLE_DEVICES或直接探测torch.cuda.device_count()为每张卡设置max_workers_per_gpu默认 1个并发槽位任务启动前会抢占空闲 GPU 槽位运行结束后释放并行执行通过ThreadPoolExecutor(max_workersmax_num_workers)并发提交任务并用tqdm展示整体进度命令模板get_command_template会根据平台自动拼接CUDA_VISIBLE_DEVICES... {task_cmd}Windows 下用set ... {task_cmd}NPU 下用ASCEND_RT_VISIBLE_DEVICES...来限定每个任务可见的设备多卡任务当任务num_gpus 1时命令会退化为torch.distributed.run见任务章节由 OpenICLInferTask / OpenICLEvalTask 自行组织分布式执行。3.2SlurmRunnerSlurmRunner将任务提交到 Slurm 集群上运行通过srun命令并行启动任务。常用配置字段如下from opencompass.runners import SlurmRunner from opencompass.tasks import OpenICLInferTask infer dict( # ... runnerdict( typeSlurmRunner, taskdict(typeOpenICLEvalTask), # 要运行的任务 max_num_workers16, # 最大并发评测任务数 retry2, # 失败任务的重试次数可避免意外错误 ), )SlurmRunner的实现位于 opencompass/runners/slurm.py其构建出的实际命令形如srun [-p PARTITION] [--quotatypeQUOTATYPE] [--qosQOS] [--gresgpu:NUM_GPUS] [EXTRA_COMMAND...] -N1 -u -J TASK_NAME {task_cmd}值得补充的参数与行为partition/quotatype/qos分别对应 Slurm 分区、配额类型某些 Slurm 变体如reserved、auto、spot与服务质量extra_command可追加额外 Slurm 参数例如[-c 12, -w node1]指定 CPU 核数与目标节点GPU 请求若任务num_gpus 0会自动追加--gresgpu:{num_gpus}失败重试retry默认 2 次。_job_failed不仅检查进程返回码还会校验task.get_output_paths()中的输出文件是否全部存在——即使命令退出码为 0若输出文件缺失也会触发重试重试时会重新生成命令以刷新端口随机延时默认每次提交前随机 sleep 0~10 秒避免大量任务同时提交造成集群抖动。3.3DLCRunnerDLCRunner将任务提交到阿里云深度学习中心DLCDeep Learning Center上运行。该 Runner 依赖dlc命令行工具需要先在环境中准备好dlccd ~ wget https://dlc-cli.oss-cn-zhangjiakou.aliyuncs.com/light/binary/linux/amd64/dlc chmod x ./dlc sudo ln -rs dlc /usr/local/bin ./dlc config按照提示填写必要信息得到dlc配置文件如/user/.dlc/config即完成准备。随后在配置文件中按如下格式指定DLCRunner配置from opencompass.runners import DLCRunner from opencompass.tasks import OpenICLInferTask infer dict( # ... runnerdict( typeDLCRunner, taskdict(typeOpenICLEvalTask), # 要运行的任务 max_num_workers16, # 最大并发评测任务数 aliyun_cfgdict( bashrc_path/user/.bashrc, # 用于初始化运行环境的 bashrc 路径 conda_env_nameopencompass, # OpenCompass 的 conda 环境 dlc_config_path/user/.dlc/config, # dlc 配置文件 workspace_idws-xxx, # DLC workspace ID worker_imagexxx, # 运行任务的镜像地址 ), retry2, # 失败任务的重试次数可避免意外错误 ), )DLCRunner的实现见 opencompass/runners/dlc.py从源码可以补充以下关键细节环境初始化脚本DLC 任务实际执行的是一个拼装出的 shell 命令——优先source bashrc_path并conda activate conda_env_name也可改用python_env_path指定公共/自定义 conda 环境的 Python 路径否则使用系统 Python。源码还会默认导出PYTHONPATH、离线环境变量HF_DATASETS_OFFLINE、TRANSFORMERS_OFFLINE等默认开启、以及可选的huggingface_cache、torch_cache、http_proxy、hf_endpoint、extra_envs等环境变量必填的额外字段源码直接访问aliyun_cfg[resource_id]与aliyun_cfg[data_sources]来构造dlc命令因此这两个字段也应补齐分别指定 DLC 资源 ID 与数据源更多可选字段priority任务优先级默认 1、worker_cpu默认 12、worker_memory默认 192Gi会按 GPU 数自动放大、dlc_job_cmd兼容不同 dlc 版本的提交命令submit pytorchjob或create job --kind PyTorchJob、pre_cmd前置命令、dlc_sleep_time轮询间隔默认 10 秒等可抢占实例preemptible通过--enable_priority_preemption开关支持抢占式实例评测任务自动补 GPUeval_with_gpu默认包含[plugin_eval]若评测任务名包含这些关键字且原本num_gpus 0会自动为其分配 1 张 GPU状态轮询与日志提交后通过dlc get job轮询任务状态Succeeded/Failed/Stopped并用dlc logs增量拉取 pod 日志有约 10 秒延迟日志完整性由该机制保证失败时若配置了lark_bot_url还会推送告警。四、任务TaskTask是 OpenCompass 中的基础模块是一个执行计算密集型操作的独立脚本。每个任务会加载一个配置文件来确定参数设置并可通过两种方式执行实例化 Task 对象后调用task.run()直接在当前进程内执行推理或评测逻辑调用get_command方法传入配置路径以及包含{task_cmd}占位符的命令模板字符串例如srun {task_cmd}返回完整命令字符串后可直接在 shell 中执行。这两种方式在 opencompass/tasks/base.py 的BaseTask基类中统一抽象每个任务拥有name_prefix任务名前缀、log_subdir日志子目录、output_subdir输出子目录并提供get_log_path/get_output_paths用于定位日志与产物文件——Runner 正是依赖这些路径判断任务是否成功。作为参考OpenICLInferTask的日志与输出分别位于logs/infer与predictionsOpenICLEvalTask则位于logs/eval与results。目前 OpenCompass 支持以下任务类型OpenICLInferTask基于 OpenICL 框架执行大模型推理任务见 opencompass/tasks/openicl_infer.py。它从模型配置的run_cfg读取num_gpus/num_procs当num_gpus 1且非 VLLM / Lmdeploy 后端时命令会自动改写为python -m torch.distributed.run --master_port{port} --nproc_per_node {num_procs} {script} {cfg}的多进程分布式形式。运行时会逐对构建模型与数据集将推理结果prediction写入工作目录的predictions/下并跳过已存在的输出。OpenICLEvalTask基于 OpenEval 框架执行模型评测任务见 opencompass/tasks/openicl_eval.py。它会加载predictions/下的预测结果按需应用模型级/数据集级文本后处理器pred_postprocessor与角色抽取再交由数据集eval_cfg中配置的evaluator计算指标最终把结果写入results/目录同时支持dump_details输出每个样本的正确性明细、cal_extract_rate计算抽取成功率以及多路 rollout 汇总_sum_rollout等高级能力。未来 OpenCompass 还会支持更多任务类型。五、实战串联用 run.py 启动自定义执行策略配置好infer/eval字段后即可通过入口脚本 run.py 按自定义策略启动评测详见 Task Execution and Monitoringpython run.py $EXP {--slurm | --dlc | None} [-p PARTITION] [-q QUOTATYPE] [--debug] [-m MODE] [-r [REUSE]] [-w WORKDIR] [-l] [--dry-run] [--dump-eval-details]$EXP为包含datasets与models字段的.py配置文件例如python run.py configs/eval_demo.py默认不传后端参数时在本地运行--slurm走 Slurm 集群可用-p指定分区、-q指定配额类型--dlc --aliyun-cfg $AliYun_Cfg走 DLC 云上调度-m指定运行模式all推理 评测 可视化默认、infer只推理、eval只评测、viz只可视化汇总表格-r复用已有推理结果并跳过已完成任务-w指定工作目录默认./outputs/default-l通过飞书机器人上报状态--dry-run只派发不实际运行--debug单进程实时输出便于调试。整体执行流为读取配置 → Partitioner 切分任务 → Runner 并行调度OpenICLInferTask/OpenICLEvalTask→ 可视化阶段读取results/汇总为表格。所有运行结果按时间戳组织在outputs/default/下包含configs每次运行的配置快照、logs/{infer,eval}分模型日志、predictions/推理 JSON 产物与results/评测 JSON 结果四个子目录不带时间戳的-r会默认选择最新时间戳目录复用。总结OpenCompass 的「高效评测」能力由Partitioner切分策略— Runner执行后端— Task任务单元三层协同构成NaivePartitioner适合按「模型-数据集」对逐一派发SizePartitioner适合按推理代价均衡分片生成式任务系数默认 20PPL 任务按标签数计特殊数据集再放大 10 倍LocalRunner负责本机多进程 GPU 槽位调度SlurmRunner通过srun对接集群并支持失败重试DLCRunner则将任务提交到阿里云 DLC 并轮询日志底层OpenICLInferTask/OpenICLEvalTask分别承载推理与评测。理解并善用这套机制你便可以在单机、Slurm 集群或云上 DLC 之间灵活切换让大规模评测任务在多节点上充分并行显著缩短评测周期。赞分享模型评测人工智能大模型AI 评测【免费下载链接】opencompassOpenCompass is an LLM evaluation platform, supporting a wide range of models from OpenAI, Anthropic, Gemini, Qwen, GLM, DeepSeek, etc, across 100 datasets covering knowledge, reasoning, coding, science, language, long-context, and safety.项目地址https://gitcode.com/gh_mirrors/op/opencompass点击查看免费下载相关推荐OpenCompass高效评估指南任务分区与执行策略详解OpenCompass高效评估指南任务分区与执行策略详解 引言大规模模型评估的挑战与解决方案 在大语言模型LLM评估领域面对海量的测试数据和复杂的模型模型评测人工智能大模型AI 评测OpenCompass评测系统任务分片与并行执行深度解析OpenCompass评测系统任务分片与并行执行深度解析 引言 在大模型评测领域如何高效处理海量数据是一个关键挑战。OpenCompass作为一款专业的大模模型评测人工智能大模型AI 评测WinUI 3 快速上手指南从依赖安装到可交互界面WinUI 3 快速上手指南从依赖安装到可交互界面 周五下午要赶一个 Win11 风格的原型。你要的不是学会整个框架而是先跑起来装好 WinUI 依赖前端UI组件桌面应用上一篇Element Plus 实战指南:Vue 3 UI 组件库,搞定万行表格、暗黑模式与多语言下一篇uv 对接 Google Artifact Registry 私有索引令牌认证、keyring 认证与包发布全解创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

快速搭建网站的工具怎么选?3个方案省下5万冤枉钱 2026/9/28 9:42:31

快速搭建网站的工具怎么选?3个方案省下5万冤枉钱

快速搭建网站的工具怎么选?3个方案省下5万冤枉钱 网站做好了没人访问,这是很多老板最头疼的事。你花大价钱做的官网,设计精美、功能齐全,但打开一看,流量为零,咨询为零。这时候你才意识到,问题不在“做没做”,而在“怎么快速做出来并推向市场”。面…

阅读更多 →
昇腾910B多机分布式推理:从HCCL到MindIE的DeepSeek部署实践 2026/9/28 9:42:24

昇腾910B多机分布式推理:从HCCL到MindIE的DeepSeek部署实践

昇腾910B上跑DeepSeek多机分布式推理,很多人卡在第一眼:MindIE、HCCL、ranktable、hccn_tool,每个词都眼熟,串起来就不是那么回事。实际踩过一圈之后你会发现,真正决定能不能跑起来的不是模型代码,而是通信…

阅读更多 →
从CANoe到TSMaster:车载总线测试工具链迁移实战指南 2026/9/28 9:42:24

从CANoe到TSMaster:车载总线测试工具链迁移实战指南

搞车载总线测试的工程师,电脑里大概率都装着一套CANoe。我最早接触CANoe是刚入行那会儿,跟着前辈在项目里做网络测试,从报文发送、DBC解析到UDS诊断,基本全是靠Vector这套工具撑起来的。说实话,CANoe确实是这个行业的标…

阅读更多 →
从刷榜到用榜:GitHub Trending 的增量逻辑、项目筛选与高效落地 2026/9/28 9:42:23

从刷榜到用榜:GitHub Trending 的增量逻辑、项目筛选与高效落地

1. 日榜的"热度"到底是怎么算出来的先别急着收藏仓库。每天打开 GitHub 的 Trending 页面,你看到的是过去 24 小时内 Star 增量最高的仓库,周榜和月榜则分别看一周、一个月内的增量。官方没有公开完整排序算法,但用久了会发现&…

阅读更多 →
【Java开发MCP】SSE模式开发并集成MCP:TaoToken统一Key接入与SpringAI WebFlux配置骨架 2026/9/28 9:42:23

【Java开发MCP】SSE模式开发并集成MCP:TaoToken统一Key接入与SpringAI WebFlux配置骨架

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
OpenCompass 高效评测:Partitioner 任务切分与 Runner 执行后端实战指南 2026/9/28 9:42:23

OpenCompass 高效评测:Partitioner 任务切分与 Runner 执行后端实战指南

模型评测人工智能大模型AI 评测 【免费下载链接】opencompass OpenCompass is an LLM evaluation platform, supporting a wide range of models from OpenAI, Anthropic, Gemini, Qwen, GLM, DeepSeek, etc, across 100 datasets covering knowledge, reasoning, coding, scie…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉