OpenCompass 配置文件使用完全指南
前言
OpenCompass 作为一款强大的大模型评测工具,其配置文件系统是整个评测流程的核心。本文将深入浅出地介绍 OpenCompass 配置文件的使用方法,帮助开发者快速掌握配置技巧。
配置文件基础
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),
)
]
这个配置定义了一个使用 HuggingFace 因果语言模型的评测任务,包含了模型路径、tokenizer 设置、序列长度限制等关键参数。
配置文件继承机制
OpenCompass 支持配置文件的继承,这是大型评测项目中非常重要的功能。通过继承机制可以实现:
- 配置复用,避免重复定义
- 配置模块化,便于管理
- 配置覆盖,灵活调整
继承示例
from mmengine.config import read_base
with read_base():
from .model_cfg import models # 继承基础模型配置
使用 read_base
上下文管理器是 OpenCompass 特有的语法,它确保了配置继承的正确性。
完整评测配置示例
一个完整的评测配置文件通常包含以下几个部分:
- 数据集配置
- 模型配置
- 评测参数
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.icl_prompt_template import PromptTemplate
from opencompass.openicl.icl_retriever import ZeroRetriever
from opencompass.openicl.icl_inferencer import PPLInferencer
from opencompass.openicl.icl_evaluator import AccEvaluator
from opencompass.datasets import HFDataset
# 1. 数据读取配置
piqa_reader_cfg = dict(
input_columns=['goal', 'sol1', 'sol2'],
output_column='label',
test_split='validation',
)
# 2. 推理配置
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)
)
# 3. 评估配置
piqa_eval_cfg = dict(evaluator=dict(type=AccEvaluator))
# 4. 完整数据集配置
piqa_datasets = [
dict(
type=HFDataset,
path='piqa',
reader_cfg=piqa_reader_cfg,
infer_cfg=piqa_infer_cfg,
eval_cfg=piqa_eval_cfg)
]
关键配置项说明
-
reader_cfg:定义如何读取数据集
input_columns
:输入字段output_column
:输出/标签字段test_split
:使用的数据集划分
-
infer_cfg:定义推理过程
prompt_template
:提示模板配置retriever
:上下文检索方式inferencer
:推理方法(PPL或生成)
-
eval_cfg:定义评估指标
高级配置技巧
1. 任务划分配置
OpenCompass 支持灵活的任务划分策略:
from opencompass.partitioners import SizePartitioner
from opencompass.runners import SlurmRunner
# 自定义任务划分器
partitioner = dict(
type=SizePartitioner,
max_task_size=1000, # 每个任务最大样本数
gen_task_coef=15, # 生成任务系数
)
# 自定义运行后端
runner = dict(
type=SlurmRunner,
partition='your_partition',
quotatype='auto',
)
2. 混合精度配置
models = [
dict(
...,
model_kwargs=dict(
torch_dtype='auto', # 自动混合精度
device_map='auto',
),
)
]
最佳实践建议
- 模块化配置:将模型配置、数据集配置分开管理
- 合理使用继承:基础配置通过继承方式复用
- 版本控制:对重要配置进行版本管理
- 参数调优:从小的 batch_size 开始逐步增加
- 资源预估:根据模型大小合理配置 GPU 数量
总结
OpenCompass 的配置文件系统设计灵活而强大,通过本文的介绍,你应该已经掌握了:
- 基础配置文件的编写方法
- 配置文件继承机制
- 数据集配置的详细说明
- 高级配置技巧
合理利用这些配置功能,可以高效地组织和管理大规模模型评测任务。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考