OpenCompass 配置系统详解:从入门到精通

OpenCompass 配置系统详解:从入门到精通

opencompass opencompass - OpenCompass是一个用于评估大型语言模型的工具,提供分布式评估、多样化评估范式和模块化设计。 opencompass 项目地址: https://gitcode.com/gh_mirrors/op/opencompass

一、OpenCompass 配置系统概述

OpenCompass 采用 OpenMMLab 风格的现代配置系统,这套系统基于 Python 语法构建,为大型语言模型评估提供了灵活而强大的配置能力。对于评估框架而言,良好的配置系统是实验可复现性和灵活性的关键保障。

二、基础配置格式解析

OpenCompass 的配置文件本质上是 Python 文件,通过定义变量来指定配置项。这种设计带来了几个显著优势:

  1. 完整的 Python 语法支持:可以使用条件判断、循环等编程结构
  2. 类型安全:编辑器可以提供自动补全和类型检查
  3. 动态配置:可以在运行时动态生成配置

典型模型配置示例

from opencompass.models import HuggingFaceCausalLM

models = [
    dict(
        type=HuggingFaceCausalLM,
        path='huggyllama/llama-7b',
        model_kwargs=dict(device_map='auto'),
        tokenizer_path='huggyllama/llama-7b',
        tokenizer_kwargs=dict(
            padding_side='left',
            truncation_side='left'
        ),
        max_seq_len=2048,
        max_out_len=50,
        run_cfg=dict(num_gpus=8, num_procs=1),
    )
]

每个关键参数说明:

  • type: 指定模型类型,决定如何处理该模型
  • path: 模型在HuggingFace上的路径
  • *_kwargs: 模型和分词器的初始化参数
  • max_seq_len: 模型支持的最大序列长度
  • run_cfg: 运行资源配置,包括GPU数量等

三、配置继承机制

OpenCompass 采用独特的配置继承机制,通过 read_base 上下文管理器实现:

from mmengine.config import read_base

with read_base():
    from .base_config import models

这种设计实现了:

  1. 配置复用:避免重复定义相同配置
  2. 模块化管理:将不同组件配置分离
  3. 版本控制友好:清晰展示配置依赖关系

四、完整评估配置示例

from mmengine.config import read_base

with read_base():
    from .datasets.piqa.piqa_ppl import piqa_datasets
    from .datasets.siqa.siqa_gen import siqa_datasets

datasets = [*piqa_datasets, *siqa_datasets]

from opencompass.models import HuggingFaceCausalLM

models = [
    dict(
        type=HuggingFaceCausalLM,
        path='huggyllama/llama-7b',
        tokenizer_path='huggyllama/llama-7b',
        tokenizer_kwargs=dict(
            padding_side='left',
            truncation_side='left'
        ),
        max_seq_len=2048,
        abbr='llama-7b',
        max_out_len=100,
        batch_size=16,
        run_cfg=dict(num_gpus=1),
    )
]

关键组成部分:

  1. 数据集配置:通过继承方式引入
  2. 模型配置:定义评估的模型及其参数
  3. 运行配置:指定资源需求

五、数据集配置深度解析

数据集配置是评估的核心,以PIQA数据集为例:

from opencompass.openicl import PromptTemplate, ZeroRetriever
from opencompass.openicl import PPLInferencer, AccEvaluator
from opencompass.datasets import HFDataset

piqa_reader_cfg = dict(
    input_columns=['goal', 'sol1', 'sol2'],
    output_column='label',
    test_split='validation',
)

piqa_infer_cfg = dict(
    prompt_template=dict(
        type=PromptTemplate,
        template={
            0: 'The following makes sense: \nQ: {goal}\nA: {sol1}\n',
            1: 'The following makes sense: \nQ: {goal}\nA: {sol2}\n'
        }),
    retriever=dict(type=ZeroRetriever),
    inferencer=dict(type=PPLInferencer)
)

piqa_eval_cfg = dict(evaluator=dict(type=AccEvaluator))

piqa_datasets = [
    dict(
        type=HFDataset,
        path='piqa',
        reader_cfg=piqa_reader_cfg,
        infer_cfg=piqa_infer_cfg,
        eval_cfg=piqa_eval_cfg)
]

配置分为四个核心部分:

  1. reader_cfg:定义数据读取方式
  2. infer_cfg:控制推理过程
    • prompt_template:提示模板
    • retriever:上下文示例检索方式
    • inferencer:推理方法
  3. eval_cfg:评估指标设置
  4. 数据集整合:将前三部分组合成完整配置

六、高级配置技巧

1. 任务分区配置

OpenCompass 支持多种任务分区策略:

  • 按样本量分区:平衡各任务负载
  • 自定义分区:灵活控制评估流程

2. 运行后端配置

支持多种执行方式:

  • 本地执行:适合小规模评估
  • Slurm集群:适合大规模分布式评估
  • 自定义后端:满足特殊需求

3. 混合精度配置

models = [
    dict(
        ...,
        model_kwargs=dict(
            torch_dtype='auto',
            device_map='auto'
        ),
        run_cfg=dict(
            num_gpus=2,
            quantization='fp16'
        )
    )
]

七、最佳实践建议

  1. 配置版本控制:建议为重要实验创建独立配置分支
  2. 配置验证:正式运行前先小规模测试配置
  3. 模块化设计:将通用配置与实验特定配置分离
  4. 文档注释:为复杂配置添加详细说明

通过掌握OpenCompass的配置系统,研究人员可以高效地设计各种评估实验,确保实验过程的可控性和结果的可复现性。

opencompass opencompass - OpenCompass是一个用于评估大型语言模型的工具,提供分布式评估、多样化评估范式和模块化设计。 opencompass 项目地址: https://gitcode.com/gh_mirrors/op/opencompass

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孔振冶Harry

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值