大模型微调学习之旅⑥ — OpenCompass 大模型评测

目录

一、为什么要对大模型进行评测

二、大模型评测什么

 三、opencompass

1、介绍

2、实操

①环境准备

②开始评测

③评测 InternLM2-Chat-7B 模型在 C-Eval 数据集上的性能


一、为什么要对大模型进行评测

  1. 理解模型能力:通过评测,可以更好地理解大模型的长处和短处,以及其在不同任务上的表现。
  2. 指导模型优化:评测结果可以作为优化模型的依据,帮助研究者找到模型改进的方向。
  3. 量化模型性能:通过评测,可以对大模型的性能进行量化评估,从而在不同模型之间进行比较。
  4. 确保模型可信:随着大模型在各个领域的广泛应用,确保模型的可信度变得越来越重要。评测可以帮助验证模型的预测结果是否可靠。
  5. 推动研究进展:通过对大模型的评测,可以推动相关研究的进展,促进学术交流和合作。
  6. 满足实际需求:在实际应用中,对大模型的评测可以帮助用户更好地了解和使用模型,满足实际需求。

二、大模型评测什么

  1. 自然语言处理:包括自然语言理解、推理、自然语言生成和多语言任务
  2. 鲁棒性、伦理、偏见和真实性
  3. 医学应用:包括医学问答、医学考试、医学教育和医学助手
  4. 社会科学
  5. 自然科学与工程:包括数学、通用科学和工程
  6. 代理应用:将 LLMs 作为代理使用
  7. 其他应用

 三、opencompass

1、介绍

        OpenCompass采取客观评测与主观评测相结合的方法。针对具有确定性答案的能力维度和场景,通过构造丰富完善的评测集,对模型能力进行综合评价。针对体现模型能力的开放式或半开放式的问题、模型安全问题等,采用主客观相结合的评测方式。

框架结构:

2、实操

①环境准备

        


conda create --name opencompass --clone=/root/share/conda_envs/internlm-base
source activate opencompass
git clone https://github.com/open-compass/opencompass
cd opencompass
pip install -e .

②开始评测

 通过以下命令评测 InternLM-Chat-7B 模型在 C-Eval 数据集上的性能。

第一次运行时以 --debug 模式启动评估,并检查是否存在问题。在 --debug 模式下,任务将按顺序执行,并实时打印输出。

python run.py --datasets ceval_gen --hf-path /share/temp/model_repos/internlm-chat-7b/ --tokenizer-path /share/temp/model_repos/internlm-chat-7b/ --tokenizer-kwargs padding_side='left' truncation='left' trust_remote_code=True --model-kwargs trust_remote_code=True device_map='auto' --max-seq-len 2048 --max-out-len 16 --batch-size 4 --num-gpus 1 --debug


代码解析
--datasets ceval_gen \
--hf-path /share/temp/model_repos/internlm-chat-7b/ \  # HuggingFace 模型路径
--tokenizer-path /share/temp/model_repos/internlm-chat-7b/ \  # HuggingFace tokenizer 路径(如果与模型路径相同,可以省略)
--tokenizer-kwargs padding_side='left' truncation='left' trust_remote_code=True \  # 构建 tokenizer 的参数
--model-kwargs device_map='auto' trust_remote_code=True \  # 构建模型的参数
--max-seq-len 2048 \  # 模型可以接受的最大序列长度
--max-out-len 16 \  # 生成的最大 token 数
--batch-size 4  \  # 批量大小
--num-gpus 1  # 运行模型所需的 GPU 数量
--debug

 

 ③评测 InternLM2-Chat-7B 模型在 C-Eval 数据集上的性能

我首先使用了命令行测试了ceval_gen_2daf24数据集命令如下:

python run.py --datasets ceval_gen_2daf24 --hf-path /share/temp/model_repos/internlm-chat-7b/ --toke
nizer-path /share/temp/model_repos/internlm-chat-7b/ --tokenizer-kwargs padding_side='left' truncation='left' trust_remote_code=True --model-kwargs 
trust_remote_code=True device_map='auto' --max-seq-len 2048 --max-out-len 16 --batch-size 4 --num-gpus 1 --debug

由于时间问题我只测了一个数据分类

成功了:

 

但是我跟着视频通过修改配置文件来运行便报错了尝试了好多次还是不行,下面是操作流程

数据集和模型需要自己导入

然后将对应的数据集和模型填入datasets和models列表里面

from mmengine.config import read_base
with read_base():
    from .models.qwen.hf_qwen_7b_chat import models as hf_qwen_7b_chat
    from .models.qwen.hf_qwen_14b_chat import models as hf_qwen_14b_chat
    from .models.chatglm.hf_chatglm3_6b import models as hf_chatglm3_6b
    from .models.baichuan.hf_baichuan2_7b_chat import models as hf_baichuan2_7b
    from .models.hf_internlm.hf_internlm_chat_20b import models as hf_internlm_chat_20b
    from .models.judge_llm.auto_j.hf_autoj_eng_13b import models as hf_autoj
    from .models.judge_llm.judgelm.hf_judgelm_33b_v1 import models as hf_judgelm
    from .models.judge_llm.pandalm.hf_pandalm_7b_v1 import models as hf_pandalm
    from .datasets.subjective.alignbench.alignbench_judgeby_critiquellm import subjective_datasets
    from .datasets.ceval.ceval_gen_2daf24 import ceval_datasets  # 我的数据集添加
    from .models.hf_internlm.hf_internlm_chat_7b import models as internlm_7b  # 我的模型添加
datasets = [*ceval_datasets]   # 需要修改相应的数据集

from opencompass.models import HuggingFaceCausalLM, HuggingFace, HuggingFaceChatGLM3
from opencompass.models.openai_api import OpenAIAllesAPIN
from opencompass.partitioners import NaivePartitioner, SizePartitioner
from opencompass.partitioners.sub_naive import SubjectiveNaivePartitioner
from opencompass.partitioners.sub_size import SubjectiveSizePartitioner
from opencompass.runners import LocalRunner
from opencompass.runners import SlurmSequentialRunner
from opencompass.tasks import OpenICLInferTask
from opencompass.tasks.subjective_eval import SubjectiveEvalTask
from opencompass.summarizers import AlignmentBenchSummarizer


# -------------Inferen Stage ----------------------------------------

models = [*internlm_7b]#, *hf_chatglm3_6b, *hf_internlm_chat_20b, *hf_qwen_7b_chat, *hf_qwen_14b_chat]

infer = dict(
    partitioner=dict(type=NaivePartitioner),
    runner=dict(
        type=LocalRunner,   # 也需要修改为本地的GPU
        # partition='llmeval',
        # quotatype='auto',
        max_num_workers=256,
        task=dict(type=OpenICLInferTask)),
)

# -------------Evalation Stage ----------------------------------------


## ------------- JudgeLLM Configuration
api_meta_template = dict(
    round=[
        dict(role='HUMAN', api_role='HUMAN'),
        dict(role='BOT', api_role='BOT', generate=True),
    ]
)

judge_model = dict(
        abbr='GPT4-Turbo',
        type=OpenAIAllesAPIN, path='gpt-4-1106-preview',
        key='xxxx',  # The key will be obtained from $OPENAI_API_KEY, but you can write down your key here as well
        url='xxxx',
        meta_template=api_meta_template,
        query_per_second=16,
        max_out_len=2048,
        max_seq_len=2048,
        batch_size=8,
        temperature = 0
)

## ------------- Evaluation Configuration
eval = dict(
    partitioner=dict(
        type=SubjectiveNaivePartitioner,
        mode='singlescore',
        models = models
    ),
    runner=dict(
        type=LocalRunner,
        max_num_workers=2,
        task=dict(
            type=SubjectiveEvalTask,
            judge_cfg=judge_model
        )),
)

summarizer = dict(
    type=AlignmentBenchSummarizer, judge_type = 'general'
)

work_dir = '/root/opencompass/my_output'

模型的配置文件

路径修改

from opencompass.models import HuggingFaceCausalLM


_meta_template = dict(
    round=[
        dict(role='HUMAN', begin='<|User|>:', end='\n'),
        dict(role='BOT', begin='<|Bot|>:', end='<eoa>\n', generate=True),
    ],
)

models = [
    dict(
        type=HuggingFaceCausalLM,
        abbr='internlm-chat-7b-hf',
        path="/share/temp/model_repos/internlm-chat-7b/",  # 路径修改
        tokenizer_path='/share/temp/model_repos/internlm-chat-7b/',  # 路径修改
        model_kwargs=dict(
            trust_remote_code=True,
            device_map='auto',
        ),
        tokenizer_kwargs=dict(
            padding_side='left',
            truncation_side='left',
            use_fast=False,
            trust_remote_code=True,
        ),
        max_out_len=100,
        max_seq_len=2048,
        batch_size=8,
        meta_template=_meta_template,
        run_cfg=dict(num_gpus=1, num_procs=1),
        end_str='<eoa>',
    )
]

 运行bash脚本

cd ~/opencompass
conda activate opencompass

python run.py configs/eval_subjective_alignbench.py --debug

结果报错如下:

不知道怎么解决,如果哪位大佬知道,请指点一下。

 

 参考文章:

1. (36 条消息) 目前大语言模型的评测基准有哪些? - 知乎 (zhihu.com)icon-default.png?t=N7T8https://www.zhihu.com/question/601328258

  • 18
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
模型微调方法是指在已经训练好的大型模型基础上,通过在特定任务上进行进一步训练来提高性能的方法。常见的大模型微调方法包括以下几种: 1. 迁移学习:将已经在大规模数据上预训练好的模型应用于新的任务上。通过微调模型的一部分或全部参数,使其适应新任务的特征和标签。迁移学习可以加快模型训练速度,提高模型性能。 2. 预训练-微调:首先在大规模数据上进行预训练,然后在特定任务上进行微调。预训练通常是在无监督或半监督的方式下进行,例如使用自编码器或生成对抗网络。预训练可以帮助模型学习到更丰富的特征表示,微调则使其适应具体任务。 3. 数据增强:通过对原始数据进行一系列变换和扩充,生成更多的训练样本。数据增强可以提高模型的泛化能力和鲁棒性,减少过拟合风险。 4. 优化算法调整:针对大模型微调过程中可能出现的问题,如梯度消失或梯度爆炸等,对优化算法进行调整。常见的优化算法包括梯度下降、Adam等。 大模型框架是指用于构建和训练大型模型的软件框架。常见的大模型框架包括以下几种: 1. TensorFlow:由Google开发的开源深度学习框架,支持构建和训练各种类型的神经网络模型,包括大型模型。TensorFlow提供了丰富的工具和库,方便进行模型微调和部署。 2. PyTorch:由Facebook开发的开源深度学习框架,提供了动态图机制和丰富的工具,使得构建和训练大型模型更加灵活和高效。PyTorch也被广泛应用于大规模模型微调和研究。 3. Keras:一个高级神经网络API,可以运行在TensorFlow、Theano和CNTK等后端上。Keras提供了简洁易用的接口,方便构建和训练大型模型。 4. MXNet:由亚马逊开发的深度学习框架,支持多种编程语言和硬件平台。MXNet提供了高性能的计算和训练能力,适用于大规模模型微调和部署。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值