OpenCompass 配置系统详解:从入门到精通
一、OpenCompass 配置系统概述
OpenCompass 采用 OpenMMLab 风格的现代配置系统,这套系统基于 Python 语法构建,为大型语言模型评估提供了灵活而强大的配置能力。对于评估框架而言,良好的配置系统是实验可复现性和灵活性的关键保障。
二、基础配置格式解析
OpenCompass 的配置文件本质上是 Python 文件,通过定义变量来指定配置项。这种设计带来了几个显著优势:
- 完整的 Python 语法支持:可以使用条件判断、循环等编程结构
- 类型安全:编辑器可以提供自动补全和类型检查
- 动态配置:可以在运行时动态生成配置
典型模型配置示例
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
这种设计实现了:
- 配置复用:避免重复定义相同配置
- 模块化管理:将不同组件配置分离
- 版本控制友好:清晰展示配置依赖关系
四、完整评估配置示例
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),
)
]
关键组成部分:
- 数据集配置:通过继承方式引入
- 模型配置:定义评估的模型及其参数
- 运行配置:指定资源需求
五、数据集配置深度解析
数据集配置是评估的核心,以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)
]
配置分为四个核心部分:
- reader_cfg:定义数据读取方式
- infer_cfg:控制推理过程
- prompt_template:提示模板
- retriever:上下文示例检索方式
- inferencer:推理方法
- eval_cfg:评估指标设置
- 数据集整合:将前三部分组合成完整配置
六、高级配置技巧
1. 任务分区配置
OpenCompass 支持多种任务分区策略:
- 按样本量分区:平衡各任务负载
- 自定义分区:灵活控制评估流程
2. 运行后端配置
支持多种执行方式:
- 本地执行:适合小规模评估
- Slurm集群:适合大规模分布式评估
- 自定义后端:满足特殊需求
3. 混合精度配置
models = [
dict(
...,
model_kwargs=dict(
torch_dtype='auto',
device_map='auto'
),
run_cfg=dict(
num_gpus=2,
quantization='fp16'
)
)
]
七、最佳实践建议
- 配置版本控制:建议为重要实验创建独立配置分支
- 配置验证:正式运行前先小规模测试配置
- 模块化设计:将通用配置与实验特定配置分离
- 文档注释:为复杂配置添加详细说明
通过掌握OpenCompass的配置系统,研究人员可以高效地设计各种评估实验,确保实验过程的可控性和结果的可复现性。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考