Large Language Model ModelTest

🌐 MindIE LLM官方repo
📖 Modelers社区
📊 ModelTest沟通矩阵
🤔 ModelTest问题收集
📘 ModelTest文档教程
🛠️ 数据集安装教程
🚩 ModelTest老版run.sh使用教程

🧭 欢迎

欢迎来到 ModelTest

经过不懈努力,ModelTest希望帮助您评估大模型在不同场景和任务下的性能与精度。ModelTest提供了丰富的功能和高效的工具,帮助您轻松完成LLM的精确测试与优化。

欢迎加入ModelTest!我们目前 正在完善ModelTest的接口与功能。如果您对大语言模型和ModelTest充满热情,请随时通过 Welink沟通矩阵 与我们联系。期待您的加入!

注意

ModelTest 工具的共建进行中,诚邀大家为 ModelTest 提供更多具有代表性和可信度的评测数据集和问题反馈!点击 Issue 获取和交流更多信息。

🚀 最新进展

  • [2024.11.1] 支持 TextVQA数据集及qwen_vl多模态模型,欢迎尝试!

  • [2024.10.21] ModelTest现已支持 BoolQ、CEval、CMMLU、HumanEval、HumanEval_X、GSM8K、LongBench、MMLU、NeedleBench、TruthfulQA,欢迎尝试!

  • [2024.09.26] ModelTest新架构发布,欢迎尝试!

🛠️ 安装指南

💻 基础安装

  • 你可以通过以下命令从代码仓库安装 modeltest 工具:
git clone https://gitee.com/Ascend/MindIE-LLM.git
cd MindIE-LLM/examples/atb_models/tests/modeltest
pip install -e .
  • 或者,你可以从安装包中获取 modeltest 工具:
cd {解压后的目录}/tests/modeltest
pip install -e .

📂 数据集准备

魔乐社区(内部使用)

网址:https://modelers.cn/

- 纯语言数据集

在modeltest根目录MindIE-LLM/examples/atb_models/tests/modeltest下执行:

git clone https://modelers.cn/MindIE/data.git
- 多模态数据集

TextVQA:

git clone https://modelers.cn/MindIE/textvqa.git

VideoBench:

git clone https://modelers.cn/MindIE/videobench.git

VocalSound:

git clone https://modelers.cn/MindIE/vocalsound.git

注意事项:
1. 进入网站请提前切换国内代理。
2. 进行网站注册,并申请加入MindIE组织。
3. 用户名:魔乐社区用户名
4. 密码:参照https://modelers.cn/docs/zh/openmind-hub-client/quick_start.html[访问令牌]章节进行配置

官网下载(外部使用)

  • 首先,需要在test/modeltest路径下新建名为temp_data的文件目录,然后在temp_data文件目录下新建对应数据集文件目录:
支持数据集 目录名称
BoolQ boolq
CEval ceval
CMMLU cmmlu
HumanEval humaneval
HumanEval_X humaneval_x
GSM8K gsm8k
LongBench longbench
MMLU mmlu
NeedleBench needlebench
VideoBench VideoBench
Vocalsound Vocalsound
TextVQA TextVQA
TruthfulQA truthfulqa
  • 获取数据集:需要访问huggingface和github的对应网址,手动下载对应数据集
支持数据集 下载地址
BoolQ dev.jsonl
CEval ceval-exam
CMMLU cmmlu
HumanEval humaneval
HumanEval_X cpp
java
go
js
python
GSM8K gsm8k
LongBench longbench
MMLU mmlu
NeedleBench PaulGrahamEssays
multi_needle_reasoning_en
multi_needle_reasoning_zh
names
needles
zh_finance
zh_game
zh_general
zh_government
zh_movie
zh_tech
TextVQA train_val_images.zip
textvqa_val.jsonl
textvqa_val_annotations.json
VideoBench Eval_QA/
Video-Bench
VocalSound VocalSound 16kHz Version
TruthfulQA truthfulqa
  • 将对应下载的数据集文件放置在对应的数据集目录下,并在modeltest根目录MindIE-LLM/examples/atb_models/tests/modeltest下执行:
python3 scripts/data_prepare.py [可选参数]
参数名 含义
dataset_name 可选,需要下载的数据集名称,支持的数据集列表参见[功能]章节,多个名称以’,’隔开
remove_cache 可选,是否在下载前清除数据集缓存

💻 安装依赖

Python 依赖安装

  • 安装项目所需的基础依赖:
pip install -r requirements/base.txt

AI 框架依赖安装

  • 根据你的环境(NPU 或 GPU),安装相应的依赖:
pip install -r requirements/npu.txt # NPU
pip install -r requirements/vllm.txt # GPU + VLLM
  • 对于特定任务的依赖:
pip install -r requirements/[task_name].txt

数据集依赖安装:

  • HumanEval_X数据集任务的环境配置

在测试HumanEval_X时,需要额外安装和配置多语言环境。请参考humaneval_x_environment.md

🌍 环境变量设置

公共环境变量

日志相关(NPU/GPU)
# modeltest日志级别设置
当前日志级别设置可以通过以下两种环境变量来控制,MINDIE_LOG_LEVEL的优先级更高

export MINDIE_LOG_LEVEL = "[LEVEL]" #默认为INFO
export MODELTEST_LOG_LEVEL="[LEVEL]" # 默认为INFO

# modeltest是否存储日志到目录
当前是否存储日志到目录可以通过以下两种环境变量来控制,MINDIE_LOG_TO_FILE优先级更高

export MINDIE_LOG_TO_FILE = "[0/1], [false/true]"
export MODELTEST_LOG_TO_FILE="[0/1]" # 保存为1,不保存为0

# modeltest保存的文件名
当前保存文件路径可以通过以下的环境变量来控制
export MINDIE_LOG_PATH = "[path]" #默认写入~/mindie/log路径
NPU场景下以下环境变量默认设置
export ATB_LAYER_INTERNAL_TENSOR_REUSE=1
export INF_NAN_MODE_ENABLE=0
export ATB_OPERATION_EXECUTE_ASYNC=1
export ATB_CONVERT_NCHW_TO_ND=1
export TASK_QUEUE_ENABLE=1
export ATB_WORKSPACE_MEM_ALLOC_GLOBAL=1
export ATB_CONTEXT_WORKSPACE_SIZE=0
export ATB_LAUNCH_KERNEL_WITH_TILING=1
export PYTORCH_NPU_ALLOC_CONF="expandable_segments:True"
NPU精度测试场景下以下环境变量默认设置
export LCCL_DETERMINISTIC=1
export HCCL_DETERMINISTIC=true
export ATB_MATMUL_SHUFFLE_K_ENABLE=0
export MODELTEST_DATASET_SPECIFIED=[任务配置yaml中的task_name项]

NPU

对于 NPU 环境,请使用以下命令设置环境变量:

# source cann环境变量
source /usr/local/Ascend/ascend-toolkit/set_env.sh
# source 加速库环境变量
source /usr/local/Ascend/nnal/atb/set_env.sh
# source 模型仓tar包解压出来后的环境变量
source set_env.sh
# 设置使用卡号
export ASCEND_RT_VISIBLE_DEVICES="[卡号]" # NPU场景,如"0,1,2,3,4,5,6,7"

GPU

对于 GPU 环境,设置以下环境变量:

export CUDA_VISIBLE_DEVICES="[卡号(设备ID)]" # GPU场景,如"0,1,2,3,4,5,6,7"

🏗️ 测试

  • ModelTest 支持对大模型在多个数据集上的评测。以下步骤展示了如何进行基本操作:模型配置、执行评测、查看结果。

📌 用户指引

  • 命令行中执行 modeltest -h可展示所有支持的参数类型。命令中的modeltest可被model_test或者model-test替换使用。

    参数名 含义
    model_config_path 必选,模型配置路径,绝对路径或相对路径(基于modeltest根目录)
    task_config_path 必选,任务配置路径,绝对路径或相对路径(基于modeltest根目录)
    batch_size 可选,batch数,默认为1数
    tp 可选,tensor并行数 ,默认为1
    output_dir 可选,输出文件夹路径,默认为modeltest根目录/outputs
    lcoc_disable 可选,关闭通信计算掩盖,默认开启
    save_debug_enable 可选,开启保存debug信,默认关闭

📝 配置文件

  • modeltest/config路径下存储有模型以及任务的yaml格式配置文件,用户在使用前根据测试目的需要对其进行修改。

模型配置

模型的yaml文件在modeltest/config/model路径下,参数介绍:

model_name: str
model_path: str
model_type: str
data_type: str
use_chat_template: bool
max_position_embedding: int
block_size: int
requested_gpu_framework: str
trust_remote_code: bool
env: dict
mm_model: dict
变量名 含义
model_name 模型名称
model_path 模型权重文件所在路径
model_type 模型结构类型,支持fa/pa
data_type 模型数据类型,支持fp16/bf16,需要提前配在权重路径下config.json中修改torch_dtype为对应的参数类型
use_chat_template 是否使用chat模板,需要提前在atb_llm中进行相关适配
max_position_embedding 模型最长位置编码长度
block_size pa场景下时,block大小
requested_gpu_framework gpu环境下需要使用的执行框架,支持huggingface/vllm
trust_remote_code 是否信任远程模型代码
env 模型执行前需要设置的环境变量
mm_model 【多模态】多模态模型所需设置的参数
mm_model.path 【多模态】llm_model/examples/models/{MODEL}/ 路径下的包含Runner(及其子类)的文件名
mm_model.classname 【多模态】名为{path}的文件所含的Runner(及其子类)的类名
mm_model.infer_params 【多模态】为一个字典,其包含的属性为llm_model/examples/models/{MODEL}/run_{model_type}.sh所调用的PARunner或FARunner(及其子类)的infer函数的第二个至最后一个参数的名称(key)及其取值(value)

任务配置

任务的yaml文件在modeltest/config/task路径下,参数介绍:

task_type: str
task_name: str
hf_dataset_path: str
om_dataset_path: str
local_dataset_path: str
prompt: str
choices: List
shots: int
requested_max_input_length: int
requested_max_output_length: int
need_logits: bool
need_truncate_input: bool
metric: Dict[str, Union[str, float]]
metric_type: str
metadata_version: str
humaneval_x_datasets_selector: List[str]
subject_mapping: Dict
变量名 含义
task_type 任务类型,支持precision
task_name 任务名称
hf_dataset_path 预留
om_dataset_path 预留
local_dataset_path 数据集路径,基于modeltest根目录(对于TextVQA数据集,为textvqa_val.jsonl的路径
prompt 数据集提示语
choices 数据集的选项
shots 数据集shot数,当task_name为ceval/mmlu
requested_max_input_length 数据集要求的最大输入长度
requested_max_output_length 数据集要求的最大输出长度
need_logits 数据集运行中是否会基于logits计算(不可更改)
need_truncate_input 是否需要基于requested_max_input_length对输入进行截断,支持longbench
metric 结果矩阵(不可修改)
metadata_version 版本号(不可修改)
humaneval_x_datasets_selector humaneval_x数据集类型列表,支持cpp/go/java/js/python
subject_mapping 任务执行的文件列表,可根据需要增删

📊 运行简单的模型评测

  • 你可以通过以下命令开始评测模型:

NPU

  • 请先配置好NPU的相关环境变量,然后运行以下命令:
单卡(举例)
modeltest \
    --model_config_path modeltest/config/model/llama2_7b.yaml \
    --task_config_path modeltest/config/task/boolq.yaml \
    --batch_size 1 \
    --tp 1 \
    --output_dir ./outputs \
    --lcoc_disable \
    --save_debug_enable
多卡(举例)
torchrun \
    --nproc_per_node 4 \
    --master_port 12345 \
    --no-python \
modeltest \
    --model_config_path modeltest/config/model/llama2_7b.yaml \
    --task_config_path modeltest/config/task/boolq.yaml \
    --batch_size 1 \
    --tp 4 \
    --output_dir ./outputs \
    --lcoc_disable \
    --save_debug_enable

GPU

  • 请先配置好GPU的相关环境变量,然后运行以下命令:
单/多卡(举例)
modeltest \
    --model_config_path modeltest/config/model/llama2_7b.yaml \
    --task_config_path modeltest/config/task/boolq.yaml \
    --batch_size 1 \
    --tp 1 \
    --output_dir ./outputs \
    --lcoc_disable \
    --save_debug_enable

📚 输出文件说明

  • 在每次测试任务完成后,生成并保存相应的测试结果和调试信息,具体如下:

📄 测试结果文件

  • 默认生成

  • 生成路径:

[output_dir]/results/[device_type]/[task_type]_test/[task_name]/[data_type]/[model_name]
  • 文件名格式:
[task_name]_[model_type]_batch[batch_size]_tp[tp]_result.csv
  • 示例文件路径:
./outputs/results/NPU/precision_test/boolq/fp16/llama2_7b/boolq_pa_batch1_tp1_result.csv
  • 文件内容:测试结果文件会保存每次测试任务的最终评测结果。具体内容包括:任务名称、模型配置、批处理大小 (batch_size)、并行度 (tp) 等信息。文件的保存路径会记录在日志中,以便用户追踪和访问结果。

🗂️ 调试信息文件

  • save_debug_enable参数控制,TruthfulQA数据集不支持生成调试文件。

  • 生成路径:

[output_dir]/debug/[device_type]/[task_type]_test/[task_name]/[data_type]/[model_name]
  • 文件名格式:

    [task_name]_[model_type]_batch[batch_size]_tp[tp]_debug_info.csv
  • 示例文件路径:

./outputs/debug/NPU/precision_test/boolq/fp16/llama2_7b/boolq_pa_batch1_tp1_debug_info.csv
  • 文件内容:调试信息文件包含详细的调试数据,帮助分析和调试模型性能。文件中的内容来自测试过程中生成的数据,具体包括以下字段:
    • key: 测试用例的唯一标识符。
    • queries: 测试过程中发送的查询请求。
    • input_token_ids: 输入的 token ID 序列,用于模型的推理。
    • output_token_ids: 模型生成的输出 token ID 序列。
    • test_result: 模型的测试结果。
    • golden_result: 参考的标准答案,用于对比测试结果,评估模型输出的准确性。
    • pass: 测试结果是否通过的标志(True/False)。
      这些调试数据被保存为CSV文件,文件的保存路径会记录在日志中,方便用户定位调试信息文件。

🧪 其他生成文件

HumanEval 和 HumanEval_X 的推理结果jsonl文件
  • 生成路径:
[output_dir]/results/[device_type]/[task_type]_test/[task_name]/[data_type]/[model_name]
  • 文件名格式:
[task_name](_[humaneval_x_datasets_selector])_infer_results.csv
  • 示例文件路径:
./outputs/results/NPU/precision_test/humaneval/fp16/llama2_7b/humaneval_infer_results.csv
  • 文件内容:针对humanevalhumaneval_x任务,精度测试的子类会生成humaneval_infer_results.csv文件。此文件包含模型在推理任务中的结果和测试精度信息等。humaneval_x任务的文件名中包含数据集的选择器humaneval_x_datasets_selector,用于区分不同数据集的评测结果,便于后续分析。

参数解释

参数名 含义
output_dir 输出文件的根目录,生成所有测试结果、调试信息和日志的存储路径。默认路径为modeltest根目录下的./outputs
device_type 设备类型,例如 NPU 或 GPU
task_type 任务类型,来自于任务yaml配置文件,在modeltest/config/task路径下,表示测试的类型,支持precision(精度测试)
task_name 任务名称,来自于任务yaml配置文件,在modeltest/config/task路径下
data_type 模型数据类型,来自于模型yaml配置文件,在modeltest/config/model路径下,支持fp16/bf16,需要提前配在权重路径下config.json中修改torch_dtype为对应的参数类型
model_name 模型名称,来自于模型yaml配置文件,在modeltest/config/model路径下
model_type 模型结构类型,来自于模型yaml配置文件,在modeltest/config/task路径下,支持fa/pa
batch_size batch数,默认为1
tp tensor并行数 ,默认为1

📌 补充说明

  • NeedleBench大海捞针目前只支持单一信息检索任务:评估LLM在长文本中提取单一关键信息的能力,测试其对广泛叙述中特定细节的精确回忆能力。
  • TruthfulQA数据集仅支持 1 batch。
  • 目前数据集精度测试暂不支持多卡同时起多进程测试任务。

📖 数据集支持

NPU

  • 下游数据集精度测试
    • BoolQ
    • CEval
    • CMMLU
    • HumanEval
    • HumanEval_X
    • GSM8K
    • LongBench
    • MMLU
    • NeedleBench
    • TextVQA
    • VideoBench
    • VocalSound
    • TruthfulQA

GPU

  • 下游数据集精度测试
    • BoolQ
    • CEval
    • CMMLU
    • HumanEval
    • HumanEval_X
    • GSM8K
    • LongBench
    • MMLU
    • NeedleBench
    • TruthfulQA

🤖 模型支持

  • LLaMA
    • LLaMA-7B
    • LLaMA-13B
    • LLaMA-33B
    • LLaMA-65B
    • LLaMA2-7B
    • LLaMA2-13B
    • LLaMA2-70B
    • LLaMA3-8B
    • LLaMA3-70B
    • LLaMA3.1-8B
    • LLaMA3.1-70B
    • LLaMA3.1-405B
  • Starcoder
    • Starcoder-15.5B
    • Starcoder2-15B
  • ChatGLM
    • ChatGLM2-6B
    • ChatGLM3-6B
    • ChatGLM3-6b-32k
    • Glm4-9B-Chat
    • GLM-4-9B-Chat-1M
  • CodeGeeX2-6B
  • Cogvlm2-llama3-chinese-chat-19B
  • Baichuan1
    • Baichuan1-7B
  • Baichuan2
    • Baichuan2-7B
    • Baichuan2-13B
  • Qwen
    • Qwen-7B
    • Qwen-14B
    • Qwen-72B
    • Qwen1.5-14B
    • Qwen-14B-chat
    • Qwen-72B-chat
    • Qwen-VL
    • Qwen1.5-0.5B-chat
    • Qwen1.5-4B-chat
    • Qwen1.5-7B
    • Qwen1.5-14B-chat
    • Qwen1.5-32B-chat
    • Qwen1.5-72B
    • Qwen1.5-110B
    • Qwen1.5-MoE-A2.7B
    • Qwen2-57B-A14B
    • Qwen2-72b-instruct
    • Qwen2-Audio-7B-Instruct
    • Qwen2-VL-7B-Instruct
  • Aquila
    • Aquila-7B
  • Deepseek
    • Deepseek16B
    • Deepseek-LLM-7B
    • Deepseek-LLM-67B
    • Deepseek-Coder-1.3B
    • Deepseek-Coder-6.7B
    • Deepseek-Coder-7B
    • Deepseek-Coder-33B
  • Mixtral
    • Mixtral-8x7B
    • Mixtral-8x22B
  • Bloom-7B
    • Baichuan1-13B
  • CodeLLaMA
    • CodeLLaMA-7B
    • CodeLLaMA-13B
    • CodeLLaMA-34B
    • CodeLLaMA-70B
  • Yi
    • Yi-6B-200K
    • Yi-34B
    • Yi-34B-200K
    • Yi-VL-6B
    • Yi-VL-34B
  • Chinese Alpaca
    • Chinese-Alpaca-13B
  • Vicuna
    • Vicuna-7B
    • Vicuna-13B
  • Internlm
    • Internlm_20b
    • Internlm2_7b
    • Internlm2_20b
    • Internlm2.5_7b
  • Internvl
    • InternVL2-8B
    • InternVL2-40B
  • Gemma
    • Gemma_2b
    • Gemma-7b
  • Mistral
    • Mistral-7B-Instruct-v0.2
  • Ziya
    • Ziya-Coding-34B
  • CodeShell
    • CodeShell-7B
  • Yi1.5
    • Yi-1.5-6B
    • Yi-1.5-9B
    • Yi-1.5-34B
  • gptneox_20b
    • GPT-NeoX-20B
  • telechat
    • Telechat-7B
    • Telechat-12B
  • Phi-3
    • Phi-3-mini-128k-instruct

👷‍♂️ 贡献

我们感谢所有的贡献者为改进和提升ModelTest所作出的努力。

Modeltest工具还在持续完善,如有问题,请点击以下链接:

0%