大模型opencompass测评作业
基础作业
使用 OpenCompass 评测InternLM2-Chat-7B
模型在 C-Eval 数据集上的性能
在InternStudio开发机进行以下操作,如果不是使用该服务器,需手动下载
1 安装
面向GPU的环境安装
conda create --name opencompass --clone=/root/share/conda_envs/internlm-base
source activate opencompass
git clone https://github.com/open-compass/opencompass
# 如果github拉取有问题可以选择国内的gitee(但是版本相较于github上的更新较慢)
#git clone https://gitee.com/open-compass/opencompass
cd opencompass
pip install -e .
2 数据准备
# 解压评测数据集到 data/ 处
cp /share/temp/datasets/OpenCompassData-core-20231110.zip /root/opencompass/
unzip OpenCompassData-core-20231110.zip
# 将会在opencompass下看到data文件夹
查看支持的数据集和模型
# 列出所有跟 internlm 及 ceval 相关的配置
python tools/list_configs.py internlm ceval
将会看到
3 启动评测
确保按照上述步骤正确安装 OpenCompass 并准备好数据集后,可以通过以下命令评测 InternLM2-Chat-7B 模型在 C-Eval 数据集上的性能。由于 OpenCompass 默认并行启动评估过程,我们可以以 --debug
模式启动评估,并检查是否存在问题。在 --debug
模式下,任务将按顺序执行,并实时打印输出。
python run.py \
--datasets ceval_gen \
--hf-path internlm/internlm2-chat-7b \
--tokenizer-path internlm/internlm2-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
之前查看时share文件夹内的model_repos还没有internlm2-chat-7b,所以采用huggingface.co模型库的加载方式,后面查看已经有了更新,所以上述命令也可以更改为如下情况,但是我执行以下指令时会出现文件找不到的错误,最后结果全都没有
python run.py \
--datasets ceval_gen \
--hf-path /share/temp/model_repos/internlm2-chat-7b/ \
--tokenizer-path /share/temp/model_repos/internlm2-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 internlm/internlm2-chat-7b \ # HuggingFace 模型路径
--tokenizer-path internlm/internlm2-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
评测完成后,将会看到:
进阶作业
使用 OpenCompass 评测 InternLM2-Chat-7B 模型使用 LMDeploy 0.2.0 部署后在 C-Eval 数据集上的性能
InternLM2-Chat-7B 模型使用 LMDeploy 0.2.0 部署
创建一个download.py
文件,下载InternLM2-Chat-7B模型:
import torch
from modelscope import snapshot_download, AutoModel, AutoTokenizer
import os
model_dir = snapshot_download('Shanghai_AI_Laboratory/internlm2-chat-7b', cache_dir='/root/data/model')
然后使用上次的lmdeploy环境继续,上次的lmdeploy是0.1.0版本的,所以首先卸载该版本(使用0.1.0是不支持internlm2的):
pip uninstall lmdeploy
卸载完成:
下载:
pip install 'lmdeploy[all]==v0.2.0'
本步查看了https://hannahliu.framer.website/blog/internlm-training-lec6
文章的做法,使用lmdeploy.lite 模块来对语言模型进行压缩和加速
lmdeploy lite auto_awq /root/data/model/Shanghai_AI_Laboratory/internlm2-chat-7b/ --w-bits 4 --w-group-size 128 --work-dir ./quant_output
想要使用该工具完成部署,需要在启动服务之前,将模型FastTransformer格式转为 lmdeploy TurboMind的格式
lmdeploy convert internlm2-chat-7b ./quant_output/ --model-format awq --group-size 128
执行完成后将会在当前目录生成一个 workspace 的文件夹。这里面包含的就是 TurboMind 和 Triton “模型推理”需要到的文件。
OpenCompass测评
按照configs/eval_internlm_chat_turbomind.py
写好configs/eval_internlm2_chat_turbomind.py
from mmengine.config import read_base
from opencompass.models.turbomind import TurboMindModel
with read_base():
# choose a list of datasets
from .datasets.mmlu.mmlu_gen_a484b3 import mmlu_datasets
from .datasets.ceval.ceval_gen_5f30c7 import ceval_datasets
from .datasets.SuperGLUE_WiC.SuperGLUE_WiC_gen_d06864 import WiC_datasets
from .datasets.SuperGLUE_WSC.SuperGLUE_WSC_gen_7902a7 import WSC_datasets
from .datasets.triviaqa.triviaqa_gen_2121ce import triviaqa_datasets
from .datasets.gsm8k.gsm8k_gen_1d7fe4 import gsm8k_datasets
from .datasets.race.race_gen_69ee4f import race_datasets
from .datasets.crowspairs.crowspairs_gen_381af0 import crowspairs_datasets
# and output the results in a choosen format
from .summarizers.medium import summarizer
datasets = sum((v for k, v in locals().items() if k.endswith('_datasets')), [])
internlm_meta_template = dict(round=[
dict(role='HUMAN', begin='<|User|>:', end='\n'),
dict(role='BOT', begin='<|Bot|>:', end='<eoa>\n', generate=True),
],
eos_token_id=103028)
# config for internlm2-chat-7b
internlm2_chat_7b = dict(
type=TurboMindModel,
abbr='internlm2-chat-7b-turbomind',
path='internlm/internlm2-chat-7b',
engine_config=dict(session_len=2048,
max_batch_size=32,
rope_scaling_factor=1.0),
gen_config=dict(top_k=1,
top_p=0.8,
temperature=1.0,
max_new_tokens=100),
max_out_len=100,
max_seq_len=2048,
batch_size=32,
concurrency=32,
meta_template=internlm_meta_template,
run_cfg=dict(num_gpus=1, num_procs=1),
)
models = [internlm2_chat_7b]
最后在新的终端使用(注意在opencompass环境下)
python run.py configs/eval_internlm2_chat_turbomind.py -w outputs/turbomind/internlm2-chat-7b